蓝牙hid协议:
蓝牙ble通过软件实现 HID,需要实现两个方面,广播和服务及特性
广播,HID广播数据要求如下
int wm_ble_server_api_demo_adv(bool enable)
{
int rc;
if(enable)
{
struct ble_hs_adv_fields fields;
const char *name;
/**
* Set the advertisement data included in our advertisements:
* o Flags (indicates advertisement type and other general info).
* o Device name.
* o user specific field (winner micro).
*/
memset(&fields, 0, sizeof fields);
/* Advertise two flags:
* o Discoverability in forthcoming advertisement (general)
* o BLE-only (BR/EDR unsupported).
*/
fields.flags = BLE_HS_ADV_F_DISC_GEN |
BLE_HS_ADV_F_BREDR_UNSUP;
name = "mykeybord8"; // = ble_svc_gap_device_name();
fields.name = (uint8_t *)name;
fields.name_len = strlen(name);
fields.name_is_complete = 1;
fields.uuids16 = (ble_uuid16_t[]){
BLE_UUID16_INIT(WM_GATT_HID_UUID)
};
fields.num_uuids16 = 1;
fields.uuids16_is_complete = 1;
fields.appearance = WM_KEYBOARD_ASPECT; //键盘外观
fields.appearance_is_present = 1;
rc = ble_gap_adv_set_fields(&fields);
if (rc != 0) {
TLS_BT_APPL_TRACE_ERROR("error setting advertisement data; rc=%d\r\n", rc);
return rc;
}
/* As own address type we use hard-coded value, because we generate
NRPA and by definition it's random */
rc = tls_nimble_gap_adv(WM_BLE_ADV_IND, 0);
if(rc!=0){
TLS_BT_APPL_TRACE_ERROR("tls_nimble_gap_adv; rc=%d\r\n",rc);
return rc;
}
assert(rc == 0);
}else
{