This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/LAUNCHXL-CC2650:从多角色查找服务器句柄

Guru**** 2562120 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/569599/rtos-launchxl-cc2650-discovering-handles-of-server-from-multirole

器件型号:LAUNCHXL-CC2650

工具/软件:TI-RTOS

大家好、我正在处理多角色项目和 SPP_ble_server。

堆栈:2.2.1

我在 SPP_ble_server 中具有以下属性表

gattAttribute_t SerialPortServiceAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED ]=

 {

  //串行端口配置文件服务

  {

   {ATT_BT_UUUART_SIZE、primServiceUUID}、/*类型*/

   GATT_permit_read、             /*权限*/

   0、                     /*句柄*/

   (uint8 *)&SerialPortService       /* pValue */

  }、  

  //特征数据声明

  {

   {ATT_BT_UUUART_SIZE、characterUUID}、

   GATT_permit_read、

   0、

   &SerialPortServiceDataProps

  }、

  //特征数据值

  {

   { ATT_UUUUUUUAR_SIZE、SerialPortServiceDataUUID }、

   GATT_permit_read | GATT_permit_write、

   0、

   SerialPortServiceData

  }、

  //特征数据配置

  {

   {ATT_BT_UUID_SIZE、clientCharCfgUUID}、

   GATT_permit_read | GATT_permit_write、

   0、

   (uint8 *)&SerialPortServiceDataConfig

  }、

  //特征数据用户描述

  {

   {ATT_BT_UUUART_SIZE、charUserDescUUID}、

   GATT_permit_read、

   0、

   SerialPortServiceDataUserDesp

  }、

  //特征状态声明

  {

   {ATT_BT_UUUART_SIZE、characterUUID}、

   GATT_permit_read、

   0、

   &SerialPortServiceStatusProps

  }、

  //特征状态值

  {

   { ATT_UUUUUUUI_SIZE、SerialPortServiceStatusUUID }、

   GATT_permit_read、

   0、

   // SerialPortServiceChar3

   SerialPortServiceStatus

  }、

  //特征状态配置

  {

   {ATT_BT_UUID_SIZE、clientCharCfgUUID}、

   GATT_permit_read | GATT_permit_write、

   0、

   (uint8 *)&SerialPortServiceStatusConfig

  }、

  //特征状态用户说明

  {

   {ATT_BT_UUUART_SIZE、charUserDescUUID}、

   GATT_permit_read、

   0、

   SerialPortServiceStatusUserDesp

  }

 };

在多角色端、我发现串行端口配置文件特征句柄、如下所示

    if (discInfo[connIndex].svcStartHdl!= 0)

    {

     attReadByTypeReq_t req;    

     //发现特征

     discInfo[connIndex].discState= BLE_DISC_State_char;

     REQ.startHandle = discInfo[connIndex].svcStartHdl;

     REQ.endHandle = discInfo[connIndex].svcEndHdl;

     REQ.TYPE.len = ATT_UUUUI_SIZE;

     //查找特征描述符

     GATT_DiscAllCharDescs (pMsg->connHandle、

                REQ.startHandle + 1、

                REQ.endHandle、

                自实体);  

    }

 //如果我们发现特征

 否则、如果(discInfo[connIndex].discState =BLE_DISC_State_char)

 {  

  //找到特征描述符

  if (pMsg->method =ATT_find_info_RSP &&)

    pMsg->msg.findInfoRsp.numInfo >0)

  {

   uint8_t i;

   //对于每个句柄/uuid 对

   for (i = 0;i < pMsg->msg.findInfoRsp.numInfo;i++)

   {

    if (pMsg->msg.findInfoRsp.format = ATT_Handle_BT_UUID_TYPE)

    {

     if (((ATT_BT_PAIR_UUID (pMsg->msg.findInfoRsp.pInfo、i)=

        GATT_Character_UUID))

     {

      display_print0 (dispHandle、0、0、"GATT 字符已找到");

      Display_Print1 (dispHandle、0、0、"GATT 字符句柄为%d"、ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i));

      //StructHandle[connindexNum].charDeclHdl[charDeclIndex++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i);

      中断;

     }

     //查找 CCCD

     if (((ATT_BT_PAIR_UUID (pMsg->msg.findInfoRsp.pInfo、i)=

        GATT_CLIENT_CHAR_CFG_UUID))

     {

      //清除标志

      //flags &=~data_char;

      Display_print0 (dispHandle、0、0、"CFG 已找到");

      Display_Print1 (dispHandle、0、0、"CFG handle is %d"、ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、I));

      StructHandles[connindexNum].charCCCDHdl[charCCCDindex++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i);

      中断;

     }

    }

    否则、if (pMsg->msg.findInfoRsp.format = ATT_Handle_UUUID_TYPE)

    {

     if (memcmp (&(pMsg->msg.findInfoRsp.pInfo[ATT_PAIR_UUID_IDX(i)])、uuidDataChar、ATT_UUUID_SIZE)==0)

     {

      Display_print0 (dispHandle、0、0、"发现特性1");

      charDataHdl[connindexNum1++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i);

      StructHandles[connindexNum].charDeclHdl[charDeclIndex++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i)- 1;

      //设置标志

      //flags |= data_char;

      中断;

     }

     if (memcmp (&(pMsg->msg.findInfoRsp.pInfo[ATT_PAIR_UUID_IDX(i)])、uuidDataCharStatus、ATT_UUUID_SIZE = 0)

     {

      Display_print0 (dispHandle、0、0、"发现特性2 ");

      charDataHdl[connindexNum1++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i);

      StructHandles[connindexNum].charDeclHdl[charDeclIndex++]= ATT_PAIR_Handle (pMsg->msg.findInfoRsp.pInfo、i)- 1;

      //设置标志

      //flags |= data_char;

      中断;

     }

    }

   }

  }

仅为第一个特征发现 GATT_character_UUID。 我是否在上述发现方法中犯了任何错误

手柄。

输出:

找到 GATT 字符

GATT 字符句柄为29

找到字符1

找到 CFG  

CFG 句柄为31

到这里一切都很好。

之后是我的预期

找到 GATT 字符

GATT 字符句柄为33

后跟

找到字符2

找到 CFG  

CFG 句柄为35

但软件未发现 GATT_Character_UUID。 那么、输出是

找到字符2

找到 CFG  

CFG 句柄为35

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您能否验证 req.endHandle 的值是什么? 您能否将其硬编码为65535 (最大值)以进行测试?
    此外、下次是否可以使用富格式、当使用双间隔时、代码很难读取。

    祝你一切顺利