Callback

更新时间:2024-11-20 08:51:21下载pdf

涂鸦蓝牙 SDK(TUYA BLE SDK)向设备应用程序发送消息(状态、数据等)的方式如下:

  • RTOS 架构下,则通过 Message。
  • 无 RTOS 结构下,则通过设备应用注册的回调(Callback)函数。

回调示例

如下所示是 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 初始化
    }
    

TUYA_BLE_CB_EVT_CONNECTE_STATUS

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;

Callback

某些场景下同一个状态可能会发送两次,所以当应用程序需要按照状态的变更来触发某个功能时,就需要比较与上一次收到的状态是否一样,可以采用如下所示的处理方法:

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;
 }
}

TUYA_BLE_CB_EVT_DP_WRITE

Event TUYA_BLE_CB_EVT_DP_WRITE
数据结构 -
描述 蓝牙 SDK 收到的手机 App 发送的 DP 数据。
备注 已弃用

TUYA_BLE_CB_EVT_DP_DATA_RECEIVED

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 数据长度。

TUYA_BLE_CB_EVT_DP_QUERY

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=3p_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;

TUYA_BLE_CB_EVT_OTA_DATA

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;

TUYA_BLE_CB_EVT_BULK_DATA

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;

TUYA_BLE_CB_EVT_NETWORK_INFO

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;

TUYA_BLE_CB_EVT_WIFI_SSID

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;

TUYA_BLE_CB_EVT_TIME_STAMP

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_NORMALTUYA_BLE_CB_EVT_APP_LOCAL_TIME_NORMAL 事件。

TUYA_BLE_CB_EVT_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) 收到的时间数据来自云端,时区数据来自手机本地时区。

TUYA_BLE_CB_EVT_APP_LOCAL_TIME_NORMAL

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) 将会收到该事件,其中收到的时间数据和时区数据都来自手机本地。

TUYA_BLE_CB_EVT_TIME_STAMP_WITH_DST

Event TUYA_BLE_CB_EVT_TIME_STAMP_WITH_DST
数据结构 -
描述 -
备注 暂未使用

TUYA_BLE_CB_EVT_DATA_PASSTHROUGH

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。

TUYA_BLE_CB_EVT_DP_DATA_REPORT_RESPONSE

Event TUYA_BLE_CB_EVT_DP_DATA_REPORT_RESPONSE
数据结构 -
描述 -
备注 deprecated 弃用

TUYA_BLE_CB_EVT_DP_DATA_WTTH_TIME_REPORT_RESPONSE

Event TUYA_BLE_CB_EVT_DP_DATA_WTTH_TIME_REPORT_RESPONSE
数据结构 -
描述 -
备注 deprecated 弃用

TUYA_BLE_CB_EVT_DP_DATA_WITH_FLAG_REPORT_RESPONSE

Event TUYA_BLE_CB_EVT_DP_DATA_WITH_FLAG_REPORT_RESPONSE
数据结构 -
描述 -
备注 deprecated 弃用

TUYA_BLE_CB_EVT_DP_DATA_SEND_RESPONSE

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 的响应后,就会发送该事件给设备应用程序。

其中 sntypemodeacktuya_ble_dp_data_send() 发送 DP 数据是携带参数一致。status0 表示 App 成功收到了 DP 数据。

如果设备应用程序连续调用多次 tuya_ble_dp_data_send() 函数发送多次 DP 数据,那么设备应用程序可以根据该事件数据中的 snstatus 来判断哪一次是发送成功的,哪一次是发送失败的。

TUYA_BLE_CB_EVT_DP_DATA_WITH_FLAG_AND_TIME_REPORT_RESPONSE

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 给设备应用程序。

其中 sntypemodeacktuya_ble_dp_data_with_time_send() 发送 DP 数据是携带参数一致。

status0 表示 App 成功收到了 DP 数据。

如果设备应用程序连续调用多次 tuya_ble_dp_data_with_time_send() 函数发送多次 DP 数据,那么设备应用程序可以根据该事件数据中的 snstatus 来判断哪一次是发送成功的,哪一次是发送失败的。

TUYA_BLE_CB_EVT_UNBOUND

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 便会发送该事件。

TUYA_BLE_CB_EVT_ANOMALY_UNBOUND

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 端执行了移除设备操作。

  • 由于是离线时移除,那么此时并不能通知到蓝牙设备,手机 App 离线移除完设备后,云端也就没有该设备的绑定信息。
  • 之后任何一个手机上的 App 在发现了该设备后,便会发送离线解绑指令给设备,设备上的涂鸦蓝牙 SDK 也就会发送该事件。

TUYA_BLE_CB_EVT_DEVICE_RESET

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 便会发送该事件。

TUYA_BLE_CB_EVT_UPDATE_LOGIN_KEY_VID

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;

TUYA_BLE_CB_EVT_UNBIND_RESET_RESPONSE

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 后,不能阻塞时延时,也不能立即重启设备,否则可能会执行失败。

TUYA_BLE_CB_EVT_WEATHER_DATA_REQ_RESPONSE

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;

TUYA_BLE_CB_EVT_WEATHER_DATA_RECEIVED

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;

TUYA_BLE_CB_EVT_SCENE_REQ_RESPONSE

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;

TUYA_BLE_CB_EVT_SCENE_DATA_RECEIVED

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;

参数说明

  • status:状态码,0 表示成功,1 表示失败。
  • err_code:错误码,具体失败原因。
  • need_update:是否需要更新,0 表示不需要,1 表示需要,设备端需解析 p_data 并保存下新的场景数据。
  • p_data:存放 App 返回的所有场景数据,每条场景数据个数如下表定义:
    场景 ID 长度 场景 ID 场景名称长度-unicode 场景名称-unicode 场景 ID 长度 场景 ID 场景名称长度-unicode 场景名称-unicode
    1字节 n字节 2字节 m字节 1字节 n字节 2字节 m字节
  • data_len:指 p_data数据的长度。

TUYA_BLE_CB_EVT_SCENE_CTRL_RESULT_RECEIVED

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 数据指针,可用于区分哪个场景控制返回的结果。