更新时间:2024-07-30 03:10:20下载pdf
TuyaOS 是基于组件化的概念设计的,提供了基础服务、安全、网络服务中间件和丰富的物联网业务功能组件,这些功能组件构成了 TuyaOS 的能力地图。TuyaOS 蓝牙开发框架就是基于 TuyaOS 的能力地图,按照蓝牙设备工作场景的能力需求,构建的不同规格的、适用于不同场景的 SDK 的集合。这些开发框架提供了统一的接口、丰富的组件能力,您无需关心具体的实现原理,调用接口函数即可快速开发产品功能,并提供了统一的开发体验。
根据上图可知,TuyaOS Beacon Mesh 开发包 主要分为 4 层。
第 1 层是涂鸦核心适配层(Tuya Kernel Layer,TKL 层),由涂鸦提供的 TKL 层标准接口和芯片原厂 SDK 组成,TKL 层对上提供统一的接口,对下适配不同的芯片平台,适配工作可能由涂鸦开发人员完成,也可能由芯片原厂的开发人员完成。
第 2 层和第 3 层是涂鸦抽象层(Tuya Abstraction Layer,TAL 层),由各种组件组成,是开发包的主体部分,基本功能包括涂鸦配网、数据通信以及系统管理功能。
第 4 层是应用层,涵盖照明、电工、传感、遥控器、无线开关等多个领域,除了提供标准的产品例程以外,涂鸦还提供了标准 Demo 工程,标准 Demo 工程无需任何改动,即可直接编译烧录,您可参考 Demo 来实现更复杂的应用。
更多信息,参考 能力地图 - 设备初始化。
➜ tuyaos_demo_beaconmesh_peripheral_phy6252 git:(master) ✗ tree
.
| -- app_config.h
| -- include
| `-- app_led.h
| -- src
| | -- app_led.c
| `-- main.c
`-- tuya_iot.config
此处展示的 Demo 是 TuyaOS Beacon Mesh 开发包最基础的 Demo,您可以通过该 Demo 体验开发包支持的几乎所有功能,也可以基于该 Demo 开发更加复杂的应用功能。
main.c
Demo 应用初始化以及基础的 Beacon Mesh 数据收发、状态回调。Demo 以 1 路灯为例展示了如何使用 Beacon Mesh SDK。
app_led.c
包含 1 路灯的应用层业务逻辑,包含三次上电重置设备等功能。
➜ components git:(master) ✗ tree -L 1
.
| -- tal_sdk_test
`-- tal_xfifo
➜ libs git:(master) ✗ tree
.
| -- libtal_beacon2.lib
`-- libtal_xxtea.lib
tal_sdk_test
外设测试相关组件,里面包含关于外设的测试代码。
tal_gpio_test
实现涂鸦产测工具 GPIO 测试功能。
tal_xfifo
一个简单的、支持多实例的队列组件。
libtal_beacon2.lib
Beacon Mesh 协议栈库。
libtal_xxtea.lib
一种简单的加密算法库。
➜ phy6252_adv git:(master) ✗ tree -L 2
.
| -- sdk # 芯片原厂 SDK
| `-- phy6252_adv_sdk
| -- toolchain # 芯片烧录原厂工具和工程模板
| | -- software
| `-- templates
| -- tuyaos # 各类适配层
| | -- bluetooth # 蓝牙 Beacon 收发适配层
| | -- drivers # 外设驱动适配层
| `-- include # board.h 头文件
| -- README.md
| -- prepare.py
| -- release_note.md
`-- toolchain.yaml
Vendor 是开发环境所在目录,包含芯片原厂 SDK、各类适配层以及通用头文件,由涂鸦和芯片原厂共同维护。
芯片原厂 SDK
基于芯片原厂的公开例程开发或由芯片原厂开发人员修改而来。
各类适配层
涉及蓝牙、外设驱动(GPIO、PWM、ADC、IIC、SPI……)、系统驱动(Memory、OTA、Sleep……)、安全加密与 Hash 接口(AES、MD5)、工具接口的适配。
通用头文件
为了保证 TKL 层以上能够达到一套代码适用于多个芯片平台的目标,Flash 地址、外设引脚等平台相关的因素都通过统一的宏定义放置于 board.h
中。
tuya_error_code.h
:涂鸦对错误类型的定义。
tuya_iot_config
:涂鸦对系统配置、组件使能/配置的定义。
tuya_init_first()
一般用于基础外设、配置信息、内存处理相关的初始化。
tuya_init_second()
一般用于 Log、软定时、蓝牙基础协议相关的初始化。
tuya_init_third()
一般用于复杂外设、外设组件相关的初始化。
tuya_init_last()
一般用于初始化的收尾工作,包含蓝牙配网协议的初始化、测试代码的初始化、开启广播等动作。
在执行完该 API 之后,一般会进入主循环。
ty_beacon2_node_init
Beacon Mesh 协议栈初始化。
ty_beacon_remoter_init
Beacon Mesh 支持遥控器初始化。
tuya_main_loop()
TuyaOS Beacon Mesh 开发包基于前后台软件框架,提供了主循环内的回调接口 tuya_main_loop()
,您可依据需求自定义相关操作注入该接口。
注意:该接口主要用于添加调试、验证性的操作,需 谨慎使用。如果该接口占用过多时间片,会影响整个系统框架的稳定性。
ty_beacon2_event_cb
Beacon Mesh 基础协议事件回调处理函数,包含配网成功、重置、误重置恢复、添加群组、删除群组、遥控器対码、遥控器解绑等基础事件。
app_dps_download
Beacon Mesh 收到手机、网关和遥控器的控制命令时的回调函数,直接到 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。 注:应用 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 上报方案,则受限于窗口打开的时机。网关的接收会常开,没有这一点的限制。
函数 | u8 ty_beacon2_node_reset(u8 is_not_recovery, u32 pair_timeout_us) |
- |
---|---|---|
作用 | 一旦调用,整个系统进入待配网状态 | - |
入参 | u8 is_not_recovery | 配网超时后是否恢复为之前的已配网状态 |
-> | u32 pair_timeout_us | 配网超时时间,单位是 μs |
函数 | u8 ty_beacon2_node_pair_start(u32 timeout_us) |
- |
---|---|---|
作用 | 一旦调用,整个系统进入待配网状态 | - |
入参 | u32 timeout_us | 设置配网超时时间 |
可通过 beacon_dev.state
获取,用户主要关注的是两个状态:
Beacon Mesh 设备有两种状态:正在配网状态和已配网状态。
Demo 中 Log 默认是关闭的,可以在 tuya_iot_config.h
中修改实现 #define APP_LOG_ENABLE 1
,使用 tkl_uart
中接口输出日志,已经打成 lib
的组件是没有日志的。如果有问题需要调试,请联系涂鸦开发人员。
备注:某些平台开 Log 比较特殊。
.log
中用 CDK 打开工程,打开工程设置(魔术棒按钮),进入 Compiler 选项卡,将 Define(-D) 中的 _DEF_DEBUG_INFO_
改为 3
。tuya_iot_config.h
方法。涂鸦通过 TKL 层提供了最小功能集所需的驱动接口,TKL 只是涂鸦标准化的接口,并非所有驱动都有 TKL。
为了保证开发效率,如果 TKL 层对应的驱动没有实现或者没有相关驱动,您可以按照实际需求,直接调用芯片原厂提供的接口。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈