1/*
2 * Copyright 2007 Oliver Ruiz Dorantes, oliver.ruiz.dorantes_at_gmail.com
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5#ifndef _BLUETOOTH_SERVER_APP_H
6#define _BLUETOOTH_SERVER_APP_H
7
8#include <stdlib.h>
9
10#include <Application.h>
11#include <ObjectList.h>
12#include <OS.h>
13
14#include <bluetooth/bluetooth.h>
15#include <bluetooth/HCI/btHCI.h>
16#include <bluetooth/HCI/btHCI_transport.h>
17#include <bluetooth/HCI/btHCI_command.h>
18
19#include "HCIDelegate.h"
20#include "DeviceManager.h"
21#include "LocalDeviceImpl.h"
22
23#include <PortListener.h>
24
25#define BT "bluetooth_server: "
26
27typedef enum {
28	BLACKBOARD_GENERAL = 0,
29	BLACKBOARD_DEVICEMANAGER,
30	BLACKBOARD_KIT,
31	BLACKBOARD_SDP,
32	// more blackboards
33	BLACKBOARD_END
34} BluetoothServerBlackBoardIndex;
35
36#define BLACKBOARD_LD(X) (BLACKBOARD_END+X-HCI_DEVICE_INDEX_OFFSET)
37
38typedef BObjectList<LocalDeviceImpl> LocalDevicesList;
39typedef PortListener<struct hci_event_header,
40	HCI_MAX_EVENT_SIZE, // Event Body can hold max 255 + 2 header
41	24					// Some devices have sent chunks of 24 events(inquiry result)
42	> BluetoothPortListener;
43
44class BluetoothServer : public BApplication
45{
46public:
47
48	BluetoothServer();
49
50	virtual bool QuitRequested(void);
51	virtual void ArgvReceived(int32 argc, char **argv);
52	virtual void ReadyToRun(void);
53
54
55	virtual void AppActivated(bool act);
56	virtual void MessageReceived(BMessage *message);
57
58	static int32 SDPServerThread(void* data);
59
60	/* Messages reply */
61	status_t	HandleLocalDevicesCount(BMessage* message, BMessage* reply);
62	status_t    HandleAcquireLocalDevice(BMessage* message, BMessage* reply);
63
64	status_t    HandleGetProperty(BMessage* message, BMessage* reply);
65	status_t    HandleSimpleRequest(BMessage* message, BMessage* reply);
66
67
68    LocalDeviceImpl*    LocateLocalDeviceImpl(hci_id hid);
69
70private:
71
72	LocalDeviceImpl*	LocateDelegateFromMessage(BMessage* message);
73
74	void 				ShowWindow(BWindow* pWindow);
75
76	void				_InstallDeskbarIcon();
77	void				_RemoveDeskbarIcon();
78
79	LocalDevicesList   	fLocalDevicesList;
80
81
82	// Notification system
83	BluetoothPortListener*	fEventListener2;
84
85	DeviceManager*			fDeviceManager;
86
87	BPoint 					fCenter;
88
89	thread_id				fSDPThreadID;
90
91	bool					fIsShuttingDown;
92};
93
94#endif
95