背景:
我使用了blunrg-ms作为ble硬件,想做一个ble hid设备。但是在创建gatt 服务时遇到问题,使用Bluetooth Le explorer查看gatt服务。
操作:
我调用aci_gatt_add_serve()分别添加了两个服务
1.uuid=0x1812,(标准hid服务) 不显示。
2.uuid=0x1218,(自定义服务) 显示如下
补充:我还添加了hid的标准特性,都显示成功,但在更新特性时,使用aci_gatt_update_char_value()报错,其中调用的hci_send_req(&rq, FALSE),返回值是0,但是传入的参数rq.rparam 返回值是60 。
这是代码原型。
tBleStatus aci_gatt_update_char_value(uint16_t servHandle,
uint16_t charHandle,
uint8_t charValOffset,
uint8_t charValueLen,
const void *charValue)
{
struct hci_request rq;
uint8_t status;
uint8_t buffer[HCI_MAX_PAYLOAD_SIZE];
uint8_t indx = 0;
if ((charValueLen+6) > HCI_MAX_PAYLOAD_SIZE)
return BLE_STATUS_INVALID_PARAMS;
servHandle = htobs(servHandle);
BLUENRG_memcpy(buffer + indx, &servHandle, 2);
indx += 2;
charHandle = htobs(charHandle);
BLUENRG_memcpy(buffer + indx, &charHandle, 2);
indx += 2;
buffer[indx] = charValOffset;
indx++;
buffer[indx] = charValueLen;
indx++;
BLUENRG_memcpy(buffer + indx, charValue, charValueLen);
indx += charValueLen;
BLUENRG_memset(&rq, 0, sizeof(rq));
rq.ogf = OGF_VENDOR_CMD;
rq.ocf = OCF_GATT_UPD_CHAR_VAL;
rq.cparam = (void *)buffer;
rq.clen = indx;
rq.rparam = &status;
rq.rlen = 1;
if (hci_send_req(&rq, FALSE) < 0)
return BLE_STATUS_TIMEOUT;
if (status) {
ALLMEMS1_PRINTF("status is 0x%2x\r\n",status);
return status;
}
return 0;
}