www.pudn.com > fbt-a3-20041206.zip > fbtHciLocal.h, change:2004-03-11,size:2537b


#ifndef _LOCAL_HCI_H_ 
#define _LOCAL_HCI_H_ 
 
#include "fbtHci.h" 
 
#define MAX_QUEUED_COMMANDS 100 
 
typedef struct _QueuedCommand 
{ 
	USHORT	nCommand; 
	BYTE	*pResultBuffer; 
	DWORD	dwBufferSize; 
	HANDLE	hEvent; 
 
} QueuedCommand, *PQueuedCommand; 
 
// Local HCI command abstraction 
// 1. Send Command 
// 2. Wait for Command status / Command complete 
class CHciLocal : public CHci 
{ 
public: 
	CHciLocal(void); 
	virtual ~CHciLocal(void); 
 
	virtual int				QueueCommand(USHORT nCommand, BYTE *pResultBuffer=NULL, DWORD dwBufferSize=0); 
	virtual int				QueueCommandStatus(USHORT nCommand); 
	virtual void			DeQueueCommand(int nSlot); 
	virtual DWORD			ClearQueue(void); 
	virtual PQueuedCommand	GetQueuedCommand(int nSlot); 
 
	virtual DWORD WaitForCommandComplete(int nSlot); 
	virtual DWORD WaitForCommandStatus(int nSlot, BYTE &nStatus); 
 
	virtual DWORD SendReset(void); 
	virtual DWORD SendWriteClassOfDevice(BYTE ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE]); 
	virtual DWORD SendSetEventFilter( 
					BYTE nFilterType, 
					BYTE nFilterConditionType, 
					BYTE nCondition[FBT_HCI_MAX_CONDITION_SIZE], 
					BYTE nConditionBytes); 
 
	virtual DWORD SendInquiry(ULONG nLAP, BYTE nInquiryLength, BYTE nNumResponses); 
	virtual DWORD SendInquiryCancel(void); 
    virtual DWORD SendCreateConnection(BYTE		BD_ADDR[FBT_HCI_BDADDR_SIZE], 
                                       USHORT	nPacketType, 
                                       BYTE		nPageScanRepetitionMode, 
                                       BYTE		nPageScanMode, 
                                       USHORT	nClockOffset, 
                                       BYTE		nAllowRoleSwitch); 
 
	virtual DWORD SendDisconnect(USHORT nConnectionHandle, BYTE nReason); 
	virtual DWORD SendSwitchRole(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE nRole); 
	virtual DWORD SendRemoteNameRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE nPageScanRepetitionMode, BYTE nPageScanMode, USHORT nClockOffset); 
	virtual DWORD SendReadLocalVersionInformation(FBT_HCI_READ_LOCAL_VERSION_INFORMATION_COMPLETE &CommandComplete); 
 
    virtual DWORD OnEvent(PFBT_HCI_EVENT_HEADER pEvent, DWORD dwLength); 
 
    virtual DWORD CommandCompleteHandler(USHORT nCommand, BYTE *pParameters, DWORD dwParameterLength); 
    virtual DWORD CommandStatusHandler(BYTE nStatus, USHORT nCommand); 
 
protected: 
	virtual int		FindCommandSlot(USHORT nCommand); 
 
	QueuedCommand		m_QueuedCommands[MAX_QUEUED_COMMANDS]; 
	CRITICAL_SECTION	m_QueueCriticalSection; 
 
}; 
 
 
#endif // _LOCAL_HCI_H_