想把lightblue搜索到的设备名改为xxx(设备名)+MAC(蓝牙CC2541的全球唯一标识号)
问题:我们在用TI的CC2541开发蓝牙BLE相关的产品,我想着在用手机端的lightblue搜索从机时显示 “设备名字-设备标识号”
现状:我是小白,我看了之前咱们的相关帖子,可是没有找到相关的解决方案,设备的名字包括scanRspData 里的LOCAL_NAME和GGS_SetParameter设置的attDeviceName,我发现lightblue搜索到的名字是scanRspData 里的LOCAL_NAME,所以我开始着手改这个数组,可我不知怎么去加上这个标识号,试了又试总是不行,我不知道我的思路对不对
希望TI的工程师和论坛的各大神能帮帮我,谢谢了
修改名字时,要记得修改前面的长度字节,
你也可以先改一个跟原来一样长的名字先看看效果.
这个我试了,改名字什么的都可以,就是加在数组里怎么加MAC地址还不知道,还在试
先获取本机的mac地址,GAPRole_GetParameter(GAPROLE_BD_ADDR, ownAddress);
然后放到attDeviceName的local name中,adv和scan可以选择性的放入
有一个问题,你在SimpleBLEPeripheral_Init这个函数中调用GAPRole_GetParameter(GAPROLE_BD_ADDR, ownAddress);是获取不到本机的mac地址的,是由于在SimpleBLEPeripheral_Init中,gap层的一些数据还没有获取到,所以随便开个Timer,osal_start_timerEx然后在Timer里处理就可以了
附:建议修改完名字后在打开广播
1、得到设备地址,长度是固定的,6个字节;
2、将scanRspData先初始化成你想要的名字的形式,注意长度
3、将得到的设备地址转成ASCII码
4、拷贝到scanRspData数组中的对应位置替换
5、然后开始广播
比如:
static uint8 scanRspData[] =
{
// complete name
0x0A, // length of this data
GAP_ADTYPE_LOCAL_NAME_COMPLETE,
//CD (device_name)
0x43,0x44,0x20,[这里面6个字节是用来存放设备名称的,得到设备名后就要拷贝到这个位置] ... ...}
对,我在Init这个函数里GAPRole_GetParameter(GAPROLE_BD_ADDR, ownAddress)是获取不到本机的mac地址的,后来我干脆放事件处理函数里面进行初始化了,不知这样对从机有什么影响
还有你说的加个timer,那我是在Init初始化这个函数里面加吗?
这样不行吧,这个我抓过包,比如说你设备Mac地址是0xAB CD 98 76 54 32,
那么你在scanRspData[] 这个数组里,MAC地址存在的形式应该是“一个字符一个字符”存在的,那就是41,42.............
应该是这样的吧
按照前面Kevin的来就行了
第一部分:当gap OK后会在OSAL中产生GAP消息事件,事件中会包含GAP_DEVICE_INIT_DONE_EVENT,这时上层的设备名称变量将会被填充;
第二部分:现在通过GAPRole_GetParameter得到设备名称,转换后加入响应数组,再进行广播事件,收到scan请求进行回复即可
在init中开启一个timer就是为了等待第一部分OK,在对应的响应事件中处理第二部分
嗯,是这样,注意长度,整个的sizeof(scanRspData)不要大于31就好
你好!
麻烦你看一下我的思路是不是正确的,谢谢
我在void SimpleBLEPeripheral_Init( uint8 task_id )这个初始化函数里的最后(?)添加一个定时器
昨天我直接写成这样:
osal_start_timerEx(simpleBLEPeripheral_TaskID, GAP_DEVICE_INIT_DONE_EVENT, SBP_PERIODIC_EVT_PERIOD);
把GAP初始化完成后发送给OSAL的消息事件GAP_DEVICE_INIT_DONE_EVENT当做一个单独事件来处理,在uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )函数里处理了这个事件,在事件里我完成了scanRspData[]数组的处理工作,之后我烧进去试了一下,发现这样不行,报错,显示没有初始化完毕的错误大概
现在我在想,我可以单独设置一个事件,然后再这个事件里接收系统消息GAP_DEVICE_INIT_DONE_EVENT,如果接收到了,我就处理scanRspData[]这个数组,不知这样对吗
还有一个问题,关于广播是否使能,是不是只要设置这个函数就可以:
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );把最后一个参数改为FALSE就是不广播,改为TRUE就是广播,这样对吗?
我也是最近才开始接触做蓝牙的项目,所以问题比较多,期待你的详细解答,不胜感激!
如上,是这么回事吗?
先自己获取地址,然后把地址转换成字符串,然后把字符串复制到回复数组及设备名称数组中,断开重新扫描,一切搞定
我的群里面有例程,可以参考
希望可以帮到你,祝你好运!