⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bt_hci.h

📁 用VC++实现在PC平台的主从蓝牙HCI层数据传输
💻 H
字号:
#pragma once
#include "SerialPort.h"
#include <vector>

using namespace std;

#define	HCI_COMMAND_GROUPING	0x01
#define	HCI_ACLDATA_GROUPING	0x02
#define	HCI_SOCDATA_GROUPING	0x03
#define	HCI_EVENT_GROUPING		0x04
#define	HCI_ERROR_GROUPING		0x05
#define	HCI_IPSD_GROUPING		0x06 

// command grouping
#define	HCI_CMD_INQUIRY								0x0401
#define	HCI_CMD_INQUIRY_CANCEL						0x0402	
#define	HCI_CMD_PERIODIC_INQUIRY_MDOE				0x0403
#define HCI_CMD_EXIT_PERIODIC_INQUIRY_MDOE			0x0404

#define HCI_CMD_CREATE_CONNECTION					0x0405
#define HCI_CMD_DISCONNECT							0x0406
#define HCI_CMD_ADD_SCO_CONNECTION					0x0407

#define HCI_CMD_REMOTE_NAME_REQUEST					0x0419

#define HCI_CMD_ACCEPT_CONNECTION_REQUEST			0x0409
#define HCI_CMD_REJECT_CONNECTION_REQUEST			0x040A

#define	HCI_CMD_HOST_BUFFER_SIZE					0x0C33

#define HCI_CMD_READ_NUMBER_OF_SUPPORTED_ICA		0x0C38
#define HCI_CMD_READ_CURRENT_ICA_LAP				0x0C39
#define	HCI_CMD_WRITE_CURRENT_ICA_LAP				0x0C3A

// Command lenght
#define	HCI_CMD_INQUIRY_LEN							0x05
#define HCI_CMD_READ_CURRENT_ICA_LAP_LEN			0x00
#define HCI_CMD_CREATE_CONNECTION_LEN				0x0D
#define HCI_CMD_DISCONNECT_LEN						0x03

#define HCI_CMD_REMOTE_NAME_REQUEST_LEN				0x0A

// event grouping
#define HCI_EVT_INQUIRY_COMPLETE					0x01
#define HCI_EVT_INQUIRY_RESULT_EVENT				0x02
#define HCI_EVT_CONNECTION_COMPLETE_EVENT			0x03
#define HCI_EVT_CONNECTION_REQUEST_EVENT			0x04
#define HCI_EVT_DISCONNECTION_COMPLETE_EVENT		0x05
#define HCI_EVT_AUTHENTICATION_COMPLETE_EVENT		0x06
#define HCI_EVT_REMOTE_NAME_REQUEST_COMPLETE_EVENT	0x07
#define HCI_EVT_ENCRYPTION_CHANGE_EVENT				0x08
#define HCI_EVT_CHANGE_CONNECTION_LINK_COMPLETE		0x09
#define HCI_EVT_MASTER_LINK_KEY_COMPLETE_EVENT		0x0A
#define HCI_EVT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE_EVENT	0x0B
#define HCI_EVT_READ_REMOTE_VERSION_INFORMATION_COMPLETE_EVENT	0x0C
#define HCI_EVT_QOS_SETUP_COMPLETE_EVENT			0x0D
#define HCI_EVT_COMMAND_COMPLETE					0x0E
#define	HCI_EVT_COMMAND_STATUS_EVENT				0x0F

// error sample
#define HCI_COMMANDERROR_OK							0x0000
#define HCI_COMMANDERROR_TIMEOUTS					0x0101
#define HCI_COMMANDERROR_NOT_COMMPLETE				0x0102
#define	HCI_COMMANDERROR_NOT_MATCH					0x0103
#define HCI_COMMANDERROR_NOT_MATCH_ADDRESS			0x0104
#define HCI_COMMANDERROR_NOT_MATCH_CONNECTION_HANDLE	0x0105

#define HCI_COMMANDERROR_UNKNOWN_HCI_COMMAND		0x0001
#define HCI_COMMANDERROR_UNKNOWN_CONNECTION_IDENTIFIER	0x0002
#define HCI_COMMANDERROR_HARDWARE_FAILURE			0x0003
#define HCI_COMMANDERROR_PAGE_TIMEOUT				0x0004
#define HCI_COMMANDERROR_AUTHENTICATION_FAILURE		0x0005
#define HCI_COMMANDERROR_PIN_MISSING				0x0006
#define	HCI_COMMANDERROR_ACL_CONNECTION_ALREADY_EXISTS	0x000B

#define	ERROR_INDEX									0x0201

#define HCI_LAP_LEN									03
#define	BT_BD_ADDR_LEN								06
#define	BT_MAX_CHANNEL								79

typedef BYTE	HCI_LAP[HCI_LAP_LEN];
typedef BYTE	BT_BD_ADDR[BT_BD_ADDR_LEN];

enum {BT_DEVICE_RS232, BT_DEVICE_UART, BT_DEVICE_USB};

#define REMOTE_NAME_LEN		248

typedef struct 
{
	BOOL			s_fConnection;
	BT_BD_ADDR		s_BD_ADDR;
	BYTE			s_bPage_Scan_Repetition;
	BYTE			s_bPage_Scan_Period_Mode;
	BYTE			s_bPage_Scan_Mode;
	BYTE			s_bClosck_Offset[2];
	BYTE			s_bConnection_Handle[2];
	BYTE			s_bLink_Type;
	BYTE			s_bRemote_Name[REMOTE_NAME_LEN];
}BT_SLAVER_DEVICE;

class CBT_HCI : public CSerialPort
{
public:
	CBT_HCI(void);
	~CBT_HCI(void);

public:
	// command grouping
	DWORD cmd_HCI_Read_Current_IAC_LAP();
	DWORD cmd_HCI_Inquiry();
	DWORD cmd_HCI_Create_Connection		(BYTE bDeviceIndex);
	DWORD cmd_HCI_Disconnection			(BYTE bDeviceIndex);
	DWORD cmd_HCI_Remote_Name_Request	(BYTE bDeviceIndex);

	// event grouping
	DWORD evt_HCI_Event_Grouping						(WORD wOpCode,BYTE bEvtCode,BYTE* pEvent,BYTE bIndex = 0);
	DWORD evt_HCI_Inquiry_Complete						(WORD wOpCode,BYTE bEvtCode,BYTE* pEvent,BYTE bIndex = 0);
	DWORD evt_HCI_Inquiry_Result_Event					(WORD wOpCode,BYTE bEvtCode,BYTE* pEvent,BYTE bIndex = 0);
	DWORD evt_HCI_Connection_Complete_Event				(WORD wOpCode,BYTE bEvtCode,BYTE* pEvent,BYTE bIndex = 0);
	DWORD evt_HCI_Disconnection_Complete_Event			(WORD wOpCode,BYTE bEvtCode,BYTE* pEvent,BYTE bIndex = 0);
	DWORD evt_HCI_Remote_Name_Request_Complete_Event	(WORD wOpCode,BYTE bEvtCode,BYTE* pEvent,BYTE bIndex = 0);
	DWORD evt_HCI_Command_Status_Event					(WORD wOpCode,BYTE bEvtCode,BYTE* pEvent,BYTE bIndex = 0);
	DWORD evt_HCI_Command_Complete						(WORD wOpCode,BYTE bEvtCode,BYTE* pEvent,BYTE bIndex = 0);

	// property
//	void Clear_BD_ADDR();
public:
	DWORD SendCommand(BYTE  bCmdGroup,WORD  wOpCode,BYTE  bCmdLen,BYTE* pCmd); // RS232 OR UART OR USB
	DWORD GetResponse(BYTE& bCmdGroup,BYTE& bEvtCode,BYTE& bEventLen, BYTE* pEvent,DWORD dwMillisecond);

public:
	HCI_LAP						m_HCI_LAP;
	vector<BT_SLAVER_DEVICE>	m_vBT_Slaver_Device;
public:
	DWORD						m_dwDeviceMode;
//	BYTE						m_bDeviceIndex;
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -