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 */
 |