Documentation

Documentation

Includes

tuya_cloud_types.h

#include "tuya_cloud_types.h"
#include "tuya_cloud_types.h"

ty_cJSON.h

#include "ty_cJSON.h"
#include "ty_cJSON.h"

Macros

Marco TUYA_CLOUD_COM_DEFS_H

#define TUYA_CLOUD_COM_DEFS_H


      

Marco ENCRYPT_KEY_LEN

#define ENCRYPT_KEY_LEN        16     // max string length of storage encrypt
// tuya sdk constants definitions

Marco GW_UUID_LEN

#define GW_UUID_LEN            25     // max string length of UUID


      

Marco AUTH_KEY_LEN

#define AUTH_KEY_LEN           32     // max string length of AUTH_KEY


      

Marco PSK_KEY_LEN

#define PSK_KEY_LEN            64     // max string length of PSK_KEY


      

Marco PRODUCT_KEY_LEN

#define PRODUCT_KEY_LEN        16     // max string length of PRODUCT_KEY


      

Marco SW_VER_LEN

#define SW_VER_LEN             10     // max string length of VERSION


      

Marco SW_MD5_LEN

#define SW_MD5_LEN             32     // max string length of attatch MD5


      

Marco BT_HID_LEN

#define BT_HID_LEN             19     // max string length of HID


      

Marco BT_MAC_LEN

#define BT_MAC_LEN             12     // max string length of MAC


      

Marco TUYA_PSK_LEN

#define TUYA_PSK_LEN           32     // max string length of PSK


      

Marco TUYA_PSK21_LEN

#define TUYA_PSK21_LEN         44     // max string length of PSK21


      

Marco TUYA_IMEI_LEN

#define TUYA_IMEI_LEN          18     // max string length of IMEI


      

Marco TUYA_SN_LEN

#define TUYA_SN_LEN            20     // max string length of SN


      

Marco SYS_ENV_LEN

#define SYS_ENV_LEN            20     // max string length of ENV


      

Marco LOG_SEQ_PATH_LEN

#define LOG_SEQ_PATH_LEN       128    // max string length of LOG SEQ PATH


      

Marco GW_ID_LEN

#define GW_ID_LEN              25     // max string length of GW_ID


      

Marco DEV_UUID_LEN

#define DEV_UUID_LEN           25     // max string length of DEV UUID


      

Marco DEV_ID_LEN

#define DEV_ID_LEN             25     // max string length of DEV_ID


      

Marco SCHEMA_ID_LEN

#define SCHEMA_ID_LEN          16     // max string length of SCHEMA


      

Marco SCHEMA_VER_LEN

#define SCHEMA_VER_LEN         16     // max string length of SCHEMA VERSION


      

Marco BIND_TOKEN_LEN

#define BIND_TOKEN_LEN         16     // max string length of BIND_TOKEN


      

Marco TOKEN_LEN

#define TOKEN_LEN              8      // max string length of TOKEN


      

Marco REGION_LEN

#define REGION_LEN             2      // max string length of REGIN IN TOKEN


      

Marco REGIST_KEY_LEN

#define REGIST_KEY_LEN         4      // max string length of REGIST_KEY IN TOKEN


      

Marco HTTP_URL_LMT

#define HTTP_URL_LMT           128    // max string length of URL


      

Marco MQ_URL_LMT

#define MQ_URL_LMT             128    // max string length of MQTT_URL


      

Marco TIME_ZONE_LEN

#define TIME_ZONE_LEN          10     // max string length of TIME_ZONE


      

Marco SUMMER_TM_ZONE_LEN

#define SUMMER_TM_ZONE_LEN     256    // max string length of SUMMER_TIME_ZONE


      

Marco COUNTRY_CODE_LEN

#define COUNTRY_CODE_LEN       8      // max string length of COUNTRY_CODE


      

Marco COUNTRY_CODE_LEN

#define COUNTRY_CODE_LEN       8      // max string length of COUNTRY_CODE


      

Marco IPV4_LEN

#define IPV4_LEN               15     // max string length of IPV4_LEN 255.255.255.255


      

Marco SEC_KEY_LEN

#define SEC_KEY_LEN            16     // max string length of SECURITY_KEY


      

Marco LOCAL_KEY_LEN

#define LOCAL_KEY_LEN          16     // max string length of LOCAL_KEY


      

Marco WXAPPID_LEN

#define WXAPPID_LEN            32     // max string length of wechat_appid


      

Marco WXUUID_LEN

#define WXUUID_LEN             32     // max string length of wechat_uuid


      

Marco GRP_ID_LEN

#define GRP_ID_LEN             5      // max string length of group id range:1-65535


      

Marco SCENE_ID_LEN

#define SCENE_ID_LEN           3      // max string length of scene id range:1-255


      

Marco NET_MODE_LEN

#define NET_MODE_LEN           32     // max string length of NET MODE


      

Marco LC_GW_SLEEP_HB_LMT_S

#define LC_GW_SLEEP_HB_LMT_S 12*3600 // 12h


      

Marco M_SCE_SUCCESS

#define M_SCE_SUCCESS 0       // success
//group and scene error code

Marco M_SCE_ERR_EXCEED

#define M_SCE_ERR_EXCEED 1    // space not enough


      

Marco M_SCE_ERR_TIMEOUT

#define M_SCE_ERR_TIMEOUT 2   // timeout


      

Marco M_SCE_ERR_PARAM

#define M_SCE_ERR_PARAM 3     // param not in range


      

Marco M_SCE_WRITE_FILE

#define M_SCE_WRITE_FILE 4    // failed to write db


      

Marco M_SCE_ERR_OTHER

#define M_SCE_ERR_OTHER 5     // other failure


      

Marco GP_DEV_SUPPORT_MAX

#define GP_DEV_SUPPORT_MAX GP_DEV_ATH_10 // max attach id


      

Marco CH_NAME_LMT

#define CH_NAME_LMT 15         // max string length of operator name


      

Marco CH_CODE_LMT

#define CH_CODE_LMT 20         // max string length of operator code


      

Marco CH_SN_LMT

#define CH_SN_LMT 20           // max string length of device sn


      

Marco CH_REPORT_CODE_LMT

#define CH_REPORT_CODE_LMT 20  // max string length of report code


      

Marco CH_MANU_ID_LMT

#define CH_MANU_ID_LMT 10      // max string length of manufacture id


      

Marco CH_VERSION_LMT

#define CH_VERSION_LMT 10      // max string length of sw version


      

Marco CH_ENCRYPT_KEY_LMT

#define CH_ENCRYPT_KEY_LMT 20  // max string length of encrypt key


      

Marco GW_ATTACH_ATTR_LMT

#define GW_ATTACH_ATTR_LMT 4


      

Marco DP_REPT_USER_REG_MAX_NUM

#define DP_REPT_USER_REG_MAX_NUM 5
//add by sunkz

Marco FW_URL_LEN

#define FW_URL_LEN     255      // max length of firmware download url


      

Marco FW_MD5_LEN

#define FW_MD5_LEN     32       // max length of firmware md5


      

Marco FW_HMAC_LEN

#define FW_HMAC_LEN    64       // max length of firmware hmac

      

Functions

Vars

Consts

Types

Typedefs

Typedef GW_ABI

typedef BYTE_T GW_ABI;
#define GW_VIRTUAL 0 // product doesn't have subdevices functions,it only has device function. For example: SOC or MCU
#define GW_ENTITY_ATTH_DEV 1 // Product has subdevices functions and it also has device function.
#define GW_ENTITY 2 // Product only has subdevices functions.

// Product Function Specification

Typedef GW_NW_STAT_T

typedef BYTE_T GW_NW_STAT_T;
#define GNS_UNVALID 0   // product is offline in LAN and WAN
#define GNS_LAN_VALID 1 // product is online in LAN but offline in WAN
#define GNS_WAN_VALID 2 // product is online in LAN and WAN

// Product Network Connection

Typedef GW_EXT_STAT_T

typedef BYTE_T GW_EXT_STAT_T;
#define EXT_UNAUTH 0           // UNAUTH
#define EXT_PROD_TEST 1        // PROD_TEST
#define EXT_NORMAL_S 2         // NORMAL_S
#define EXT_GW_UPGRD 3         // GW_UPGRD
#define EXT_DEV_UPGRD 4        // DEV_UPGRD
#define EXT_DEV_ADD 5          // DEV_ADD
#define EXT_REG_FAIL 6         // REG_FAIL
#define EXT_NET_FAIL 7         // NET_FAIL
#define EXT_CONFIG_BACK_UP 8   // CONFIG_BACK_UP
#define EXT_CONFIG_RESTORE 9   // CONFIG_RESTORE

// Product Extend State

Typedef DEV_TYPE_T

typedef BYTE_T DEV_TYPE_T;
#define DEV_NM_ATH_SNGL    0  // main netlink module
#define DEV_BLE_SNGL       1  // ble
#define DEV_ZB_SNGL        3  // ZigBee
#define DEV_NM_NOT_ATH_SNGL 9  // MCU
#define DEV_ATTACH_MOD_1 10    // attach 1
#define DEV_ATTACH_MOD_2 11    // attach 2
#define DEV_ATTACH_MOD_3 12    // attach 3
#define DEV_ATTACH_MOD_4 13    // attach 4
#define DEV_ATTACH_MOD_5 14    // attach 5
#define DEV_ATTACH_MOD_6 15    // attach 6
#define DEV_ATTACH_MOD_7 16    // attach 7
#define DEV_ATTACH_MOD_8 17    // attach 8
#define DEV_ATTACH_MOD_9 18    // attach 9
#define DEV_ATTACH_MOD_10 19   // attach 10

/**
 * @brief Definition of device ota channel
 * 
 * @note 0~9 are consistent among all TUYA devices
 * 10~19 are customized by device itself
 */

Typedef IOT_GW_NET_TYPE_T

typedef BYTE_T IOT_GW_NET_TYPE_T;
#define IOT_GW_NET_WIRED      0  // only support wried
#define IOT_GW_NET_WIFI       1  // only support wifi
#define IOT_GW_NET_WIRED_WIFI 2  // support wired and wifi



      

Typedef CUR_NET_STATUS_T

typedef BYTE_T CUR_NET_STATUS_T;
#define NET_WIRED 0 // wired
#define NET_WIFI 1 // wifi


      

Typedef USER_DEV_DTL_DEF_T

typedef UINT_T USER_DEV_DTL_DEF_T; // user detial type define
// sub-device detail type

Typedef GW_PERMIT_DEV_TP_T

typedef BYTE_T GW_PERMIT_DEV_TP_T;
#define GP_DEV_DEF 255                // default device type
#define GP_DEV_ZB DEV_ZB_SNGL          // zigbee
#define GP_DEV_BLE DEV_BLE_SNGL        // ble
#define GP_DEV_MCU DEV_NM_NOT_ATH_SNGL // mcu
#define GP_DEV_ATH_1 DEV_ATTACH_MOD_1  // attach 1
#define GP_DEV_ATH_2 DEV_ATTACH_MOD_2  // attach 2
#define GP_DEV_ATH_3 DEV_ATTACH_MOD_3  // attach 3
#define GP_DEV_ATH_4 DEV_ATTACH_MOD_4  // attach 4
#define GP_DEV_ATH_5 DEV_ATTACH_MOD_5  // attach 5
#define GP_DEV_ATH_6 DEV_ATTACH_MOD_6  // attach 6
#define GP_DEV_ATH_7 DEV_ATTACH_MOD_7  // attach 7
#define GP_DEV_ATH_8 DEV_ATTACH_MOD_8  // attach 8
#define GP_DEV_ATH_9 DEV_ATTACH_MOD_9  // attach 9
#define GP_DEV_ATH_10 DEV_ATTACH_MOD_10 // attach 10

/**
 * @brief Definition of all attache types
 */

Typedef TY_DP_REPT_CHAN_TP_T

typedef BYTE_T TY_DP_REPT_CHAN_TP_T;
#define TY_DP_REPT_CHAN_LAN      0
#define TY_DP_REPT_CHAN_MQTT     1
#define TY_DP_REPT_CHAN_HTTP     2
#define TY_DP_REPT_CHAN_BLE      3
#define TY_DP_REPT_CHAN_SIGMESH  4
#define TY_DP_REPT_CHAN_TUYA_MESH 5
#define TY_DP_REPT_CHAN_BEACON   6
#define TY_DP_REPT_CHAN_MAX      7



      

Typedef TY_INIT_PARAMS_S;

typedef struct {
   /** kv init or not */
   BOOL_T init_db;
   /** sys env settings */
   CHAR_T sys_env[SYS_ENV_LEN];
   /** log seq path */
   CHAR_T log_seq_path[LOG_SEQ_PATH_LEN];
}TY_INIT_PARAMS_S;
/**
 * @brief Definition of TUYA DevOS init param
 */

Typedef GW_ATTACH_ATTR_T;

typedef struct {
   /** attach ota channel */
   GW_PERMIT_DEV_TP_T tp;
   /** attach version, format xx.xx.xx */
   CHAR_T ver[SW_VER_LEN+1];
   CHAR_T md5[SW_MD5_LEN+1];
}GW_ATTACH_ATTR_T;
/**
 * @brief Definition of attach moudule attribute
 */

Typedef CH_CODE_ST;

typedef struct{
   /** operator name */
   CHAR_T ch_name[CH_NAME_LMT+1];
   /** operator code */ 
   CHAR_T ch_code[CH_CODE_LMT+1];
   /** device sn */
   CHAR_T ch_sn[CH_SN_LMT+1];
   /** report code */
   CHAR_T ch_report_code[CH_REPORT_CODE_LMT+1];
   /** manufacture id */
   CHAR_T ch_manu_id[CH_MANU_ID_LMT+1];
   /** sw version */
   CHAR_T ch_version[CH_VERSION_LMT+1];
   /** encrypt key */
   CHAR_T ch_encrype_key[CH_ENCRYPT_KEY_LMT+1];
}CH_CODE_ST;
/**
 * @brief Definition of operator code info
 */

Typedef DEV_QOS_ST;

typedef struct{
   /** short nodeID */
   USHORT_T sNodeID;
   /** father short nodeID */
   USHORT_T fNodeID;
   /** RSSI */
   CHAR_T  rssi;
   /** lqi info */
   UCHAR_T lqi;
   /** father node ID str */
   CHAR_T  fid[DEV_ID_LEN+1];
}DEV_QOS_ST;
/**
 * @brief Definition of device Quaility of Service
 */

Typedef DP_REPT_TYPE_E

typedef BYTE_T DP_REPT_TYPE_E;
#define T_OBJ_REPT     0          // dp is value,str,enum,bool,bitmap
#define T_RAW_REPT     1          // raw type
#define T_STAT_REPT    2          // stat type
#define T_RE_TRANS_REPT 10         // repeat report

/**
 * @brief  Definition of dp report type
 */

Typedef DP_TYPE_E

typedef BYTE_T DP_TYPE_E;
#define T_OBJ          0          // dp is value,str,enum,bool,bitmap
#define T_RAW          1          // raw type
#define T_FILE         2          // file type

/**
 * @brief  Definition of dp type
 */

Typedef DP_MODE_E

typedef BYTE_T DP_MODE_E;
#define M_RW           0         // cloud/app can read and write
#define M_WR           1         // cloud/app can only write to device
#define M_RO           2         // cloud/app can only read from device

/**
 * @brief  Definition of dp mode
 */

Typedef DP_PROP_TP_E

typedef BYTE_T DP_PROP_TP_E;
#define PROP_BOOL 0
#define PROP_VALUE 1
#define PROP_STR 2
#define PROP_ENUM 3
#define PROP_BITMAP 4

/**
 * @brief  Definition of dp property type
 */

Typedef UP_MAP_TYPE_E

typedef BYTE_T UP_MAP_TYPE_E;
#define UP_CLEANER_MAP  0
#define UP_CLEANER_PATH 1
#define UP_CLEANER_MAP_PATH 2

/**
 * @brief  Definition of map type
 */

Typedef UPGRADE_TYPE_T

typedef BYTE_T UPGRADE_TYPE_T;
#define UPGRADE_TYPE_NORMAL 0
#define UPGRADE_TYPE_SILENT 1

/**
 * @brief  Definition of upgrade type
 */

Typedef DP_PROP_VAL_S;

typedef struct {
   /** min value */
   INT_T min;
   /** max value */
   INT_T max;
   /** step */
   SHORT_T step;
   /** scale */
   USHORT_T scale;
   /** dp value */
   INT_T value;
}DP_PROP_VAL_S;
/**
 * @brief  Definition of dp prop
 */

Typedef DP_PROP_ENUM_S;

typedef struct {
   /** enum count */
   INT_T cnt;
   /** enum value */
   CHAR_T **pp_enum;
   /** current value */
   INT_T value;
}DP_PROP_ENUM_S;
/**
 * @brief  Definition of dp prop
 */

Typedef DP_PROP_STR_S;

typedef struct {
   /** max len */
   INT_T max_len;
   /** cur len */
   INT_T cur_len;
   /** mutex */
   void* dp_str_mutex;
   /** dp value */
   CHAR_T *value;
}DP_PROP_STR_S;
/**
 * @brief  Definition of dp prop
 */

Typedef DP_BOOL_S;

typedef struct {
   /** bool value */
   BOOL_T value;
}DP_BOOL_S;
/**
 * @brief  Definition of dp prop
 */

Typedef DP_PROP_BITMAP;

typedef struct {
   /** max len */
   UINT_T max_len;
   /** value */
   UINT_T value;
}DP_PROP_BITMAP;
/**
 * @brief  Definition of dp prop
 */

Typedef DP_PROP_VALUE_U;

typedef union {
   /** see DP_PROP_VAL_S */
   DP_PROP_VAL_S prop_value;
   /** see DP_PROP_ENUM_S */
   DP_PROP_ENUM_S prop_enum;
   /** see DP_PROP_STR_S */
   DP_PROP_STR_S prop_str;
   /** see DP_BOOL_S */
   DP_BOOL_S prop_bool;
   /** see DP_PROP_BITMAP */
   DP_PROP_BITMAP prop_bitmap;
}DP_PROP_VALUE_U;
/**
 * @brief  Definition of dp prop value
 */

Typedef DP_TRIG_T_E

typedef BYTE_T DP_TRIG_T_E;
#define TRIG_PULSE     0  // upload when value changes
#define TRIG_DIRECT    1  // upload without value change check

/**
 * @brief  Definition of dp trigger type
 */

Typedef DP_PSV_E

typedef BYTE_T DP_PSV_E;
#define PSV_FALSE 0   /* disabled */
#define PSV_TRUE 1    /* app hasn't query yet */
#define PSV_F_ONCE 2  /* app has queryed, shoulb report */

/**
 * @brief  Definition of dp positive upload policy
 */

Typedef DP_STAT_TP_T

typedef BYTE_T DP_STAT_TP_T;
#define DST_NONE 0 // no need statistics
#define DST_INC 1 // dp statistics increase
#define DST_TOTAL 2 // dp statistics total

/**
 * @brief  Definition of dp statistics type
 */

Typedef DP_DESC_IF_S;

typedef struct {
   /** dp id */
   BYTE_T dp_id;
   /** see DP_MODE_E */
   DP_MODE_E mode;
   /** see DP_PSV_E */
   DP_PSV_E passive;
   /** see DP_TYPE_E */
   DP_TYPE_E type;
   /** see DP_PROP_TP_E */
   DP_PROP_TP_E prop_tp;
   /** see DP_TRIG_T_E */
   DP_TRIG_T_E trig_t;
   /** see DP_STAT_TP_T */
   DP_STAT_TP_T stat;
}DP_DESC_IF_S;
/**
 * @brief Definition of dp description
 */

Typedef DP_CMD_TYPE_E

typedef BYTE_T DP_CMD_TYPE_E;
#define DP_CMD_LAN     0      // cmd from LAN
#define DP_CMD_MQ      1      // cmd from MQTT
#define DP_CMD_TIMER   2      // cmd from Local Timer
#define DP_CMD_SCENE_LINKAGE 3 // cmd from scene linkage
#define DP_CMD_RELIABLE_TRANSFER 4 // cmd from reliable transfer
#define DP_CMD_BT      5     // cmd from bt
#define DP_CMD_SCENE_LINKAGE_LAN 6 // cmd from lan scene linkage
#define DP_CMD_FFC     7      // cmd from ffc

/**
 * @brief tuya sdk dp cmd type
 */

Typedef DP_TRANS_TYPE_T

typedef BYTE_T DP_TRANS_TYPE_T;
#define DTT_SCT_UNC    0      // unicast
#define DTT_SCT_BNC    1      // boardcast
#define DTT_SCT_MNC    2      // multicast
#define DTT_SCT_SCENE  3      // scene

/**
 * @brief tuya sdk dp trans type
 */

Typedef TY_OBJ_DP_VALUE_U;

typedef union {
   INT_T dp_value;            // valid when dp type is value
   UINT_T dp_enum;            // valid when dp type is enum
   CHAR_T *dp_str;            // valid when dp type is str
   BOOL_T dp_bool;            // valid when dp type is bool
   UINT_T dp_bitmap;          // valid when dp type is bitmap
}TY_OBJ_DP_VALUE_U;
/**
 * @brief tuya sdk dp value union
 */

Typedef TY_OBJ_DP_S;

typedef struct {
   /** dp id */
   BYTE_T dpid;
   /** dp type, see DP_PROP_TP_E */
   DP_PROP_TP_E type;
   /** dp value, see TY_OBJ_DP_VALUE_U */
   TY_OBJ_DP_VALUE_U value;
   /** dp happen time. if 0, mean now */
   UINT_T time_stamp;
}TY_OBJ_DP_S;
/**
 * @brief Definition of structured dp
 */

Typedef TY_RECV_OBJ_DP_S;

typedef struct {
   /** see DP_CMD_TYPE_E */
   DP_CMD_TYPE_E cmd_tp;
   /** see DP_TRANS_TYPE_T */
   DP_TRANS_TYPE_T dtt_tp;
   /** if(NULL == cid) then then the cid represents gwid */
   CHAR_T *cid;
   /** mb id */
   CHAR_T *mb_id;
   /** count of dp */
   UINT_T dps_cnt;
   /** the dp data */
   TY_OBJ_DP_S dps[0];
}TY_RECV_OBJ_DP_S;
/**
 * @brief Definition of recved structured dp
 */

Typedef TY_RECV_RAW_DP_S;

typedef struct {
   /** see DP_CMD_TYPE_E */
   DP_CMD_TYPE_E cmd_tp;
   /** see DP_TRANS_TYPE_T */
   DP_TRANS_TYPE_T dtt_tp;
   /** if(NULL == cid) then then the cid represents gwid */
   CHAR_T *cid;
   /** dp id */
   BYTE_T dpid;
   /** mb id */
   CHAR_T *mb_id;
   /** data len */
   UINT_T len;
   /** the data */
   BYTE_T data[0];
}TY_RECV_RAW_DP_S;
/**
 * @brief Definition of recved raw dp
 */

Typedef TY_DP_QUERY_S;

typedef struct {
   /** if(NULL == cid) then then the cid represents gwid */
   CHAR_T *cid;
   /** dpid cnt if(0 == cnt) then query all object dp */
   UINT_T cnt;
   /** dpid */
   BYTE_T dpid[0];
}TY_DP_QUERY_S;
/**
 * @brief Definition of DP query
 */

Typedef DP_REPT_CB_DATA;

typedef struct{
   /** report type, see DP_REPT_TYPE_E */
   DP_REPT_TYPE_E dp_rept_type;
   /** obj:为TY_OBJ_DP_REPT_S,stat:dp为TY_STAT_DP_REPT_S,RAW:TY_RAW_DP_REPT_S */
   VOID_T*        dp_data;
   /** Json decoded dp string */
   CHAR_T*        dp_data_json;
   /** is query or not */
   BOOL_T         is_query;
}DP_REPT_CB_DATA;
/**
 * @brief Definition of DP report callbak
 */

Typedef DP_REPT_PRE_HANDLE

typedef OPERATE_RET (*DP_REPT_PRE_HANDLE)(IN CONST DP_REPT_CB_DATA* dp_data);
/**
 * @brief Handler of dp report pre-process
 * 
 * @param[in] dp_rslt Default report result
 * @param[in] dp_data DP data, see DP_REPT_CB_DATA
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Typedef DP_REPT_POST_HANDLE

typedef OPERATE_RET (*DP_REPT_POST_HANDLE)(IN CONST OPERATE_RET dp_rslt, IN CONST DP_REPT_CB_DATA* dp_data);
/**
 * @brief Handler of dp report post-process
 * 
 * @param[in] dp_rslt Default report result
 * @param[in] dp_data DP data, see DP_REPT_CB_DATA
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Typedef DP_REPT_HADLE_CB_S;

typedef struct{
   /** handler of pre-precess */
   DP_REPT_PRE_HANDLE dp_rept_pre_cb;
   /** handler of post-precess */
   DP_REPT_POST_HANDLE dp_rept_post_cb;
   /** send dp force or not */
   BOOL_T need_dp_force;
}DP_REPT_HADLE_CB_S;
/**
 * @brief Definition of DP handlers
*/

Typedef FW_UG_S;

typedef struct {
   /** firmware type */
   DEV_TYPE_T tp;
   /** upgrade type, see UPGRADE_TYPE_T */
   UPGRADE_TYPE_T type;
   /** firmware download url */
   CHAR_T fw_url[FW_URL_LEN+1];
   /** firmware version */
   CHAR_T sw_ver[SW_VER_LEN+1];
   /** firmware size in BYTE */
   UINT_T file_size;
   /** firmware hmac */
   CHAR_T fw_hmac[FW_HMAC_LEN+1];
   /** firmware md5 */
   CHAR_T fw_md5[FW_MD5_LEN+1];
   /** is difference ota or not */
   BOOL_T diff_ota;
}FW_UG_S;
/**
 * @brief tuya sdk ota firmware info 
 */

Typedef GW_STATUS_E

typedef BYTE_T GW_STATUS_E;
#define GW_RESET           0 // gw reset
#define GW_ACTIVED         1 // gw actived
#define GW_FIRST_START     2 // start tuya-sdk in the first time.
#define GW_NORMAL          3 // tuya-sdk is actived and started
#define GW_BLE_ACTIVED         4 // gw ble actived
/**
 * @brief Handler to process gateway state change
 * 
 * @param[in] status Gateway status, see GW_STATUS_E
 */
typedef VOID (*GW_STATUS_CHANGED_CB)(IN CONST GW_STATUS_E status);

/**
 * @brief tuya sdk gateway status info
 */

Typedef DEV_OBJ_DP_CMD_CB

typedef VOID (*DEV_OBJ_DP_CMD_CB)(IN CONST TY_RECV_OBJ_DP_S *dp);
/**
 * @brief Handler to process structured DP info
 * 
 * @param[in] dp DP query info, see TY_RECV_OBJ_DP_S
 */

Typedef DEV_RAW_DP_CMD_CB

typedef VOID (*DEV_RAW_DP_CMD_CB)(IN CONST TY_RECV_RAW_DP_S *dp);
/**
 * @brief Handler to process raw DP info
 * 
 * @param[in] dp DP query info, see TY_RECV_RAW_DP_S
 */

Typedef DEV_DP_QUERY_CB

typedef VOID (*DEV_DP_QUERY_CB)(IN CONST TY_DP_QUERY_S *dp_qry);
/**
 * @brief Handler to process structured DP query info
 * 
 * @param[in] dp_qry DP query info, see TY_DP_QUERY_S
 */

Typedef GW_UG_INFORM_CB

typedef int (*GW_UG_INFORM_CB)(IN CONST FW_UG_S *fw);
/**
 * @brief Handler to process gateway upgrade inform
 * 
 * @param[in] fw Firmware info, see FW_UG_S
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Typedef GW_RESET_TYPE_E;

typedef enum {
   GW_LOCAL_RESET_FACTORY = 0,
   GW_REMOTE_UNACTIVE,
   GW_LOCAL_UNACTIVE,
   GW_REMOTE_RESET_FACTORY,
   GW_RESET_DATA_FACTORY, //need clear local data when active
}GW_RESET_TYPE_E;
/* tuya sdk gateway reset type */

Typedef GW_RESET_IFM_CB

typedef VOID (*GW_RESET_IFM_CB)(GW_RESET_TYPE_E type);
/**
 * @brief Handler to process gateway reset
 * 
 * @param[in] type Reset type, see DEV_RESET_TYPE_E
 */

Typedef DEV_UG_INFORM_CB

typedef int (*DEV_UG_INFORM_CB)(IN CONST CHAR_T *dev_id,IN CONST FW_UG_S *fw);
/**
 * @brief Handler to process sub-device upgrade inform
 * 
 * @param[in] dev_id Device ID, NULL indicates gateway
 * @param[in] fw Firmware info, see FW_UG_S
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Typedef DEV_RESET_TYPE_E;

typedef enum {
   DEV_REMOTE_RESET_FACTORY,
   DEV_RESET_DATA_FACTORY, //need clear local data when bind
}DEV_RESET_TYPE_E;


      

Typedef DEV_RESET_IFM_CB

typedef VOID (*DEV_RESET_IFM_CB)(IN CONST CHAR_T *dev_id,IN DEV_RESET_TYPE_E type);
/**
 * @brief Handler to process reset
 * 
 * @param[in] dev_id Device ID, NULL indicates gateway
 * @param[in] type Reset type, see DEV_RESET_TYPE_E
 */

Typedef OPE_HTTPC_GET_CHCODE_CB

typedef OPERATE_RET (*OPE_HTTPC_GET_CHCODE_CB)(IN CONST BOOL_T is_gw, IN CONST CHAR_T *devid, INOUT CH_CODE_ST *ch_code);
/**
 * @brief Handler to get operator code
 * 
 * @param[in] is_gw Whether gateway or not
 * @param[in] devid Device ID, NULL indicates gateway
 * @param[out] ch_code Operator code, see CH_CODE_ST
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Typedef GET_FILE_DATA_CB

typedef OPERATE_RET (*GET_FILE_DATA_CB)(IN CONST FW_UG_S *fw, IN CONST UINT_T total_len,IN CONST UINT_T offset,
                                               IN CONST BYTE_T *data,IN CONST UINT_T len,OUT UINT_T *remain_len, IN PVOID_T pri_data);
/**
 * @brief Handler to process firmware download content
 * 
 * @param[in] fw Firmware info, see FW_UG_S
 * @param[in] total_len Total length of firmware
 * @param[in] offset Current offset
 * @param[in] data File data buffer
 * @param[in] len Length of buffer
 * @param[in] remain_len Length not handled
 * @param[in] pri_data Private data
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Typedef ACTIVE_SHORTURL_CB

typedef VOID (*ACTIVE_SHORTURL_CB)(OUT CONST CHAR_T *shorturl);
/**
 * @brief Handler to process device active short url
 * 
 * @param[out] shorturl Short url to active
 */

Typedef UPGRADE_NOTIFY_CB

typedef VOID (*UPGRADE_NOTIFY_CB)(IN CONST FW_UG_S *fw, IN CONST INT_T download_result, IN PVOID_T pri_data);
/**
 * @brief Handler to process download result
 * 
 * @param[in] fw Firmware info, see FW_UG_S
 * @param[in] download_result download result, 0 indicates success
 * @param[in] pri_data Private data
 */

Typedef TY_IOT_CBS_S;

typedef struct {
   /** status update */
   GW_STATUS_CHANGED_CB gw_status_cb;
   /** gateway upgrade */
   GW_UG_INFORM_CB gw_ug_cb;
   /** gateway reset */
   GW_RESET_IFM_CB gw_reset_cb;
   /** structured DP info */
   DEV_OBJ_DP_CMD_CB dev_obj_dp_cb;
   /** raw DP info */
   DEV_RAW_DP_CMD_CB dev_raw_dp_cb;
   /** DP query */
   DEV_DP_QUERY_CB dev_dp_query_cb;
   /** sub-device upgrade */
   DEV_UG_INFORM_CB dev_ug_cb;
   /** sub-device reset */
   DEV_RESET_IFM_CB dev_reset_cb;
#if defined(TUYA_GW_OPERATOR) && (TUYA_GW_OPERATOR==1)
   /** opoerator code */
   OPE_HTTPC_GET_CHCODE_CB ope_get_chcode_cb;
#endif

#if defined(QRCODE_ACTIVE_MODE) && (QRCODE_ACTIVE_MODE==1)
   /** active short url */
   ACTIVE_SHORTURL_CB active_shorturl;
#endif
   /** gateway upgrade pre-condition */
   GW_UG_INFORM_CB pre_gw_ug_cb;
   /** sub-device upgrade pre-condition */
   DEV_UG_INFORM_CB pre_dev_ug_cb;
}TY_IOT_CBS_S;
/**
 * @brief Definition of gateway callback funtions
 */

Typedef GW_CLOUD_STREAM_MQTT_CB

typedef OPERATE_RET (*GW_CLOUD_STREAM_MQTT_CB)(IN struct ty_cJSON *root_json);


      

Typedef TRAN_STEP_T

typedef BYTE_T TRAN_STEP_T;
#define TS_START 0
#define TS_TRANSFER 1
#define TS_END 2

// mqtt media data interface

Typedef CLEAR_TYPE_T

typedef BYTE_T CLEAR_TYPE_T;
#define CLEAR_CONTINUE_ADD 0
#define CLEAR_REMOVE_MAP  1



      

Typedef DATA_TYPE_T

typedef BYTE_T DATA_TYPE_T;
#define DATA_INCREMENT_MAP 0
#define DATA_COMPLETE_MAP 1 



      

Typedef FLOW_BODY_ST;

typedef struct {
   USHORT_T id;
   UINT_T posix;
   TRAN_STEP_T step;
   UINT_T offset;
   USHORT_T len;
   BYTE_T data[0];
}FLOW_BODY_ST;


      

Typedef FLOW_BODY_V2_ST;

typedef struct {
   USHORT_T id;
 BYTE_T map_id;
 BYTE_T clear_type;
 BYTE_T data_type;	
   UINT_T posix;
   UINT_T offset;
   USHORT_T len;
   BYTE_T data[0];
}FLOW_BODY_V2_ST;


      

Typedef TY_IOT_REGION_INFO_S;

typedef struct {
   /** region info */
   CHAR_T region[REGION_LEN + 1];
   /** timezone info */
   CHAR_T time_zone[TIME_ZONE_LEN+1];
}TY_IOT_REGION_INFO_S;
/**
 * @brief Definition of region info
 */

Typedef TY_CUSTOM_CFG_E;

typedef enum {
   /** device cfg */
   CFG_DEVICE = 1,
   /** product cfg */
   CFG_PRODUCT = 2,
   CFG_INVALID,
}TY_CUSTOM_CFG_E;
/**
 * Definition of customer config type
 */

Typedef TY_LOCATION_INFO_S;

typedef struct {
   /** country code */
   CHAR_T country_code[COUNTRY_CODE_LEN + 1];
   /** ip addr. */
   CHAR_T ip[IPV4_LEN + 1];
}TY_LOCATION_INFO_S;
/**
 * @brief Definition of location info
 */

Typedef GW_APP_LOG_PATH_CB

typedef VOID (*GW_APP_LOG_PATH_CB)(OUT CHAR_T *path, IN CONST INT_T len);
/**
 * @brief Handler for log upload
 * 
 * @param path Log upload path
 * @param len Length of path
 */

Typedef TY_IOT_APP_CBS_S;

typedef struct {
   /** path for log upload */
   GW_APP_LOG_PATH_CB gw_app_log_path_cb;
}TY_IOT_APP_CBS_S;
/**
 * @brief Definition of IoT callbacks used by APP
 */