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.

[参考译文] CC2640R2F:如何在没有 scanRspData 的情况下广播 ADVERData 31长度

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1510411/cc2640r2f-how-to-advertise-adverdata-31-length-without-scanrspdata

器件型号:CC2640R2F

工具/软件:

大家好、我有关于 BLE 外设示例的问题。 


这是当前默认使用的广播数据。 

静态 uint8 advertData[32]=

8、//此数据的长度
GAP_ADTYPE_LOCAL_NAME_COMPLETE、
'G'、'F'、'M'、'-'、'4'、'0'、'0'、
};

//扫描响应数据

静态 uint8_t scanRspData[]=

0x02、//此数据的长度
GAP_ADTYPE_FLAGS、
GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED

// 25字节信标广播数据
//前导码:公司 ID - 0x000D 对于 TI、请参阅 www.bluetooth.org/.../company-identifiers
//数据类型:信标(0x02)
//数据长度:0x15
// UUID:00000000-0000-0000-000000000000 (空信标)
//主要:1 (0x0001)
//次要:1 (0x0001)
//测量功率:-59 (0xc5)
0x15、//该数据的长度(包括数据类型字节)
GAP_ADTYPE_MANUFACTURER_SPECIFIC、//制造商特定的广播数据类型
0x4c、//公司 ID -固定--> 0x4c (IOS)
0x00、//公司 ID -已修复
0x02、//数据类型-固定
0x15、//数据长度-固定
0x00、// UUID -基于不同用例/应用的变量
0x00、// UUID
0x00、// UUID
0x00、// UUID
0x00、// UUID
0x00、// UUID
0x00、// UUID
0x01、// UUID
0x00、// UUID
0x00、// UUID
0x00、// UUID
0x00、// UUID
0x00、// UUID
0x00、// UUID
0x00、// UUID
0x00、// UUID 24
0x00、// UUID
0x00、// UUID
0x00、// UUID
};


我目前正在询问如何通过 AT 命令一次性将广告数据全部发送到广告数据部分而不使用现有的 scanRspData。 
这是当前代码状态。

否则 if (strstr(uartDataBuffer、"AT+CMOD2")!= NULL ){
memset (scanRspData、0、sizeof (scanRspData));
memset (广告数据、0、sizeof (广告数据));

ADvertData[0]= 0x02;
广播数据[1]= GAP_ADTYPE_FLAGS;
ADvertData[2]= GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED;
ADvertData[3]= 0x1A;
广告数据[4]= GAP_ADTYPE_MANUFACTURER_SPECIFIC;
advertData[5]= 0x4c;
ADvertData[6]= 0x00;
ADvertData[7]= 0x02;
ADvertData[8]= 0x15;
ADvertData[9]= 0x00;
ADvertData[10]= 0x08;
ADvertData[11]= 0x00;
ADvertData[12]= 0x00;
ADvertData[13]= 0x00;
ADvertData[14]= 0x00;
ADvertData[15]= 0x00;
ADvertData[16]= 0x00;
ADvertData[17]= 0x20;
ADvertData[18]= 0x00;
ADvertData[19]= 0x00;
ADvertData[20]= 0x30;
ADvertData[21]= 0x14;
ADvertData[22]= 0x09;
AdvertData[23]= 0x38;
ADvertData[24]= 0x00;
ADvertData[25]= 0x00;
ADvertData[26]= 0x48;
ADvertData[27]= 0x00;
ADvertData[28]= 0x40;
ADvertData[29]= 0x00;
ADvertData[30]= 0x00;

uint8_t advertDataLen = 31;
// GapAdv_disable (advHandleLegacy);
GapAdv_loadByHandle (advHandleLegacy、GAP_ADV_DATA_TYPE_ADV、ADvertDataLen、ADvertData);
//GapAdv_loadByHandle (advHandleLegacy、GAP_ADV_DATA_TYPE_SCAN_RSP、0、NULL);
GapAdv_enable (advHandleLegacy、GAP_ADV_ENABLE_OPTIONS、USE_MAX、0);

BLE_MODE_STATE = 2;
UART_printf ("OC\r\n");
advEnableFlag = 0;
uartCloseFlag = 1;
Util_startClock (&evtAdvEnClock);
}

执行代码时、我确认数据已输入到捕获中所示的数组中。 

 
但是、使用 nrfconnect 应用程序检查数据时、仅确认最高0x020104的数据、而未确认其余数据。 有解决方案吗? 
 


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

    您好!

    是否有可能在启动通告后更改通告数据而不先禁用它?
    根据用户指南(链接)中关于广告的部分、必须先调用 GapAdv_prepareLoadByHandle GapAdv_loadByHandle

    在您的情况下,您可以在加载广播数据之前添加以下行:
    GapAdv_prepareLoadByHandle(
    advHandleLegacy, GAP_ADV_FREE_OPTION_DONT_FREE);

    你可以尝试一下,告诉我,如果它解决了你的问题?

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    GapAdv_loadByHandle。 在执行之前添加 GapAdv_prepareLoadByHandle 会得到相同的结果。 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    可能 NRF 应用出现故障且数据传输正确。 是否可以尝试按照用户指南(链接)中关于数据包监听器的这一章来设置蓝牙广播监听器、看看是否也在 Wireshark 中看不到您的广播数据?

    此致、
    Maxence

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,我解决了这个问题。
    SimplePeripheral_processGapMessagestatus = GapAdv_loadByHandle (advHandleLegacy、GAP_ADV_DATA_TYPE_ADV
    、DEFAULT_DEVICE_NAME_LEN、ADVERTData);
    
    DEFAULT_DEVICE_NAME_LEN 的大小设置为23、这是导致问题的原因。 感谢你的帮助。