1 #ifndef _LOCAL_HCI_H_
2 #define _LOCAL_HCI_H_
3 
4 #include "fbtHci.h"
5 
6 #define MAX_QUEUED_COMMANDS 100
7 
8 typedef struct _QueuedCommand
9 {
10 	USHORT	nCommand;
11 	BYTE	*pResultBuffer;
12 	DWORD	dwBufferSize;
13 	HANDLE	hEvent;
14 
15 } QueuedCommand, *PQueuedCommand;
16 
17 // Local HCI command abstraction
18 // 1. Send Command
19 // 2. Wait for Command status / Command complete
20 class CHciLocal : public CHci
21 {
22 public:
23 	CHciLocal(void);
24 	virtual ~CHciLocal(void);
25 
26 	virtual int				QueueCommand(USHORT nCommand, BYTE *pResultBuffer=NULL, DWORD dwBufferSize=0);
27 	virtual int				QueueCommandStatus(USHORT nCommand);
28 	virtual void			DeQueueCommand(int nSlot);
29 	virtual DWORD			ClearQueue(void);
30 	virtual PQueuedCommand	GetQueuedCommand(int nSlot);
31 
32 	virtual DWORD WaitForCommandComplete(int nSlot);
33 	virtual DWORD WaitForCommandStatus(int nSlot, BYTE &nStatus);
34 
35 	virtual DWORD SendReset(void);
36 	virtual DWORD SendWriteClassOfDevice(BYTE ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE]);
37 	virtual DWORD SendSetEventFilter(
38 					BYTE nFilterType,
39 					BYTE nFilterConditionType,
40 					BYTE nCondition[FBT_HCI_MAX_CONDITION_SIZE],
41 					BYTE nConditionBytes);
42 
43 	virtual DWORD SendInquiry(ULONG nLAP, BYTE nInquiryLength, BYTE nNumResponses);
44 	virtual DWORD SendInquiryCancel(void);
45     virtual DWORD SendCreateConnection(BYTE		BD_ADDR[FBT_HCI_BDADDR_SIZE],
46                                        USHORT	nPacketType,
47                                        BYTE		nPageScanRepetitionMode,
48                                        BYTE		nPageScanMode,
49                                        USHORT	nClockOffset,
50                                        BYTE		nAllowRoleSwitch);
51 
52 	virtual DWORD SendDisconnect(USHORT nConnectionHandle, BYTE nReason);
53 	virtual DWORD SendSwitchRole(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE nRole);
54 	virtual DWORD SendRemoteNameRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE nPageScanRepetitionMode, BYTE nPageScanMode, USHORT nClockOffset);
55 	virtual DWORD SendReadLocalVersionInformation(FBT_HCI_READ_LOCAL_VERSION_INFORMATION_COMPLETE &CommandComplete);
56 
57     virtual DWORD OnEvent(PFBT_HCI_EVENT_HEADER pEvent, DWORD dwLength);
58 
59     virtual DWORD CommandCompleteHandler(USHORT nCommand, BYTE *pParameters, DWORD dwParameterLength);
60     virtual DWORD CommandStatusHandler(BYTE nStatus, USHORT nCommand);
61 
62 protected:
63 	virtual int		FindCommandSlot(USHORT nCommand);
64 
65 	QueuedCommand		m_QueuedCommands[MAX_QUEUED_COMMANDS];
66 	CRITICAL_SECTION	m_QueueCriticalSection;
67 
68 };
69 
70 
71 #endif // _LOCAL_HCI_H_
72