昨天 遇到了一个烦心的问题,被老外客户怼了两句,恼火,很想发火,发现英文不够用,算了,就不跟直肠的鬼佬一般见识。说正事。
最近的一个nRF51822+MT2503 钱包防丢项目,准备接近量产了。昨天做APP的老外发现设备没有 配对绑定功能,就不明真相的说为什么一开始不加上。
WTF,记住MAC地址就可以了啊,做销售的老外以为没有配对绑定功能的意思是手机不能连接上,做APP的老外才真正配对绑定功能是为看手机省电和连接方便,..好吧,
加上去。
据说,配对功能就是为了 手机绑定设备后,可以直接启动连接设备而不用首先进行扫描,一直扫描的话太耗电。
还有,苹果手机的一些蓝牙功能也需要配对完成才能用。否则是用不了的。
下面是老外的原话:
@ceiba if device paired, Android system save BT device profile in system and can get Bluetooth device object to connect to it (trying to connect). If profile doesn't exist in system, need always scan nearby devices and compare saved addresses to get device and connect it
流程应该是这样的:
1.手机与设备首次进行了连接,
2.手机向设备请求绑定(配对,bond&pair)
3.设备如果有配对功能,返回自身的一些配对信息给手机,否则就啥都不管,或者回一句,“我不支持配对功能”
4.设备本身将手机发来的手机配对信息进行存储
5.手机接收到设备返回的配对信息后,也进行储存
6.下次连接,手机可能不需要扫描就可以直接启动连接设备(经过和经验丰富的老外沟通后,我认为是这样),
设备接受连接后也会检查配对信息是否正确,正确了就返回告诉手机
7.直接进行通信。
以上是这两天的收获,感谢老外和我的技术支持。
下面开始移植 device manager 模块,也就是 设备的绑定配对功能,
。。。。
我就不写了,还是直接给个链接跳去看论坛上人家的做法吧,
https://devzone.nordicsemi.com/tutorials/15/
下面是第二个关键的问题,因在移植 device manager 这个模块的代码之前,加有对 pstorage 的操作, 而device manager 里面也有,这时候就有点冲突了,因为pstorage_init 只需要调用一次。
OK,那就把 我自己的 pstorage_init() 删掉,但还是不行,pstorage_register 分配了同一块地址(返回0x00000007)。。。导致错误,复位。。
后来再进去,发现下面这块代码的时候出了错:
1 #define MODULE_ID_RANGE_CHECK(ID) 2 if ((((ID)->module_id) >= PSTORAGE_NUM_OF_PAGES) || 3 (m_app_table[(ID)->module_id].cb == NULL)) 4 { 5 return NRF_ERROR_INVALID_PARAM; 6 }
哦,原来是 PSTORAGE_NUM_OF_PAGES 这个宏的问题,原来是1,OK ,改成2 ,问题完美解决。。。
#define PSTORAGE_NUM_OF_PAGES 2// 1
。。。