TuyaOS
蓝牙

涂鸦TuyaOS支持蓝牙作为一个近场通信的功能,和Powered by Tuya设备进行配对、连接,建立蓝牙通道,并对设备进行蓝牙配网、蓝牙激活、蓝牙控制、蓝牙校时、蓝牙遥控器、蓝牙定时、蓝牙产测等功能。

蓝牙配网

未配网设备发送蓝牙广播,涂鸦智能APP在接收到蓝牙广播数据之后,会对未配网设备发起配对,配对完成之后,根据涂鸦蓝牙协议进行配网交互,涂鸦智能APP向云端申请Token,并将SSIDPasswordToken发送给待配网设备。待配网设备拿到SSIDPasswordToken之后,连接Wi-Fi路由器,并连接涂鸦IoT平台,进行激活绑定。

蓝牙配网功能不需要客户进行编码,涂鸦TuyaOS直接提供了相关的能力。此功能支持配置开关裁剪,也支持客户编码定制。

蓝牙激活

此功能包括蓝牙兜底激活、连云激活功能。作为配网的兜底方案,设备在蓝牙配网失败时,会触发兜底激活,即通过涂鸦智能APP代理连云激活,以实现设备在无网的情况下可以对设备进行dp控制等业务功能;当设备有网络,且已经兜底激活时,用户可以进一步操作连云激活功能,涂鸦智能APP设置SSIDPassword信息并发送给设备,设备拿到SSIDPassword信息后,连接Wi-Fi路由器,并且正常连云,此时设备状态和普通蓝牙/WIFI配网结果状态一致。

蓝牙激活功能不需要客户进行编码,涂鸦TuyaOS直接提供了相关的能力。此功能支持配置开关裁剪,也支持客户编码定制。

蓝牙控制

蓝牙控制,即设备提供了蓝牙链路的DP控制功能,包括DP上报、下发、DP查询功能。

蓝牙控制涉及客户的DP业务,可参考DP功能描述中的蓝牙相关部分。此功能支持配置开关裁剪,也支持客户编码定制。

蓝牙校时

当蓝牙连接建立的时候,通过涂鸦蓝牙协议,对设备进行时间校准。

蓝牙校时功能不需要客户进行编码,涂鸦TuyaOS直接提供了相关的能力。

蓝牙遥控器

蓝牙遥控器需要Powered by Tuya设备开启蓝牙扫描能力。蓝牙遥控器当前支持线上和线下两个版本。线上版本,蓝牙遥控器在绑定设备时,蓝牙遥控器和Powered by Tuya设备必须已配网,且配在相同家庭下;Powered by Tuya设备需要从涂鸦IoT平台获取beacon_key,用于蓝牙遥控协议数据的解密。线下版本,即遥控器绑定设备时,设备没有必须已配网的限制,蓝牙遥控器也无需配网,因此也称为免配网蓝牙beacon遥控器。

设备在接收到遥控器发送的蓝牙广播数据的时候,线上版本,会使用beacon_key对数据进行解密、过滤,线上版本会通过随机数特殊算法对数据进行解密、过滤,并将解密之后的数据发送给开发者,开发者根据蓝牙遥控器协议的定义,解析数据并执行相关的遥控操作。

蓝牙校时功能需要客户注册遥控器回调,从而实现客户的业务数据处理需求。此功能支持配置开关裁剪,也支持客户编码定制。

蓝牙定时

蓝牙定时,即Powered by Tuya设备提供蓝牙通道的定时器功能。此功能主要在设备无网场景时,涂鸦智能APP可以通过蓝牙通道,完成定时器任务功能。

蓝牙定时功能不需要客户进行编码,涂鸦TuyaOS直接提供了相关的能力。此功能支持配置开关裁剪,也支持客户编码定制。

蓝牙产测

蓝牙产测功能,即Powered by Tuya设备提供了蓝牙通道的产测功能,产测协议可参考涂鸦WIFI产测协议。客户如需增加产测内容,可以参考涂鸦产测相关功能介绍。

蓝牙产测功能不需要客户进行编码,涂鸦TuyaOS直接提供了相关的能力。此功能支持配置开关裁剪,也支持客户编码定制。

蓝牙功能定制

此功能支持客户编码定制蓝牙各子功能。默认蓝牙功能全开。如果客户定制了蓝牙子功能,未使能的功能将不会被链接到固件BIN中,从而节省客户FLASH成本。

接口描述

注册蓝牙遥控回调

//callback function for advertisement scanning data processing
typedef VOID (*TUYA_BLE_APP_SCAN_HANDLE)(UCHAR_T *data, UCHAR_T len, UCHAR_T type, UCHAR_T* mac);
OPERATE_RET tuya_ble_reg_app_scan_adv_cb(TUYA_BLE_APP_SCAN_HANDLE cb);

此接口用于注册蓝牙遥控功能的数据接收回调,其中TUYA_BLE_APP_SCAN_HANDLE为回调函数原型。注册该回调之后,设备会的确蓝牙扫描功能,并将接收到的蓝牙广播进行过滤,通过回调通知应用。

typedef enum {
TUYA_BLE_OP_UNBIND = 0,
TUYA_BLE_OP_BIND,
//callback function for validity check for bind or unbind operation
typedef OPERATE_RET(*BLE_SCAN_ADV_BIND_CHECK_CB)(TUYA_BLE_BIND_TYPE type, UCHAR_T *data, UCHAR_T len);
//callback function for result notify for bind or unbind operation
typedef VOID_T(*BLE_SCAN_ADV_BIND_RSLT_NOTIFY_CB)(TUYA_BLE_BIND_TYPE type, int rslt);
typedef struct {
BLE_SCAN_ADV_BIND_CHECK_CB bind_check;
BLE_SCAN_ADV_BIND_RSLT_NOTIFY_CB bind_notify;
} TUYA_BLE_SCAN_ADV_HANDLE_CBS;
OPERATE_RET tuya_ble_reg_app_scan_adv_handle_cbs(TUYA_BLE_SCAN_ADV_HANDLE_CBS* cbs);
TUYA_BLE_BIND_TYPE
bind type for bluetooth remote controller
Definition: tuya_bt.h:53

此接口用于注册蓝牙遥控器绑定、解绑时客户检查回调,以及绑定、解绑结果通知,以满足客户个性化需求。

VOID_T tuya_ble_set_bind_window(UINT_T time_out);

此接口用于设置蓝牙遥控器绑定时间窗,以满足客户个性化需求。参数为秒,最小时间窗为30s;如果传入为0,则表示时间窗常打开。设备在上电后会打开时间窗,只有在时间窗内可以绑定蓝牙遥控器。

VOID_T tuya_ble_open_bind_window(VOID_T);

此接口用于重新打开蓝牙遥控器绑定时间窗,以满足客户个性化需求。如电工设备,没有上电场景,因此需要其他方式来重新打开绑定时间窗,以支持绑定功能。

示例代码

STATIC VOID __bel_scan_handle(UCHAR_T *data, UCHAR_T len, UCHAR_T type, UCHAR_T* mac)
{
PR_DEBUG("recv ble remote cntl from %s", mac);
return;
}
// 在完成系统初始化之后调用此接口测试蓝牙遥控
VOID test_ble_remote_cntl()
{
tuya_ble_reg_app_scan_adv_cb(__bel_scan_handle);
}

蓝牙功能定制

VOID_T tuya_enable_ble(VOID_T);

此接口用于使能蓝牙基础能力

VOID_T tuya_enable_ble_netcfg(VOID_T);

此接口用于使能蓝牙配网能力

VOID_T tuya_enable_ble_active(VOID_T);

此接口用于使能蓝牙激活能力

VOID_T tuya_enable_ble_dp_ctrl(VOID_T);

此接口用于使能蓝牙dp控制能力

VOID_T tuya_enable_ble_timer(VOID_T);

此接口用于使能蓝牙定时能力

VOID_T tuya_enable_ble_psk30(VOID_T);

此接口用于使能蓝牙psk3.0能力

VOID_T tuya_enable_ble_mftst(VOID_T);

此接口用于使能蓝牙产测能力

示例代码

VOID_T do_ble_tailor(VOID_T)
{
//蓝牙子功能,如不需要可以裁剪掉,功能则不会编入BIN中
tuya_enable_ble();//基础蓝牙能力
tuya_enable_ble_dp_ctrl();//dp控制能力
tuya_enable_ble_timer();//蓝牙定时能力
tuya_enable_ble_netcfg();//蓝牙配网能力
tuya_enable_ble_active();//plug_play能力
#if defined(TUYA_SECURITY_LEVEL) //PSK能力
tuya_enable_ble_psk30();//psk3.0,支持大数据通道的蓝牙配网、连云激活功能
#endif
tuya_enable_ble_mftst();//蓝牙通道产测能力
//蓝牙遥控器功能,通过tuya_ble_reg_app_scan_adv_cb在device_init中使能
}
VOID pre_device_init(VOID)
{
....
do_ble_tailor();//蓝牙子功能裁剪
....
}

注意事项

1.应用需要在pre_device_init中(即TuyaOS初始化之前)先做蓝牙功能裁剪。 2.基础蓝牙能力必须打开后,再进行子功能裁剪。 3.子功能必须SDK蓝牙配置项打开前提下才能裁剪,否则接口将会找不到。