📄 bt_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 + -