qq_58718670 2024-12-12 10:36 采纳率: 0%
浏览 25
已结题

基于stm32l4系列 使用blunrg-ms的ble gatt 创建 hid 服务失败

背景:
我使用了blunrg-ms作为ble硬件,想做一个ble hid设备。但是在创建gatt 服务时遇到问题,使用Bluetooth Le explorer查看gatt服务。
操作:
我调用aci_gatt_add_serve()分别添加了两个服务
1.uuid=0x1812,(标准hid服务) 不显示。
2.uuid=0x1218,(自定义服务) 显示如下

img


补充:我还添加了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;
}

  • 写回答

23条回答 默认 最新

  • 阿里嘎多学长 2024-12-12 10:37
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题解答

    你使用 STM32L4 系列单片机,基于 BluNRG-MS BLE 硬件,想要创建 HID 服务,但是在创建 GATT 服务时遇到问题。

    问题分析

    从你的描述中,可以看出你使用了 ACI_GATT_AddService 函数来创建 GATT 服务,但是却没有成功。可能的原因是:

    1. GATT 服务的 UUID 不正确
    2. GATT 服务的 Characteristic 的 UUID 不正确
    3. GATT 服务的 Characteristic 的属性不正确

    解决方案

    1. 检查 GATT 服务的 UUID 是否正确,HID 服务的 UUID 是 0x180F
    2. 检查 Characteristic 的 UUID 是否正确,HID 服务的 Characteristic 的 UUID 是 0x2A4D
    3. 检查 Characteristic 的属性是否正确,HID 服务的 Characteristic 的属性是 readwrite

    代码示例

    以下是一个简单的示例代码,创建 HID 服务:

    #include "aci_gatt.h"
    
    // HID 服务的 UUID
    uint16_t hidServiceUUID = 0x180F;
    
    // HID 服务的 Characteristic 的 UUID
    uint16_t hidCharacteristicUUID = 0x2A4D;
    
    int main(void)
    {
        // 创建 GATT 服务
        aci_gatt_add_service(hidServiceUUID, GATT_SERVICE_TYPE_PRIMARY);
    
        // 创建 HID 服务的 Characteristic
        aci_gatt_add_characteristic(hidCharacteristicUUID, GATT_CHARACTERISTIC_TYPE_READ_WRITE);
    
        // 设置 Characteristic 的属性
        aci_gatt_set_characteristic_property(hidCharacteristicUUID, GATT_CHARACTERISTIC_PROPERTY_READ | GATT_CHARACTERISTIC_PROPERTY_WRITE);
    
        // ...
    }
    

    注意

    上面的代码只是一个简单的示例,实际实现中可能需要更多的代码和配置。同时, BluNRG-MS BLE 硬件的使用需要遵循相关的文档和指南。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月12日
  • 修改了问题 12月12日
  • 创建了问题 12月12日

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题