Page 1 of 1

【蓝牙】TuyaOS 开发蓝牙产品之软件介绍

Posted: 2022年 Nov 21日 11:25
by 逻辑的院子

软件架构

TuyaOS 是基于组件化的概念设计的,提供了基础服务、安全、网络服务中间件、丰富的物联网业务功能组件,这些功能组件构成了 TuyaOS 的能力地图。TuyaOS 蓝牙开发框架就是基于 TuyaOS 的能力地图,按照蓝牙设备工作场景的能力需求,构建的不同规格的、适用于不同场景的 SDK 的集合。这些开发框架提供了统一的接口、丰富的组件能力,您无需关心具体的实现原理,调用接口函数即可快速开发产品功能,并提供了统一的开发体验。

Image

根据上图可知,TuyaOS BLE 开发包 主要分为4层。

第1层是涂鸦核心适配层(Tuya Kernel Layer,TKL层),由涂鸦提供的TKL层标准接口和芯片原厂SDK组成,TKL层对上提供统一的接口,对下适配不同的芯片平台,适配工作可能由涂鸦开发人员完成,也可能由芯片原厂的开发人员完成。

第2层和第3层是涂鸦抽象层(Tuya Abstract Layer,TAL层),由各种组件组成,是开发包的主体部分,基本功能包括涂鸦配网、数据通信以及系统管理功能,高级服务包括天气服务、HID靠近响应、时间服务、共享设备,功耗管理,设备管理,网络能力等功能;

第4层是应用层,涵盖电工、照明、家电、传感、穿戴、门锁等多个领域,除了提供标准的产品例程以外,涂鸦还提供了标准 Demo 工程,标准 Demo 工程无需任何改动,即可直接编译烧录,为应用开发人员提供跨平台的应用开发体验,详见【蓝牙】TuyaOS 开发蓝牙产品之nRF52832实战

软件运行流程

Image

更多信息详见:设备初始化

开发包目录

Image

Demo 目录

Image

此处展示的 Demo 是 TuyaOS BLE 开发包最基本的 Demo,开发者可以通过该 Demo 体验开发包支持的几乎所有功能,当然也可以基于该 Demo 开发任何产品。

app_dp_parser

DP 点解析例程,包含 DP 点接收函数和发送函数,开发人员可以在接收和发送之间添加业务逻辑。

app_key

按键例程,短按进入低功耗,长按恢复出厂设置。

app_led

LED 例程。

tuya_ble_protocol_callback

主要负责处理涂鸦蓝牙通信协议的事件回调处理以及相关的接口。

tuya_sdk_callback

主要负责 TuyaOS SDK 的事件回调处理、各级初始化以及大循环处理。

组件(含库)目录

Image

Image

组件是 TuyaOS BLE 开发包的主体部分,TuyaOS的目标就是实现代码的组件化,熟练地掌握常用组件的基本原理和实现方法对于产品开发可以达到事半功倍的效果。

tal_ble_bulkdata

实现大数据传输功能。

tal_ble_ota

实现OTA功能。

tal_ble_product_test

实现授权(产测)功能。

tal_ble_protocol

实现涂鸦 BLE 配网协议,内部开发人员请参考《Tuya BLE Communication Protocol》,其他使用人员无需关心实现细节,直接调用相关接口实现业务功能即可。接口介绍详见《涂鸦ble sdk说明》的 API介绍CALL BACK EVENT 介绍 章节,其他内容请忽略 。

tal_ble_uart_common

实现串口通用对接功能。

tal_ble_weather

实现查询天气功能。

tal_bluetooth

实现蓝牙相关接口封装。

tal_driver

实现驱动相关接口封装。

tal_key

实现按键功能。

tal_oled

实现 OLED 屏幕驱动功能。

tal_sdk_test

实现测试功能。

tal_system

实现系统相关接口封装。

tal_utc

实现 UTC 相关接口。

tal_util

实现通用工具接口。

tal_ble_mbedtls

实现 AES 和 MD5 等加密接口。

tal_ble_secure

实现 涂鸦 BLE 配网协议相关的安全接口。

Vender 目录

Image

Vender 是开发环境所在目录,包含芯片原厂 SDK、各类适配层以及通用头文件,由涂鸦和芯片原厂共同维护。

芯片原厂 SDK

基于芯片原厂的公开例程开发或由芯片原厂开发人员修改而来。

各类适配层

涉及蓝牙、外设驱动(GPIO、PWM、ADC、IIC、SPI……)、系统驱动(Memory、OTA、Sleep……)、工具接口的适配。

通用头文件

为保证 TKL 层以上能够达到一套代码适用于多个芯片平台的目标,Flash 地址、外设引脚等平台相关的因素都通过统一的宏定义放置于 board.h中。

头文件目录

Image

tuya_error_code.h

涂鸦对错误类型的定义。

tuya_cloud_types.h

涂鸦对数据类型、枚举、宏、结构体的定义。

tuya_iot_config

涂鸦对系统配置、组件使能/配置的定义。

常用 API

初始化

tuya_init_first()

一般用于基础外设、配置信息、内存处理相关的初始化。

tuya_init_second()

一般用于 Log、软定时、蓝牙基础协议相关的初始化。

tuya_init_third()

一般用于复杂外设、外设组件相关的初始化。

tuya_init_last()

一般用于初始化的收尾工作,包含蓝牙配网协议的初始化、测试代码的初始化、开启广播等动作。

在执行完该 API 之后,一般会进入主循环。

tuya_ble_protocol_init

蓝牙配网协议的初始化。

主循环

tuya_main_loop()

TuyaOS BLE 开发包基于前后台软件框架,提供了主循环内的回调接口 tuya_main_loop() ,开发者可依据需求自定义相关操作注入该接口。

注意:

(1)该接口的返回值会影响低功耗功能,请勿随意修改;

(2)该接口主要用于开发者添加调试、验证性的操作,需谨慎使用。该接口占用过多时间片会影响整个系统框架的稳定性!

事件回调

tuya_ble_evt_callback

蓝牙基础协议事件回调处理函数,包含协议栈初始化完成、连接、断开、连接参数更新、接收数据等蓝牙基础事件。

tuya_ble_protocol_callback

蓝牙配网协议事件回调处理函数,包含配网成功、时间戳更新成功、接收应用数据、解绑成功、接收OTA数据等应用层常用功能。

数据收发

TUYA_BLE_CB_EVT_DP_DATA_RECEIVED

应用层数据接收回调,接收的数据符合 DP 数据格式,请参考 DP 点 小节

tuya_ble_dp_data_send

应用层数据发送函数

tuya_ble_dp_data_with_time_send

应用层数据发送函数(带时间戳)

TAL_BLE_EVT_WRITE_REQ

蓝牙基础数据接收回调

tal_ble_server_common_send

蓝牙基础数据发送函数

状态查询

tuya_ble_connect_status_get()

Code: Select all

typedef enum {
    UNBONDING_UNCONN = 0,  //未绑定未连接    
    UNBONDING_CONN,        //未绑定已连接已认证    
    BONDING_UNCONN,        //已绑定未连接    
    BONDING_CONN,          //已绑定已连接已认证    
    BONDING_UNAUTH_CONN,   //已绑定已连接未认证     
    UNBONDING_UNAUTH_CONN, //未绑定已连接未认证     
    UNKNOW_STATUS 
} tuya_ble_connect_status_t;

各状态之间的转换关系如下图所示:

Image

常用功能

蓝牙数据流

下图演示了 BLE 数据在 SDK 中的流转过程,其他过程类似。

Image

表格形式,方便复制

手机发送数据手机接收数据
TKL:芯片原厂 BLE 数据接收回调 + tkl_ble_gatt_evt_functkl_ble_gatts_value_notify + 芯片原厂 BLE 数据发送函数
TAL:TKL_BLE_GATT_EVT_WRITE_REQ + tal_ble_event_callbacktal_ble_server_common_send
TUYA:TAL_BLE_EVT_WRITE_REQ + tuya_ble_gatt_receive_datatuya_ble_gatt_send_data
接收单包:TUYA_BLE_EVT_MTU_DATA_RECEIVE + tuya_ble_handle_ble_data_evttuya_ble_gatt_send_data_enqueue + tuya_ble_gatt_send_data_handle
tuya_ble_commonData_rx_proc,组包,解密tuya_ble_commData_send,组包,加密
接收指令:TUYA_BLE_EVT_BLE_CMD + tuya_ble_handle_ble_cmd_evtTUYA_BLE_EVT_DP_DATA_SEND - tuya_ble_handle_dp_data_send_evt
tuya_ble_evt_process,指令分发tuya_ble_dp_data_send
FRM_DP_DATA_WRITE_REQ + tuya_ble_handle_dp_data_write_reqapp_dp_report
TUYA_BLE_CB_EVT_DP_DATA_RECEIVED + app_dp_parser

测试代码

开启测试代码 - 设置宏 TUYA_SDK_TEST 的值为 1。

关闭测试代码 - 设置宏 TUYA_SDK_TEST 的值为 0。

测试代码结合测试上位机(Logic)可实现大部分配网、通信、外设等功能的测试,可帮助开发者更好的开发产品,但是生产固件请务必关闭测试功能。

Log 管理

Image

上图链接 方便复制

ENABLE_LOG

BOARD_ENABLE_LOG

Log 输出接口

tuya_log_output_cb

动态内存

动态内存的大小:BOARD_HEAP_SIZE

关于驱动

涂鸦通过 TKL 层提供了最小功能集所需的驱动接口,TKL 只是涂鸦标准化的接口,并非所有驱动都有 TKL。

为保证开发效率,如果 TKL 层对应的驱动没有实现或者没有相关驱动,开发者可以按照实际需求直接调用芯片原厂提供的接口。


Re: 【蓝牙】TuyaOS 开发蓝牙产品之软件介绍

Posted: 2022年 Nov 21日 19:58
by always on the road

太详细了,楼主辛苦了