Part Number:CC2340R5
程序启动时不调用BLEAppUtil_initAdvSet和BLEAppUtil_advStart,而是等串口输入正确格式的名字后截取名字,使用advSetInitParamsSet_2替代advSetInitParamsSet_1。部分代码如下
static bStatus_t Periperal_modifyScanRespData(char *localName, uint16_t nameLen) {bStatus_t status = SUCCESS;uint16_t dstRespDataLen;dstRespDataLen = scanRespData2Fill(localName, nameLen);advSetInitParamsSet_2.advDataLen = advSetInitParamsSet_1.advDataLen;advSetInitParamsSet_2.advData = advSetInitParamsSet_1.advData;advSetInitParamsSet_2.advParam = advSetInitParamsSet_1.advParam;advSetInitParamsSet_2.scanRespDataLen = dstRespDataLen;advSetInitParamsSet_2.scanRespData = scanResData2;return status; } bStatus_t Peripheral_changeDeviceBroadcastName(char *localName, uint16_t nameLen) {bStatus_t status = SUCCESS;Periperal_modifyScanRespData(localName, nameLen);status = BLEAppUtil_initAdvSet(&peripheralAdvHandle_1, &advSetInitParamsSet_2);if(status != SUCCESS){// Return status valuereturn(status);}GGS_SetParameter(GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, (void *)localName);status = BLEAppUtil_advStart(peripheralAdvHandle_1, &advSetStartParamsSet_1);if(status != SUCCESS){// Return status valuereturn(status);} }
在以前的独立程序上运行正常,设置名字A后立马显示广播名A,重启设置名字B显示广播名B。
但是我为了使用OAD,不得不把程序分成了mcuboot、persistent和oad-onchip三部分,我的代码都加在了oad-onchip里。如果设置了名字A之后再重启设置名字B,广播名和连接后显示的设备名都是A,反复进出设备连接界面几次后更新为名字B。这中间没有再次设置设备名。
麻烦帮忙分析一下原因
Galaxy Yue:
可能原因有
1.全局变量或者状态没有被正确初始化或者传递,所以在连接之后没有及时更新
你需要检查这之间的数据传递和状态同步
2.可能是需要一段时间才会生效,缓存的有广播和设备名信息,直到重新搜索或重启才会更新
,
Xuefeng:
1、还有哪个变量会影响到设备名称?在单APP中是正常的,只有分成三部分的程序才有问题。
2、这个应该是即时生效,不存在延时。单App的情况下,设置完手机上就可以搜到。
另外我想问一下,这个内容是会被保存在哪里?因为我目前代码的逻辑每次开机的时候都要等新的名字之后才会调用BLEAppUtil_initAdvSet和BLEAppUtil_advStart。但是每次开始看到的名字都是断电之前设置的名字。
,
Galaxy Yue:
你试一下
在mcuboot和persistent部分设置默认的设备名未A,在oad-onchip进行修改设备名为B,
或者
尝试 在oad-onchip 调用BLEAppUtil_initAdvSet和BLEAppUtil_advStart (调换一下顺序试试)
设备名的内容通常保存在非易失性存储器中,这里应该是在GAP层
,
Xuefeng:
Galaxy Yue 说:在mcuboot和persistent部分设置默认的设备名未A,在oad-onchip进行修改设备名为B,
目前只针对oad-onchip修改名称,mcuboot和persistent不会影响。
Galaxy Yue 说:尝试 在oad-onchip 调用BLEAppUtil_initAdvSet和BLEAppUtil_advStart (调换一下顺序试试)
这个尝试也不行
Galaxy Yue 说:设备名的内容通常保存在非易失性存储器中,这里应该是在GAP层
这个能帮忙确认下吗?我想尝试先擦除再设置。这个如何准确擦除ADV和SCAN数据?我试了GapAdv_destroy(peripheralAdvHandle_1, GAP_ADV_FREE_OPTION_DONT_FREE);没有效果;在start之前使用GapAdv_destroy(peripheralAdvHandle_1, GAP_ADV_FREE_OPTION_ADV_DATA);和GapAdv_destroy(peripheralAdvHandle_1, GAP_ADV_FREE_OPTION_SCAN_RESP_DATA);程序会卡死。
,
Galaxy Yue:
是在GAP层
https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_Bluetooth_gap-cc23xx.html