微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 想把lightblue搜索到的设备名改为xxx(设备名)+MAC(蓝牙CC2541的全球唯一标识号)

想把lightblue搜索到的设备名改为xxx(设备名)+MAC(蓝牙CC2541的全球唯一标识号)

时间:10-02 整理:3721RD 点击:

问题:我们在用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就是广播,这样对吗?

我也是最近才开始接触做蓝牙的项目,所以问题比较多,期待你的详细解答,不胜感激!

如上,是这么回事吗?

先自己获取地址,然后把地址转换成字符串,然后把字符串复制到回复数组及设备名称数组中,断开重新扫描,一切搞定

我的群里面有例程,可以参考

希望可以帮到你,祝你好运!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top