9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
534 lines
19 KiB
C
534 lines
19 KiB
C
/*
|
|
* Copyright (C) 2015-2018 Alibaba Group Holding Limited
|
|
*/
|
|
|
|
|
|
#if defined(DEPRECATED_LINKKIT)
|
|
#ifndef _DM_SHADOW_H_
|
|
#define _DM_SHADOW_H_
|
|
|
|
#include "iotx_dm_internal.h"
|
|
|
|
#define DM_SHW_KEY_SCHEMA "schema"
|
|
#define DM_SHW_KEY_LINK "link"
|
|
#define DM_SHW_KEY_PROFILE "profile"
|
|
#define DM_SHW_KEY_PROPERTIES "properties"
|
|
#define DM_SHW_KEY_EVENTS "events"
|
|
#define DM_SHW_KEY_SERVICES "services"
|
|
|
|
#define DM_SHW_KEY_PROFILE_PK "productKey"
|
|
#define DM_SHW_KEY_PROFILE_DN "deviceName"
|
|
#define DM_SHW_KEY_IDENTIFIER "identifier"
|
|
#define DM_SHW_KEY_NAME "name"
|
|
#define DM_SHW_KEY_DESC "desc"
|
|
#define DM_SHW_KEY_ACCESS_MODE "accessMode"
|
|
#define DM_SHW_KEY_REQUIRED "required"
|
|
#define DM_SHW_KEY_METHOD "method"
|
|
#define DM_SHW_KEY_CALLTYPE "callType"
|
|
#define DM_SHW_KEY_OUTPUTDATA "outputData"
|
|
#define DM_SHW_KEY_INPUTDATA "inputData"
|
|
#define DM_SHW_KEY_DATATYPE "dataType"
|
|
#define DM_SHW_KEY_TYPE "type"
|
|
#define DM_SHW_KEY_SPECS "specs"
|
|
#define DM_SHW_KEY_UNIT "unit"
|
|
#define DM_SHW_KEY_UNITNAME "unitName"
|
|
#define DM_SHW_KEY_MIN "min"
|
|
#define DM_SHW_KEY_MAX "max"
|
|
#define DM_SHW_KEY_LENGTH "length"
|
|
#define DM_SHW_KEY_SIZE "size"
|
|
#define DM_SHW_KEY_ITEM "item"
|
|
|
|
/* Special Service And Event */
|
|
#define DM_SHW_SPECIAL_SERVICE_SET_IDENTIFIER "set"
|
|
#define DM_SHW_SPECIAL_SERVICE_SET_METHOD "thing.service.property.set"
|
|
#define DM_SHW_SPECIAL_SERVICE_GET_IDENTIFIER "get"
|
|
#define DM_SHW_SPECIAL_SERVICE_GET_METHOD "thing.service.property.get"
|
|
#define DM_SHW_SPECIAL_EVENT_POST_IDENTIFIER "post"
|
|
#define DM_SHW_SPECIAL_EVENT_POST_METHOD "thing.event.property.post"
|
|
|
|
#define DM_SHW_KEY_DELIMITER '.'
|
|
|
|
typedef enum {
|
|
DM_SHW_DATA_TYPE_NONE, /* none */
|
|
DM_SHW_DATA_TYPE_INT, /* int */
|
|
DM_SHW_DATA_TYPE_FLOAT, /* float */
|
|
DM_SHW_DATA_TYPE_DOUBLE, /* double */
|
|
DM_SHW_DATA_TYPE_TEXT, /* string */
|
|
DM_SHW_DATA_TYPE_ENUM, /* int */
|
|
DM_SHW_DATA_TYPE_DATE, /* string */
|
|
DM_SHW_DATA_TYPE_BOOL, /* bool,0 or 1 */
|
|
DM_SHW_DATA_TYPE_ARRAY, /* support int, float, double, text */
|
|
DM_SHW_DATA_TYPE_STRUCT, /* support above 8 data types */
|
|
} dm_shw_data_type_e;
|
|
|
|
typedef enum {
|
|
DM_SHW_DATA_TARGET_SERVICE_INPUT_DATA,
|
|
DM_SHW_DATA_TARGET_SERVICE_OUTPUT_DATA
|
|
} dm_shw_data_target_e;
|
|
|
|
typedef struct {
|
|
dm_shw_data_type_e type;
|
|
int size;
|
|
void *value;
|
|
} dm_shw_data_value_complex_t;
|
|
|
|
typedef struct {
|
|
dm_shw_data_type_e type;
|
|
union {
|
|
int value_int;
|
|
float value_float;
|
|
double value_double;
|
|
void *value; /* string or complex type accroding to data type */
|
|
};
|
|
} dm_shw_data_value_t;
|
|
|
|
typedef struct {
|
|
dm_shw_data_type_e type;
|
|
int specs_number; /* used when type is enum and struct */
|
|
void *specs; /* nerver be used by struct */
|
|
} dm_shw_data_type_t;
|
|
|
|
typedef struct {
|
|
char *identifier;
|
|
dm_shw_data_value_t data_value;
|
|
} dm_shw_data_t;
|
|
|
|
typedef struct {
|
|
char *identifier;
|
|
int input_data_number; /* input_data Number */
|
|
dm_shw_data_t *input_datas; /* input_data array, type is dm_shw_data_t */
|
|
int output_data_number; /* ouput_data Number */
|
|
dm_shw_data_t *output_datas; /* output_data array, type is dm_shw_data_t */
|
|
} dm_shw_event_t;
|
|
|
|
typedef struct {
|
|
char *identifier; /* synchronized or asynchronized */
|
|
int input_data_number; /* input_data_number */
|
|
dm_shw_data_t *input_datas; /* input_data array, type is dm_shw_data_t */
|
|
int output_data_number; /* ouput_data Number */
|
|
dm_shw_data_t *output_datas; /* output_data array, type is dm_shw_data_t */
|
|
} dm_shw_service_t;
|
|
|
|
typedef struct {
|
|
int property_number;
|
|
dm_shw_data_t *properties; /* property array, type is dm_shw_data_t */
|
|
int event_number;
|
|
dm_shw_event_t *events; /* event array, type is dm_shw_event_t */
|
|
int service_number;
|
|
dm_shw_service_t *services; /* service array, type is dm_shw_service_t */
|
|
} dm_shw_t;
|
|
|
|
/**
|
|
* @brief Create TSL struct from TSL string.
|
|
* This function used to parse TSL string into TSL struct.
|
|
*
|
|
* @param tsl. The TSL string in JSON format.
|
|
* @param tsl_len. The length of tsl
|
|
* @param shadow. The pointer of TSL Struct pointer, will be malloc memory.
|
|
* This memory should be free by dm_shw_destroy.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_create(_IN_ iotx_dm_tsl_type_t type, _IN_ const char *tsl, _IN_ int tsl_len, _OU_ dm_shw_t **shadow);
|
|
|
|
/**
|
|
* @brief Get property from TSL struct.
|
|
* This function used to get property from TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param key. The property compound string, format decided by data type of property as follows:
|
|
* int,float,double,text,enum,date,bool type: property_id
|
|
* array type: property_id(array)[index]
|
|
* struct type: property_id(struct).property_id or property_id(struct).property_id[index]
|
|
*
|
|
* @param key_len. The length of key.
|
|
* @param property. The property in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_property_data(_IN_ dm_shw_t *shadow, _IN_ char *key, _IN_ int key_len, _OU_ void **data);
|
|
|
|
int dm_shw_get_service_input_output_data(_IN_ dm_shw_data_target_e type, _IN_ dm_shw_t *shadow, _IN_ char *key,
|
|
_IN_ int key_len, _OU_ void **data);
|
|
|
|
/**
|
|
* @brief Get event output data from TSL struct.
|
|
* This function used to get event output data from TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param key. The property compound string, format decided by data type of property as follows:
|
|
* int,float,double,text,enum,date,bool type: property_id
|
|
* array type: property_id(array)[index]
|
|
* struct type: property_id(struct).property_id or property_id(struct).property_id[index]
|
|
*
|
|
* @param key_len. The length of key.
|
|
* @param property. The property in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_event_output_data(_IN_ dm_shw_t *shadow, _IN_ char *key, _IN_ int key_len, _OU_ void **data);
|
|
|
|
/**
|
|
* @brief Get property type from TSL struct.
|
|
* This function used to get property type from TSL struct.
|
|
*
|
|
* @param property. The handle of property.
|
|
* @param type. The data type of property
|
|
*
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_data_type(_IN_ void *data, _OU_ dm_shw_data_type_e *type);
|
|
|
|
/**
|
|
* @brief Get event from TSL struct.
|
|
* This function used to get property from TSL struct.
|
|
*
|
|
* @param service. The handle of event.
|
|
* @param key. The property compound string, format decided by data type of property as follows:
|
|
* int,float,double,text,enum,date,bool type: event_id
|
|
*
|
|
* @param key_len. The length of key.
|
|
* @param property. The event in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_event(_IN_ dm_shw_t *shadow, _IN_ char *key, _IN_ int key_len, _OU_ void **event);
|
|
|
|
/**
|
|
* @brief Get service from TSL struct.
|
|
* This function used to get property from TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param key. The property compound string, format decided by data type of property as follows:
|
|
* int,float,double,text,enum,date,bool type: service_id
|
|
*
|
|
* @param key_len. The length of key.
|
|
* @param property. The service in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_service(_IN_ dm_shw_t *shadow, _IN_ char *key, _IN_ int key_len, _OU_ void **service);
|
|
|
|
/**
|
|
* @brief Get property number from TSL struct.
|
|
* This function used to get property number from TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param number. The property number in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_property_number(_IN_ dm_shw_t *shadow, _OU_ int *number);
|
|
|
|
/**
|
|
* @brief Get service number from TSL struct.
|
|
* This function used to get property number from TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param number. The service number in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_service_number(_IN_ dm_shw_t *shadow, _OU_ int *number);
|
|
|
|
/**
|
|
* @brief Get event number from TSL struct.
|
|
* This function used to get property number from TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param number. The event number in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_event_number(_IN_ dm_shw_t *shadow, _OU_ int *number);
|
|
|
|
/**
|
|
* @brief Get property reference from TSL struct by index.
|
|
* This function used to get property reference from TSL struct by index.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param index. The index of property
|
|
* @param property. The property reference in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_property_by_index(_IN_ dm_shw_t *shadow, _IN_ int index, _OU_ void **property);
|
|
|
|
/**
|
|
* @brief Get service reference from TSL struct by index.
|
|
* This function used to get service reference from TSL struct by index.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param index. The index of service
|
|
* @param service. The service reference in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_service_by_index(_IN_ dm_shw_t *shadow, _IN_ int index, _OU_ void **service);
|
|
|
|
/**
|
|
* @brief Get event reference from TSL struct by index.
|
|
* This function used to get event reference from TSL struct by index.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param index. The index of event
|
|
* @param event. The event reference in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_event_by_index(_IN_ dm_shw_t *shadow, _IN_ int index, _OU_ void **event);
|
|
|
|
/**
|
|
* @brief Get service reference from TSL struct by identifier.
|
|
* This function used to get service reference from TSL struct by identifier.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param identifier. The identifier of event
|
|
* @param service. The service reference in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_service_by_identifier(_IN_ dm_shw_t *shadow, _IN_ char *identifier, _OU_ void **service);
|
|
|
|
/**
|
|
* @brief Get event reference from TSL struct by identifier.
|
|
* This function used to get event reference from TSL struct by identifier.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
* @param identifier. The identifier of event
|
|
* @param event. The event reference in TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_event_by_identifier(_IN_ dm_shw_t *shadow, _IN_ char *identifier, _OU_ void **event);
|
|
|
|
/**
|
|
* @brief Get property identifier from TSL struct by service handle.
|
|
* This function used to get property identifier from TSL struct by service handle.
|
|
*
|
|
* @param service. The handle of property.
|
|
* @param method. The reference to property identifier in TSL Struct
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_property_identifier(_IN_ void *property, _OU_ char **identifier);
|
|
|
|
/**
|
|
* @brief Get service method from TSL struct by service handle.
|
|
* This function used to get service method from TSL struct by service handle.
|
|
*
|
|
* @param service. The handle of service.
|
|
* @param method. Generate method from service identifier
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_service_method(_IN_ void *service, _OU_ char **method);
|
|
|
|
/**
|
|
* @brief Get event method from TSL struct by event handle.
|
|
* This function used to get event method from TSL struct by event handle.
|
|
*
|
|
* @param service. The handle of event.
|
|
* @param method. Generate method from event identifier
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_event_method(_IN_ void *event, _OU_ char **method);
|
|
|
|
/**
|
|
* @brief Set Property Value Into TSL Struct.
|
|
* This function used to set property value into TSL Struct.
|
|
*
|
|
* @param tsl. The pointer of TSL Struct.
|
|
* @param key. The property compound string, format decided by data type of property as follows:
|
|
* int,float,double,text,enum,date,bool type: property_id
|
|
* array type: property_id(array)[index]
|
|
* struct type: property_id(struct).property_id or property_id(struct).property_id[index]
|
|
*
|
|
* @param key_len. The length of key
|
|
* @param value. The value to be set, data type decided by data type of property as follows:
|
|
* int: int*, float: float*, double: double*,
|
|
* text: char*, enum: int*, date: char*, bool: int*
|
|
* attention! value can be NULL to clear property value
|
|
* @param value_len. The length of value, only be used when type is text or data
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_set_property_value(_IN_ dm_shw_t *shadow, _IN_ char *key, _IN_ int key_len, _IN_ void *value,
|
|
_IN_ int value_len);
|
|
|
|
/**
|
|
* @brief Get Property Value From TSL Struct.
|
|
* This function used to get property value from TSL Struct.
|
|
*
|
|
* @param tsl. The pointer of TSL Struct.
|
|
* @param key. The property compound string, format decided by data type of property as follows:
|
|
* int,float,double,text,enum,date,bool type: property_id
|
|
* array type: property_id(array)[index]
|
|
* struct type: property_id(struct).property_id or property_id(struct).property_id[index]
|
|
*
|
|
* @param key_len. The length of key
|
|
* @param value. The variable to store value, data type decided by data type of property as follows:
|
|
* int: int*, float: float*, double: double*,
|
|
* text: char**, enum: int*, date: char**, bool: int*
|
|
* attention! value can not be NULL
|
|
*
|
|
* @warning if data type is text or date, *value well be end with '\0'.
|
|
* the memory allocated to *value must be free by user.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_property_value(_IN_ dm_shw_t *shadow, _IN_ char *key, _IN_ int key_len, _OU_ void *value);
|
|
|
|
/**
|
|
* @brief Set event output value into TSL struct.
|
|
* This function used to set event output value into TSL struct.
|
|
*
|
|
* @param tsl. The pointer of TSL Struct.
|
|
* @param key. The property compound string, format decided by data type of property as follows:
|
|
* int,float,double,text,enum,date,bool type: event_id.event_data_id
|
|
* array type: event_id.event_data_id(array)[index]
|
|
* struct type: event_id.event_data_id(struct).property_id
|
|
* or event_id.event_data_id(struct).property_id[index]
|
|
*
|
|
* @param key_len. The length of key
|
|
* @param value. The value to be set, data type decided by data type of property as follows:
|
|
* int: int*, float: float*, double: double*,
|
|
* text: char*, enum: int*, date: char*, bool: int*
|
|
* attention! value can be NULL to clear property value
|
|
* @param value_len. The length of value, only be used when type is text or data
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_set_event_output_value(_IN_ dm_shw_t *shadow, _IN_ char *key, _IN_ int key_len, _IN_ void *value,
|
|
_IN_ int value_len);
|
|
|
|
/**
|
|
* @brief Get event output value from TSL struct.
|
|
* This function used to get event output value from TSL struct.
|
|
*
|
|
* @param tsl. The pointer of TSL Struct.
|
|
* @param key. The property compound string, format decided by data type of property as follows:
|
|
* int,float,double,text,enum,date,bool type: event_id.event_data_id
|
|
* array type: event_id.event_data_id(array)[index]
|
|
* struct type: event_id.event_data_id(struct).property_id
|
|
* or event_id.event_data_id(struct).property_id[index]
|
|
*
|
|
* @param key_len. The length of key
|
|
* @param value. The variable to store value, data type decided by data type of property as follows:
|
|
* int: int*, float: float*, double: double*,
|
|
* text: char**, enum: int*, date: char**, bool: int*
|
|
* attention! value can not be NULL
|
|
*
|
|
* @warning if data type is text or date, *value well be end with '\0'.
|
|
* the memory allocated to *value must be free by user.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_get_event_output_value(_IN_ dm_shw_t *shadow, _IN_ char *key, _IN_ int key_len, _IN_ void *value);
|
|
|
|
int dm_shw_set_service_input_output_value(_IN_ dm_shw_data_target_e type, _IN_ dm_shw_t *shadow, _IN_ char *key,
|
|
_IN_ int key_len, _IN_ void *value, _IN_ int value_len);
|
|
int dm_shw_get_service_input_output_value(_IN_ dm_shw_data_target_e type, _IN_ dm_shw_t *shadow, _IN_ char *key,
|
|
_IN_ int key_len, _IN_ void *value);
|
|
|
|
/**
|
|
* @brief Get property payload from TSL struct.
|
|
* This function used to get property payload from TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct
|
|
* @param identifier. The Property Identifier
|
|
* @param identifier_len. The Property Identifier Length
|
|
* @param lite. The pointer to json array where to store property value
|
|
*
|
|
* @warning The payload malloc by this function and need to be free manully.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_assemble_property(_IN_ dm_shw_t *shadow, _IN_ char *identifier, _IN_ int identifier_len,
|
|
_IN_ lite_cjson_item_t *lite);
|
|
|
|
/**
|
|
* @brief Get event output payload from TSL struct.
|
|
* This function used to get event output payload from TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct
|
|
* @param identifier. The Event Identifier
|
|
* @param identifier_len. The Event Identifier Length
|
|
* @param lite. The pointer to json array where to store event output value
|
|
*
|
|
* @warning The payload malloc by this function and need to be free manully.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_assemble_event_output(_IN_ dm_shw_t *shadow, _IN_ char *identifier, _IN_ int identifier_len,
|
|
_IN_ lite_cjson_item_t *lite);
|
|
|
|
/**
|
|
* @brief Get service output payload from TSL struct.
|
|
* This function used to get service output payload from TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct
|
|
* @param identifier. The Service Identifier
|
|
* @param identifier_len. The Service Identifier Length
|
|
* @param lite. The pointer to json array where to store service output value
|
|
*
|
|
* @warning The payload malloc by this function and need to be free manully.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
int dm_shw_assemble_service_output(_IN_ dm_shw_t *shadow, _IN_ char *identifier, _IN_ int identifier_len,
|
|
_IN_ lite_cjson_item_t *lite);
|
|
|
|
/**
|
|
* @brief Free TSL struct.
|
|
* This function used to free TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
void dm_shw_destroy(_IN_ dm_shw_t **shadow);
|
|
|
|
#if 0
|
|
/**
|
|
* @brief Print detailed information of TSL struct.
|
|
* This function used to print detailed information of TSL struct.
|
|
*
|
|
* @param shadow. The pointer of TSL Struct.
|
|
*
|
|
* @return success or fail.
|
|
*
|
|
*/
|
|
void dm_shw_print(_IN_ dm_shw_t *shadow);
|
|
#endif
|
|
|
|
#endif
|
|
#endif
|