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.

[参考译文] CC2340R5:如何在启动时动态设置器件名称

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1515027/cc2340r5-how-to-dynamically-set-device-name-on-start

器件型号:CC2340R5

工具/软件:

我需要将器件 MAC 地址的最后两个字节嵌入到器件名称中、表示为4 HEX。 字符。

我可以看到 器件名称位于   scanResData1和 attDeviceName 中、因此我将 这两个中的占位符字符替换为这些字符

对于示例、MyDevice_&&&成为 MyDevice_D587。 我在 app_peripheral.c 中将其作为   Peripheral_start ()函数的第一项操作来执行。

但是、如果   使用 NRF Connect 在 iOS 设备上扫描我的设备、则会显示 MyDevice_D587版本、而使用 TI 的 SimpleLink Connect 进行扫描

显示  MyDevice_&&& 版本。 相当令人困惑

从两个扫描程序进行连接会打开配对对话框、此处两个程序都显示 MyDevice_&&&&版本。

检查设置->蓝牙中的绑定注册 也会显示设备已绑定为 MyDevice_&&&&、而不是 MyDevice_D587  

其他地方和何时我必须用 MAC 监听器替换占位符?

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

    您好、

    扫描应用程序将报告的设备名称是扫描响应数据中包含的设备名称。 某些灵活的扫描应用程序将缓存特定设备看到的设备名称、从而不必在将来的扫描中对其进行解析。 可能发生的情况是 simplelink_connect 应用显示了缓存值。 我建议关闭应用程序并关闭和打开智能手机的蓝牙、以查看是否清除缓存。 如果设备与特定名称绑定、则它将在智能手机中保留该名称、直到忘记绑定。

    我相信您在 CC2340R5上更改器件名称的方法是正确的。

    此致、

    1月

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

    您好、

    我做了很多次(解除绑定/取消配对,关闭设备和 BL )到目前为止没有任何帮助。

    在断点上停止应用程序,检查存储器我可以找到原始名称以及存储器中的占位符  

    在地址0x20008310处的名称: deviceName 下、字符串实际上以某种方式存在于 RAM 中

    位于0x2000856F 的 scanResData1

    AttDeviceName 位于0x2000840C

    我还测试了它在一个新的手机,从来没有看到原来的名字与占位符具有相同的结果,.

    所以我的结论是原始字符串以某种方式传输。

    它始终位于同一地址:0x20008310

    我从未在 Android 设备上看到占位符。

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

    您好:

    这当然是奇怪的行为。 您能分享一下用于更改设备名称的功能吗?

    另外、您能否详细说明一下您的意思:"我从未在 Android 设备上看到占位符"。 您的意思是您能够在 Android 设备上看到正确的设备名称吗?

    此致、

    Tarek

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

    这是 我在   Peripheral_start ()开头调用的函数

     static void embed_deviceAddress(void){
        char* devAddr=BLEAppUtil_convertBdAddr2Str(GAP_GetDevAddress( true)); //get a pointer to to the device address string
        devAddr+=10;        // get it to point to the first char in the MAC string to be copied and overwrite the place holder of &&&&
    	/*****
        *    replace the placeholder chars with the last 4 chars from the MAC address
        *   There are 2 places where the device name is found:
        *  1. scanResData1
        *  2. attDeviceName
        *******/
    	// the place holder in the device name has this form: MyDeviceName_&&&&
        // pointers to the two locations
        uint8_t *pScanRes=scanResData1;
        uint8_t *pAttDevName=attDeviceName;
       
       
        while(*(pScanRes++) != '_')     {} //search for the start of the place holder '_'
        while(*(pAttDevName++) != '_')  {} //search for the start of the place holder '_'
        
        while(*(pScanRes)=='&'){        // replace placeholder chars with 4 MAC chars
            *(pScanRes++)=*(pAttDevName++)=  *(devAddr++);
        }    
    
    } //embed_deviceAddress()

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

    您好 Itamar、

    我在我这边试过 在平均时间、扫描响应是否包含正确的名称、还是仍然是原始名称?

    此致、

    Tarek

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

    我不这么认为

    我认为答案是修改后的名称