一、 移植前所需资料
①获取涂鸦SDK包;
②基于我们芯片平台生成的库文件(将下面的图片发给涂鸦技术支持,然后会提供tuya_ble_lib_51802.lib);
【库不正确报的错误】
③《涂鸦_ble_sdk_sdk说明_v2》文档;
④涂鸦官网申请PID和授权码;
二、 需要实现接口函数
① 广播包、扫描包更新接口
tuya_ble_gap_advertising_adv_data_update
tuya_ble_gap_advertising_scan_rsp_data_update
②蓝牙断开、gatt数据发送接口
tuya_ble_gap_disconnect
tuya_ble_gatt_send_data
③Timer相关的创建、删除、开始、停止
tuya_ble_timer_create
tuya_ble_timer_delete
tuya_ble_timer_start
tuya_ble_timer_restart
④随机数生成器接口
tuya_ble_rand_generator
⑤nv flash数据读、写、擦除接口
tuya_ble_nv_init
tuya_ble_nv_erase
tuya_ble_nv_write
tuya_ble_nv_read
⑥aes、md5加解密算法(可以参考加密.txt)
tuya_ble_aes128_ecb_encrypt
tuya_ble_aes128_ecb_decrypt
tuya_ble_aes128_cbc_encrypt
tuya_ble_aes128_cbc_decrypt
tuya_ble_md5_crypt
三、需要调用tuya sdk接口
①sdk在蓝牙底层接收回调函数下,调用 tuya_ble_gatt_receive_data 函数,该函数用于将蓝牙底层收到的 GATT 数据发送给涂鸦蓝牙 SDK。涂鸦蓝牙 SDK 会对接收到的加密数据进行解析,并返回给应用程序。
②在非 OS 架构下,蓝牙 SDK 的消息事件主调度器,应用程序必须在主循环 LOOP 中调用 tuya_ble_main_tasks_exec。
③应用程序需要在芯片平台 SDK 的蓝牙连接、断开回调处,调用涂鸦蓝牙 SDK 的 tuya_ble_connected_handler()、tuya_ble_disconnected_handler() 这2个函数,SDK 是根据此函数的执行来管理 SDK 内部蓝牙连接状态的。
④初始涂鸦sdk初始化
tuya_ble_sdk_init
⑤如果设备使用 OS,API 的调用将采用基于消息的异步机制。初始化 SDK 时,SDK 将会根据 tuya_ble_config.h 文件的相关配置自动创建一个任务用于处理 SDK 的核心逻辑,同时自动创建一个消息队列用于接收 API 的执行请求,API 的执行结果也将会以消息的方式通知给设备的应用程序,所以应用程序需要创建一个消息队列并在调用 tuya_ble_sdk_init() 后调用 tuya_ble_callback_queue_register() 将消息队列注册至 SDK 中。回调函数为:
四、 涂鸦APP无法识别蓝牙设备
① PID没有修改,可依据第三方软件(nrf connect)查看广播内容
②加密出来的device uuid不对,如何验证加密算法是否有问题,请参考(加密算法验证.txt)文档,加解密算法实现也可以参考(加密.txt)
③Tuya sdk初始化的时候未填充正确的授权码,可以打印日志,看下tuya sdk初始化之后,是否有正确打印出授权码的信息
④请联系涂鸦对接项目群中的FAE技术专家【必杀技】
五、涂鸦app连接设备后问题
现象:建立链接后,APP马上断开;
原因:服务和特征不符合涂鸦APP要求;
现象:蓝牙底层有接收到数据,并且有调用tuya_ble_gatt_receive_data接口,把接收数据发给涂鸦sdk,数据处理过程中在某个环节就暂停了,最后就超时断开蓝牙了
原因1:tuya_ble_main_tasks_exec函数没有在主循环运行;
原因2:TUYA_BLE_DATA_MTU_MAX设置的太小,蓝牙MTU大于TUYA_BLE_DATA_MTU_MAX;
原因3:解密失败,加解密算法接口没有弄好;
现象:如果出现app下发第一帧获取设备信息命令,数据解析、处理、回复都正常,在app下发第二帧配对请求命令时,出现解密数据是乱码,CRC校验失败的情况,
原因:应该就是随机数生成器接口(tuya_ble_rand_generator)没有实现,可以打印tuya_ble_pair_rand确认;
现象:如果app下发第一帧获取设备信息命令,设备端数据解析、处理、回复打印都有,但是app却一直都没有下发第二帧配对请求命令,出现这种现象,一般都是设备端回复的获取设备信息命令有问题,app没有收到或者没法按协议解析成功,可从以下几个方向排查:
原因1:加密算法有问题,导致app收到数据解密之后,数据不对或者没法解密成功
原因2:设备端底层发包机制有问题,数据根本没有发送出去,可通过抓空中包确认
原因3:设备端底层发包数据有问题,可通过抓空中包确认发出去的数据内容和加密数据是否完全一样
原因4:设备端底层分包发送之间有阻塞、不连续,导致app接收数据不完整
原因5:设备端底层分包发送大小超过协商的mtu
现象:app配网成功后一直都正常,但是重新上电或者复位后,设备没法重连,一直是离线状态
原因:该问题应该是配网成功后绑定状态标志位已经置位,但是未存储到flash,导致重新上电或者复位之后,初始化广播的时候,广播数据未更新,还是配网成功之前的广播数据,不是已经绑定后的广播数据,客户确认flash存储接口实现是否有问题
现象:设备有实现本地恢复出厂设置功能,但是本地恢复出厂设置之后,设备重新配网时app上就搜索不到该设备了
原因1:确认接口调用逻辑有没有调用错,需要清除云端历史数据、设备绑定信息并解绑,就调用tuya_ble_device_factory_reset接口,如果只需要清除设备绑定信息并解绑,就调用tuya_ble_device_unbind接口
原因2:确认flash存储接口实现是否有问题,有可能是进行解绑操作过程中,绑定标志位有清0,但是未存储到flash,导致芯片复位之后,广播还是已绑定的广播
原因3:确认恢复出厂设置逻辑,有客户会在调用tuya_ble_device_factory_reset/tuya_ble_device_unbind之后,调用芯片sdk的复位接口,涂鸦sdk事件发送是异步的,如果调用完上述接口后,立马调用芯片sdk复位接口,会导致实际解绑流程未跑完就复位了,复位后还是已绑定状态;可以在调用完上述接口后,设置定时器延时2s后再调用芯片sdk复位接口
【完成了 SDK 移植后,您可以进入应用程序开发,请查看对应的开发指南。】
-----------------------完结----------------------