1984 lines
		
	
	
		
			70 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			1984 lines
		
	
	
		
			70 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 PROTO_SPG_CCO_H
 | ||
|  | #define PROTO_SPG_CCO_H
 | ||
|  | 
 | ||
|  | #include "os_types_api.h"
 | ||
|  | #include "iot_utils_api.h"
 | ||
|  | #include "proto_spg.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #pragma pack(push)  /* save the pack status */
 | ||
|  | #pragma pack(1)     /* 1 byte align */
 | ||
|  | 
 | ||
|  | /* task exe status for 05h_f5 */ | ||
|  | #define PROTO_SPG_TASK_EXE_STATUS_SUCCESS            (0x00)
 | ||
|  | #define PROTO_SPG_TASK_EXE_STATUS_SEC_NODE_NO_RSP    (0x01)
 | ||
|  | #define PROTO_SPG_TASK_EXE_STATUS_DATA_INVALID       (0x02)
 | ||
|  | #define PROTO_SPG_TASK_EXE_STATUS_OTHER_ERR          (0xFF)
 | ||
|  | 
 | ||
|  | /* Maximum value of the link quality by spg proto */ | ||
|  | #define SPG_MAX_LINK_QUALITY_VALUE                   (31)
 | ||
|  | 
 | ||
|  | /* task suggest timeout time, uint is 1s */ | ||
|  | #define PROTO_SGP_TASK_SUGGEST_TIMEOUT               (300)
 | ||
|  | 
 | ||
|  | /* max query sec node phase info count */ | ||
|  | #define PROTO_SPG_MAX_QUERY_SEC_NODE_PHASE_INFO_CNT  (16)
 | ||
|  | 
 | ||
|  | /* sec node support phase detection */ | ||
|  | #define PTORO_SPG_SEC_NODE_PHASE_SUPP_DETECT         (0)
 | ||
|  | /* sec node not support phase detection */ | ||
|  | #define PTORO_SPG_SEC_NODE_PHASE_NOT_SUPP_DETECT     (1)
 | ||
|  | /* sec node phase is unknown */ | ||
|  | #define PTORO_SPG_SEC_NODE_PHASE_UNKNOWN             (2)
 | ||
|  | 
 | ||
|  | /* file type of spg upgrade */ | ||
|  | #define PROTO_SPG_UPGRADE_FILE_CLEAR                 (0)
 | ||
|  | #define PROTO_SPG_UPGRADE_FILE_CCO                   (1)
 | ||
|  | #define PROTO_SPG_UPGRADE_FILE_STA                   (2)
 | ||
|  | #define PROTO_SPG_UPGRADE_FILE_COLLECTOR             (3)
 | ||
|  | 
 | ||
|  | /* upgrade progress */ | ||
|  | /* upgrade succeed */ | ||
|  | #define PROTO_SPG_UPGRADE_PROGRESS_SUCCEED           (0)
 | ||
|  | /* upgrade is running */ | ||
|  | #define PROTO_SPG_UPGRADE_PROGRESS_RUNNING           (1)
 | ||
|  | /* upgrade fail */ | ||
|  | #define PROTO_SPG_UPGRADE_PROGRESS_FAIL              (2)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /* query result of SEC NODE TSFM */ | ||
|  | /* the sec node is part of current transformer */ | ||
|  | #define PROTO_SPG_CCO_RPT_TSFM_RES_0               (0)
 | ||
|  | /* the sec node is out of current transformer */ | ||
|  | #define PROTO_SPG_CCO_RPT_TSFM_RES_1               (1)
 | ||
|  | /* STA cannot communicate with CCo */ | ||
|  | #define PROTO_SPG_CCO_RPT_TSFM_RES_2               (2)
 | ||
|  | /* unkown */ | ||
|  | #define PROTO_SPG_CCO_RPT_TSFM_RES_3               (3)
 | ||
|  | /* not support TSFM */ | ||
|  | #define PROTO_SPG_CCO_RPT_TSFM_RES_4               (4)
 | ||
|  | 
 | ||
|  | /* event type for other */ | ||
|  | #define PROTO_SPG_EVENT_NORMAL                     (0)
 | ||
|  | #define PROTO_SPG_EVENT_POWER_DOWN                 (1)
 | ||
|  | #define PROTO_SPG_EVENT_POWER_UP                   (2)
 | ||
|  | #define PROTO_SPG_EVENT_POWER_DOWN_C               (3)
 | ||
|  | #define PROTO_SPG_EVENT_POWER_UP_C                 (4)
 | ||
|  | 
 | ||
|  | /* guangdong protocol power event type */ | ||
|  | #define PROTO_SPG_EVENT_POWER_DOWN_GUANGDONG       (0x81)
 | ||
|  | #define PROTO_SPG_EVENT_POWER_UP_GUANGDONG         (0x82)
 | ||
|  | 
 | ||
|  | /* STA communication mode */ | ||
|  | #define PROTO_SPG_COMM_MOD_UNKNOW                  (0)
 | ||
|  | #define PROTO_SPG_COMM_MOD_CARRIER                 (1)
 | ||
|  | #define PROTO_SPG_COMM_MOD_WIRELESS                (2)
 | ||
|  | 
 | ||
|  | /* tsfm state for guangzhou */ | ||
|  | #define PROTO_SPG_TSFM_STATE_UNKNOW                (0)
 | ||
|  | #define PROTO_SPG_TSFM_STATE_SAME                  (1)
 | ||
|  | #define PROTO_SPG_TSFM_STATE_DIFF                  (2)
 | ||
|  | #define PROTO_SPG_TSFM_STATE_NOSUPP                (3)
 | ||
|  | 
 | ||
|  | /* tsfm dectect result for guangdong */ | ||
|  | #define PROTO_SPG_TSFM_DECT_RESULT_SAME            (0)
 | ||
|  | #define PROTO_SPG_TSFM_DECT_RESULT_DIFF            (1)
 | ||
|  | #define PROTO_SPG_TSFM_DECT_RESULT_COMM_FAIL       (2)
 | ||
|  | #define PROTO_SPG_TSFM_DECT_RESULT_UNKNOWN         (3)
 | ||
|  | #define PROTO_SPG_TSFM_DECT_RESULT_NOSUPPORT       (4)
 | ||
|  | 
 | ||
|  | /* guangdong report others node tsfm dectect state max count */ | ||
|  | #define PROTO_SPG_RPT_TSFM_STATE_MAX_CNT           (64)
 | ||
|  | 
 | ||
|  | /* max report node count */ | ||
|  | #define PROTO_SPG_MAX_RPT_NODE_CNT                 (64)
 | ||
|  | 
 | ||
|  | #define PROTO_SPG_DATETIME_LEN                     (6)
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | /* guangzhou power event report length except data fields for DL/T 645 */ | ||
|  | #define PROTO_645_POWER_EVT_RPT_DATA_PKT_LEN       (12)
 | ||
|  | 
 | ||
|  | /* query score max node count */ | ||
|  | #define PROTO_SPG_MAX_QUERY_SCORE_NODE_CNT         (20)
 | ||
|  | /* score parameter */ | ||
|  | #define PROTO_SPG_CCO_MAX_SCORE                    (100)
 | ||
|  | #define PROTO_SPG_CCO_MIN_SCORE                    (10)
 | ||
|  | 
 | ||
|  | /* collection task structure definition */ | ||
|  | /* define pm protocol type in collection task structure */ | ||
|  | #define PROTO_SPG_CLCT_TASK_PROTO_TYPE_UNKNOWN        (0)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_PROTO_TYPE_645_97         (1)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_PROTO_TYPE_645_07         (2)
 | ||
|  | 
 | ||
|  | /* define pm type in collection task structure */ | ||
|  | #define PROTO_SPG_CLCT_TASK_PM_TYPE_INVALID           (0)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_PM_TYPE_SINGE             (1)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_PM_TYPE_3P                (2)
 | ||
|  | 
 | ||
|  | /* query collection task status max cnt */ | ||
|  | #define PROTO_SPG_CLCT_MAX_QUERY_STATUS_CNT           (10)
 | ||
|  | /* module support the max cnt of collection task when unicast */ | ||
|  | #define PROTO_SPG_CLCT_MAX_METER_TASK_CNT             (5)
 | ||
|  | /* module support the max cnt of collection task when bcast */ | ||
|  | #define PROTO_SPG_CLCT_MAX_ROUTER_TASK_CNT            (16)
 | ||
|  | 
 | ||
|  | /* collection task status */ | ||
|  | #define PROTO_SPG_CLCT_TASK_STATUS_SUCCESS            (0)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_STATUS_SEC_NODE_NO_RSP    (1)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_STATUS_DATA_INVALID       (2)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_STATUS_NO_SUP_CFG         (3)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_STATUS_PM_TYPE_ERR        (4)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_STATUS_MAJOR_UNSEND       (6)
 | ||
|  | #define PROTO_SPG_CLCT_TASK_STATUS_OTHER_ERR          (0xFF)
 | ||
|  | 
 | ||
|  | /* collect data read task status */ | ||
|  | #define PROTO_SPG_CLCT_READ_STATUS_SEC_NODE_NO_RSP    (1)
 | ||
|  | #define PROTO_SPG_CLCT_READ_STATUS_DATA_INVALID       (2)
 | ||
|  | /* routing module and meter module collection task are not synchronized */ | ||
|  | #define PROTO_SPG_CLCT_READ_STATUS_CRC_DIFF           (3)
 | ||
|  | #define PROTO_SPG_CLCT_READ_STATUS_SEC_ID_INVALID     (4)
 | ||
|  | #define PROTO_SPG_CLCT_READ_STATUS_OTHER_ERR          (0xFF)
 | ||
|  | 
 | ||
|  | /* range of influence from white list */ | ||
|  | #define PROTO_SPG_WL_INFLUENCE_LIST_FILE              (0)
 | ||
|  | #define PROTO_SPG_WL_INFLUENCE_VENDOR_DEFINE          (1)
 | ||
|  | #define PROTO_SPG_WL_INFLUENCE_ALL                    (2)
 | ||
|  | 
 | ||
|  | /* power event rpt dev type */ | ||
|  | #define PROTO_SPG_DEV_TYPE_METER                      (0)
 | ||
|  | #define PROTO_SPG_DEV_TYPE_COLLECTOR                  (1)
 | ||
|  | #define PROTO_SPG_DEV_TYPE_COLLECTOR_METER            (2)
 | ||
|  | 
 | ||
|  | /* the max cnt of query node channel info */ | ||
|  | #define PROTO_SPG_MAX_QR_CHANNEL_STA_CNT              (6)
 | ||
|  | #define PROTO_SPG_MAX_QR_CHANNEL_CCO_CNT              (20)
 | ||
|  | 
 | ||
|  | /* query sec node run state id count */ | ||
|  | #define PROTO_SPG_QR_ID_CNT_RUNTIME                   (1)
 | ||
|  | #define PROTO_SPG_QR_ID_CNT_ZC_INFO                   (4)
 | ||
|  | 
 | ||
|  | /* ctrl send data type */ | ||
|  | #define PROTO_SPG_CTRL_DATA_TYPE_CCO_CTRL             (0x00)
 | ||
|  | #define PROTO_SPG_CTRL_DATA_TYPE_PASSTHROUGH          (0x01)
 | ||
|  | 
 | ||
|  | /* manufacture code */ | ||
|  | #define PROTO_SPG_BASE_INFO_OEM_CODE                  (0x00)
 | ||
|  | /* version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_VER_INFO                  (0x01)
 | ||
|  | /* bootload version */ | ||
|  | #define PROTO_SPG_BASE_INFO_BOOTLOADER                (0x02)
 | ||
|  | /* chip code */ | ||
|  | #define PROTO_SPG_BASE_INFO_CHIP_CODE                 (0x05)
 | ||
|  | /* version date */ | ||
|  | #define PROTO_SPG_BASE_INFO_VER_DATE                  (0x06)
 | ||
|  | /* module mac addr */ | ||
|  | #define PROTO_SPG_BASE_INFO_MOD_MAC                   (0x08)
 | ||
|  | /* module hardware version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_HW_MOD_VER_INFO           (0x09)
 | ||
|  | /* module hardware version date */ | ||
|  | #define PROTO_SPG_BASE_INFO_HW_MOD_DATE               (0x0A)
 | ||
|  | /* chip software version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_SW_CHIP_VER_INFO          (0x0B)
 | ||
|  | /* chip software version date */ | ||
|  | #define PROTO_SPG_BASE_INFO_SW_CHIP_VER_DATE          (0x0C)
 | ||
|  | /* chip hardware version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_HW_CHIP_VER_INFO          (0x0D)
 | ||
|  | /* chip hardware version date */ | ||
|  | #define PROTO_SPG_BASE_INFO_HW_CHIP_VER_DATE          (0x0E)
 | ||
|  | /* application version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_APP_VER_INFO              (0x0F)
 | ||
|  | /* module device id */ | ||
|  | #define PROTO_SPG_BASE_INFO_DEV_ID                    (0x10)
 | ||
|  | 
 | ||
|  | /* manufacture code reserved length */ | ||
|  | #define PROTO_SPG_BASE_INFO_OEM_CODE_RSVD_LEN         (2)
 | ||
|  | /* version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_VER_INFO_RSVD_LEN         (2)
 | ||
|  | /* bootload version */ | ||
|  | #define PROTO_SPG_BASE_INFO_BOOTLOADER_RSVD_LEN       (1)
 | ||
|  | /* chip code */ | ||
|  | #define PROTO_SPG_BASE_INFO_CHIP_CODE_RSVD_LEN        (2)
 | ||
|  | /* version date */ | ||
|  | #define PROTO_SPG_BASE_INFO_VER_DATE_RSVD_LEN         (3)
 | ||
|  | /* module mac addr */ | ||
|  | #define PROTO_SPG_BASE_INFO_MOD_MAC_RSVD_LEN          (6)
 | ||
|  | /* module hardware version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_HW_MOD_VER_INFO_RSVD_LEN  (2)
 | ||
|  | /* module hardware version date */ | ||
|  | #define PROTO_SPG_BASE_INFO_HW_MOD_DATE_RSVD_LEN      (3)
 | ||
|  | /* chip software version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_SW_CHIP_VER_INFO_RSVD_LEN (2)
 | ||
|  | /* chip software version date */ | ||
|  | #define PROTO_SPG_BASE_INFO_SW_CHIP_VER_DATE_RSVD_LEN (3)
 | ||
|  | /* chip hardware version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_HW_CHIP_VER_INFO_RSVD_LEN (2)
 | ||
|  | /* chip hardware version date */ | ||
|  | #define PROTO_SPG_BASE_INFO_HW_CHIP_VER_DATE_RSVD_LEN (3)
 | ||
|  | /* application version id */ | ||
|  | #define PROTO_SPG_BASE_INFO_APP_VER_INFO_RSVD_LEN     (2)
 | ||
|  | /* module device id */ | ||
|  | #define PROTO_SPG_BASE_INFO_DEV_ID_RSVD_LEN           (24)
 | ||
|  | 
 | ||
|  | /* version info device id len */ | ||
|  | #define PROTO_SPG_DEVICE_ID_LEN                       (11)
 | ||
|  | /* version info chip management id len */ | ||
|  | #define PROTO_SPG_CHIP_MMID_ID_LEN                    (24)
 | ||
|  | 
 | ||
|  | /* branch detect report state */ | ||
|  | /* not doing branch detect or branch detect is done */ | ||
|  | #define PROTO_SPG_BD_STATE_DONE                       (0)
 | ||
|  | /* doing branch detect */ | ||
|  | #define PROTO_SPG_BD_STATE_DOING                      (1)
 | ||
|  | 
 | ||
|  | /* query physical topo device type */ | ||
|  | #define PROTO_SPG_BD_DEV_TYPE_POWER_METER             (1)
 | ||
|  | #define PROTO_SPG_BD_DEV_TYPE_POWER_METER_3P          (2)
 | ||
|  | #define PROTO_SPG_BD_DEV_TYPE_SWITCH_MONITOR          (3)
 | ||
|  | 
 | ||
|  | /* spg task info */ | ||
|  | typedef struct _spg_task_info { | ||
|  |     /* task id */ | ||
|  |     uint16_t     task_id; | ||
|  |     /* task priority, 0 - hight priority, 3 - low priority*/ | ||
|  |     uint8_t      task_pri       : 4; | ||
|  |     /* reserve */ | ||
|  |     uint8_t      reseve_1       : 1, | ||
|  |                  reseve_2       : 1, | ||
|  |    /* data forward flag for hainan, 0 - needless forward, 1 - need forward */ | ||
|  |                  forward_flag   : 1, | ||
|  |     /* flag of the ack, 0 - need ack, 1 - needless ack */ | ||
|  |                  ack_flag       : 1; | ||
|  |     /* time of the timeout, unit is second */ | ||
|  |     uint16_t     timeout_dur; | ||
|  |     /* length of the app data */ | ||
|  |     uint8_t      data_len; | ||
|  |     /* comment of the app data */ | ||
|  |     uint8_t      data[0]; | ||
|  | } spg_task_info_t; | ||
|  | 
 | ||
|  | /* add task down link request */ | ||
|  | typedef struct _spg_afn02_fn01_add_task_dl { | ||
|  |     /* spg task information */ | ||
|  |     spg_task_info_t task_info; | ||
|  | } spg_afn02_fn01_add_task_dl_t; | ||
|  | 
 | ||
|  | /* remove task down link request */ | ||
|  | typedef struct _spg_afn02_fn02_rm_task_dl { | ||
|  |     /* task id */ | ||
|  |     uint16_t     task_id; | ||
|  | } spg_afn02_fn02_rm_task_dl_t; | ||
|  | 
 | ||
|  | /* unfinish task count */ | ||
|  | typedef struct _spg_afn02_fn03_query_unfinish_task_ul { | ||
|  |     /* unfinish task count */ | ||
|  |     uint16_t     unfinished_cnt; | ||
|  | } spg_afn02_fn03_query_unfinish_task_ul_t; | ||
|  | 
 | ||
|  | /* pending task information down link request */ | ||
|  | typedef struct _spg_afn02_fn05_pending_task_info_dl { | ||
|  |     /* pending task id */ | ||
|  |     uint16_t     task_id; | ||
|  | } spg_afn02_fn05_pending_task_info_dl_t; | ||
|  | 
 | ||
|  | /* pending task information up link request */ | ||
|  | typedef struct spg_afn02_fn05_pending_task_hdr_ul { | ||
|  |     /* pending task id */ | ||
|  |     uint16_t     task_id; | ||
|  |     /* priority level, 0 - hight priority, 3 - low priority */ | ||
|  |     uint8_t      task_pri : 4, | ||
|  |                  reseve_1 : 1, | ||
|  |                  reseve_2 : 1, | ||
|  |                  reseve_3 : 1; | ||
|  |     /* 0 - need ack, 1 - needless ack */ | ||
|  |     uint8_t      ack_flag : 1; | ||
|  |     /* count of the task address */ | ||
|  |     uint16_t     addr_cnt; | ||
|  |     /* address of the task */ | ||
|  |     uint8_t      addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn02_fn05_pending_task_hdr_ul_t; | ||
|  | 
 | ||
|  | /* data in the pending task up link request */ | ||
|  | typedef struct spg_afn02_fn05_pending_task_data_ul { | ||
|  |     /* length of data in a task */ | ||
|  |     uint8_t      len; | ||
|  |     /* content of the task */ | ||
|  |     uint8_t      data[0]; | ||
|  | } spg_afn02_fn05_pending_task_data_ul_t; | ||
|  | 
 | ||
|  | /* count of the free task, up link response */ | ||
|  | typedef struct _spg_afn02_fn06_query_free_taskcnt_ul { | ||
|  |     /* count of free task */ | ||
|  |     uint16_t     free_task_cnt; | ||
|  | } spg_afn02_fn06_query_free_taskcnt_ul_t; | ||
|  | 
 | ||
|  | /* unfinish task id down link request */ | ||
|  | typedef struct _spg_afn02_fn04_query_unfinished_task_list_dl { | ||
|  |     /* start index of unfinished task to be queried,
 | ||
|  |      * start ftom 0 be queried | ||
|  |      */ | ||
|  |     uint16_t     start_index; | ||
|  |     /* count to be queried this time */ | ||
|  |     uint8_t      query_count; | ||
|  | } spg_afn02_fn04_query_unfinished_task_list_dl_t; | ||
|  | 
 | ||
|  | /* unfinish task id list up link */ | ||
|  | typedef struct _spg_afn02_fn04_query_unfinish_task_list_ul { | ||
|  |     /* unfinish task count */ | ||
|  |     uint16_t     task_cnt; | ||
|  |     /* task id */ | ||
|  |     uint16_t     task_id[0]; | ||
|  | } spg_afn02_fn04_query_unfinish_task_list_ul_t; | ||
|  | 
 | ||
|  | /* add task down link request */ | ||
|  | typedef struct _spg_afn02_fn07_add_multi_task_dl { | ||
|  |     /* task id */ | ||
|  |     uint16_t     task_id; | ||
|  |     /* task priority, 0 - hight priority, 3 - low priority*/ | ||
|  |     uint8_t      task_pri       : 4; | ||
|  |     /* reserve */ | ||
|  |     uint8_t      reseve_1       : 1, | ||
|  |                  reseve_2       : 1, | ||
|  |     /* data forward flag, 0 - needless forward, 1 - need forward */ | ||
|  |                  forward_flag   : 1, | ||
|  |     /* flag of the ack, 0 - need ack, 1 - needless ack */ | ||
|  |                  ack_flag       : 1; | ||
|  |     /* power meter count */ | ||
|  |     uint16_t     pm_count; | ||
|  |     /* power meter mac addr */ | ||
|  |     uint8_t      pm_mac[0][IOT_MAC_ADDR_LEN]; | ||
|  |     //spg_afn02_fn07_datagram_t data;
 | ||
|  | } spg_afn02_fn07_add_multi_task_dl_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn02_fn07_datagram { | ||
|  |     /* time of the timeout, unit is second */ | ||
|  |     uint16_t     timeout_dur; | ||
|  |     /* length of the app data */ | ||
|  |     uint8_t      data_len; | ||
|  |     /* comment of the app data */ | ||
|  |     uint8_t      data[0]; | ||
|  | } spg_afn02_fn07_datagram_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn04_fnc1_edge_computing_set { | ||
|  |     /* overvoltage monitor switch, 0 - open, others - close */ | ||
|  |     uint8_t      overvoltage_switch; | ||
|  |     /* overvoltage monitor threshold, unit is volt */ | ||
|  |     uint16_t     overvoltage_threshold; | ||
|  |     /* overvoltage monitor period, unit is 1min */ | ||
|  |     uint16_t     overvoltage_period; | ||
|  |     /* overvoltage collect abnormal report round */ | ||
|  |     uint8_t      overvoltage_rpt_round; | ||
|  |     /* undervoltage monitor switch, 0 - open, others - close */ | ||
|  |     uint8_t      undervoltage_switch; | ||
|  |     /* undervoltage monitor threshold, unit is volt */ | ||
|  |     uint16_t     undervoltage_threshold; | ||
|  |     /* undervoltage monitor period, unit is 1min */ | ||
|  |     uint16_t     undervoltage_period; | ||
|  |     /* undervoltage collect abnormal report round */ | ||
|  |     uint8_t      undervoltage_rpt_round; | ||
|  |     /* clock second pulse monitor switch, 0 - open, others - close */ | ||
|  |     uint8_t      pulse_switch; | ||
|  |     /* clock second pulse monitor threshold, unit is 1ms */ | ||
|  |     uint16_t     pulse_threshold; | ||
|  |     /* power meter health status monitor switch, 0 - open, others - close */ | ||
|  |     uint8_t      health_status_switch; | ||
|  |     /* power meter used time limit threshold, unit is year */ | ||
|  |     uint8_t      used_limit_threshold; | ||
|  | } spg_afn04_fnc1_edge_computing_set_t; | ||
|  | 
 | ||
|  | /* query manufacturer and version up link */ | ||
|  | typedef struct _spg_afn03_fn01_hw_info_ul { | ||
|  |     /* hardware information */ | ||
|  |     mod_spg_hw_info_t info; | ||
|  | } spg_afn03_fn01_hw_info_ul_t; | ||
|  | 
 | ||
|  | /* local device status msg */ | ||
|  | typedef struct _spg_afn03_fn02_module_work_mode { | ||
|  |     /* enum spg_communication_type */ | ||
|  |     uint8_t           phy_type : 4; | ||
|  |     /* reserved field */ | ||
|  |     uint8_t           reserved : 4; | ||
|  |     /* MTU of the datagram (unit: BYTE)*/ | ||
|  |     uint16_t          datagram_mtu; | ||
|  |     /* MTU of the transmission file (unit: BYTE)*/ | ||
|  |     uint16_t          file_send_mtu; | ||
|  |     /* wait of the time, after the file transfer is completed (unit: MINUTE)*/ | ||
|  |     uint8_t           upgrade_wait_dur; | ||
|  |     /* MAC of the CCO */ | ||
|  |     uint8_t           cco_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* the maximum secondary node number of support */ | ||
|  |     uint16_t          sec_node_cnt_max; | ||
|  |     /* count of the current secondary node */ | ||
|  |     uint16_t          sec_node_cnt; | ||
|  |     /* count of the single operation */ | ||
|  |     uint16_t          sec_node_opt_cnt_max; | ||
|  |     /* date of the proto */ | ||
|  |     uint8_t           proto_rel_date[3]; | ||
|  |     /* info of the manufacture and version */ | ||
|  |     mod_spg_hw_info_t hw_info; | ||
|  | } spg_afn03_fn02_mod_work_mode_t; | ||
|  | 
 | ||
|  | /* query CCO address up link */ | ||
|  | typedef struct _spg_afn03_fn03_cco_mac_ul { | ||
|  |     /* CCO address */ | ||
|  |     uint8_t           mac[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn03_fn03_cco_mac_ul_t; | ||
|  | 
 | ||
|  | /* query communication delay time down link */ | ||
|  | typedef struct _spg_afn03_fn04_comm_delay_dl { | ||
|  |     /* communication dest address */ | ||
|  |     uint8_t           dest_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* data len */ | ||
|  |     uint8_t           len; | ||
|  | } spg_afn03_fn04_comm_delay_dl_t; | ||
|  | 
 | ||
|  | /* query communication delay time up link */ | ||
|  | typedef struct _spg_afn03_fn04_comm_delay_ul { | ||
|  |     /* communication dest address */ | ||
|  |     uint8_t           dest_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* communication delay time */ | ||
|  |     uint16_t          delay_time; | ||
|  |     /* data len */ | ||
|  |     uint8_t           len; | ||
|  | } spg_afn03_fn04_comm_delay_ul_t; | ||
|  | 
 | ||
|  | /* query total count of the secondary node up link */ | ||
|  | typedef struct _spg_afn03_fn05_query_sec_node_count_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t         sec_node_count; | ||
|  | } spg_afn03_fn05_query_sec_node_count_ul_t; | ||
|  | 
 | ||
|  | /* query secondary node info down link */ | ||
|  | typedef struct _spg_afn03_fn06_query_sec_node_info_dl { | ||
|  |     /* start index of the secondary node to be queried */ | ||
|  |     uint16_t     start_index; | ||
|  |     /* count of the secondary node to be queried */ | ||
|  |     uint8_t      sec_node_count; | ||
|  | } spg_afn03_fn06_query_sec_node_info_dl_t; | ||
|  | 
 | ||
|  | /* query secondary node info up link */ | ||
|  | typedef struct _spg_afn03_fn06_query_sec_node_info_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t         total_count; | ||
|  |     /* count of the secondary node in current report */ | ||
|  |     uint8_t          rps_sec_node_count; | ||
|  |     /* mac address list of the secondary node */ | ||
|  |     uint8_t          mac[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn03_fn06_query_sec_node_info_ul_t; | ||
|  | 
 | ||
|  | /* secondary node register status up link */ | ||
|  | typedef struct _spg_afn03_fn07_sec_node_reg_state_ul { | ||
|  |     /* 0 - register done, 1 - registering */ | ||
|  |     uint8_t          reg_state; | ||
|  | } spg_afn03_fn07_sec_node_reg_state_ul_t; | ||
|  | 
 | ||
|  | /* Parent-node info down link */ | ||
|  | typedef struct _spg_afn03_fn08_query_parent_node_dl { | ||
|  |     /* mac address of the secondary node */ | ||
|  |     uint8_t      sec_node_mac[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn03_fn08_query_parent_node_dl_t; | ||
|  | 
 | ||
|  | /* Parent-node info up link */ | ||
|  | typedef struct _spg_afn03_fn08_query_parent_node_ul { | ||
|  |     /* MAC address of the secondary node */ | ||
|  |     uint8_t          sec_node_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* MAC address of the parent-node */ | ||
|  |     uint8_t          parent_node_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* value 0 ~ 31. 0 - worst, 31 - best */ | ||
|  |     uint8_t          link_quality; | ||
|  | } spg_afn03_fn08_query_parent_node_ul_t; | ||
|  | 
 | ||
|  | /* query meter mapping count up link */ | ||
|  | typedef struct _spg_afn03_fn09_query_meter_map_cnt_ul { | ||
|  |     /* meter mapping count */ | ||
|  |     uint16_t         mapping_cnt; | ||
|  | } spg_afn03_fn09_query_meter_map_cnt_ul_t; | ||
|  | 
 | ||
|  | /* query meter mapping info down link */ | ||
|  | typedef struct _spg_afn03_fn0a_query_meter_map_info_dl { | ||
|  |     /* query start meter mapping index */ | ||
|  |     uint16_t         start_index; | ||
|  |     /* query count */ | ||
|  |     uint8_t          cnt; | ||
|  | } spg_afn03_fn0a_query_meter_map_info_dl_t; | ||
|  | 
 | ||
|  | /* spg meter mapping info */ | ||
|  | typedef struct _spg_meter_mapping_info { | ||
|  |     /* node mac address - small endian */ | ||
|  |     uint8_t          node_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* meter address - small endian */ | ||
|  |     uint8_t          meter_addr[IOT_METER_ADDR_LEN]; | ||
|  | } spg_meter_mapping_info_t; | ||
|  | 
 | ||
|  | /* query meter mapping info up link */ | ||
|  | typedef struct _spg_afn03_fn0a_rpt_meter_map_info_ul { | ||
|  |     /* total meter mapping index */ | ||
|  |     uint16_t         total_cnt; | ||
|  |     /* rpt count this time */ | ||
|  |     uint8_t          cnt; | ||
|  |     /* meter mapping info */ | ||
|  |     spg_meter_mapping_info_t meter_map_info[0]; | ||
|  | } spg_afn03_fn0a_rpt_meter_map_info_ul_t; | ||
|  | 
 | ||
|  | /* Parent-node info up link */ | ||
|  | typedef struct _spg_afn03_fn10_query_detect_status_ul { | ||
|  |     /* transformer detect status */ | ||
|  |     uint8_t          status; | ||
|  |     /* transformer detect left time */ | ||
|  |     uint16_t         left_time; | ||
|  |     /* reserved */ | ||
|  |     uint8_t          resvd; | ||
|  | } spg_afn03_fn10_query_detect_status_ul_t; | ||
|  | 
 | ||
|  | /* query module mac info down link */ | ||
|  | typedef struct _spg_afn03_fn13_query_mod_mac_info_dl { | ||
|  |     /* start query index of the secondary node, start from 0 */ | ||
|  |     uint16_t         start_index; | ||
|  |     /* query count */ | ||
|  |     uint8_t          cnt; | ||
|  | } spg_afn03_fn13_query_mod_mac_info_dl_t; | ||
|  | 
 | ||
|  | /* module mac info */ | ||
|  | typedef struct _spg_mod_mac_info { | ||
|  |     /* meter address, little-endian */ | ||
|  |     uint8_t          meter_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* module mac address, big-endian */ | ||
|  |     uint8_t          mod_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* reserved */ | ||
|  |     uint8_t          rsvd[24]; | ||
|  | } spg_mod_mac_info_t; | ||
|  | 
 | ||
|  | /* query module mac info up link */ | ||
|  | typedef struct _spg_afn03_fn13_rpt_mod_mac_info_ul { | ||
|  |     /* total node cnt */ | ||
|  |     uint16_t         total_cnt; | ||
|  |     /* start query index of the secondary node, start from 0 */ | ||
|  |     uint16_t         start_index; | ||
|  |     /* rpt count this time */ | ||
|  |     uint8_t          cnt; | ||
|  |     /* module property info */ | ||
|  |     spg_mod_mac_info_t          mac_info[0]; | ||
|  | } spg_afn03_fn13_rpt_mod_mac_info_ul_t; | ||
|  | 
 | ||
|  | /* query other's node tsfm dectect result down link for guangdong */ | ||
|  | typedef struct _spg_afn03_fn11_query_other_tsfm_result_dl { | ||
|  |     /* start query index of the secondary node, start from 0 */ | ||
|  |     uint16_t         start_index; | ||
|  |     /* query count */ | ||
|  |     uint8_t          cnt; | ||
|  | } spg_afn03_fn11_query_other_tsfm_result_dl_t; | ||
|  | 
 | ||
|  | /* tsfm dectect report info */ | ||
|  | typedef struct _spg_tsfm_dect_result { | ||
|  |     /* node mac address, little endian */ | ||
|  |     uint8_t          node_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* tsfm dectect result, see PROTO_SPG_TSFM_DECT_RESULT_XXX */ | ||
|  |     uint8_t          result; | ||
|  |     /* reserved */ | ||
|  |     uint8_t          rsvd; | ||
|  |     /* tsfm dectect mac address, little endian */ | ||
|  |     uint8_t          tsfm_addr[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_tsfm_dect_result_t; | ||
|  | 
 | ||
|  | /* query other's node tsfm dectect result ul link for guangdong */ | ||
|  | typedef struct _spg_afn03_fn11_query_other_tsfm_result_ul { | ||
|  |     /* tsfm dectect total node count */ | ||
|  |     uint16_t                    total_cnt; | ||
|  |     /* report count */ | ||
|  |     uint8_t                     rpt_cnt; | ||
|  |     /* tsfm dectect result */ | ||
|  |     spg_tsfm_dect_result_t      tsfm_result[0]; | ||
|  | } spg_afn03_fn11_query_other_tsfm_result_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn12_query_net_phase_and_tsfm_info_dl { | ||
|  |     /* start query index of the secondary node, start from 1 */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /* count of the secondary node to be queried */ | ||
|  |     uint8_t                     count; | ||
|  | } spg_afn03_fn12_query_net_phase_and_tsfm_info_dl_t; | ||
|  | 
 | ||
|  | typedef struct _spg_sec_node_net_phase_and_tsfm_info { | ||
|  |     /* node mac address - little endian */ | ||
|  |     uint8_t                     mac_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* tsfm state, see PROTO_SPG_TSFM_STATE_XXX */ | ||
|  |     uint8_t                     tsfm_state; | ||
|  |     /* node phase identification, D0-D2 : connect with A/B/C phase if set 1,
 | ||
|  |      * otherwise not connect to corresponding phase | ||
|  |      */ | ||
|  |     uint16_t                    phase           : 3, | ||
|  |     /* flag to mark if L/N reversed in Single-phase power meter or phase
 | ||
|  |      * sequence reversed in Three-phase power meter. | ||
|  |      */ | ||
|  |                                 opposite_phase  : 2, | ||
|  |     /* reserved */ | ||
|  |                                 rsvd            : 11; | ||
|  | } spg_sec_node_net_phase_and_tsfm_info_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn12_query_net_phase_and_tsfm_info_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t                    total_count; | ||
|  |     /* start query index of the secondary node, start from 1 */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t                     ack_node_count; | ||
|  |     /* sec node info of network phase and transformer */ | ||
|  |     spg_sec_node_net_phase_and_tsfm_info_t  node_info[0]; | ||
|  | } spg_afn03_fn12_query_net_phase_and_tsfm_info_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn13_query_base_info_dl { | ||
|  |     /* meter addr, little endian */ | ||
|  |     uint8_t     meter_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* element count */ | ||
|  |     uint8_t     element_cnt; | ||
|  |     /* element info */ | ||
|  |     uint8_t     element[0]; | ||
|  | } spg_afn03_fn13_query_base_info_dl_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn12_query_base_info_ul { | ||
|  |     /* meter addr, little endian */ | ||
|  |     uint8_t     meter_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* element info */ | ||
|  |     uint8_t     data[0]; | ||
|  | } spg_afn03_fn13_query_base_info_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_node_info_ver_info { | ||
|  |     /* mac address of the station: small endian */ | ||
|  |     uint8_t                     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* node vendor id */ | ||
|  |     uint16_t                    vendor_id; | ||
|  |     /* node chip code */ | ||
|  |     uint16_t                    chip_code; | ||
|  |     /* software version day */ | ||
|  |     uint8_t                     sw_ver_day; | ||
|  |     /* software version month */ | ||
|  |     uint8_t                     sw_ver_month; | ||
|  |     /* software version year */ | ||
|  |     uint8_t                     sw_ver_year; | ||
|  |     /* software version */ | ||
|  |     uint16_t                    sw_ver; | ||
|  | } spg_node_info_ver_info_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn12_fn81_query_vendor_and_ver_dl { | ||
|  |     /* start query index, start from 0. 0 is cco, others station */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /* count of the node to be queried */ | ||
|  |     uint8_t                     count; | ||
|  | } spg_afn03_fn12_fn81_query_vendor_and_ver_dl_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn12_fn81_query_vendor_and_ver_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t                    total_count; | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t                     ack_node_count; | ||
|  |     /* sec node vendor info */ | ||
|  |     spg_node_info_ver_info_t    node_info[0]; | ||
|  | } spg_afn03_fn12_fn81_query_vendor_and_ver_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn14_query_base_info_dl { | ||
|  |     /* start query index, start from 0. 0 is cco, others station */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /* count of the secondary node to be queried */ | ||
|  |     uint8_t                     count; | ||
|  |     /* element info, see PROTO_SPG_BASE_INFO_XXX */ | ||
|  |     uint8_t                     element; | ||
|  | } spg_afn03_fn14_query_base_info_dl_t; | ||
|  | 
 | ||
|  | typedef struct _node_base_info { | ||
|  |     /* node mac addr, little endian */ | ||
|  |     uint8_t                     pm_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* base info */ | ||
|  |     uint8_t                     data[0]; | ||
|  | } node_base_info_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn14_query_base_info_ul { | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t                     ack_node_count; | ||
|  |     /* element info, see PROTO_SPG_CMD_SEC_NODE_INFO_XXX */ | ||
|  |     uint8_t                     element; | ||
|  |     /* node base info */ | ||
|  |     //node_base_info_t            base_info[0];
 | ||
|  | } spg_afn03_fn14_query_base_info_ul_t; | ||
|  | 
 | ||
|  | /* query node vendor info down link */ | ||
|  | typedef struct _spg_afn03_fn21_query_node_vendor_info_dl { | ||
|  |     /* start query index of the secondary node, start from 1 */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /* count of the secondary node to be queried */ | ||
|  |     uint8_t                     count; | ||
|  | } spg_afn03_fn21_query_node_vendor_info_dl_t; | ||
|  | 
 | ||
|  | /* struct contain info of report node vendor */ | ||
|  | typedef struct _spg_sec_node_vendor_info { | ||
|  |     /* node vendor info */ | ||
|  |     spg_node_info_ver_info_t    ver_info; | ||
|  |     /* flag to mark if have super capacitance */ | ||
|  |     uint8_t                     super_cap    : 2, | ||
|  |     /* flag to mark if could fix position */ | ||
|  |                                 fix_position : 2, | ||
|  |     /* reserved */ | ||
|  |                                 rsvd         : 4; | ||
|  | } spg_sec_node_vendor_info_t; | ||
|  | 
 | ||
|  | /* query node vendor info up link */ | ||
|  | typedef struct _spg_afn03_fn21_query_node_vendor_info_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t                    total_count; | ||
|  |     /* start query index of the secondary node */ | ||
|  |     uint16_t                    start_index; | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t                     ack_node_count; | ||
|  |     /* vendor info of the secondary node */ | ||
|  |     spg_sec_node_vendor_info_t  node_info[0]; | ||
|  | } spg_afn03_fn21_query_node_vendor_info_ul_t; | ||
|  | 
 | ||
|  | /* query node vendor info down link */ | ||
|  | typedef struct _spg_afn03_fn22_query_node_vendor_info_dl { | ||
|  |     /* node mac address - little endian */ | ||
|  |     uint8_t                     node_addr[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn03_fn22_query_node_vendor_info_dl_t; | ||
|  | 
 | ||
|  | /* query node vendor info up link */ | ||
|  | typedef struct _spg_afn03_fn22_query_node_vendor_info_ul { | ||
|  |     /* vendor info of the secondary node */ | ||
|  |     spg_sec_node_vendor_info_t  node_info; | ||
|  | } spg_afn03_fn22_query_node_vendor_info_ul_t; | ||
|  | 
 | ||
|  | /* task suggest timeout time */ | ||
|  | typedef struct _spg_afn03_fn0b_rsp_task_timeout { | ||
|  |     /* task priority 0 suggest timeout time, uint is 1s */ | ||
|  |     uint16_t         prio_0_suggest_timeout; | ||
|  |     /* task priority 0 suggest timeout time, uint is 1s */ | ||
|  |     uint16_t         prio_1_suggest_timeout; | ||
|  |     /* task priority 0 suggest timeout time, uint is 1s */ | ||
|  |     uint16_t         prio_2_suggest_timeout; | ||
|  |     /* task priority 0 suggest timeout time, uint is 1s */ | ||
|  |     uint16_t         prio_3_suggest_timeout; | ||
|  | } spg_afn03_fn0b_rsp_task_timeout_t; | ||
|  | 
 | ||
|  | /* query sec node phase information */ | ||
|  | typedef struct _spg_afn03_fn0c_query_sec_node_phase_info_dl { | ||
|  |     /* count of the secondary node */ | ||
|  |     uint8_t     sec_node_cnt; | ||
|  |     /* mac address list of the secondary node */ | ||
|  |     uint8_t     mac_addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn03_fn0c_query_sec_node_phase_info_dl_t; | ||
|  | 
 | ||
|  | typedef struct _spg_sec_node_phase_info { | ||
|  |     /* node mac addr */ | ||
|  |     uint8_t     addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* node phase identification, D0-D2 : connect with A/B/C phase if set 1,
 | ||
|  |      * otherwise not connect to corresponding phase | ||
|  |      */ | ||
|  |     uint8_t     phase         : 3, | ||
|  |     /* node phase feature, see PTORO_SPG_SEC_NODE_PHASE_XXX */ | ||
|  |                 phase_feature : 2, | ||
|  |     /* node phase type, see PROTO_SPG_PHASE_SEQ_XXX */ | ||
|  |                 phase_type    : 3; | ||
|  |     /* protocol type, see PROTO_SPG_PROTO_TYPE_XXX */ | ||
|  |     uint8_t     proto_type    : 3, | ||
|  |     /* reversed */ | ||
|  |                 reversed      : 3, | ||
|  |     /* module type, see PROTO_SPG_MODULE_XXX */ | ||
|  |                 module_type   : 2; | ||
|  | } spg_sec_node_phase_info_t; | ||
|  | 
 | ||
|  | typedef struct _spg_sec_node_guangzhou_phase_info { | ||
|  |     /* node mac addr */ | ||
|  |     uint8_t     addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* node phase identification, D0-D2 : connect with A/B/C phase if set 1,
 | ||
|  |      * otherwise not connect to corresponding phase | ||
|  |      */ | ||
|  |     uint8_t     phase         : 3, | ||
|  |     /* node phase feature, see PTORO_SPG_SEC_NODE_PHASE_XXX */ | ||
|  |                 phase_feature : 2, | ||
|  |     /* flag to mark if L/N reversed in Single-phase power meter or phase
 | ||
|  |      * sequence reversed in Three-phase power meter. | ||
|  |      */ | ||
|  |                 opposite_phase: 2, | ||
|  |     /* reversed */ | ||
|  |                 reversed      : 1; | ||
|  |     /* protocol type, see PROTO_SPG_PROTO_TYPE_XXX */ | ||
|  |     uint8_t     proto_type; | ||
|  | } spg_sec_node_guangzhou_phase_info_t; | ||
|  | 
 | ||
|  | /* report sec node phase information */ | ||
|  | typedef struct _spg_afn03_fn0c_rpt_sec_node_phase_info_ul { | ||
|  |     /* count of the secondary node for this report */ | ||
|  |     uint8_t                         ack_node_count; | ||
|  |     /* phase info of the secondary node */ | ||
|  |     spg_sec_node_phase_info_t       node_info[0]; | ||
|  | } spg_afn03_fn0c_rpt_sec_node_phase_info_ul_t; | ||
|  | 
 | ||
|  | /* report sec node guangzhou phase information */ | ||
|  | typedef struct _spg_afn03_fn0c_rpt_sec_node_guangzhou_phase_info_ul { | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t                         ack_node_count; | ||
|  |     /* phase info of the secondary node */ | ||
|  |     spg_sec_node_guangzhou_phase_info_t node_info[0]; | ||
|  | } spg_afn03_fn0c_rpt_sec_node_guangzhou_phase_info_ul_t; | ||
|  | 
 | ||
|  | /* query sec node phase information */ | ||
|  | typedef struct _spg_afn03_fn0d_query_sec_node_phase_info_dl { | ||
|  |     /* start query index of the secondary node, start from 0 */ | ||
|  |     uint16_t     start_index; | ||
|  |     /* count of the secondary node to be queried */ | ||
|  |     uint8_t      count; | ||
|  | } spg_afn03_fn0d_query_sec_node_phase_info_dl_t; | ||
|  | 
 | ||
|  | /* report sec node phase information*/ | ||
|  | typedef struct _spg_afn03_fn0d_rpt_sec_node_phase_info_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t                        total_count; | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t                         ack_node_count; | ||
|  |     /* phase info of the secondary node */ | ||
|  |     spg_sec_node_phase_info_t       node_info[0]; | ||
|  | } spg_afn03_fn0d_rpt_sec_node_phase_info_ul_t; | ||
|  | 
 | ||
|  | /* report sec node guangzhou phase information */ | ||
|  | typedef struct _spg_afn03_fn0d_rpt_sec_node_guangzhou_phase_info_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t                        total_count; | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t                         ack_node_count; | ||
|  |     /* phase info of the secondary node */ | ||
|  |     spg_sec_node_guangzhou_phase_info_t node_info[0]; | ||
|  | } spg_afn03_fn0d_rpt_sec_node_guangzhou_phase_info_ul_t; | ||
|  | 
 | ||
|  | /* sec node tsfm result info */ | ||
|  | typedef struct _spg_sec_node_tsfm_info { | ||
|  |     /* node mac addr */ | ||
|  |     uint8_t     addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* transform detection result, see PROTO_SPG_CCO_RPT_TSFM_XXX */ | ||
|  |     uint8_t     tsfm_result; | ||
|  | } spg_sec_node_tsfm_info_t; | ||
|  | 
 | ||
|  | /* query sec node transform detection result in white list */ | ||
|  | typedef struct _spg_afn03_fn0e_query_in_wl_tsfm_result_dl { | ||
|  |     /* start query index of the secondary node, start from 0 */ | ||
|  |     uint16_t     start_index; | ||
|  |     /* count of the secondary node to be queried */ | ||
|  |     uint8_t      count; | ||
|  | } spg_afn03_fn0e_query_in_wl_tsfm_result_dl_t; | ||
|  | 
 | ||
|  | /* report sec node query result in white list */ | ||
|  | typedef struct _spg_afn03_fn0e_query_in_wl_tsfm_result_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t                      total_count; | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t                       ack_node_count; | ||
|  |     /* transform result of the secondary node */ | ||
|  |     spg_sec_node_tsfm_info_t      node_info[0]; | ||
|  | } spg_afn03_fn0e_query_in_wl_tsfm_result_ul_t; | ||
|  | 
 | ||
|  | /* sec node tsfm result info */ | ||
|  | typedef struct _spg_other_sec_node_tsfm_info { | ||
|  |     /* node mac addr */ | ||
|  |     uint8_t     addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* CCo mac of network that the node last joined */ | ||
|  |     uint8_t     prev_cco_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* reserve */ | ||
|  |     uint16_t    reserved; | ||
|  | } spg_other_sec_node_tsfm_info_t; | ||
|  | 
 | ||
|  | /* query sec node transform detection result not in white list */ | ||
|  | typedef struct _spg_afn03_fn0f_query_other_tsfm_result_dl { | ||
|  |     /* start query result of secondary node, start from 0 */ | ||
|  |     uint16_t     start_index; | ||
|  |     /* count of the secondary node to be queried */ | ||
|  |     uint8_t      count; | ||
|  | } spg_afn03_fn0f_query_other_tsfm_result_dl_t; | ||
|  | 
 | ||
|  | /* report sec node query result of not in white list */ | ||
|  | typedef struct _spg_afn03_fn0f_query_other_tsfm_result_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t                        total_count; | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t                         ack_node_count; | ||
|  |     /* result of the secondary node */ | ||
|  |     spg_other_sec_node_tsfm_info_t  node_info[0]; | ||
|  | } spg_afn03_fn0f_query_other_tsfm_result_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn23_query_net_info_dl { | ||
|  |     /* start query network info of secondary node, start from 1 */ | ||
|  |     uint16_t     start_index; | ||
|  |     /* count of the secondary node to be queried */ | ||
|  |     uint8_t      count; | ||
|  | } spg_afn03_fn23_query_net_info_dl_t; | ||
|  | 
 | ||
|  | typedef struct _spg_sec_node_net_info { | ||
|  |     /* mac address of the station: little endian */ | ||
|  |     uint8_t     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* communication mode, see PROTO_SPG_COMM_MOD_XXX */ | ||
|  |     uint8_t     comm_mode; | ||
|  |     /* time of joined network */ | ||
|  |     uint8_t     join_sec; | ||
|  |     uint8_t     join_min; | ||
|  |     uint8_t     join_hour; | ||
|  |     uint8_t     join_day; | ||
|  |     uint8_t     join_mon; | ||
|  |     uint8_t     join_year; | ||
|  |     /* flag to mark if the sec node in the network */ | ||
|  |     uint8_t     in_net; | ||
|  |     /* cost time form power on to join network, unit is 1s */ | ||
|  |     uint32_t    cost_time; | ||
|  | } spg_sec_node_net_info_t; | ||
|  | 
 | ||
|  | typedef struct spg_afn03_fn23_query_net_info_ul_t { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t    total_count; | ||
|  |     /* start query index of the secondary node */ | ||
|  |     uint16_t    start_index; | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t     ack_node_count; | ||
|  |     /* network info of the secondary node */ | ||
|  |     spg_sec_node_net_info_t     net_info[0]; | ||
|  | } spg_afn03_fn23_query_net_info_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn24_query_net_info_dl { | ||
|  |     /* node mac address - little endian */ | ||
|  |     uint8_t     node_addr[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn03_fn24_query_net_info_dl_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn03_fn24_query_net_info_ul { | ||
|  |     /* network info of the secondary node */ | ||
|  |     spg_sec_node_net_info_t     net_info; | ||
|  | } spg_afn03_fn24_query_net_info_ul_t; | ||
|  | 
 | ||
|  | /* query topo down link request */ | ||
|  | typedef struct _spg_afn03_fn65_query_topo_dl { | ||
|  |     /* query topo start index */ | ||
|  |     uint16_t              start_index; | ||
|  |     /* query topo node count */ | ||
|  |     uint8_t               count; | ||
|  | } spg_afn03_fn65_query_topo_dl_t; | ||
|  | 
 | ||
|  | /* sec node network topo info */ | ||
|  | typedef struct _spg_node_topo_info_guangdong { | ||
|  |     /* node mac address - little endian */ | ||
|  |     uint8_t               mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* node identity */ | ||
|  |     uint16_t              tei; | ||
|  |     /* proxy node identity */ | ||
|  |     uint16_t              pco_tei; | ||
|  |     /* station joined time is based on the time of CCO power-on, uint is 1s */ | ||
|  |     uint32_t              join_ts; | ||
|  |     /* change count of the proxy */ | ||
|  |     uint16_t              proxy_chg_cnt; | ||
|  |     /* leaving network count of the station */ | ||
|  |     uint16_t              leave_cnt; | ||
|  |     /* node level */ | ||
|  |     uint8_t               level :4, | ||
|  |     /* node role */ | ||
|  |                           role  :4; | ||
|  | } spg_node_topo_info_guangdong_t; | ||
|  | 
 | ||
|  | /* report topo info to cctt */ | ||
|  | typedef struct _spg_afn03_fn65_query_topo_ul { | ||
|  |     /* total node count in network topo */ | ||
|  |     uint16_t              total_cnt; | ||
|  |     /* node start index in network topo */ | ||
|  |     uint16_t              start_index; | ||
|  |     /* acknowledge node count */ | ||
|  |     uint8_t               ack_count; | ||
|  |     /* network topo info list of the node */ | ||
|  |     spg_node_topo_info_guangdong_t  node_info[0]; | ||
|  | } spg_afn03_fn65_query_topo_ul_t; | ||
|  | 
 | ||
|  | /* query secondary node runtime */ | ||
|  | typedef struct _spg_afn03_fn66_query_node_runtime_dl { | ||
|  |     /* node mac address - little endian */ | ||
|  |     uint8_t               mac[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn03_fn66_query_node_runtime_dl_t; | ||
|  | 
 | ||
|  | /* report secondary node runtime */ | ||
|  | typedef struct _spg_afn03_fn66_query_node_runtime_ul { | ||
|  |     /* node runtime */ | ||
|  |     uint32_t              runtime; | ||
|  | } spg_afn03_fn66_query_node_runtime_ul_t; | ||
|  | 
 | ||
|  | /* query secondary node reject info */ | ||
|  | typedef struct _spg_afn03_fn67_query_reject_info_dl { | ||
|  |     /* query node start index */ | ||
|  |     uint16_t              start_index; | ||
|  |     /* query node count */ | ||
|  |     uint8_t               count; | ||
|  | } spg_afn03_fn67_query_reject_info_dl_t; | ||
|  | 
 | ||
|  | /* report secondary node reject info */ | ||
|  | typedef struct _spg_afn03_fn67_query_reject_info_ul { | ||
|  |     /* total node count */ | ||
|  |     uint16_t              total_cnt; | ||
|  |     /* acknowledge node count */ | ||
|  |     uint8_t               ack_count; | ||
|  |     /* reject node mac addr, little endian */ | ||
|  |     uint8_t               node_addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn03_fn67_query_reject_info_ul_t; | ||
|  | 
 | ||
|  | /* query neighbor node channel info */ | ||
|  | typedef struct _spg_afn03_fn68_query_channel_info_dl { | ||
|  |     /* neighbor node mac address, little endian */ | ||
|  |     uint8_t               mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* query node start index, start from 0. */ | ||
|  |     uint16_t              start_index; | ||
|  |     /* query node count, query cco max count is 20,
 | ||
|  |      * query sta max count is 6. see PROTO_SPG_MAX_QR_CHANNEL_XXX. | ||
|  |      */ | ||
|  |     uint8_t               cnt; | ||
|  | } spg_afn03_fn68_query_channel_info_dl_t; | ||
|  | 
 | ||
|  | /* sta neighbor node info */ | ||
|  | typedef struct _spg_neighbor_node_info { | ||
|  |     /* neighbor node mac address, little endian */ | ||
|  |     uint8_t               mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* neighbor node tei */ | ||
|  |     uint16_t              tei; | ||
|  |     /* neighbor node proxy tei */ | ||
|  |     uint16_t              proxy_tei; | ||
|  |     /* neighbor node level */ | ||
|  |     uint8_t               level; | ||
|  |     /* success rate of uplink communication
 | ||
|  |      * between neighbor node and local node | ||
|  |      */ | ||
|  |     uint8_t               ul_sr; | ||
|  |     /* success rate of downlink communication
 | ||
|  |      * between neighbor node and local node | ||
|  |      */ | ||
|  |     uint8_t               dl_sr; | ||
|  |     /* success rate of uplink and downlink communication
 | ||
|  |      * between neighbor node and local node | ||
|  |      */ | ||
|  |     uint8_t               ul_dl_sr; | ||
|  |     /* snr between neighbor node and local node */ | ||
|  |     int8_t                snr; | ||
|  |     /* signal attenuation between neighbor node and local node */ | ||
|  |     uint8_t               signal_attenuation; | ||
|  | } spg_neighbor_node_info_t; | ||
|  | 
 | ||
|  | /* report neighbor node channel info */ | ||
|  | typedef struct _spg_afn03_fn68_query_channel_info_ul { | ||
|  |     /* total node count */ | ||
|  |     uint16_t              total_cnt; | ||
|  |     /* report cnt */ | ||
|  |     uint8_t               cnt; | ||
|  |     /* neighbor node info */ | ||
|  |     spg_neighbor_node_info_t node_info[0]; | ||
|  | } spg_afn03_fn68_query_channel_info_ul_t; | ||
|  | 
 | ||
|  | /* query package log information */ | ||
|  | typedef struct _spg_afn03_fn69_qr_pkg_log_dl { | ||
|  |     /* package type, 0 - app package, 1 - cctt package */ | ||
|  |     uint8_t               pkg_type; | ||
|  |     /* start index, start form 0 */ | ||
|  |     uint16_t              start_index; | ||
|  |     /* query count */ | ||
|  |     uint8_t               cnt; | ||
|  | } spg_afn03_fn69_qr_pkg_log_dl_t; | ||
|  | 
 | ||
|  | /* package information */ | ||
|  | typedef struct _spg_afn03_fn69_pkg_info { | ||
|  |     /* package length */ | ||
|  |     uint16_t              len; | ||
|  |     /* package information */ | ||
|  |     uint8_t               data[0]; | ||
|  | } spg_afn03_fn69_pkg_info_t; | ||
|  | 
 | ||
|  | /* report package log information */ | ||
|  | typedef struct _spg_afn03_fn69_qr_pkg_log_ul { | ||
|  |     /* package total count */ | ||
|  |     uint16_t              total_cnt; | ||
|  |     /* report count */ | ||
|  |     uint8_t               rpt_cnt; | ||
|  |     /* package information */ | ||
|  |     //spg_afn03_fn69_pkg_info_t pkg_info;
 | ||
|  | } spg_afn03_fn69_qr_pkg_log_ul_t; | ||
|  | 
 | ||
|  | /* query secondary node check info */ | ||
|  | typedef struct _spg_afn03_fn70_query_node_check_info_dl { | ||
|  |     /* node mac address - little endian */ | ||
|  |     uint8_t               mac[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn03_fn70_query_node_check_info_dl_t; | ||
|  | 
 | ||
|  | /* report secondary node check info */ | ||
|  | typedef struct _spg_afn03_fn70_query_node_check_info_ul { | ||
|  |     /* zero check result */ | ||
|  |     uint8_t               zc_result; | ||
|  |     /* uart state */ | ||
|  |     uint8_t               uart_state; | ||
|  |     /* leave net reason */ | ||
|  |     uint8_t               leave_reason; | ||
|  |     /* reset reason */ | ||
|  |     uint8_t               reset_reason; | ||
|  | } spg_afn03_fn70_query_node_check_info_ul_t; | ||
|  | 
 | ||
|  | /* query topo down link request */ | ||
|  | typedef struct _spg_afn03_fn11_fn85_query_topo_dl { | ||
|  |     /* query topo start index */ | ||
|  |     uint16_t              start_index; | ||
|  |     /* query topo node count */ | ||
|  |     uint8_t               node_count; | ||
|  | } spg_afn03_fn11_fn85_query_topo_dl; | ||
|  | 
 | ||
|  | /* sec node network topo info */ | ||
|  | typedef struct _spg_node_info_for_topo { | ||
|  |     /* node mac address - little endian */ | ||
|  |     uint8_t                   mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* node identity */ | ||
|  |     uint16_t                  tei; | ||
|  |     /* proxy node identity */ | ||
|  |     uint16_t                  pco_tei; | ||
|  |     /* node level */ | ||
|  |     uint8_t                   level : 4; | ||
|  |     /* node role */ | ||
|  |     uint8_t                   role  : 4; | ||
|  | } spg_node_info_for_topo_t; | ||
|  | 
 | ||
|  | /* report topo info to cctt */ | ||
|  | typedef struct _spg_afn03_fn11_fn85_query_topo_ul { | ||
|  |     /* total node count in network topo */ | ||
|  |     uint16_t                  node_count; | ||
|  |     /* node start index in network topo */ | ||
|  |     uint16_t                  node_start_index; | ||
|  |     /* acknowledge node count */ | ||
|  |     uint8_t                   ack_node_count; | ||
|  |     /* network topo info list of the node */ | ||
|  |     spg_node_info_for_topo_t  node_info[0]; | ||
|  | } spg_afn03_fn11_fn85_query_topo_ul_t; | ||
|  | 
 | ||
|  | /* report net info to cctt */ | ||
|  | typedef struct _spg_afn03_fn91_net_info { | ||
|  |     /* total node count */ | ||
|  |     uint8_t               total_node_cnt; | ||
|  |     /* local node network nid --3 bytes */ | ||
|  |     uint8_t               local_nid[PROTO_SPG_NID_LEN]; | ||
|  |     /* local node mac address */ | ||
|  |     uint8_t               local_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* neighbour node network nid */ | ||
|  |     uint8_t               nb_nid[0][PROTO_SPG_NID_LEN]; | ||
|  | } spg_afn03_fn91_net_info; | ||
|  | 
 | ||
|  | /* report net info to cctt from guangdong protocol */ | ||
|  | typedef struct _spg_afn03_fn91_net_info_gd { | ||
|  |     /* total node count */ | ||
|  |     uint8_t               total_node_cnt; | ||
|  |     /* local node network nid */ | ||
|  |     uint8_t               local_nid; | ||
|  |     /* local node mac address */ | ||
|  |     uint8_t               local_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* neighbour node network nid */ | ||
|  |     uint8_t               nb_nid[0]; | ||
|  | } spg_afn03_fn91_net_info_gd; | ||
|  | 
 | ||
|  | /* query white list enable info */ | ||
|  | typedef struct _spg_afn03_fn93_query_wl_enable_ul { | ||
|  |     /* flag to mark if white list enable, 0 - disable, 1 - enable */ | ||
|  |     uint8_t               flag_enable; | ||
|  |     /* range of influence from white list, see PROTO_SPG_WL_INFLUENCE_XXX */ | ||
|  |     uint8_t               range; | ||
|  | } spg_afn03_fn93_query_wl_enable_ul_t; | ||
|  | 
 | ||
|  | /* set frequency enable flag and threshold value */ | ||
|  | typedef struct _spg_afn03_fnb0_query_score_param_ul { | ||
|  |     /* flag to mark if score report enable */ | ||
|  |     uint8_t               flag_enable; | ||
|  |     /* score report threshold value, BIN format */ | ||
|  |     uint8_t               threshold; | ||
|  | } spg_afn03_fnb0_query_score_param_ul_t; | ||
|  | 
 | ||
|  | /* set auto start time */ | ||
|  | typedef struct _spg_afn03_fnb1_query_auto_start_time_ul { | ||
|  |     /* if 0 - every day start, others - every month start. BCD format */ | ||
|  |     uint8_t               day; | ||
|  |     /* BCD format */ | ||
|  |     uint8_t               hour; | ||
|  |     /* BCD format */ | ||
|  |     uint8_t               minute; | ||
|  |     uint8_t               rsvd; | ||
|  | } spg_afn03_fnb1_query_auto_start_time_ul_t; | ||
|  | 
 | ||
|  | /* query pm score information down link */ | ||
|  | typedef struct _spg_afn03_fnb2_query_pm_score_info_dl { | ||
|  |     /* start query index of the secondary node, start from 1 */ | ||
|  |     uint16_t              start_index; | ||
|  |     /* count of the secondary node to be queried */ | ||
|  |     uint8_t               count; | ||
|  | } spg_afn03_fnb2_query_pm_score_info_dl_t; | ||
|  | 
 | ||
|  | /* pm score information */ | ||
|  | typedef struct _spg_pm_score_info { | ||
|  |     /* power meter mac address, little endian */ | ||
|  |     uint8_t               pm_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* assessment score */ | ||
|  |     uint8_t               score; | ||
|  |     /* trouble data item */ | ||
|  |     uint32_t              err_bm; | ||
|  | } spg_pm_score_info_t; | ||
|  | 
 | ||
|  | /* query pm score information up link */ | ||
|  | typedef struct _spg_afn03_fnb2_query_pm_score_info_ul { | ||
|  |     /* total count of the secondary node */ | ||
|  |     uint16_t              total_count; | ||
|  |     /* current ack count of the secondary node */ | ||
|  |     uint8_t               ack_node_count; | ||
|  |     /* score info of the secondary node */ | ||
|  |     spg_pm_score_info_t   node_info[0]; | ||
|  | } spg_afn03_fnb2_query_pm_score_info_ul_t; | ||
|  | 
 | ||
|  | /* set CCO address down link request*/ | ||
|  | typedef struct _spg_afn04_fn01_set_cco_addr_dl { | ||
|  |     /* cco address */ | ||
|  |     uint8_t      mac[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn04_fn01_set_cco_addr_dl_t; | ||
|  | 
 | ||
|  | /* add secondary node down link request */ | ||
|  | typedef struct _spg_afn04_fn02_add_sec_node_dl { | ||
|  |     /* count of the secondary node to be added */ | ||
|  |     uint8_t     sec_node_count; | ||
|  |     /* mac address list of the secondary node to be added */ | ||
|  |     uint8_t     mac_addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn04_fn02_add_sec_node_dl_t; | ||
|  | 
 | ||
|  | /* remove secondary node down link request */ | ||
|  | typedef struct _spg_afn04_fn03_rm_sec_node_dl { | ||
|  |     /* count of the secondary node to be removed */ | ||
|  |     uint8_t     sec_node_count; | ||
|  |     /* mac address list of the secondary node to be removed */ | ||
|  |     uint8_t     mac_addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn04_fn03_rm_sec_node_dl_t; | ||
|  | 
 | ||
|  | /* set report event down link request */ | ||
|  | typedef struct _spg_afn04_fn04_set_sec_node_rpt_dl { | ||
|  |     /* 1 - allow report event, 0 - not allow report event  */ | ||
|  |     uint8_t     rpt_allowed; | ||
|  | } spg_afn04_fn04_set_sec_node_rpt_dl_t; | ||
|  | 
 | ||
|  | /* add meter mapping request */ | ||
|  | typedef struct _spg_afn04_fn07_add_node_mapping_dl { | ||
|  |     /* add meter mapping count this time */ | ||
|  |     uint8_t      node_cnt; | ||
|  |     /* meter mapping info */ | ||
|  |     spg_meter_mapping_info_t meter_mapping_info[0]; | ||
|  | } spg_afn04_fn07_add_meter_mapping_dl_t; | ||
|  | 
 | ||
|  | /* start tsfm detect request */ | ||
|  | typedef struct _spg_afn04_fn80_start_tsfm_detect { | ||
|  |     /* broadcast transformer feature time, unit is 1min */ | ||
|  |     uint16_t     tsfm_feature_bcast_time; | ||
|  |     /* reserved */ | ||
|  |     uint8_t      reserved; | ||
|  | } spg_afn04_fn80_start_tsfm_detect_t; | ||
|  | 
 | ||
|  | /* set frequency enable flag and threshold value */ | ||
|  | typedef struct _spg_afn04_fnb0_set_flag_and_threshold { | ||
|  |     /* flag to mark if score report enable */ | ||
|  |     uint8_t              flag_enable; | ||
|  |     /* score report threshold value, BIN format */ | ||
|  |     uint8_t              threshold; | ||
|  | } spg_afn04_fnb0_set_flag_and_threshold_t; | ||
|  | 
 | ||
|  | /* set auto start time */ | ||
|  | typedef struct _spg_afn04_fnb1_set_auto_start_time { | ||
|  |     /* if 0 - every day start, others - every month start. BCD format */ | ||
|  |     uint8_t              day; | ||
|  |     /* BCD format */ | ||
|  |     uint8_t              hour; | ||
|  |     /* BCD format */ | ||
|  |     uint8_t              minute; | ||
|  |     uint8_t              rsvd; | ||
|  | } spg_afn04_fnb1_set_auto_start_time_t; | ||
|  | 
 | ||
|  | /* report task data to cctt */ | ||
|  | typedef struct _spg_afn05_fn01_rpt_task_data_ul { | ||
|  |     /* task id */ | ||
|  |     uint16_t    task_id; | ||
|  |     /* length of the task data */ | ||
|  |     uint8_t     data_len; | ||
|  |     /* task data */ | ||
|  |     uint8_t     data[0]; | ||
|  | } spg_afn05_fn01_rpt_task_data_ul_t; | ||
|  | 
 | ||
|  | /* score event report data in 645 */ | ||
|  | typedef struct _spg_score_645_data_t { | ||
|  |     /* assessment score */ | ||
|  |     uint8_t     score; | ||
|  |     /* trouble data item */ | ||
|  |     uint32_t    err_bm; | ||
|  | } spg_score_645_data_t; | ||
|  | 
 | ||
|  | /* score event report data filed in 645 */ | ||
|  | typedef struct _spg_score_evt_645_data_field { | ||
|  |     /* data unit id */ | ||
|  |     uint8_t      di; | ||
|  |     /* data */ | ||
|  |     uint8_t      data[0]; | ||
|  | } spg_score_evt_645_data_field_t; | ||
|  | 
 | ||
|  | /* data fields in 645 */ | ||
|  | typedef struct spg_power_rpt_evt_ul_645_data_gz { | ||
|  |     /* length of the event report data */ | ||
|  |     uint8_t     evt_type; | ||
|  |     /* event report data */ | ||
|  |     uint8_t     data[0]; | ||
|  | } spg_power_rpt_evt_ul_645_data_gz_t; | ||
|  | 
 | ||
|  | /* power event rpt data */ | ||
|  | typedef struct _spg_power_rpt_evt_data_gd { | ||
|  |     /* dev type, see PROTO_SPG_DEV_TYPE_XXX */ | ||
|  |     uint8_t     dev_type; | ||
|  |     /* pm addr, little endian */ | ||
|  |     uint8_t     mac[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_power_rpt_evt_data_gd_t; | ||
|  | 
 | ||
|  | /* power event rpt data fields */ | ||
|  | typedef struct _spg_power_evt_rpt_data_field_gd { | ||
|  |     /* power event type, see PROTO_SPG_EVENT_POWER_XXX */ | ||
|  |     uint8_t     evt_type; | ||
|  |     /* event report data */ | ||
|  |     uint8_t     data[0]; | ||
|  | } spg_power_evt_rpt_data_field_gd_t; | ||
|  | 
 | ||
|  | /* report event to cctt */ | ||
|  | typedef struct _spg_afn05_fn02_rpt_evt_ul { | ||
|  |     /* length of the event report data */ | ||
|  |     uint8_t     data_len; | ||
|  |     /* event report data */ | ||
|  |     uint8_t     data[0]; | ||
|  | } spg_afn05_fn02_rpt_evt_ul_t; | ||
|  | 
 | ||
|  | /* report secondary node info up link */ | ||
|  | typedef struct _spg_afn05_fn03_rpt_sec_node_ul { | ||
|  |     /* report count of the secondary node current */ | ||
|  |     uint8_t     sec_node_count; | ||
|  |     /* mac address list of the secondary node to be reported */ | ||
|  |     uint8_t     mac[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn05_fn03_rpt_sec_node_ul_t; | ||
|  | 
 | ||
|  | /* report task data to cctt */ | ||
|  | typedef struct _spg_afn05_fn05_rpt_task_status_ul { | ||
|  |     /* task id */ | ||
|  |     uint16_t    task_id; | ||
|  |     /* sec node mac addr */ | ||
|  |     uint8_t     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* task exe status */ | ||
|  |     uint8_t     exe_status; | ||
|  | } spg_afn05_fn05_rpt_task_status_ul_t; | ||
|  | 
 | ||
|  | /* report collection task status */ | ||
|  | typedef struct _spg_afn05_fn06_rpt_clct_task_status_ul { | ||
|  |     /* clct task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  |     /* sec node mac addr */ | ||
|  |     uint8_t     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* collection task status, see PROTO_SPG_CLCT_TASK_STATUS_XXX */ | ||
|  |     uint8_t     clct_task_status; | ||
|  | } spg_afn05_fn06_rpt_clct_task_status_ul_t; | ||
|  | 
 | ||
|  | /* report collection data read task status */ | ||
|  | typedef struct _spg_afn05_fn07_rpt_clct_data_read_status_ul { | ||
|  |     /* clct task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  |     /* collection task sn */ | ||
|  |     uint8_t     clct_task_sn; | ||
|  |     /* sec node mac addr */ | ||
|  |     uint8_t     mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* read collection task data status, see PROTO_SPG_CLCT_READ_STATUS_XXX */ | ||
|  |     uint8_t     read_data_status; | ||
|  | } spg_afn05_fn07_rpt_clct_data_read_status_ul_t; | ||
|  | 
 | ||
|  | /* collection read task data */ | ||
|  | typedef struct _spg_clct_read_task_data { | ||
|  |     /* datagram control code */ | ||
|  |     uint8_t     fn; | ||
|  |     /* this data as same as 645 data */ | ||
|  |     uint8_t     data[0]; | ||
|  |     /* There is a CS check behind the data
 | ||
|  |      * check from data | ||
|  |      */ | ||
|  |     //uint8_t     cs;
 | ||
|  | } spg_clct_read_task_data_t; | ||
|  | 
 | ||
|  | /* report collection read task data */ | ||
|  | typedef struct _spg_afn05_fn08_rpt_clct_read_task_data_ul { | ||
|  |     /* collection task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  |     /* collection task sn */ | ||
|  |     uint8_t     clct_task_sn; | ||
|  |     /* this CRC as same as add task CRC */ | ||
|  |     uint16_t    crc; | ||
|  |     /* collection read task data */ | ||
|  |     //spg_clct_read_task_data_t     read_task_data[0];
 | ||
|  | } spg_afn05_fn08_rpt_clct_read_task_data_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afn05_fn80_tsfm_info_rpt { | ||
|  |     /* sec node addr */ | ||
|  |     uint8_t     pm_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* device type */ | ||
|  |     uint8_t     dev_type; | ||
|  |     /* power meter count of collector connected */ | ||
|  |     uint8_t     pm_cnt; | ||
|  |     /* the major addr of same transformer */ | ||
|  |     uint8_t     tsfm_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* reserved */ | ||
|  |     uint16_t    reserved; | ||
|  |     /* power meter node addr info if device type is collector */ | ||
|  |     uint8_t     node_addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn05_fn80_tsfm_info_rpt_t; | ||
|  | 
 | ||
|  | /* report power event to cctt */ | ||
|  | typedef struct _spg_afn05_fn81_node_evt_rpt { | ||
|  |     /* device type, see IOT_SG_CCO_DEV_TYPE_XXX */ | ||
|  |     uint8_t             dev_type; | ||
|  |     /* proto type */ | ||
|  |     uint8_t             proto_type; | ||
|  |     /* length of the event report data */ | ||
|  |     uint8_t             data_len; | ||
|  |     /* event report data */ | ||
|  |     uint8_t             data[0]; | ||
|  | }spg_afn05_fn81_node_evt_rpt; | ||
|  | 
 | ||
|  | typedef struct _spg_afn06_fn01_correct_time { | ||
|  |     uint8_t         sec; | ||
|  |     uint8_t         min; | ||
|  |     uint8_t         hour; | ||
|  |     uint8_t         day; | ||
|  |     uint8_t         mon; | ||
|  |     uint8_t         year_l; | ||
|  | } spg_afn06_fn01_correct_time_t; | ||
|  | 
 | ||
|  | /* upgrade data down link request */ | ||
|  | typedef struct _spg_afn07_fn02_trans_file_dl_data_t { | ||
|  |     /* file segment index */ | ||
|  |     uint16_t   index; | ||
|  |     /* file length */ | ||
|  |     uint16_t   length; | ||
|  |     /* segment data */ | ||
|  |     uint8_t    data[0]; | ||
|  | } spg_afn07_fn02_trans_file_dl_data_t; | ||
|  | 
 | ||
|  | /* 16 bits crc value of the upgrade data down link request */ | ||
|  | typedef struct _spg_afn07_fn02_trans_file_dl_crc_t { | ||
|  |     /* 16 bits crc value of segment */ | ||
|  |     uint16_t   crc16; | ||
|  | } spg_afn07_fn02_trans_file_dl_crc_t; | ||
|  | 
 | ||
|  | /* start upgrade down link request */ | ||
|  | typedef struct _spg_afn07_fn01_start_upgrade_dl_t { | ||
|  |     /* file type see - PROTO_SPG_UPGRADEFILE_XXX */ | ||
|  |     uint8_t    type; | ||
|  |     /* file identity */ | ||
|  |     uint8_t    id; | ||
|  |     /* detection mac addr */ | ||
|  |     uint8_t    dest_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* file total segment count */ | ||
|  |     uint16_t   block_cnt; | ||
|  |     /* file size - unit: byte */ | ||
|  |     uint32_t   file_size; | ||
|  |     /* 16 bits crc value of upgrade file */ | ||
|  |     uint16_t   crc16; | ||
|  |     /* window time of upgrade - unit: minute */ | ||
|  |     uint8_t    time_window; | ||
|  | } spg_afn07_fn01_start_upgrade_dl_t; | ||
|  | 
 | ||
|  | /* report upgrade file information to cctt */ | ||
|  | typedef struct _spg_afn07_fn03_rpt_upgrade_info_ul { | ||
|  |     /* file type see - PROTO_SPG_UPGRADEFILE_XXX */ | ||
|  |     uint8_t    type; | ||
|  |     /* file identity */ | ||
|  |     uint8_t    id; | ||
|  |     /* detection mac addr */ | ||
|  |     uint8_t    dest_mac[IOT_MAC_ADDR_LEN]; | ||
|  |     /* file total segment count */ | ||
|  |     uint16_t   block_cnt; | ||
|  |     /* file size - unit: byte */ | ||
|  |     uint32_t   file_size; | ||
|  |     /* 16 bits crc value of upgrade file */ | ||
|  |     uint16_t   crc16; | ||
|  |     /* received block count */ | ||
|  |     uint16_t   received_cnt; | ||
|  | } spg_afn07_fn03_rpt_upgrade_info_ul_t; | ||
|  | 
 | ||
|  | /* report upgrade file information to cctt */ | ||
|  | typedef struct _spg_afn07_fn04_rpt_upgrade_progress_ul { | ||
|  |     /* upgrade progress see - PROTO_SPG_UPGRADE_PROGRESS_XXX */ | ||
|  |     uint8_t    progress; | ||
|  |     /* file identity */ | ||
|  |     uint8_t    id; | ||
|  |     /* upgrade fail count */ | ||
|  |     uint16_t   fail_cnt; | ||
|  | } spg_afn07_fn04_rpt_upgrade_progress_ul_t; | ||
|  | 
 | ||
|  | /* report upgrade fail node information to cctt */ | ||
|  | typedef struct _spg_afn07_fn05_req_upgrade_node_info_dl { | ||
|  |     /* req start index */ | ||
|  |     uint16_t   start_index; | ||
|  |     /* current report count */ | ||
|  |     uint8_t    cur_cnt; | ||
|  | } spg_afn07_fn05_req_upgrade_node_info_dl_t; | ||
|  | 
 | ||
|  | /* report upgrade fail node information to cctt */ | ||
|  | typedef struct _spg_afn07_fn05_rpt_upgrade_node_info_ul { | ||
|  |     /* total count of upgrade fail */ | ||
|  |     uint16_t   total_cnt; | ||
|  |     /* current report count */ | ||
|  |     uint8_t    cur_cnt; | ||
|  |     /* node mac address */ | ||
|  |     uint8_t    addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn07_fn05_rpt_upgrade_node_info_ul_t; | ||
|  | 
 | ||
|  | /* collection di structure in collection task info for dl/t 645-97 */ | ||
|  | typedef struct _spg_clct_task_id_97 { | ||
|  |     /* control code */ | ||
|  |     uint8_t     control_code; | ||
|  |     /* di of collection data */ | ||
|  |     uint16_t    di; | ||
|  |     /* length of collection data */ | ||
|  |     uint8_t     len_data; | ||
|  | } spg_clct_task_id_97_t; | ||
|  | 
 | ||
|  | /* collection di structure in collection task info for dl/t 645-07 */ | ||
|  | typedef struct _spg_clct_task_id_07 { | ||
|  |     /* control code */ | ||
|  |     uint8_t     control_code; | ||
|  |     /* di of collection data */ | ||
|  |     uint32_t    di; | ||
|  |     /* length of collection data */ | ||
|  |     uint8_t     len_data; | ||
|  | } spg_clct_task_id_07_t; | ||
|  | 
 | ||
|  | /* collection fn structure in collection task */ | ||
|  | typedef struct _spg_clct_task_fn { | ||
|  |     /* type of pm protocol, see PROTO_SPG_CLCT_TASK_PROTO_TYPE_XXX */ | ||
|  |     uint16_t    proto_type   :3, | ||
|  |     /* type of pm,  see PROTO_SPG_CLCT_TASK_PM_TYPE_XXX */ | ||
|  |                 meter_type   :2, | ||
|  |     /* reserved for future */ | ||
|  |                 rsvd         :11; | ||
|  | } spg_clct_task_fn_t; | ||
|  | 
 | ||
|  | /* collection data time structure, Guangdong appendix A.1 */ | ||
|  | typedef struct _spg_clct_task_data_time { | ||
|  |     /* data time, BIN type */ | ||
|  |     uint16_t    base_min     :6,  /* D0 - D5 */ | ||
|  |                 base_hour    :5,  /* D6 - D10 */ | ||
|  |                 base_day     :5;  /* D11 - D15 */ | ||
|  | } spg_clct_task_data_time_t; | ||
|  | 
 | ||
|  | /* collection task info structure in collection task */ | ||
|  | typedef struct _spg_clct_task_info { | ||
|  |     /* task id */ | ||
|  |     uint8_t     task_id; | ||
|  |     /* task control code */ | ||
|  |     spg_clct_task_fn_t fn; | ||
|  |     /* task timout time, uint is 1s */ | ||
|  |     uint16_t    timeout; | ||
|  |     /* collection base time */ | ||
|  |     spg_clct_task_data_time_t base_time; | ||
|  |     /* collection period */ | ||
|  |     uint8_t     period; | ||
|  |     /* cnt of di */ | ||
|  |     uint8_t     di_cnt; | ||
|  |     /* collection data info, see spg_clct_task_id_97_t or
 | ||
|  |      * spg_clct_task_id_07_t base on proto_type. | ||
|  |      */ | ||
|  |     uint8_t     data[0]; | ||
|  |     /* There is a CRC check behind the data
 | ||
|  |      * CRC check from fn to data | ||
|  |      */ | ||
|  |     //uint16_t  crc;
 | ||
|  | } spg_clct_task_info_t; | ||
|  | 
 | ||
|  | /* delete collect task */ | ||
|  | typedef struct _spg_afn08_fn01_add_clct_task { | ||
|  |     /* delete collect task id */ | ||
|  |     spg_clct_task_info_t    clct_task_info; | ||
|  | } spg_afn08_fn01_add_clct_task_t; | ||
|  | 
 | ||
|  | /* delete collect task */ | ||
|  | typedef struct _spg_afn08_fn02_delete_clct_task { | ||
|  |     /* delete collect task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  | } spg_afn08_fn02_delete_clct_task_t; | ||
|  | 
 | ||
|  | /* query collection task id up link */ | ||
|  | typedef struct _spg_afn08_fn03_query_clct_task_id_ul { | ||
|  |     /* the module supports the max count of collection tasks */ | ||
|  |     uint8_t     max_task_cnt; | ||
|  |     /* the current count of collection tasks */ | ||
|  |     uint8_t     cur_task_cnt; | ||
|  |     /* clct task id data */ | ||
|  |     uint8_t     clct_task_id[0]; | ||
|  | } spg_afn08_fn03_query_clct_task_id_ul_t; | ||
|  | 
 | ||
|  | /* query collection task detailed information down link */ | ||
|  | typedef struct _spg_afn08_fn04_query_clct_task_info_dl { | ||
|  |     /* task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  | } spg_afn08_fn04_query_clct_task_info_dl_t; | ||
|  | 
 | ||
|  | /* query collection task detailed information up link */ | ||
|  | typedef struct _spg_afn08_fn04_query_clct_task_info_ul { | ||
|  |     /* task id */ | ||
|  |     spg_clct_task_info_t    clct_task_info; | ||
|  | } spg_afn08_fn04_query_clct_task_info_ul_t; | ||
|  | 
 | ||
|  | /* add collection data read task */ | ||
|  | typedef struct _spg_afn08_fn05_add_clct_data_read_dl { | ||
|  |     /* task priority, 0 - hight priority, 3 - low priority */ | ||
|  |     uint8_t     task_pri    :4, | ||
|  |     /* reserved */ | ||
|  |                 reserved    :4; | ||
|  |     /* timeout */ | ||
|  |     uint16_t    timeout; | ||
|  |     /* collection task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  |     /* collection task sn */ | ||
|  |     uint8_t     clct_task_sn; | ||
|  |     /* start time */ | ||
|  |     spg_clct_task_data_time_t   start_time; | ||
|  |     /* time count */ | ||
|  |     uint8_t     time_cnt; | ||
|  | } spg_afn08_fn05_add_clct_data_read_dl_t; | ||
|  | 
 | ||
|  | /* delete collection data read task */ | ||
|  | typedef struct _spg_afn08_fn06_del_clct_data_read_dl { | ||
|  |     /* task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  | } spg_afn08_fn06_del_clct_data_read_dl_t; | ||
|  | 
 | ||
|  | /* query collection data read task infomation down link */ | ||
|  | typedef struct _spg_afn08_fn07_query_clct_data_read_info_dl { | ||
|  |     /* task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  | } spg_afn08_fn07_query_clct_data_read_info_dl_t; | ||
|  | 
 | ||
|  | /* query collection data read task infomation up link */ | ||
|  | typedef struct _spg_afn08_fn07_query_clct_data_read_info_ul { | ||
|  |     /* task priority, 0 - hight priority, 3 - low priority */ | ||
|  |     uint8_t     task_pri : 4, | ||
|  |     /* reserved */ | ||
|  |                 reserved : 4; | ||
|  |     /* timeout */ | ||
|  |     uint16_t    timeout; | ||
|  |     /* collection task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  |     /* collection task sn */ | ||
|  |     uint8_t     clct_task_sn; | ||
|  |     /* start time */ | ||
|  |     spg_clct_task_data_time_t   start_time; | ||
|  |     /* time count */ | ||
|  |     uint8_t     time_cnt; | ||
|  | } spg_afn08_fn07_query_clct_data_read_info_ul_t; | ||
|  | 
 | ||
|  | /* query collection task status down link by addr */ | ||
|  | typedef struct _spg_afn08_fn08_query_clct_task_status_dl { | ||
|  |     /* current query secondary node count */ | ||
|  |     uint8_t     cur_cnt; | ||
|  |     /* secondary node mac address */ | ||
|  |     uint8_t     addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afn08_fn08_query_clct_task_status_dl_t; | ||
|  | 
 | ||
|  | /* collection task status data */ | ||
|  | typedef struct _spg_clct_task_status_data { | ||
|  |     /* task id */ | ||
|  |     uint8_t     clct_task_id; | ||
|  |     /* collection task status */ | ||
|  |     uint8_t     clct_task_status; | ||
|  | } spg_clct_task_status_data_t; | ||
|  | 
 | ||
|  | /* secondary node collection task status */ | ||
|  | typedef struct _spg_sec_clct_task_status { | ||
|  |     /* secondary node mac address */ | ||
|  |     uint8_t     addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* secondary node collection task count */ | ||
|  |     uint8_t     clct_task_cnt; | ||
|  |     /* collection task status data */ | ||
|  |     spg_clct_task_status_data_t     status_data[0]; | ||
|  | } spg_sec_clct_task_status_t; | ||
|  | 
 | ||
|  | /* query collection task status ul link */ | ||
|  | typedef struct _spg_afn08_fn08_query_clct_task_status_ul { | ||
|  |     /* current report secondary node count */ | ||
|  |     uint8_t     cur_cnt; | ||
|  |     /* collection task status */ | ||
|  |     //spg_sec_clct_task_status_t    clct_task_status[0];
 | ||
|  | } spg_afn08_fn08_query_clct_task_status_ul_t; | ||
|  | 
 | ||
|  | /* query collection task status down link by index */ | ||
|  | typedef struct _spg_afn08_fn09_query_clct_task_status_dl { | ||
|  |     /* query secondary node start index, starting from 0 */ | ||
|  |     uint16_t    start_index; | ||
|  |     /* secondary node count */ | ||
|  |     uint8_t     sec_cnt; | ||
|  | } spg_afn08_fn09_query_clct_task_status_dl_t; | ||
|  | 
 | ||
|  | /* query collection task status ul link */ | ||
|  | typedef struct _spg_afn08_fn09_query_clct_task_status_ul { | ||
|  |     /* current report secondary node count */ | ||
|  |     uint8_t     cur_cnt; | ||
|  |     /* collection task status */ | ||
|  |     //spg_sec_clct_task_status_t    clct_task_status[0];
 | ||
|  | } spg_afn08_fn09_query_clct_task_status_ul_t; | ||
|  | 
 | ||
|  | /* data send dl link */ | ||
|  | typedef struct _spg_afn22_fn01_data_send_dl { | ||
|  |     /* data type, see PROTO_SPG_CTRL_DATA_TYPE_XXX */ | ||
|  |     uint8_t     data_type; | ||
|  |     /* data send param */ | ||
|  |     uint8_t     data_para[8]; | ||
|  |     /* data send length */ | ||
|  |     uint16_t    data_len; | ||
|  |     /* send data */ | ||
|  |     uint8_t     data[0]; | ||
|  | } spg_afn22_fn01_data_send_dl_t; | ||
|  | 
 | ||
|  | /* data send ul link */ | ||
|  | typedef struct _spg_afn22_fn01_data_send_ul { | ||
|  |     /* data type, see PROTO_SPG_CTRL_DATA_TYPE_XXX */ | ||
|  |     uint8_t     data_type; | ||
|  |     /* data send param */ | ||
|  |     uint8_t     data_para[8]; | ||
|  |     /* data send length */ | ||
|  |     uint16_t    data_len; | ||
|  |     /* send data */ | ||
|  |     uint8_t     data[0]; | ||
|  | } spg_afn22_fn01_data_send_ul_t; | ||
|  | 
 | ||
|  | /* node info */ | ||
|  | typedef struct _spg_ctrl_node_info_t { | ||
|  |     /* newwork id */ | ||
|  |     uint32_t    nid : 24, | ||
|  |     /* band id */ | ||
|  |                 band_id : 8; | ||
|  |     /* node mac address : small endian */ | ||
|  |     uint8_t     addr[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_ctrl_node_info_t; | ||
|  | 
 | ||
|  | /* report scan node information to app */ | ||
|  | typedef struct _spg_afn41_fn01_rpt_node_info_ul { | ||
|  |     /* total count of scan node */ | ||
|  |     uint8_t      total_cnt; | ||
|  |     /* node info */ | ||
|  |     spg_ctrl_node_info_t node_info[0]; | ||
|  | } spg_afn41_fn01_rpt_node_info_ul; | ||
|  | 
 | ||
|  | /* request connect node down link */ | ||
|  | typedef struct _spg_afn41_fn02_req_connect_node_dl { | ||
|  |     /* req connect node */ | ||
|  |     uint8_t    addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* reserved */ | ||
|  |     uint16_t   reserved; | ||
|  | } spg_afn41_fn02_req_connect_node_dl_t; | ||
|  | 
 | ||
|  | /* request connect node down link */ | ||
|  | typedef struct _spg_afnf0_fn01_req_connect_node_dl { | ||
|  |     /* req connect node */ | ||
|  |     uint8_t    addr[IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afnf0_fn01_req_connect_node_dl_t; | ||
|  | 
 | ||
|  | /* set band up link, for guangzhou protocol */ | ||
|  | typedef struct _spg_afnf0_fn01_set_band_ul { | ||
|  |     /* result, 00 00 00 00 is success, otherwise is fail*/ | ||
|  |     uint8_t     ret[4]; | ||
|  | } spg_afnf0_fn01_set_band_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afnf0_fnf4_phy_topo_query_dl { | ||
|  |     /* query physical topo start index */ | ||
|  |     uint16_t    start_index; | ||
|  |     /* query count */ | ||
|  |     uint8_t     count; | ||
|  | } spg_afnf0_fnf4_phy_topo_query_dl_t; | ||
|  | 
 | ||
|  | /* physical topo */ | ||
|  | typedef struct _spg_phy_topo_node_info { | ||
|  |     /* node mac addr, little endian */ | ||
|  |     uint8_t     mac_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* device type, see PROTO_SPG_BD_DEV_TYPE_XXX */ | ||
|  |     uint8_t     dev_type; | ||
|  |     /* father node mac addr, little endian */ | ||
|  |     uint8_t     father_node[IOT_MAC_ADDR_LEN]; | ||
|  |     /* phase info */ | ||
|  |     uint8_t     phase               : 3, | ||
|  |     /* node phase feature, see PTORO_SPG_SEC_NODE_PHASE_XXX */ | ||
|  |                 phase_feature       : 2, | ||
|  |     /* node phase type, see PROTO_SPG_PHASE_SEQ_XXX */ | ||
|  |                 phase_type          : 3; | ||
|  |     /* proto type, see PROTO_SPG_PROTO_TYPE_XXX */ | ||
|  |     uint8_t     proto_type          : 3, | ||
|  |     /* reserved1 */ | ||
|  |                 reserved1           : 3, | ||
|  |     /* module type, see PROTO_SPG_MODULE_XXX */ | ||
|  |                 module_type         : 2; | ||
|  |     /* reserved2 */ | ||
|  |     uint8_t     reserved2[15]; | ||
|  | } spg_phy_topo_node_info_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afnf0_fnf4_phy_topo_query_ul { | ||
|  |     /* total node count  */ | ||
|  |     uint16_t    total_cnt; | ||
|  |     /* start query index */ | ||
|  |     uint16_t    start_index; | ||
|  |     /* report node count */ | ||
|  |     uint8_t     rpt_cnt; | ||
|  |     /* physical topo node info */ | ||
|  |     spg_phy_topo_node_info_t  node_info[0]; | ||
|  | } spg_afnf0_fnf4_phy_topo_query_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afnf0_fnf5_bd_state_ul { | ||
|  |     /* report branch detect state, see PROTO_SPG_BD_STATE_XXX */ | ||
|  |     uint8_t     rpt_state; | ||
|  | } spg_afnf0_fnf5_bd_state_ul_t; | ||
|  | 
 | ||
|  | typedef struct _spg_afnf0_fnf6_bd_enable { | ||
|  |     /* if enable branch detect, 0 stop branch detect, 1 start branch detect */ | ||
|  |     uint8_t     enable; | ||
|  |     /* reserved */ | ||
|  |     uint8_t     reserved[5]; | ||
|  | } spg_afnf0_fnf6_bd_enable_t; | ||
|  | 
 | ||
|  | /* transformer detect enable for guangzhou */ | ||
|  | typedef struct _spg_afnf0_fn10_enable_tsfm { | ||
|  |     /* start time */ | ||
|  |     uint8_t     start_time[PROTO_SPG_DATETIME_LEN]; | ||
|  |     /* tsfm duration, unit is 1min */ | ||
|  |     uint16_t    duration; | ||
|  |     /* sec node retry count */ | ||
|  |     uint8_t     retry_cnt; | ||
|  |     /* each wait tick is 150ms */ | ||
|  |     uint8_t     wait_tick_cnt; | ||
|  | } spg_afnf0_fn10_enable_tsfm_t; | ||
|  | 
 | ||
|  | /* data to response for query build version info */ | ||
|  | typedef struct _spg_afnf0_fnde_build_ver_info { | ||
|  |     /* Build type: Release/Debug-(0/1) */ | ||
|  |     uint8_t type_ver; | ||
|  |     /* numerically encoded version, like 0x01020304 */ | ||
|  |     uint32_t firmware_version; | ||
|  |     /* external software version. BCD format. range from 0 - 9999 */ | ||
|  |     uint16_t sw_ver; | ||
|  |     /* app software version. bin format. range from 0 - 1023 */ | ||
|  |     uint16_t app_ver; | ||
|  |     /* build year */ | ||
|  |     uint8_t year; | ||
|  |     /* build month */ | ||
|  |     uint8_t month; | ||
|  |     /* build day */ | ||
|  |     uint8_t day; | ||
|  |     /* build hour */ | ||
|  |     uint8_t hour; | ||
|  |     /* build min */ | ||
|  |     uint8_t min; | ||
|  |     /* build sec */ | ||
|  |     uint8_t sec; | ||
|  |     /* vendor id */ | ||
|  |     uint16_t vendor_id; | ||
|  |     /* device id */ | ||
|  |     uint8_t dev_id[PROTO_SPG_DEVICE_ID_LEN]; | ||
|  |     /* chip management id */ | ||
|  |     uint8_t chip_mmid[PROTO_SPG_CHIP_MMID_ID_LEN]; | ||
|  |     /* image crc check result, 0 mean succeed, 1 mean fail */ | ||
|  |     uint8_t img_check_result : 1, | ||
|  |     /* flag mark to if the device has branch signal receiving capability */ | ||
|  |             br_ident         : 1, | ||
|  |     /* flag mark to if enable rf */ | ||
|  |             rf               : 1, | ||
|  |     /* non 0 means broadcast packet sent in 3phase simultaneously, 0 means
 | ||
|  |      * broadcast packet sent in 3phase in turn. | ||
|  |      */ | ||
|  |             tx_3phase_flag   : 1, | ||
|  |     /* reserve for future */ | ||
|  |             reserve          : 4; | ||
|  |     /* hardware version */ | ||
|  |     uint32_t hw_ver; | ||
|  |     /* module mac address */ | ||
|  |     uint8_t mod_addr[IOT_MAC_ADDR_LEN]; | ||
|  |     /* user type */ | ||
|  |     uint8_t user_type; | ||
|  |     /* simple pair passcode value. Only same passcode CCO and STA can be
 | ||
|  |      * associated, little endian. | ||
|  |      */ | ||
|  |     uint16_t passcode; | ||
|  |     /* equipment service provider, see IOT_SG_CCO_ESP_XXX */ | ||
|  |     uint8_t esp; | ||
|  | }spg_afnf0_fnde_build_ver_info_t; | ||
|  | 
 | ||
|  | /* report while list ii count */ | ||
|  | typedef struct _spg_afnf0_fn13_node_info { | ||
|  |     /* while list ii count */ | ||
|  |     uint16_t        sec_node_num; | ||
|  |     /* max while list ii count */ | ||
|  |     uint16_t        max_sec_node_num; | ||
|  | } spg_afnf0_fn13_node_info_t; | ||
|  | 
 | ||
|  | /* query while list ii node info */ | ||
|  | typedef struct _spg_afnf0_fn14_node_info_req { | ||
|  |     /* start query index */ | ||
|  |     uint16_t        start_index; | ||
|  |     /* query count */ | ||
|  |     uint8_t         count; | ||
|  | } spg_afnf0_fn14_node_info_req_t; | ||
|  | 
 | ||
|  | /* report query while list ii node info result */ | ||
|  | typedef struct _spg_afnf0_fn14_node_info_rsp { | ||
|  |     /* total count of secondary nodes */ | ||
|  |     uint16_t        total_count; | ||
|  |     /* count of secondary nodes returned in this packet */ | ||
|  |     uint8_t         count; | ||
|  |     /* secondary nodes info */ | ||
|  |     /* mac address list of the secondary node */ | ||
|  |     uint8_t         mac[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afnf0_fn14_node_info_rsp_t; | ||
|  | 
 | ||
|  | /* add white list ii node */ | ||
|  | typedef struct _spg_afnf0_fn15_add_wlii_dl { | ||
|  |     /* count of the secondary node to be added */ | ||
|  |     uint8_t     sec_node_count; | ||
|  |     /* mac address list of the secondary node to be added */ | ||
|  |     uint8_t     mac_addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afnf0_fn15_add_wlii_dl_t; | ||
|  | 
 | ||
|  | /* remove while list ii node request */ | ||
|  | typedef struct _spg_afnf0_fn16_rmv_wlii_dl { | ||
|  |     /* count of the secondary node to be remove */ | ||
|  |     uint8_t         sec_node_cnt; | ||
|  |     /* mac address list of the secondary node to be remove */ | ||
|  |     uint8_t         mac_addr[0][IOT_MAC_ADDR_LEN]; | ||
|  | } spg_afnf0_fn16_rmv_wlii_dl_t; | ||
|  | 
 | ||
|  | /* set frequency band parameter */ | ||
|  | typedef struct _spg_set_freq_band { | ||
|  |     uint8_t                     freq_band; | ||
|  | } spg_set_freq_band_t; | ||
|  | 
 | ||
|  | /* query sec node frequency band information */ | ||
|  | typedef struct _spg_query_freq_band { | ||
|  |     uint8_t                     freq_band; | ||
|  | } spg_query_freq_band_t; | ||
|  | 
 | ||
|  | #pragma pack(pop)   /* restore the pack status */
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* PROTO_SPG_CCO_H */
 |