天猫与百度双网关方案

验证双vendor 支持天猫精灵&百度

一、mesh配网协议(mesh provisioning)

1.1、Provisioning协议栈

天猫蓝牙mesh 天猫蓝牙连接_天猫蓝牙mesh

1.2、PB-ADV (通过百度或天猫精灵音响直接配网)
  1. The PB-ADV bear用来传输Generic Provisioning PDUs类型,PB-ADV的MTU是24字节。
  2. PB-ADV类型AD Type(0x29)
1.3、PB-GATT (通过天猫精灵APP配网)
  • PB-GATT是设备用代理协议将Proxy PDUs封装在了Provisioning PDUs中。
  • Device接受Proxy PDU通过provisioner WriteCommand发过来的PDU,然后通过Notify来发送Provisioning PUDs给provisioner.

二、实现方案

  1. 百度音响与天猫精灵配网都是基于广播承载层。
  2. 设备在flash地址0x78000处写入52字节的三元组,前26字节是百度的三元组,后26字节是天猫的三元组信息。
    初始化阶段,设备读取百度与天猫的三元组,由三元组信息计算出UUID,由UUID组成未配网广播包,每隔2秒发送一个未配网广播包。轮流发送百度与天猫的未配网广播包。

UUID中包含2字节的CID,即天猫或者百度的model ID
UUID中包含4字节的Product Id
UUID中包含6字节的MAC

  1. Link Open 消息由配网器发给设备,包含16字节的UUID.设备端根据接收到的UUID判断配网器的类型是百度音响或是天猫精灵,把音响类型设置给全局结构体变量 provision_mag.dual_vendor_st
  2. 设置配网参数阶段,调用函数mesh_provision_par_set,
    调用mesh_ais_global_var_set()
    配置vendor model:
vendor_id_check_and_update();
  1. 设置网络参数
  • 百度音响重发7次,重发间隔是 10ms
  • 天猫精灵重发5次,重发间隔是 30ms
  1. 设备端根据配网器类型使用对应的model ID.后续接收vendor消息&发送vendor消息选用对应厂家的model ID和opcode.
方案时序图


百度音响 天猫精灵 开关面板 从地址0x78000读取百度音响的三元组,计算得到UUID1 从地址0x78026读取天猫精灵的三元组,计算得到UUID2 Unprovisioned Device Beacon UUID1(CID:0x011c) Unprovisioned Device Beacon UUID2(CID:0x01a8) loop [发送未配网广播包,每隔2秒发送一个] Link Open UUID2(CID:0x01a8) 开关面板根据UUID判断音响类型 Link ACK Link Open UUID2(CID:0x011c) 开关面板根据UUID判断音响类型 Link ACK alt [天猫精灵配网] [百度音响配网] Provisioning Process Provisioning Data 把vendor model配置给SDK,并设置消息重发次数&重发间隔等参数 opt [配网流程] Link Close 百度音响 天猫精灵 开关面板