680 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			680 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /****************************************************************************
 | ||
|  | 
 | ||
|  | Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. | ||
|  | 
 | ||
|  | This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT | ||
|  | be copied by any method or incorporated into another program without | ||
|  | the express written consent of Aerospace C.Power. This Information or any portion | ||
|  | thereof remains the property of Aerospace C.Power. The Information contained herein | ||
|  | is believed to be accurate and Aerospace C.Power assumes no responsibility or | ||
|  | liability for its use in any way and conveys no license or title under | ||
|  | any patent or copyright and makes no representation or warranty that this | ||
|  | Information is free from patent or copyright infringement. | ||
|  | 
 | ||
|  | ****************************************************************************/ | ||
|  | 
 | ||
|  | #ifndef IOT_CLI_SG_API_H
 | ||
|  | #define IOT_CLI_SG_API_H
 | ||
|  | 
 | ||
|  | #include "os_types_api.h"
 | ||
|  | 
 | ||
|  | #include "iot_pkt_api.h"
 | ||
|  | #include "iot_utils_api.h"
 | ||
|  | #include "iot_config_api.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #if (PLC_SUPPORT_CCO_ROLE || \
 | ||
|  |     ((IOT_STA_CONTROL_MODE == IOT_STA_CONTROL_TYPE_STA) && \ | ||
|  |     (IOT_SG_CONTROLLER_ENABLE == 1)) || IOT_SMART_CONFIG) | ||
|  | /* cli and sg Transmission channel */ | ||
|  | #define IOT_CLI_SG_INTERFACE_ENABLE     1
 | ||
|  | #else
 | ||
|  | #define IOT_CLI_SG_INTERFACE_ENABLE     0
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #pragma pack(push)  /* save the pack status */
 | ||
|  | #pragma pack(1)     /* 1 byte align */
 | ||
|  | 
 | ||
|  | /* message id used for cli report message to sg */ | ||
|  | #define IOT_CLI_SG_MSG_START_METER_LIST            (0x1)
 | ||
|  | #define IOT_CLI_SG_MSG_STOP_METER_LIST             (0x2)
 | ||
|  | #define IOT_CLI_SG_MSG_GET_METER_LIST              (0x3)
 | ||
|  | #define IOT_CLI_SG_MSG_QUERY_WL_STATE              (0x4)
 | ||
|  | #define IOT_CLI_SG_MSG_QUERY_WL                    (0x5)
 | ||
|  | #define IOT_CLI_SG_MSG_ADD_WL                      (0x6)
 | ||
|  | #define IOT_CLI_SG_MSG_RM_WL                       (0x7)
 | ||
|  | #define IOT_CLI_SG_MSG_SET_WL_STATE                (0x8)
 | ||
|  | #define IOT_CLI_SG_MSG_GET_METER                   (0x9)
 | ||
|  | #define IOT_CLI_SG_MSG_QUERY_UPGRADE_STATUS        (0xA)
 | ||
|  | #define IOT_CLI_SG_MSG_QUERY_UPGRADE_PROGRESS      (0xB)
 | ||
|  | #define IOT_CLI_SG_MSG_SET_TSFM_DETECT_STATE       (0xC)
 | ||
|  | #define IOT_CLI_SG_MSG_QUERY_TSFM_DETECT_STATE     (0xD)
 | ||
|  | #define IOT_CLI_SG_MSG_HANDLE_USER_DATA            (0xE)
 | ||
|  | #define IOT_CLI_SG_MSG_SET_EVENT_RPT_ENABLED       (0xF)
 | ||
|  | #define IOT_CLI_SG_MSG_GET_RT_METER                (0x10)
 | ||
|  | #define IOT_CLI_SG_MSG_SET_CCTT_DATA_ENABLED       (0x11)
 | ||
|  | #define IOT_CLI_SG_MSG_SET_CON_MR_PARAM            (0x12)
 | ||
|  | #define IOT_CLI_SG_MSG_QUERY_CON_MR_PARAM          (0x13)
 | ||
|  | #define IOT_CLI_SG_MSG_PLC_MGR_STATE_CHANGE        (0x14)
 | ||
|  | #define IOT_CLI_SG_MSG_GET_REPORT_ACK              (0x15)
 | ||
|  | #define IOT_CLI_SG_MSG_BD_START                    (0x16)
 | ||
|  | #define IOT_CLI_SG_MSG_BD_QUERY_STATE              (0x17)
 | ||
|  | #define IOT_CLI_SG_MSG_BD_QUERY_RESULT             (0x18)
 | ||
|  | #define IOT_CLI_SG_MSG_SET_ESP                     (0x19)
 | ||
|  | #define IOT_CLI_SG_MSG_QUERY_ESP                   (0x1A)
 | ||
|  | #define IOT_CLI_SG_MSG_QUERY_NODE_INFO             (0x1B)
 | ||
|  | #define IOT_CLI_SG_MSG_SEND_BROADCAST_DATA         (0x1C)
 | ||
|  | #define IOT_CLI_SG_MSG_SET_MAC                     (0x1D)
 | ||
|  | #define IOT_CLI_SG_TRANS_LOCAL_PROTO_DATA          (0x1E)
 | ||
|  | 
 | ||
|  | /* message id used for sg report message to cli */ | ||
|  | #define IOT_CLI_SG_MSG_RPT_START_METER_LIST        (0x1)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_STOP_METER_LIST         (0x2)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_SEARCH_METER_DONE       (0x3)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_METER_LIST              (0x4)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_WL_STATE                (0x5)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_WL                      (0x6)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_ADD_WL                  (0x7)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_RM_WL                   (0x8)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_SET_WL_STATE            (0x9)
 | ||
|  | #define IOT_CLI_SG_MSG_PRT_SEARCH_METER_LIST       (0xA)
 | ||
|  | #define IOT_CLI_SG_MSG_PRT_METER                   (0xB)
 | ||
|  | #define IOT_CLI_SG_MSG_PRT_METER_DATA              (0xC)
 | ||
|  | #define IOT_CLI_SG_MSG_PRT_UPGRADE_STATUS          (0xD)
 | ||
|  | #define IOT_CLI_SG_MSG_PRT_UPGRADE_PROGRESS        (0xE)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_EVT_DATA                (0xF)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_SET_TSFM_DETECT_STATE   (0x10)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_TSFM_DETECT_STATE       (0x11)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_USER_DATA               (0x12)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_SET_EVENT_RPT_ENABLED   (0x13)
 | ||
|  | #define IOT_CLI_SG_MSG_PRT_RT_REQ_MR_DATA          (0x14)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_SET_CCTT_DATA_ENABLED   (0x15)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_SET_CON_MR_PARAM        (0x16)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_QUERY_CON_MR_PARAM      (0x17)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_CONFIG_INFO             (0x18)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_BD_START                (0x19)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_BD_QUERY_STATE          (0x1A)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_BD_QUERY_RESULT         (0x1B)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_ESP_RESULT              (0x1C)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_NODE_INFO               (0x1D)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_SEND_BROADCAST_DATA     (0x1E)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_MAC                     (0x1F)
 | ||
|  | #define IOT_CLI_SG_MSG_RPT_LOCAL_PROTO_DATA        (0x20)
 | ||
|  | 
 | ||
|  | /* Message request identification */ | ||
|  | #define IOT_CLI_SG_REQ_ID_DEFAULT                  (0x0)
 | ||
|  | 
 | ||
|  | /* sg register cli interface result */ | ||
|  | #define IOT_CLI_SG_REGISTER_SUCCESS                (0x0)
 | ||
|  | #define IOT_CLI_SG_REGISTER_FAILURE                (0x1)
 | ||
|  | 
 | ||
|  | /* meter communication protocol on plc */ | ||
|  | #define IOT_CLI_SG_PROTO_TYPE_RAW_DATA             (0x00)
 | ||
|  | #define IOT_CLI_SG_PROTO_TYPE_645_1997             (0x01)
 | ||
|  | #define IOT_CLI_SG_PROTO_TYPE_645_2007             (0x02)
 | ||
|  | #define IOT_CLI_SG_PROTO_TYPE_698                  (0x03)
 | ||
|  | 
 | ||
|  | /* meter device type on plc */ | ||
|  | #define IOT_CLI_SG_DEVICE_TYPE_COLLECTOR           (0)
 | ||
|  | #define IOT_CLI_SG_DEVICE_TYPE_STA                 (1)
 | ||
|  | 
 | ||
|  | /* always disable white list */ | ||
|  | #define IOT_CLI_SG_WL_STATE_DISABLE                (0)
 | ||
|  | /* always enable white list */ | ||
|  | #define IOT_CLI_SG_WL_STATE_ENABLE                 (1)
 | ||
|  | /* if cctt and meter entry exist, enable white list,
 | ||
|  |  * else disable white list. | ||
|  |  */ | ||
|  | #define IOT_CLI_SG_WL_STATE_AUTO                   (2)
 | ||
|  | 
 | ||
|  | /* route meter reading action */ | ||
|  | /* start route meter read */ | ||
|  | #define IOT_CLI_SG_RT_START_MR_CMD                 (1)
 | ||
|  | /* running route meter read */ | ||
|  | #define IOT_CLI_SG_RT_RUNNING_MR_CMD               (2)
 | ||
|  | /* stop route meter read */ | ||
|  | #define IOT_CLI_SG_RT_STOP_MR_CMD                  (3)
 | ||
|  | 
 | ||
|  | /* reserved length of the data */ | ||
|  | #define IOT_CLI_SG_RSVD_LEN                        (16)
 | ||
|  | 
 | ||
|  | /** extention cli error is based on the common error in iot_errno_api.h */ | ||
|  | #define EXTEN_CLI_ERRNO_BASE                       (0x80)
 | ||
|  | /** errno report to plc manager */ | ||
|  | /** exceed support count for devices */ | ||
|  | #define EXCEED_DEV_MAX_CONCURRENT_COUNT            (EXTEN_CLI_ERRNO_BASE + 0x01)
 | ||
|  | /** exceed support pkt count for devices */ | ||
|  | #define EXCEED_DEV_PKT_COUNT                       (EXTEN_CLI_ERRNO_BASE + 0x02)
 | ||
|  | 
 | ||
|  | #define IOT_CLI_SG_RSVD_RSP                        (1)
 | ||
|  | #define IOT_CLI_SG_MR_DATA_RSP                     (2)
 | ||
|  | #define IOT_CLI_SG_EVT_DATA_RSP                    (3)
 | ||
|  | #define IOT_CLI_SG_SEC_NODE_REG_DATA_RSP           (4)
 | ||
|  | 
 | ||
|  | /* branch detect state */ | ||
|  | #define IOT_CLI_SG_BD_CLEAR                        (0)
 | ||
|  | #define IOT_CLI_SG_BD_SHOOT                        (1)
 | ||
|  | #define IOT_CLI_SG_BD_TOPO_GEN                     (2)
 | ||
|  | #define IOT_CLI_SG_BD_DONE                         (3)
 | ||
|  | 
 | ||
|  | /* branch detect node special father index */ | ||
|  | #define IOT_CLI_SG_BD_FATHER_CCO                   (0)
 | ||
|  | #define IOT_CLI_SG_BD_FATHER_INVALID               (0xFFFF)
 | ||
|  | 
 | ||
|  | /* device type */ | ||
|  | #define IOT_CLI_SG_DEV_TYPE_POWER_METER            (1)
 | ||
|  | #define IOT_CLI_SG_DEV_TYPE_POWER_METER_3P         (2)
 | ||
|  | #define IOT_CLI_SG_DEV_TYPE_SWITCH_MONITOR         (3)
 | ||
|  | #define IOT_CLI_SG_DEV_TYPE_TSFM_MONITOR           (4)
 | ||
|  | #define IOT_CLI_SG_DEV_TYPE_BRK_MONITOR            (5)
 | ||
|  | 
 | ||
|  | #define IOT_CLI_SG_MODULE_ID_LEN                   (11)
 | ||
|  | /* node info report max count */ | ||
|  | #define IOT_CLI_SG_NODE_RPT_MAX_CNT                (64)
 | ||
|  | 
 | ||
|  | /** cli and sg transfer data msg header */ | ||
|  | typedef struct _iot_cli_sg_msg_header { | ||
|  |     /** msg id */ | ||
|  |     uint8_t     msg_id; | ||
|  |     /** request id */ | ||
|  |     uint8_t     req_id; | ||
|  |     /** reserved for future */ | ||
|  |     uint16_t    reserved; | ||
|  | } iot_cli_sg_msg_header_t; | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief (*iot_cli_sg_recv_func_t)() - callback to receive event from | ||
|  |  *               cli host. | ||
|  |  * @param param: parameter registered in iot_cli_sg_interface_register | ||
|  |  * @param pkt:   buffer to store the event detail, application should call | ||
|  |  *               iot_free_pkt function ASAP to free the iot_pkt_t. it's very | ||
|  |  *               scarce resource. | ||
|  |  */ | ||
|  | typedef void(*iot_cli_sg_recv_func_t)(void *param, iot_pkt_t *pkt); | ||
|  | 
 | ||
|  | /** sg config */ | ||
|  | typedef struct _iot_cli_sg_config { | ||
|  |     uint8_t                   proto; | ||
|  | } iot_cli_sg_config_t; | ||
|  | 
 | ||
|  | /** sg result */ | ||
|  | typedef struct _iot_cli_sg_result { | ||
|  |     /** see ERR_XXX */ | ||
|  |     uint32_t                   result; | ||
|  | } iot_cli_sg_result_t; | ||
|  | 
 | ||
|  | typedef struct _iot_cli_sg_interface { | ||
|  |     /** callback to receive event from cli host */ | ||
|  |     iot_cli_sg_recv_func_t     recv; | ||
|  |     /** parameter that will be transferred back alone with the callback */ | ||
|  |     void                       *param; | ||
|  | } iot_cli_sg_interface_t; | ||
|  | 
 | ||
|  | /** report data that from meter */ | ||
|  | typedef struct _iot_cli_sg_rpt_mr_data_ul { | ||
|  |     /** reserved space for future use. */ | ||
|  |     uint8_t                     reserved[IOT_CLI_SG_RSVD_LEN]; | ||
|  |     /** ack of the meter reading */ | ||
|  |     uint8_t                     result; | ||
|  |     /** pm proto type :  645 698 and so on */ | ||
|  |     uint8_t                     proto_type; | ||
|  |     /** pm mac address */ | ||
|  |     uint8_t                     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /** packet serial number */ | ||
|  |     uint8_t                     sn; | ||
|  |     /** length of the data variable */ | ||
|  |     uint16_t                    datalen; | ||
|  |     /** pm effective data up link */ | ||
|  |     uint8_t                     data[0]; | ||
|  | } iot_cli_sg_rpt_mr_data_ul; | ||
|  | 
 | ||
|  | /** read meter type - cctt active read meter from plc manager down link */ | ||
|  | typedef struct _iot_cli_sg_rpt_mr_data_dl { | ||
|  |     /** reserved space for future use. */ | ||
|  |     uint8_t                     reserved[IOT_CLI_SG_RSVD_LEN]; | ||
|  |     /** cctt active read meter or cctt active concurrently read meter */ | ||
|  |     uint8_t                     mr_type; | ||
|  |     /** pm proto type :  645 698 and so on */ | ||
|  |     uint8_t                     proto_type; | ||
|  |     /** pm mac address */ | ||
|  |     uint8_t                     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /** packet serial number */ | ||
|  |     uint8_t                     sn; | ||
|  |     /** length of the data variable  */ | ||
|  |     uint16_t                    data_len; | ||
|  |     /** cli effective data down link */ | ||
|  |     uint8_t                     data[0]; | ||
|  | } iot_cli_sg_rpt_mr_data_dl; | ||
|  | 
 | ||
|  | /** request route meter reading data up link */ | ||
|  | typedef struct _iot_cli_sg_requst_rt_mr_data_ul { | ||
|  |     /** reserved space for future use. */ | ||
|  |     uint8_t                     reserved[IOT_CLI_SG_RSVD_LEN]; | ||
|  |     /** packet serial number */ | ||
|  |     uint8_t                     sn; | ||
|  |     /** 0 - complete meter reading, 1 - request reading data */ | ||
|  |     uint8_t                     opt_flag; | ||
|  |     /** pm phase msg */ | ||
|  |     uint8_t                     phase; | ||
|  |     /** pm mac address */ | ||
|  |     uint8_t                     mac_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /** secondary node index */ | ||
|  |     uint16_t                    node_index; | ||
|  | }iot_cli_request_rt_mr_data_ul; | ||
|  | 
 | ||
|  | /** read meter type - cctt active route read meter from plc manager down link */ | ||
|  | typedef struct _iot_cli_sg_rpt_rt_mr_data_dl { | ||
|  |     /** reserved space for future use. */ | ||
|  |     uint8_t                     reserved[IOT_CLI_SG_RSVD_LEN]; | ||
|  |     /**
 | ||
|  |      * operate flag | ||
|  |      * 0 invalid | ||
|  |      * others : see IOT_CLI_SG_RT_XX_MR_CMD | ||
|  |      */ | ||
|  |     uint8_t                     action; | ||
|  |     /** read flag - 0 read fail 1 read successful 2 ready read */ | ||
|  |     uint8_t                     read_flag; | ||
|  |     /** pm proto type :  645 698 and so on */ | ||
|  |     uint8_t                     proto_type; | ||
|  |     /** pm mac address */ | ||
|  |     uint8_t                     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /** packet serial number */ | ||
|  |     uint8_t                     sn; | ||
|  |     /** length of the data variable  */ | ||
|  |     uint8_t                     data_len; | ||
|  |     /** cli down effective data */ | ||
|  |     uint8_t                     data[0]; | ||
|  | } iot_cli_sg_rpt_rt_mr_data_dl; | ||
|  | 
 | ||
|  | /** report ack - report ack from plc manager down link */ | ||
|  | typedef struct _iot_cli_sg_rpt_ack_dl { | ||
|  |     /** reserved space for future use. */ | ||
|  |     uint8_t                     reserved[IOT_CLI_SG_RSVD_LEN]; | ||
|  |     /**
 | ||
|  |      * ack type: IOT_BUF_DT_XX | ||
|  |      * for example: IOT_BUF_DT_SG_METER_DATA,IOT_BUF_DT_EVT_RPT... | ||
|  |      */ | ||
|  |      uint8_t                    type; | ||
|  |     /** result : see ERR_XX */ | ||
|  |     uint32_t                    result; | ||
|  |     /** packet serial number */ | ||
|  |     uint8_t                     sn; | ||
|  | } iot_cli_sg_rpt_ack_dl_t; | ||
|  | 
 | ||
|  | /** request upgrade progress */ | ||
|  | typedef struct _iot_cli_sg_upgrade_progress_dl { | ||
|  |     uint16_t                    start_index; | ||
|  |     uint16_t                    dst_num; | ||
|  | } iot_cli_sg_upgrade_progress_dl; | ||
|  | 
 | ||
|  | /** start sec node reg */ | ||
|  | typedef struct _iot_cli_sg_start_sec_node_reg_dl { | ||
|  |     /** reserved space for future use. */ | ||
|  |     uint8_t                    reserved[IOT_CLI_SG_RSVD_LEN]; | ||
|  |     /** sec node registration duration. unit is 1 min. */ | ||
|  |     uint16_t                   duration; | ||
|  | } iot_cli_sg_start_sec_node_reg_dl_t; | ||
|  | 
 | ||
|  | typedef struct _iot_cli_sg_get_sec_node_info_dl { | ||
|  |     /** query start node index */ | ||
|  |     uint16_t                   sec_node_start_index; | ||
|  |     /** query node count */ | ||
|  |     uint8_t                    sec_node_count; | ||
|  | } iot_cli_sg_get_sec_node_info_dl_t; | ||
|  | 
 | ||
|  | /** sec node info */ | ||
|  | typedef struct _iot_cli_sg_sec_node_info { | ||
|  |     /** meter mac address */ | ||
|  |     uint8_t                     meter_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /** station mac address */ | ||
|  |     uint8_t                     sta_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /** proto type, see IOT_CLI_SG_PROTO_TYPE_xxx */ | ||
|  |     uint8_t                     proto_type     :4, | ||
|  |     /** device type, see IOT_CLI_SG_DEVICE_TYPE_xxx */ | ||
|  |                                 dev_type       :4; | ||
|  | } iot_cli_sg_sec_node_info_t; | ||
|  | 
 | ||
|  | /** sec node info report */ | ||
|  | typedef struct _iot_cli_sg_rpt_sec_node_info_ul { | ||
|  |     /** reserved space for future use. */ | ||
|  |     uint8_t                     reserved[IOT_CLI_SG_RSVD_LEN]; | ||
|  |     /** data serial number */ | ||
|  |     uint8_t                     sn; | ||
|  |     /** this time report node total count */ | ||
|  |     uint16_t                    sec_node_count; | ||
|  |     /** this time report node count */ | ||
|  |     uint8_t                     rsp_sec_node_count; | ||
|  |     /** sec node information */ | ||
|  |     iot_cli_sg_sec_node_info_t  node_info[0]; | ||
|  | } iot_cli_sg_rpt_sec_node_info_ul_t; | ||
|  | 
 | ||
|  | /** wl node info */ | ||
|  | typedef struct _iot_cli_sg_node_info { | ||
|  |     /** mac address of secondary node */ | ||
|  |     uint8_t                     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /** protocol the node supports, see IOT_CLI_SG_PROTO_TYPE_xxx */ | ||
|  |     uint8_t                     proto_type; | ||
|  | } iot_cli_sg_node_info_t; | ||
|  | 
 | ||
|  | /** query white list */ | ||
|  | typedef struct _iot_cli_sg_query_wl { | ||
|  |     /** query start node index */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /** query node count */ | ||
|  |     uint16_t                    count; | ||
|  | } iot_cli_sg_query_wl_t; | ||
|  | 
 | ||
|  | typedef struct _iot_cli_sg_rpt_wl { | ||
|  |     /** report node total count */ | ||
|  |     uint16_t                    total_count; | ||
|  |     /** this time report node count */ | ||
|  |     uint8_t                     rsp_count; | ||
|  |     /** sec node information */ | ||
|  |     iot_cli_sg_node_info_t      node_info[0]; | ||
|  | } iot_cli_sg_rpt_wl_t; | ||
|  | 
 | ||
|  | /** add wl */ | ||
|  | typedef struct _iot_cli_sg_add_wl { | ||
|  |     /** count of meter mac */ | ||
|  |     uint8_t                     count; | ||
|  |     /** info of node for wl operation */ | ||
|  |     iot_cli_sg_node_info_t      node_info[0]; | ||
|  | } iot_cli_sg_add_wl_t; | ||
|  | 
 | ||
|  | /** rm wl */ | ||
|  | typedef struct _iot_cli_sg_rm_wl { | ||
|  |     /** count of meter mac */ | ||
|  |     uint8_t                     count; | ||
|  |     /** mac address array */ | ||
|  |     uint8_t                     mac_addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } iot_cli_sg_rm_wl_t; | ||
|  | 
 | ||
|  | /** set white list state */ | ||
|  | typedef struct _iot_cli_sg_set_wl_state { | ||
|  |     /** white list state, see IOT_CLI_SG_WL_STATE_XXX */ | ||
|  |     uint8_t                     state; | ||
|  | } iot_cli_sg_set_wl_state_t; | ||
|  | 
 | ||
|  | /** white list state */ | ||
|  | typedef struct _iot_cli_sg_rpt_wl_state { | ||
|  |     /** white list state, see IOT_CLI_SG_WL_STATE_XXX */ | ||
|  |     uint8_t                     state; | ||
|  | } iot_cli_sg_rpt_wl_state_t; | ||
|  | 
 | ||
|  | /** report event data */ | ||
|  | typedef struct _iot_cli_sg_rpt_evt_data { | ||
|  |     /** data serial number */ | ||
|  |     uint8_t                     sn; | ||
|  |     /** device type, see IOT_SG_CCO_DEV_TYPE_XXX. */ | ||
|  |     uint8_t                     dev_type; | ||
|  |     /** protocol type, see PROTO_TYPE_XXX */ | ||
|  |     uint8_t                     proto_type; | ||
|  |     /** data len */ | ||
|  |     uint16_t                    data_len; | ||
|  |     /** event data */ | ||
|  |     uint8_t                     data[0]; | ||
|  | } iot_cli_sg_rpt_evt_data_t; | ||
|  | 
 | ||
|  | /* recv cli user data */ | ||
|  | typedef struct _iot_cli_sg_user_data_dl { | ||
|  |     /** source mac the data come from */ | ||
|  |     uint8_t                     src_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /** data len */ | ||
|  |     uint16_t                     data_len; | ||
|  |     /** data */ | ||
|  |     uint8_t                     data[0]; | ||
|  | } iot_cli_sg_user_data_dl_t; | ||
|  | 
 | ||
|  | /** send user data */ | ||
|  | typedef struct _iot_cli_sg_send_user_data { | ||
|  |     /** target mac */ | ||
|  |     uint8_t                     target_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /** data len */ | ||
|  |     uint16_t                     data_len; | ||
|  |     /** data */ | ||
|  |     uint8_t                     data[0]; | ||
|  | } iot_cli_sg_send_user_data_t; | ||
|  | 
 | ||
|  | /** cco event enabled setting down link */ | ||
|  | typedef struct _iot_cli_sg_set_event_enabled_dl { | ||
|  |     /** enable event report sw */ | ||
|  |     uint8_t                     event_enabled; | ||
|  | } iot_cli_sg_set_event_enabled_t; | ||
|  | 
 | ||
|  | /** cco don't deal with data from cctt */ | ||
|  | typedef struct _iot_cli_sg_set_cctt_data_enabled_dl { | ||
|  |     /** do deal with cctt data */ | ||
|  |     uint8_t                     cctt_data_enabled; | ||
|  | } iot_cli_sg_set_cctt_data_enabled_t; | ||
|  | 
 | ||
|  | /** set transformer detect state */ | ||
|  | typedef struct _iot_cli_sg_set_tsfm_detect_state { | ||
|  |     /** transformer detect state, 0 - disabled, 1 - enabled */ | ||
|  |     uint8_t                     tsfm_detect_state; | ||
|  |     /** station lock, 0 - unlock station, 1 - lock station */ | ||
|  |     uint8_t                     sta_lock; | ||
|  | } iot_cli_sg_set_tsfm_detect_state_t; | ||
|  | 
 | ||
|  | /** query transformer detect state */ | ||
|  | typedef struct _iot_cli_sg_rpt_tsfm_detect_state { | ||
|  |     /** transformer detect state, 0 - disabled, 1 - enabled */ | ||
|  |     uint8_t                     tsfm_detect_state; | ||
|  |     /** station lock, 0 - unlock station, 1 - lock station */ | ||
|  |     uint8_t                     sta_lock; | ||
|  |     /** transformer detect progress, 0 - done, 1- doing */ | ||
|  |     uint8_t                     tsfm_detect_progress; | ||
|  | } iot_cli_sg_rpt_tsfm_detect_state_t; | ||
|  | 
 | ||
|  | /** concurrence meter reading param */ | ||
|  | typedef struct _iot_cli_sg_con_mr_param { | ||
|  |     /** default meter reading timeout, unit is 1s.
 | ||
|  |      *  for cco set sec node max timeout before. the min value is 20. | ||
|  |      *  0 means doesn't change the value. | ||
|  |      */ | ||
|  |     uint8_t                     sec_node_monitor_timeout; | ||
|  |     /** bcast meter reading max concurrent count.
 | ||
|  |      *  0 means doesn't change the value. | ||
|  |      */ | ||
|  |     uint8_t                     max_bcast_con_count; | ||
|  | } iot_cli_sg_con_mr_param_t; | ||
|  | 
 | ||
|  | /** cli notify plc mgr state to sg */ | ||
|  | typedef struct _iot_cli_sg_plc_mgr_state_change { | ||
|  |     /** new state of plc mgr */ | ||
|  |     uint8_t                     state; | ||
|  | } iot_cli_sg_plc_mgr_state_change_t; | ||
|  | 
 | ||
|  | /** start or stop branch detect */ | ||
|  | typedef struct _iot_cli_sg_bd_start { | ||
|  |     /** 0 - stop, 1 - start */ | ||
|  |     uint8_t                     value; | ||
|  | } iot_cli_sg_bd_start_t; | ||
|  | 
 | ||
|  | /** branch detect node information */ | ||
|  | typedef struct _iot_cli_sg_bd_node_info { | ||
|  |     /** node index */ | ||
|  |     uint16_t                    index; | ||
|  |     /** node mac address, little-endian */ | ||
|  |     uint8_t                     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /** device type, see IOT_CLI_SG_DEV_TYPE_XXX */ | ||
|  |     uint8_t                     dev_type; | ||
|  |     /** father index, special father index see IOT_CLI_SG_BD_FATHER_XXX */ | ||
|  |     uint16_t                    father_index; | ||
|  |     /** reserved for future */ | ||
|  |     uint8_t                     rsvd[6]; | ||
|  | } iot_cli_sg_bd_node_info_t; | ||
|  | 
 | ||
|  | /** branch detect query result */ | ||
|  | typedef struct _iot_cli_sg_bd_query_ret { | ||
|  |     /** start index, value range: 1 - 65535 */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /** query count */ | ||
|  |     uint8_t                     count; | ||
|  | } iot_cli_sg_bd_query_ret_t; | ||
|  | 
 | ||
|  | /** branch detect result report */ | ||
|  | typedef struct _iot_cli_sg_bd_ret_rpt { | ||
|  |     /** total node count */ | ||
|  |     uint16_t                    total_cnt; | ||
|  |     /** start index, value range */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /** report node count */ | ||
|  |     uint8_t                     rpt_cnt; | ||
|  |     /** node information */ | ||
|  |     iot_cli_sg_bd_node_info_t   node_info[0]; | ||
|  | } iot_cli_sg_bd_ret_rpt_t; | ||
|  | 
 | ||
|  | /** report branch detect state */ | ||
|  | typedef struct _iot_cli_sg_bd_rpt_state { | ||
|  |     /** branch detect state, see IOT_CLI_SG_BD_XXX */ | ||
|  |     uint16_t                    state; | ||
|  | } iot_cli_sg_bd_rpt_state_t; | ||
|  | 
 | ||
|  | /** set cco esp */ | ||
|  | typedef struct _iot_cli_sg_set_esp { | ||
|  |     /** equipment service provider, see IOT_SG_CCO_ESP_XXX */ | ||
|  |     uint8_t                     esp; | ||
|  | } iot_cli_sg_set_esp_t; | ||
|  | 
 | ||
|  | /** report cco esp */ | ||
|  | typedef struct _iot_cli_sg_rpt_esp { | ||
|  |     /** equipment service provider, see IOT_SG_CCO_ESP_XXX */ | ||
|  |     uint8_t                     esp; | ||
|  | } iot_cli_sg_rpt_esp_t; | ||
|  | 
 | ||
|  | /** query node id information */ | ||
|  | typedef struct _iot_cli_sg_qr_node_info_dl { | ||
|  |     /** start index, value range: 1 - 65535 */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /** query count */ | ||
|  |     uint8_t                     count; | ||
|  | } iot_cli_sg_qr_node_info_dl_t; | ||
|  | 
 | ||
|  | typedef struct _iot_cli_sg_node_detail_info { | ||
|  |     /** address, little - endian */ | ||
|  |     uint8_t                     addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /** module id */ | ||
|  |     uint8_t                     module_id[IOT_CLI_SG_MODULE_ID_LEN]; | ||
|  |     /** phase that device is connected to.
 | ||
|  |      *  bit0 set to 1 means device is connected to phase A. | ||
|  |      *  bit1 set to 1 means device is connected to phase B. | ||
|  |      *  bit2 set to 1 means device is connected to phase C. | ||
|  |      */ | ||
|  |     uint8_t                     phase            :3, | ||
|  |     /** power meter type, 0: single phase, 1: three phase */ | ||
|  |                                 pm_type          :1, | ||
|  |     /** flag to mark if opposite phase
 | ||
|  |      * 0: line normal or not support identification. | ||
|  |      * 1: line abnormal. | ||
|  |      * it means neutral wire and live wire reversed when pm type is single | ||
|  |      * phase. | ||
|  |      * it means reverse phase sequence when pm type is three phase. | ||
|  |      */ | ||
|  |                                 opposite_phase   :1, | ||
|  |     /** phase type of three phase meter, see IOT_SG_CCO_PHASE_SEQ_XXX */ | ||
|  |                                 phase_type       :3; | ||
|  |     /** reserved */ | ||
|  |     uint8_t                     rsvd[11]; | ||
|  | } iot_cli_sg_node_detail_info_t; | ||
|  | 
 | ||
|  | /** report node id information */ | ||
|  | typedef struct _iot_cli_sg_qr_node_info_ul { | ||
|  |     /** total node count */ | ||
|  |     uint16_t                    total_cnt; | ||
|  |     /** start index, value range */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /** report node count */ | ||
|  |     uint8_t                     rpt_cnt; | ||
|  |     /** node information */ | ||
|  |     iot_cli_sg_node_detail_info_t   node_info[0]; | ||
|  | } iot_cli_sg_qr_node_info_ul_t; | ||
|  | 
 | ||
|  | /** send boardcast data dl */ | ||
|  | typedef struct _iot_cli_sg_send_broadcast_data_dl { | ||
|  |     /** data proto type */ | ||
|  |     uint8_t                     proto_type; | ||
|  |     /** reserved */ | ||
|  |     uint8_t                     rsvd[15]; | ||
|  |     /** broadcast data length */ | ||
|  |     uint16_t                    len; | ||
|  |     /** broadcast data */ | ||
|  |     uint8_t                     data[0]; | ||
|  | } iot_cli_sg_send_broadcast_data_dl; | ||
|  | 
 | ||
|  | /** set mac addr dl */ | ||
|  | typedef struct _iot_cli_sg_set_mac_dl { | ||
|  |     /** new mac */ | ||
|  |     uint8_t mac[IOT_MAC_ADDR_LEN]; | ||
|  | } iot_cli_sg_set_mac_dl_t; | ||
|  | 
 | ||
|  | typedef struct _iot_cli_sg_trans_local_proto_data_dl { | ||
|  |     /* reserved */ | ||
|  |     uint8_t rsvd[4]; | ||
|  |     /* trans data len */ | ||
|  |     uint16_t data_len; | ||
|  |     /* 376.2 data */ | ||
|  |     uint8_t data[0]; | ||
|  | } iot_cli_sg_trans_local_proto_data_dl_t; | ||
|  | 
 | ||
|  | typedef struct _iot_cli_sg_resp_local_proto_data_ul { | ||
|  |     /* response data len */ | ||
|  |     uint16_t date_len; | ||
|  |     /* response data */ | ||
|  |     uint8_t data[0]; | ||
|  | } iot_cli_sg_resp_local_proto_data_ul_t; | ||
|  | 
 | ||
|  | #if IOT_CLI_SG_INTERFACE_ENABLE
 | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_cli_sg_get_headroom_req() - when sg transter iot_pkt_t to cli | ||
|  |  *                                        that the iot_pkt_t need reserve some | ||
|  |  *                                        space in iot_pkt_t head part. | ||
|  |  * @return:                               the space size to be reserved. | ||
|  |  */ | ||
|  | uint8_t iot_cli_sg_get_headroom_req(); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_cli_sg_interface_register() - register smart grid interface to | ||
|  |  *                          cli module. | ||
|  |  * @param cli_interface:    smart grid interface. | ||
|  |  * @return:                 register result, see IOT_CLI_SG_REG_xxx. | ||
|  |  */ | ||
|  | uint32_t iot_cli_sg_interface_register(iot_cli_sg_interface_t *cli_interface); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * @brief iot_cli_sg_send_data_to_cli_interface() - sg send data to cli | ||
|  |  *                                                  interface. | ||
|  |  * @param pkt:    meter list data. | ||
|  |  * @param msg_id: the data identify | ||
|  |  * @param req_id: request id | ||
|  |  */ | ||
|  | void iot_cli_sg_send_data_to_cli_interface(iot_pkt_t *pkt, uint8_t msg_id, | ||
|  |     uint8_t req_id); | ||
|  | 
 | ||
|  | #else
 | ||
|  | 
 | ||
|  | #define iot_cli_sg_get_headroom_req() (0)
 | ||
|  | 
 | ||
|  | #define iot_cli_sg_interface_register(cli_interface) \
 | ||
|  |     IOT_CLI_SG_REGISTER_FAILURE | ||
|  | 
 | ||
|  | #define iot_cli_sg_send_data_to_cli_interface(pkt, msg_id, req_id) IOT_ASSERT(0)
 | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #pragma pack(pop)   /* restore the pack status */
 | ||
|  | 
 | ||
|  | /* reserved for cli channel header. */ | ||
|  | #define IOT_SG_CLI_CHANNEL_HEADROOM  \
 | ||
|  |     (sizeof(iot_cli_sg_resp_local_proto_data_ul_t) + \ | ||
|  |      sizeof(iot_cli_sg_msg_header_t)) | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* IOT_CLI_SG_API_H */
 |