CH585低功耗蓝牙BLE常见数据获取及设置接口

1、广播开启/关闭:

uint8_t initial_advertising_enable = FALSE;    
GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED,sizeof(uint8_t), &initial_advertising_enable);//关闭广播 uint8_t initial_advertising_enable = TRUE; GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED,sizeof(uint8_t), &initial_advertising_enable);//开启广播

 

2、设置广播间隔范围

GAP_SetParamValue(TGAP_DISC_ADV_INT_MIN, 32);//单位0.625ms,32*0.625=20ms,蓝牙广播间隔最低值为20ms
GAP_SetParamValue(TGAP_DISC_ADV_INT_MAX, 32);

 

3、设置连接状成功后显示的设备名称

// Device name attribute value
static CONST uint8_t attDeviceName[GAP_DEVICE_NAME_LEN] = "HID Mouse";
// Set the GAP Characteristics
GGS_SetParameter(GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, (void *)attDeviceName);

 

4、获取当前BLE状态机

#define GAPROLE_INIT                        0       //!< Waiting to be started
#define GAPROLE_STARTED                     1       //!< Started but not advertising
#define GAPROLE_ADVERTISING                 2       //!< Currently Advertising
#define GAPROLE_WAITING                     3       //!< Device is started but not advertising, is in waiting period before advertising again
#define GAPROLE_CONNECTED                   4       //!< In a connection
#define GAPROLE_CONNECTED_ADV               5       //!< In a connection + advertising
#define GAPROLE_ERROR                       6       //!< Error occurred - invalid state

uint8_t ble_state;
GAPRole_GetParameter(GAPROLE_STATE, &ble_state);

 

5、发起连接参数更新

// Minimum connection interval (units of 1.25ms)
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL    6

// Maximum connection interval (units of 1.25ms)
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL    10

// Slave latency to use if parameter update request
#define DEFAULT_DESIRED_SLAVE_LATENCY        30

// Supervision timeout value (units of 10ms)
#define DEFAULT_DESIRED_CONN_TIMEOUT         100
     
// Send connect param update request
GAPRole_PeripheralConnParamUpdateReq(hidEmuConnHandle,DEFAULT_DESIRED_MIN_CONN_INTERVAL,DEFAULT_DESIRED_MAX_CONN_INTERVAL,DEFAULT_DESIRED_SLAVE_LATENCY,DEFAULT_DESIRED_CONN_TIMEOUT,hidDevTaskId);

 

6、主动发起断开指令,主动上报断开原因

//主动发起断开,传入连接句柄,连接句柄可在GAPROLE_CONNECTED回调中拿到
GAPRole_TerminateLink(gapConnHandle);

//主动上报断开原因
uint8_t HCI_MB_DisconnectCmd( uint16_t connHandle, uint8_t reason );//声明库函数
HCI_MB_DisconnectCmd(hidEmuConnHandle, 0x16);//主动上报0x16断连原因

 

7、获取BLE广播MAC初始地址,配置此次BLE广播地址

获取BLE广播静态地址
uint8_t ownAddr[6];
GAPRole_GetParameter(GAPROLE_BD_ADDR, ownAddr);

配置本次广播地址:
uint8_t ownAddr[6];
GAP_ConfigDeviceAddr(ADDRTYPE_STATIC, ownAddr);

 

8、获取配对后的BLE-IRK值

uint8_t BLE_IRK[16]={0};
tmos_snv_read(BLE_NVID_IRK,16,BLE_IRK);

 

9、获取LTK,EDIV,RAND值

// Structure of NV data for the connected device's encryption information
typedef struct
{
    uint8_t LTK[KEYLEN];              //!< Long Term Key (LTK)
    uint16_t div;                     //!< LTK eDiv
    uint8_t rand[B_RANDOM_NUM_SIZE];  //!< LTK random number
    uint8_t keySize;                  //!< LTK key size
} gapBondLTK_t;

gapBondLTK_t    DeviceBondInfo;
tmos_snv_read(mainRecordNvID(0),sizeof(gapBondRec_t),&DeviceBondInfo);

PRINT("Device LTK:");
for(uint8_t i=0;i<16;i++)
{
   PRINT(" %02x",DeviceBondInfo.LTK[i]);
}PRINT("\n");

PRINT("Device ediv:%04x\n",DeviceBondInfo.div);

PRINT("Device Radom:");
for(uint8_t i=0;i<8;i++)
{
   PRINT(" %02x",DeviceBondInfo.rand[i]);
}PRINT("\n");

 

10、HID类,设置连接成功后显示的设备图标

 1 #define GAP_APPEARE_HID_KEYBOARD                0x03C1 //!< HID Keyboard
 2 #define GAP_APPEARE_HID_MOUSE                   0x03C2 //!< HID Mouse
 3 #define GAP_APPEARE_HID_JOYSTIC                 0x03C3 //!< HID Joystick
 4 #define GAP_APPEARE_HID_GAMEPAD                 0x03C4 //!< HID Gamepad
 5 #define GAP_APPEARE_HID_DIGITIZER_TYABLET       0x03C5 //!< HID Digitizer Tablet
 6 #define GAP_APPEARE_HID_DIGITAL_CARDREADER      0x03C6 //!< HID Card Reader
 7 #define GAP_APPEARE_HID_DIGITAL_PEN             0x03C7 //!< HID Digital Pen
 8 #define GAP_APPEARE_HID_BARCODE_SCANNER         0x03C8 //!< HID Barcode Scanner
 9 
10 uint16_t  uuid = GAP_APPEARE_HID_MOUSE;
11 GGS_SetParameter(GGS_APPEARANCE_ATT, 2, (void *)uuid);//设置设备图标为鼠标

 

11、清除SNV配对信息

extern bleConfig_t ble;//全局变量ble,底层使用
ble.SNVAddr = BLE_SNV_ADDR;
GAPBondMgr_SetParameter( GAPBOND_ERASE_ALLBONDS, 0, 0 );

 未完待续;

posted @ 2025-04-19 14:37  oTvTo  阅读(327)  评论(0)    收藏  举报