多mac地址问题

由于项目需求需要,在基于nrf51822的设备上面实现如下功能:设备可以有几种不同的模式,用mac地址区分模式。这里说一下多mac地址和手机f配对的过程:设备用mac地址1和手机配对,手机保存了当前的蓝牙配对信息,设备记录了该手机信息并且标记为ID1,可以在代码里这样打印出手机的配对ID(也可以根据这个ID执行删除配对信息)

static void pm_evt_handler(pm_evt_t const * p_evt)
{
    //配对事件的case下面:

    printval("%d\r\n",p_evt->peer_id);
}

下次扫描到该蓝牙广播的时候可以快速回连上设备,然后这时候设备切换到了mac地址2并且广播,由于mac地址不一样,手机识别该设备为另一个设备,然后连接的时候会提示配对,配对成功后设备会记录这次配对信息并且覆盖上次的配对信息。也就是说 同一部手机,设备用2个不同的mac地址去跟手机配对,手机会识别为2个设备,可是设备只识别同一台手机。那么问题来了,设备再从mac地址2切换mac地址1,这时候手机会主动跟设备连接上,在SDK12里有时候会出现PM_EVT_CONN_SEC_FAILED,我在拿几个手机来回连接测试的时候还会出现PM_EVT_PEER_DATA_UPDATE_FAILE,如果打开了debug就会死在这里了。在最新的SDK15 16里不会出现这个问题,但是也会出现配对失败,根据测试发现 有些手机这时候会主动把mac1的蓝牙移除配对的列表了,设备这边也就断开连接了,但是有些手机还是会显示‘已连接’,我的方法是写一个解绑的函数,当出现配对失败的事件时候,记录这个ID并且强行阻止该次配对。如果出现了这种情况用户必须主动在手机里把该设备取消配对

发布了11 篇原创文章 · 获赞 0 · 访问量 108

猜你喜欢

转载自blog.csdn.net/weixin_39945910/article/details/104066755