更新时间:2024-01-17 10:18:24下载pdf
本文介绍 DP 上下行传输。Beacon Mesh DP 传输包含下发和上报,一般的常供电产品都是只下发的,将手机当作遥控器来使用。由于上报有一定要求,因此不太常用。
概念 | 说明 |
---|---|
DP | Data Point 数据点。在涂鸦体系里,产品的功能描述模型是基于 DP 的,其是一种信息编码方式,将一个设备的动作或状态分为 bool、value、string、raw、enum 和 error 等。一个设备用多个 DP 来描述。 |
上行/上报 | 设备将信息发送给手机/网关。 |
下行/下发 | 手机/网关将信息发送给设备。 |
DP 接收:当手机/网关收到下行 DP 信息时,设备会通过回调函数推给应用层。用户在该回调函数中实现 DP 接收与处理。
DP 上报:当设备状态改变时(例如周期性上报的温湿度传感器),需要将信息推给手机/网关。此时需要借助 DP 上报接口,将信息以不带 ACK 的广播方式发送出去。
无对外数据结构,用户无需关注。
应用层实现下列 Beacon Mesh DP 接收回调函数,可以监听手机、网关和遥控器传过来的 DP 控制命令。
void app_dps_download(u8 dpid, u8 dpty, u8 dplen, u8 *dpvalue, beacon_frame_s *p_frame){
PR_DEBUG("dpid=%d dpty=%d, dplen=%d, dpvalue=[",dpid,dpty,dplen);
PR_DEBUG_HEX_ARRAY(dpvalue,dplen);
PR_DEBUG_RAW("]\n");
switch(dpid){
case 0x01://onoff
case 101:
app_led_onoff(dpvalue[0]);
break;
case 0x02://mode: white,color,scene,music
break;
default:
break;
}
}
函数 | u8 frame_send(u8 head, u16 dst, u8 subcmd, u8* payload, u8 *key, u8 ttl); |
高级封装包发送 |
---|---|---|
作用 | Beacon Mesh 协议栈最底层发包函数,直接将 Payload 数据发送到目标地址,并且可以设置最大为 3 的 TTL。
|
- |
入参 | u8 head | 数据包 Head |
-> | u16 dst | 目的地址 |
-> | u8 subcmd | 数据包子命令 |
-> | u8* payload | 数据包数据字段 |
-> | u8 *key | 数据包秘钥 |
-> | u8 ttl | 跳数 |
示例
DP 上报函数:
u8 payload[16];
memset(payload,0,16);
payload[0] = 1;//dp id = 1
payload[1] = 0x11;//dp kind = 1; dp len = 1 (各占 4bits)
payload[2] = led_onoff;//dp value
frame_send(0x08, 0x8000, 0x0A, payload, beacon_dev.beaconkey, 3);
注意:手机的接收窗口一般在手机下发命令之后的几十秒时间,这意味着如果没有网关的 Beacon 上报方案,则受限于窗口打开的时机。网关的接收会常开,没有这方面的限制。
在开发过程遇到问题,您可以登录 TuyaOS 开发者论坛 TuyaOS-蓝牙设备开发 版块进行沟通咨询。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈