更新时间:2024-11-20 08:51:21下载pdf
涂鸦蓝牙 SDK(TUYA BLE SDK)向设备应用程序发送消息(状态、数据等)的方式如下:
如下所示是 RTOS 架构下设备应用代码处理蓝牙 SDK 消息的典型架构,同理无 RTOS 架构下的芯片平台也可以使用所示的代码架构来处理消息,只是基于 Callback 函数处理消息后不需要调用 tuya_ble_event_response()
响应蓝牙 SDK。本文主要介绍各种事件(event)的含义。
RTOS 平台架构下处理消息回调函数示例:
os_msg_queue_create(&tuya_custom_queue_handle,MAX_NUMBER_OF_TUYA_CUSTOM_MESSAGE, sizeof(tuya_ble_cb_evt_param_t));
tuya_ble_callback_queue_register(tuya_custom_queue_handle);
/*处理蓝牙 SDK 消息的应用任务*/
void tuya_custom_queue_handle(void *p_param)
{
tuya_ble_cb_evt_param_t event;
while (true)
{
if (os_msg_recv(tuya_custom_queue_handle, &event, 0xFFFFFFFF) == true)
{
switch (event.evt)
{
case TUYA_BLE_CB_EVT_CONNECTE_STATUS:
break;
case TUYA_BLE_CB_EVT_DP_WRITE:
break;
case TUYA_BLE_CB_EVT_DP_DATA_REPORT_RESPONSE:
break;
case TUYA_BLE_CB_EVT_DP_DATA_WTTH_TIME_REPORT_RESPONSE:
break;
case TUYA_BLE_CB_EVT_UNBOUND:
break;
case TUYA_BLE_CB_EVT_ANOMALY_UNBOUND:
break;
case TUYA_BLE_CB_EVT_DEVICE_RESET:
break;
case TUYA_BLE_CB_EVT_DP_QUERY:
break;
case TUYA_BLE_CB_EVT_OTA_DATA:
break;
case TUYA_BLE_CB_EVT_NETWORK_INFO:
break;
case TUYA_BLE_CB_EVT_WIFI_SSID:
break;
case TUYA_BLE_CB_EVT_TIME_STAMP:
break;
case TUYA_BLE_CB_EVT_TIME_NORMAL:
break;
case TUYA_BLE_CB_EVT_DATA_PASSTHROUGH:
break;
default:
break;
}
tuya_ble_event_response(&event);//RTOS架构下,应用代码处理完蓝牙 SDK 发送来的消息后,必须调用此函数给予蓝牙 SDK 反馈。
}
}
}
无 RTOS 平台架构下注册回调函数示例:
/*处理蓝牙 SDK 消息的回调函数*/
static void tuya_cb_handler(tuya_ble_cb_evt_param_t* event)
{
switch (event-evt)
{
case TUYA_BLE_CB_EVT_CONNECTE_STATUS:
break;
case TUYA_BLE_CB_EVT_DP_WRITE:
break;
case TUYA_BLE_CB_EVT_DP_DATA_REPORT_RESPONSE:
break;
case TUYA_BLE_CB_EVT_DP_DATA_WTTH_TIME_REPORT_RESPONSE:
break;
case TUYA_BLE_CB_EVT_UNBOUND:
break;
case TUYA_BLE_CB_EVT_ANOMALY_UNBOUND:
break;
case TUYA_BLE_CB_EVT_DEVICE_RESET:
break;
case TUYA_BLE_CB_EVT_DP_QUERY:
break;
case TUYA_BLE_CB_EVT_OTA_DATA:
break;
case TUYA_BLE_CB_EVT_NETWORK_INFO:
break;
case TUYA_BLE_CB_EVT_WIFI_SSID:
break;
case TUYA_BLE_CB_EVT_TIME_STAMP:
break;
case TUYA_BLE_CB_EVT_TIME_NORMAL:
break;
case TUYA_BLE_CB_EVT_DATA_PASSTHROUGH:
break;
default:
break;
}
}
void tuya_ble_app_init(void)
{
device_param.p_type = TUYA_BLE_PRODUCT_ID_TYPE_PID;
device_param.product_id_len = 8;
memcpy(device_param.product_id,APP_PRODUCT_ID,8);
device_param.firmware_version = TY_APP_VER_NUM;
device_param.hardware_version = TY_HARD_VER_NUM;
device_param.adv_local_name_len = strlen(device_local_name);
memcpy(device_param.adv_local_name,device_local_name,device_param.adv_local_name_len);
device_param.use_ext_license_key = 1; //If use the license stored by the SDK,initialized to 0, Otherwise 1.
device_param.device_id_len = 16;
if(device_param.use_ext_license_key==1)
{
memcpy(device_param.auth_key,(void *)auth_key_test,AUTH_KEY_LEN);
memcpy(device_param.device_id,(void *)device_id_test,DEVICE_ID_LEN);
memcpy(device_param.mac_addr_string,mac_test,12);
device_param.mac_addr.addr_type = TUYA_BLE_ADDRESS_TYPE_RANDOM;
}
tuya_ble_sdk_init(&device_param); //SDK 初始化
tuya_ble_callback_queue_register(tuya_cb_handler); //注册消息处理回调函数
tuya_ota_init(); //OTA 初始化
}
Event | TUYA_BLE_CB_EVT_CONNECTE_STATUS |
---|---|
数据结构 | 如下所示 |
描述 | 蓝牙连接状态变更事件 |
备注 | 蓝牙 SDK 每次状态的改变都会发送该事件给设备应用程序。 |
数据结构
typedef enum{
UNBONDING_UNCONN = 0, //未绑定未连接
UNBONDING_CONN, //未绑定已连接已认证
BONDING_UNCONN, //绑定未连接
BONDING_CONN, //已绑定已连接已认证
BONDING_UNAUTH_CONN, //已绑定已连接未认证
UNBONDING_UNAUTH_CONN, //未绑定已连接未认证
UNKNOW_STATUS //未知
}tuya_ble_connect_status_t;
某些场景下同一个状态可能会发送两次,所以当应用程序需要按照状态的变更来触发某个功能时,就需要比较与上一次收到的状态是否一样,可以采用如下所示的处理方法:
static tuya_ble_connect_status_t current_connect_status = UNKNOW_STATUS;
static tuya_ble_connect_status_t last_connect_status = UNKNOW_STATUS;
static void tuya_cb_handler(tuya_ble_cb_evt_param_t* event)
{
int16_t result = 0;
tuya_ble_status_t err_code;
switch (event->evt)
{
case TUYA_BLE_CB_EVT_CONNECTE_STATUS: //BLE 连接状态事件
TUYA_APP_LOG_INFO("received tuya ble conncet status update event,current connect status = %d",event->connect_status);
if((event->connect_status == BONDING_CONN)&&(last_connect_status!=BONDING_CONN))
{
//Do something
}
last_connect_status = event->connect_status;
break;
default:
break;
}
}
Event | TUYA_BLE_CB_EVT_DP_WRITE |
---|---|
数据结构 | - |
描述 | 蓝牙 SDK 收到的手机 App 发送的 DP 数据。 |
备注 | 已弃用 |
Event | TUYA_BLE_CB_EVT_DP_DATA_RECEIVED |
---|---|
数据结构 | tuya_ble_dp_data_received_data_t; |
描述 | 蓝牙 SDK 收到的手机 App 发送的 DP 数据。 |
数据结构
typedef struct {
uint32_t sn;
uint8_t *p_data;
uint16_t data_len;
} tuya_ble_dp_data_received_data_t;
参数说明
sn:手机 App 定义的发送序号,逐次累加,设备应用程序按需使用。
p_data:DP 数据指针,指向的数据内容格式如下所示:
DP 1的数据 | ~ | DP n的数据 | ||||||
---|---|---|---|---|---|---|---|---|
1 | 2 | 3-4 | 5~ | ~ | n | n+1 | n+2-n+3 | n+4~ |
Dp_id | Dp_type | Dp_len | Dp_data | ~ | Dp_id | Dp_type | Dp_len | Dp_data |
详见 tuya_ble_dp_data_send()
API 介绍。
data_len:上面介绍的 DP 数据长度。
Event | TUYA_BLE_CB_EVT_DP_QUERY |
---|---|
数据结构 | tuya_ble_dp_query_data_t |
描述 | 蓝牙 SDK 收到的手机 App 发送的要查询的 DP ID 数组 |
备注 | data_len=0 表示查询所有的 DP。否则 p_data 指向的每一个字节代表要查询的一个 DP例如 data_len=3 ,p_data 指向内容为 {0x01,0x02,0x03} ,表示要 App 查询 dp_id=1、dp_id=2、dp_id=3 的 3 个 DP |
数据结构
/*
* query DP point data, if data_len is 0, means query all DP point data, otherwise query the DP point in p_data buffer.
* */
typedef struct{
uint8_t *p_data;
uint16_t data_len;
}tuya_ble_dp_query_data_t;
Event | TUYA_BLE_CB_EVT_OTA_DATA |
---|---|
数据结构 | tuya_ble_ota_data_t |
描述 | 蓝牙 SDK 收到的手机 App 发送的 OTA 固件数据。 |
备注 | 具体内容见《OTA》 章节介绍。 |
数据结构
typedef struct{
tuya_ble_ota_data_type_t type;
uint16_t data_len;
uint8_t *p_data;
}tuya_ble_ota_data_t;
Event | TUYA_BLE_CB_EVT_BULK_DATA |
---|---|
数据结构 | tuya_ble_bulk_data_request_t |
描述 | 大数据传输通道 |
备注 | 具体内容见《大数据 BULK data》章节介绍。 |
数据结构
typedef struct {
tuya_ble_bulk_data_evt_type_t evt;
uint8_t bulk_type;
union
{
tuya_ble_bulk_data_evt_read_block_req_t block_data_req_data;
tuya_ble_bulk_data_evt_send_data_req_t send_data_req_data;
} params;
} tuya_ble_bulk_data_request_t;
Event | TUYA_BLE_CB_EVT_NETWORK_INFO |
---|---|
数据结构 | tuya_ble_network_data_t |
描述 | 蓝牙 SDK 接收到的手机 App 发送的 Wi-Fi 配网信息,例如:"{wifi_ssid":"tuya","password":"12345678","token":"xxxxxxxxxx"}" |
备注 | 只适用于 Wi-Fi 和蓝牙双协议设备。 |
数据结构
/*
* network data,unformatted json data,for example " {"wifi_ssid":"tuya","password":"12345678","token":"xxxxxxxxxx"} "
* */
typedef struct{
uint16_t data_len;//include '\0'
uint8_t *p_data;
}tuya_ble_network_data_t;
Event | TUYA_BLE_CB_EVT_WIFI_SSID |
---|---|
数据结构 | tuya_ble_wifi_ssid_data_t |
描述 | 蓝牙 SDK 收到的手机 App 发送的 Wi-Fi 配网信息,例如:字符串"{"wifi_ssid":"tuya","password":"12345678"}" |
备注 | 只适用于 Wi-Fi 和蓝牙双协议设备,和 TUYA_BLE_CB_EVT_NETWORK_INFO 相比缺少 Token 字段,主要用于已配网设备的 Wi-Fi SSID 更新。 |
数据结构
/*
* wifi ssid data,unformatted json data,for example " {"wifi_ssid":"tuya","password":"12345678"} "
* */
typedef struct{
uint16_t data_len;//include '\0'
uint8_t *p_data;
}tuya_ble_wifi_ssid_data_t;
Event | TUYA_BLE_CB_EVT_TIME_STAMP |
---|---|
数据结构 | tuya_ble_timestamp_data_t |
描述 | 蓝牙 SDK 收到的手机 App 发送的字符串格式的时间戳,例如 0000000123456 表示 123456 ms,ms 级 unix 时间戳。 |
备注 | time_zone 时区为实际时区的 100 倍,例如 -8 区需要表现为为 -800。 |
数据结构
/*
* uninx timestamp
* */
typedef struct{
uint8_t timestamp_string[14];
int16_t time_zone; //actual time zone Multiply by 100.
}tuya_ble_timestamp_data_t;
参数说明
timestamp_string:13位毫秒级字符串(加上结束符总共14字节),例如 0000000123456
表示 123456 ms。
time_zone:实际时区的 100 倍,如果该值为 -800 ,那么实际时区是 -8 区。
设备每次和涂鸦 App 连接后,App 都会同步一次时间。蓝牙 SDK 收到 App 发送的时间后,便会发送该事件给设备应用程序,时间戳数据来自云端,时区数据是手机本地时区。
设备应用程序通过调用 tuya_ble_time_req(0)
请求云端时间后,收到该事件。其中的时间数据来自云端,时区数据来自手机本地时区。
设备应用程序通过调用 tuya_ble_time_req(1)
和 tuya_ble_time_req(2)
不会收到该事件,而是会收到下文介绍的 TUYA_BLE_CB_EVT_TIME_NORMAL
和 TUYA_BLE_CB_EVT_APP_LOCAL_TIME_NORMAL
事件。
Event | TUYA_BLE_CB_EVT_TIME_NORMAL |
---|---|
数据结构 | tuya_ble_time_noraml_data_t |
描述 | 蓝牙 SDK 收到的手机 App 发送的常规格式的时间。 时间示例:正 8 区,2019 年 4 月 28 日 12:23:25 星期二 对应数据示例:0x13、0x04、0x1C、0x0C、0x17、0x19、0x02(星期)、0x0320 (时区 time_zone) |
数据结构
/*
* normal time formatted
* */
typedef struct{
uint16_t nYear; // Actual year minus 2000
uint8_t nMonth;
uint8_t nDay;
uint8_t nHour;
uint8_t nMin;
uint8_t nSec;
uint8_t DayIndex; /* 0 = Sunday */
int16_t time_zone; //actual time zone Multiply by 100.
}tuya_ble_time_noraml_data_t;
设备应用程序通过调用 tuya_ble_time_req(1)
将会收到该事件,其中 tuya_ble_time_req(1)
收到的时间数据来自云端,时区数据来自手机本地时区。
Event | TUYA_BLE_CB_EVT_APP_LOCAL_TIME_NORMAL |
---|---|
数据结构 | tuya_ble_time_noraml_data_t |
描述 | 蓝牙 SDK 收到的手机 App 发送的常规格式的时间。 时间示例:正 8 区,2019 年 4 月 28 日 12:23:25 星期二 对应数据:0x13、0x04、0x1C、0x0C、0x17、0x19、0x02(星期)、0x0320(时区time_zone)。 |
数据结构
typedef struct {
uint16_t nYear; // Actual year minus 2000
uint8_t nMonth;
uint8_t nDay;
uint8_t nHour;
uint8_t nMin;
uint8_t nSec;
uint8_t DayIndex; /* 0 = Sunday */
int16_t time_zone; //actual time zone Multiply by 100.
} tuya_ble_time_noraml_data_t;
设备应用程序通过调用 tuya_ble_time_req(2)
将会收到该事件,其中收到的时间数据和时区数据都来自手机本地。
Event | TUYA_BLE_CB_EVT_TIME_STAMP_WITH_DST |
---|---|
数据结构 | - |
描述 | - |
备注 | 暂未使用 |
Event | TUYA_BLE_CB_EVT_DATA_PASSTHROUGH |
---|---|
数据结构 | tuya_ble_passthrough_data_t |
描述 | 蓝牙 SDK 收到的手机 App 发送的透传数据。 |
备注 | 蓝牙 SDK 不解析透传的数据,数据格式由设备应用程序和手机 App 协商定义。 |
数据结构
typedef struct{
uint16_t data_len;
uint8_t *p_data;
}tuya_ble_passthrough_data_t;
透传通道主要用于收发 设备应用程序 和 手机 App 面板 共同定义的协议数据,蓝牙 SDK 不做任何解析。其中 App发送的透传数据通过 TUYA_BLE_CB_EVT_DATA_PASSTHROUGH
事件推送给设备应用,设备应用程序通过调用 tuya_ble_data_passthrough()
发送数据给手机 App。
Event | TUYA_BLE_CB_EVT_DP_DATA_REPORT_RESPONSE |
---|---|
数据结构 | - |
描述 | - |
备注 | deprecated 弃用 |
Event | TUYA_BLE_CB_EVT_DP_DATA_WTTH_TIME_REPORT_RESPONSE |
---|---|
数据结构 | - |
描述 | - |
备注 | deprecated 弃用 |
Event | TUYA_BLE_CB_EVT_DP_DATA_WITH_FLAG_REPORT_RESPONSE |
---|---|
数据结构 | - |
描述 | - |
备注 | deprecated 弃用 |
Event | TUYA_BLE_CB_EVT_DP_DATA_SEND_RESPONSE |
---|---|
数据结构 | tuya_ble_dp_data_send_response_data_t |
描述 | tuya_ble_dp_data_send() 的响应事件 |
数据结构
typedef struct {
uint32_t sn;
tuya_ble_dp_data_send_type_t type;
tuya_ble_dp_data_send_mode_t mode;
tuya_ble_dp_data_send_ack_t ack;
uint8_t status; // 0 - succeed, 1- failed.
} tuya_ble_dp_data_send_response_data_t;
设备应用程序通过调用 tuya_ble_dp_data_send()
发送 DP 数据给手机 App 后,如果携带的 ack 参数是 DP_SEND_WITH_RESPONSE
,那么设备手机 App 收到 DP 数据后,就需要会发送响应给涂鸦蓝牙 SDK。蓝牙 SDK 收到手机 App 的响应后,就会发送该事件给设备应用程序。
其中 sn
、type
、mode
、ack
和 tuya_ble_dp_data_send()
发送 DP 数据是携带参数一致。status
为 0
表示 App 成功收到了 DP 数据。
如果设备应用程序连续调用多次 tuya_ble_dp_data_send()
函数发送多次 DP 数据,那么设备应用程序可以根据该事件数据中的 sn
和 status
来判断哪一次是发送成功的,哪一次是发送失败的。
Event | TUYA_BLE_CB_EVT_DP_DATA_WITH_FLAG_AND_TIME_REPORT_RESPONSE |
---|---|
数据结构 | tuya_ble_dp_data_with_time_send_response_data_t |
描述 | tuya_ble_dp_data_with_time_send() 的响应事件 |
数据结构
typedef struct {
uint32_t sn;
tuya_ble_dp_data_send_type_t type;
tuya_ble_dp_data_send_mode_t mode;
tuya_ble_dp_data_send_ack_t ack;
uint8_t status; // 0 - succeed, 1- failed.
} tuya_ble_dp_data_with_time_send_response_data_t;
设备应用程序通过调用 tuya_ble_dp_data_with_time_send()
发送 DP 数据给手机App后,那么设备手机App收到DP数据后,就会发送响应给涂鸦蓝牙 SDK,蓝牙 SDK 收到手机 App 的响应后,就会发送该event 给设备应用程序。
其中 sn
、type
、mode
、ack
和 tuya_ble_dp_data_with_time_send()
发送 DP 数据是携带参数一致。
status
为 0
表示 App 成功收到了 DP 数据。
如果设备应用程序连续调用多次 tuya_ble_dp_data_with_time_send()
函数发送多次 DP 数据,那么设备应用程序可以根据该事件数据中的 sn
和 status
来判断哪一次是发送成功的,哪一次是发送失败的。
Event | TUYA_BLE_CB_EVT_UNBOUND |
---|---|
数据结构 | tuya_ble_unbound_data_t |
描述 | 收到该事件表示手机 App 发送了解绑指令。其中,data 字段是保留字段,暂不具备任何含义。 |
备注 |
数据结构
typedef struct {
uint8_t data;
} tuya_ble_unbound_data_t;
当手机 App 执行解除绑定操作后,蓝牙 SDK 便会发送该事件。
Event | TUYA_BLE_CB_EVT_ANOMALY_UNBOUND |
---|---|
数据结构 | tuya_ble_anomaly_unbound_data_t |
描述 | 收到该事件表示手机 App 发送了异常解绑指令。其中,data 字段是保留字段,暂不具备任何含义。 |
数据结构
typedef struct{
uint8_t data;
}tuya_ble_anomaly_unbound_data_t;
当手机 App 执行 离线解绑 操作后,蓝牙 SDK 便会发送该事件。
离线解绑
离线解绑是指蓝牙设备和手机 App 没有保持蓝牙连接的场景下,手机 App 端执行了移除设备操作。
Event | TUYA_BLE_CB_EVT_DEVICE_RESET |
---|---|
数据结构 | tuya_ble_device_reset_data_t |
描述 | 收到该事件表示手机 App 发送了重置指令。其中,data 字段是保留字段,暂不具备任何含义。 |
备注 | 设备应用程序收到重置事件后,需要执行重置功能定义的一些操作。 |
数据结构
typedef struct{
uint8_t data;
}tuya_ble_device_reset_data_t;
当手机 App 执行 解绑并清除数据 操作后,蓝牙 SDK 便会发送该事件。
Event | TUYA_BLE_CB_EVT_UPDATE_LOGIN_KEY_VID |
---|---|
数据结构 | tuya_ble_login_key_vid_data_t |
描述 | 设备注册绑定成功后,手机 App 会发送设备的 login key 和虚拟 ID 给设备。 |
备注 | 主要用于多协议设备,单蓝牙设备无需处理该信息。 |
数据结构
typedef struct {
uint8_t login_key_len;
uint8_t vid_len;
uint8_t beacon_key_len;
uint8_t login_key[LOGIN_KEY_LEN];
uint8_t vid[DEVICE_VIRTUAL_ID_LEN];
uint8_t beacon_key[BEACON_KEY_LEN];
} tuya_ble_login_key_vid_data_t;
Event | TUYA_BLE_CB_EVT_UNBIND_RESET_RESPONSE |
---|---|
数据结构 | tuya_ble_unbind_reset_response_data_t |
描述 | 设备本地解绑和重置响应事件。 |
数据结构
typedef enum {
RESET_TYPE_UNBIND,
RESET_TYPE_FACTORY_RESET,
} tuya_ble_reset_type_t;
typedef struct {
tuya_ble_reset_type_t type;
uint8_t status; //0-succeed,1-failed.
} tuya_ble_unbind_reset_response_data_t;
设备应用程序不仅可以通过手机 App 来解绑设备,也可以通过调用涂鸦蓝牙 SDK 提供的 tuya_ble_device_unbind()
和 tuya_ble_device_factory_reset()
API 来执行本地解绑和重置操作。
解绑后并不会清除蓝牙 SDK 存储的设备 ID 信息,而重置则会清除 蓝牙 SDK 存储的设备 ID 信息,设备 ID 主要用于查找云端历史数据,也就是说一旦执行了重置操作,即使重新绑定后也不会恢复历史数据,而解绑后再被绑定时可以恢复历史数据的。
tuya_ble_device_unbind()
和 tuya_ble_device_factory_reset()
是异步 API,调用后并不会立即执行对应操作,而是发送了对应的消息给涂鸦蓝牙 SDK。蓝牙 SDK 执行完后便会发送该事件给设备应用程序告知执行结果。所以设备应用程序调用完这两个 API 后,不能阻塞时延时,也不能立即重启设备,否则可能会执行失败。
Event | TUYA_BLE_CB_EVT_WEATHER_DATA_REQ_RESPONSE |
---|---|
数据结构 | tuya_ble_weather_data_req_response_t |
描述 | 天气服务 |
备注 | 详见天气服务章节 |
数据结构
typedef struct{
uint8_t status;
}tuya_ble_weather_data_req_response_t;
Event | TUYA_BLE_CB_EVT_WEATHER_DATA_RECEIVED |
---|---|
数据结构 | tuya_ble_weather_data_received_data_t |
描述 | 天气服务 |
备注 | 详见天气服务章节 |
数据结构
typedef struct{
uint16_t object_count; /**< weather data object counts. */
uint8_t location; /**< location. */
uint8_t *p_data; /**< weather data. */
uint16_t data_len; /**< weather data length. */
}tuya_ble_weather_data_received_data_t;
Callback_Event | TUYA_BLE_CB_EVT_SCENE_REQ_RESPONSE |
---|---|
对应数据结构 | tuya_ble_scene_req_response_t |
描述 | tuya_ble_feature_scene_request() 请求的响应事件 |
备注 | 常用于手表手环类带显示屏幕的产品 |
数据结构:
typedef struct {
uint16_t scene_cmd; /**< scene cmd. 1- scene data. 2-scene control */
uint8_t status; /**< response status, 0-success 1-failed. */
uint32_t err_code; /**< err code. */
} tuya_ble_scene_req_response_t;
Callback_Event | TUYA_BLE_CB_EVT_SCENE_DATA_RECEIVED |
---|---|
对应数据结构 | tuya_ble_scene_data_received_data_t |
描述 | 返回请求到的场景数据 |
备注 | 场景请求返回的对应的解析方法 SDK 内已提供参考,详见 tuya_ble_feature_scene.h 内的注释说明 |
数据结构
/**
* received scene list data
*
*/
typedef struct {
uint8_t status; /**< status, 0-success 1-failed. */
uint32_t err_code; /**< err code. */
bool need_update; /**< need update. */
uint32_t check_code; /**< scene data check code, used crc32. */
uint8_t *p_data; /**< scene data. */
uint16_t data_len; /**< scene data length. */
} tuya_ble_scene_data_received_data_t;
参数说明
p_data
并保存下新的场景数据。场景 ID 长度 | 场景 ID | 场景名称长度-unicode | 场景名称-unicode | … | 场景 ID 长度 | 场景 ID | 场景名称长度-unicode | 场景名称-unicode |
---|---|---|---|---|---|---|---|---|
1字节 | n字节 | 2字节 | m字节 | … | 1字节 | n字节 | 2字节 | m字节 |
p_data
数据的长度。Callback_Event | TUYA_BLE_CB_EVT_SCENE_CTRL_RESULT_RECEIVED |
---|---|
对应数据结构 | tuya_ble_scene_ctrl_received_data_t |
描述 | 请求场景控制返回事件 |
备注 | 场景控制返回数据对应的解析方法 SDK 内已提供参考,详见 tuya_ble_feature_scene.h 内的注释说明 |
数据结构
/**
* received scene control result
*
*/
typedef struct {
uint8_t status; /**< status, 0-success 1-failed. */
uint32_t err_code; /**< err code. */
uint8_t scene_id_len; /**< scene id length. */
uint8_t *p_scene_id; /**< scene id. */
} tuya_ble_scene_ctrl_received_data_t;
参数说明
status
:状态码,0 表示成功,1 表示失败。err_code
:错误码,具体失败原因。scene_id_len
:控制的场景 ID 长度。p_scene_id
:控制的场景 ID 数据指针,可用于区分哪个场景控制返回的结果。该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈