DP 传输

更新时间: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 的广播方式发送出去。

数据结构

无对外数据结构,用户无需关注。

接口说明

DP 接收

应用层实现下列 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;
    }
}

DP 上报

函数 u8 frame_send(u8 head, u16 dst, u8 subcmd,
u8* payload, u8 *key, u8 ttl);
高级封装包发送
作用 Beacon Mesh 协议栈最底层发包函数,直接将 Payload 数据发送到目标地址,并且可以设置最大为 3 的 TTL。
  • 应用 Demo 单独介绍如何使用该最底层发包函数,封装出发送不同类型的 DP、发送心跳等更上层(应用层)的函数。
  • 再次调用会直接打断上一次的发包,进行全新一次的发包。
-
入参 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-蓝牙设备开发 版块进行沟通咨询。

咨询前建议首先查阅 官方资料 或参考已有帖子,并认真阅读 发帖规范