2028 lines
		
	
	
		
			69 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2028 lines
		
	
	
		
			69 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_NW_APP_H
 | 
						|
#define PROTO_NW_APP_H
 | 
						|
 | 
						|
#include "os_types_api.h"
 | 
						|
#include "iot_utils_api.h"
 | 
						|
#include "iot_config_api.h"
 | 
						|
#include "proto_645.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* pack for the structures in the whole file */
 | 
						|
#pragma pack(push)  /* save the pack status */
 | 
						|
#pragma pack(1)     /* 1 byte align */
 | 
						|
 | 
						|
/* south power grid application protocol frame type field definitions */
 | 
						|
#define NW_APP_FRAME_TYPE_ACK_NACK                (0x00)
 | 
						|
#define NW_APP_FRAME_TYPE_DATA_FWD                (0x01)
 | 
						|
#define NW_APP_FRAME_TYPE_CMD                     (0x02)
 | 
						|
#define NW_APP_FRAME_TYPE_RPT                     (0x03)
 | 
						|
#define NW_APP_FRAME_TYPE_CTRL                    (0x04)
 | 
						|
#define NW_APP_FRAME_TYPE_BCAST_CMD               (0x05)
 | 
						|
#define NW_APP_FRAME_TYPE_ROUTE_FWD               (0x06)
 | 
						|
#define NW_APP_FRAME_TYPE_CUSTOM                  (0x0E)
 | 
						|
#define NW_APP_FRAME_TYPE_PT                      (0x0F)
 | 
						|
 | 
						|
/* south power grid application protocol work type definitions */
 | 
						|
/* confirm/denial */
 | 
						|
#define NW_APP_WORK_ACK                           (0x00)
 | 
						|
#define NW_APP_WORK_NACK                          (0x01)
 | 
						|
/* data forwarding */
 | 
						|
#define NW_APP_WORK_DATA_FWD_TRANSPARENT          (0x00)
 | 
						|
#define NW_APP_WORK_DATA_FWD_TRANS_MODULE         (0x01)
 | 
						|
/* command */
 | 
						|
#define NW_APP_WORK_CMD_QUERY_SEARCH_METER_RESULT (0x00)
 | 
						|
#define NW_APP_WORK_CMD_DL_SEARCH_METER_LIST      (0x01)
 | 
						|
#define NW_APP_WORK_CMD_FILE_TRANSFER             (0x02)
 | 
						|
#define NW_APP_WORK_CMD_SEC_NODE_EVT              (0x03)
 | 
						|
#define NW_APP_WORK_CMD_SEC_NODE_REBOOT           (0x04)
 | 
						|
#define NW_APP_WORK_CMD_SEC_NODE_INFO_QUERY       (0x05)
 | 
						|
#define NW_APP_WORK_CMD_DL_ADDR_MAP_LIST          (0x06)
 | 
						|
#define NW_APP_WORK_CMD_SEC_NODE_ID_QUERY         (0x10)
 | 
						|
#define NW_APP_WORK_CMD_SEC_NODE_NET_QUERY        (0x11)
 | 
						|
#define NW_APP_WORK_CMD_PM_SCORE_QUERY            (0x20)
 | 
						|
#define NW_APP_WORK_CMD_TSFM                      (0x21)
 | 
						|
#define NW_APP_WORK_CMD_EDGE_COMPUTING            (0xA0)
 | 
						|
#define NW_APP_WORK_CMD_COMM_TEST                 (0xF0)
 | 
						|
/* command for guangdong protocol */
 | 
						|
#define NW_APP_WORK_CMD_RUN_STATE_QUERY           (0x07)
 | 
						|
#define NW_APP_WORK_CMD_NEIGHBOUR_QUERY           (0x08)
 | 
						|
#define NW_APP_WORK_CMD_TSFM_GD                   (0x10)
 | 
						|
#define NW_APP_WORK_CMD_CLCT_INIT                 (0x20)
 | 
						|
#define NW_APP_WORK_CMD_CLCT_ADD                  (0x21)
 | 
						|
#define NW_APP_WORK_CMD_CLCT_DEL                  (0x22)
 | 
						|
#define NW_APP_WORK_CMD_CLCT_ID_QUERY             (0x23)
 | 
						|
#define NW_APP_WORK_CMD_CLCT_INFO_QUERY           (0x24)
 | 
						|
#define NW_APP_WORK_CMD_CLCT_DATA_QUERY           (0x25)
 | 
						|
#define NW_APP_WORK_CMD_CORRECT                   (0x30)
 | 
						|
/* ctrl for guangdong protocol */
 | 
						|
#define NW_APP_WORK_CTRL_PROTO                    (0x00)
 | 
						|
#define NW_APP_WORK_CTRL_PASSTHROUGH              (0x01)
 | 
						|
/* event report */
 | 
						|
#define NW_APP_WORK_RPT_EVT_RPT                   (0x00)
 | 
						|
/* event report for guangdong protocol */
 | 
						|
#define NW_APP_WORK_RPT_POWER_RPT                 (0x01)
 | 
						|
#define NW_APP_WORK_RPT_DEV_RPT                   (0x02)
 | 
						|
#define NW_APP_WORK_RPT_EDGE_COMPUTING            (0x40)
 | 
						|
 | 
						|
/* expand the defined work id for SPG production testing system.
 | 
						|
 */
 | 
						|
#define NW_APP_WORT_ID_PT_SET_MAC                 (0x04)
 | 
						|
#define NW_APP_WORT_ID_PT_QR_MAC                  (0x05)
 | 
						|
#define NW_APP_WORT_ID_PT_READ_VER                (0x3B)
 | 
						|
 | 
						|
/* vendor information flag */
 | 
						|
#define NW_APP_CONTROL_NO_VENDOR_INFO             (0x00)
 | 
						|
#define NW_APP_CONTROL_VENDOR_INFO                (0x01)
 | 
						|
 | 
						|
/* route fwd work id */
 | 
						|
#define NW_APP_ROUTE_FWD_DATA                     (0x00)
 | 
						|
 | 
						|
/* respond flag */
 | 
						|
#define NW_APP_CONTROL_NO_NEED_RSP                (0x00)
 | 
						|
#define NW_APP_CONTROL_NEED_RSP                   (0x01)
 | 
						|
 | 
						|
/* start flag */
 | 
						|
#define NW_APP_CONTROL_PRM_MASTER                 (0x01)
 | 
						|
#define NW_APP_CONTROL_PRM_SLAVE                  (0x00)
 | 
						|
 | 
						|
/* dir flag */
 | 
						|
#define NW_APP_CONTROL_DOWN_LINK                  (0x00)
 | 
						|
#define NW_APP_CONTROL_UP_LINK                    (0x01)
 | 
						|
 | 
						|
/* nw frame priority definition */
 | 
						|
#define NW_APP_PRIO_ACK_NACK                       3
 | 
						|
#define NW_APP_PRIO_TASK                           3
 | 
						|
#define NW_APP_PRIO_CLCT_TASK                      3
 | 
						|
#define NW_APP_PRIO_CORRECTING_TIME                3
 | 
						|
#define NW_APP_PRIO_QUERY_SM_RESULT                2
 | 
						|
#define NW_APP_PRIO_DL_METER_LIST                  3
 | 
						|
#define NW_APP_PRIO_DL_ADDR_MAP_LIST               3
 | 
						|
#define NW_APP_PRIO_FILE_TRANS                     2
 | 
						|
#define NW_APP_PRIO_SEC_NODE_EVT_EN                3
 | 
						|
#define NW_APP_PRIO_SEC_NODE_REBOOT                2
 | 
						|
#define NW_APP_PRIO_QUERY_SEC_NODE_INFO            3
 | 
						|
#define NW_APP_PRIO_TSFM_DETECT                    3
 | 
						|
#define NW_APP_PRIO_COMM_TEST                      2
 | 
						|
#define NW_APP_PRIO_DEFAULT                        2
 | 
						|
 | 
						|
/* nw device type definition */
 | 
						|
#define NW_APP_DEV_TYPE_POWER_METER                0
 | 
						|
#define NW_APP_DEV_TYPE_COLLECTOR_T1               1
 | 
						|
#define NW_APP_DEV_TYPE_COLLECTOR_T2               2
 | 
						|
 | 
						|
/* south power grid application protocol data type definition */
 | 
						|
#define NW_APP_DATA_TYPE_TRANSPARENT               (0x00)
 | 
						|
#define NW_APP_DATA_TYPE_645_1997                  (0x01)
 | 
						|
#define NW_APP_DATA_TYPE_645_2007                  (0x02)
 | 
						|
#define NW_APP_DATA_TYPE_T188                      (0x03)
 | 
						|
 | 
						|
/* define nw meter addr len to add address map list */
 | 
						|
#define NW_APP_METER_ADDR_LEN                      12
 | 
						|
 | 
						|
/* OK to upgrade */
 | 
						|
#define NW_APP_UPGRADE_OK                          0
 | 
						|
/* receive request in invalid state */
 | 
						|
#define NW_APP_UPGRADE_STATE_ERR                   1
 | 
						|
/* same version. don't upgrade */
 | 
						|
#define NW_APP_UPGRADE_ERR_SAME_VERSION            2
 | 
						|
/* flash operation error */
 | 
						|
#define NW_APP_UPGRADE_FLASH_ERROR                 3
 | 
						|
/* don't upgrade in trail run state*/
 | 
						|
#define NW_APP_UPGRADE_TRAIL_RUN_REJ               4
 | 
						|
/* upgrade err because no memory */
 | 
						|
#define NW_APP_UPGRADE_ERR_NO_MEM                  5
 | 
						|
/* block size error */
 | 
						|
#define NW_APP_UPGRADE_ERR_BLOCK_SIZE              6
 | 
						|
/* unknown error */
 | 
						|
#define NW_APP_UPGRADE_OTHER_ERR                   7
 | 
						|
 | 
						|
/* translate file msg id */
 | 
						|
/* information of file from cco down link */
 | 
						|
#define NW_APP_CMD_FILE_INFO                       (0x00)
 | 
						|
/* data of file send from cco down link */
 | 
						|
#define NW_APP_CMD_FILE_DATA                       (0x01)
 | 
						|
/* query device received status from cco down link */
 | 
						|
#define NW_APP_CMD_QUERY_RECV_STATUS               (0x02)
 | 
						|
/* translate file finish from cco down link */
 | 
						|
#define NW_APP_CMD_FILE_SEND_DONE                  (0x03)
 | 
						|
/* data of file send from cco down link. STA shall locally bcast it. */
 | 
						|
#define NW_APP_CMD_FILE_DATA_B                     (0x04)
 | 
						|
 | 
						|
/* upgrade file attribute */
 | 
						|
/* clear device file */
 | 
						|
#define NW_APP_FILE_ATTRIBUTE_CLR                  (0x00)
 | 
						|
/* STA file */
 | 
						|
#define NW_APP_FILE_ATTRIBUTE_STA                  (0x02)
 | 
						|
/* collector file */
 | 
						|
#define NW_APP_FILE_ATTRIBUTE_COLLECT              (0x03)
 | 
						|
/* power meter file */
 | 
						|
#define NW_APP_FILE_ATTRIBUTE_PM                   (0x04)
 | 
						|
 | 
						|
/* query elements id */
 | 
						|
/* manufacture code */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_OEM_CODE          (0x00)
 | 
						|
/* version id */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_VER_INFO          (0x01)
 | 
						|
/* bootload version */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_BOOTLOADER        (0x02)
 | 
						|
/* crc value of the upgrade file */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_UPGRADE_CRC       (0x03)
 | 
						|
/* length of the upgrade file */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_UPGRADE_LEN       (0x04)
 | 
						|
/* chip code */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_CHIP_CODE         (0x05)
 | 
						|
/* version date */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_VER_DATE          (0x06)
 | 
						|
/* upgrade result status words */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_UPGRADE_WORDS     (0x07)
 | 
						|
/* module mac addr */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_MOD_MAC           (0x08)
 | 
						|
/* module hardware version id */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_HW_MOD_VER_INFO   (0x09)
 | 
						|
/* module hardware version date */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_HW_MOD_DATE       (0x0A)
 | 
						|
/* chip software version id */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_SW_CHIP_VER_INFO  (0x0B)
 | 
						|
/* chip software version date */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_SW_CHIP_VER_DATE  (0x0C)
 | 
						|
/* chip hardware version id */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_HW_CHIP_VER_INFO  (0x0D)
 | 
						|
/* chip hardware version date */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_HW_CHIP_VER_DATE  (0x0E)
 | 
						|
/* application version id */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_APP_VER_INFO      (0x0F)
 | 
						|
/* module device id */
 | 
						|
#define NW_APP_CMD_SEC_NODE_INFO_DEV_ID            (0x10)
 | 
						|
 | 
						|
/* nw upgrade block query definition */
 | 
						|
#define NW_APP_UPGRADE_QUERY_ALL_BLOCK             (0xFFFF)
 | 
						|
 | 
						|
/* upgrade status words */
 | 
						|
/* normal status words */
 | 
						|
#define NW_APP_UPGRADE_WORDS_NORMAL                (0x00)
 | 
						|
/* upgrade file mismatch words */
 | 
						|
#define NW_APP_UPGRADE_WORDS_MISMATCH              (0x01)
 | 
						|
/* other upgrade status words */
 | 
						|
#define NW_APP_UPGRADE_WORDS_OTHERS                (0x02)
 | 
						|
 | 
						|
/* idle status */
 | 
						|
#define NW_APP_FILE_ST_IDLE                        (0x00)
 | 
						|
/* sta is receiving data form cco down link */
 | 
						|
#define NW_APP_FILE_ST_SENDING                     (0x01)
 | 
						|
/* sta had received that all data from cco down link */
 | 
						|
#define NW_APP_FILE_ST_SEND_DONE                   (0x02)
 | 
						|
/* reserved segment1 */
 | 
						|
#define NW_APP_FILE_ST_RSVD1                       (0x03)
 | 
						|
/* reserved segment2 */
 | 
						|
#define NW_APP_FILE_ST_RSVD2                       (0x04)
 | 
						|
/* sta had received that all data from cco down link and
 | 
						|
 * upgrade done msg from cco
 | 
						|
 */
 | 
						|
#define NW_APP_FILE_ST_DEST_DONE                   (0x05)
 | 
						|
/* STA failed to receive file, or STA failed to send file to
 | 
						|
 * final dest device. Final device failed to get the whole file.
 | 
						|
 */
 | 
						|
#define NW_APP_FILE_ST_DEST_FAIL                   (0x06)
 | 
						|
 | 
						|
/* chip id length */
 | 
						|
#define NW_APP_CHIP_ID_LEN                         (5)
 | 
						|
/* chip id crc length */
 | 
						|
#define NW_APP_CHIP_ID_CRC_LEN                     (8)
 | 
						|
 | 
						|
/* transformer detection feature collection type */
 | 
						|
#define NW_APP_TSFM_COLLECT_START                  (1)
 | 
						|
#define NW_APP_TSFM_COLLECT_COLLECT                (2)
 | 
						|
#define NW_APP_TSFM_COLLECT_REPORT                 (3)
 | 
						|
#define NW_APP_TSFM_COLLECT_QUERY                  (4)
 | 
						|
#define NW_APP_TSFM_COLLECT_RESULT                 (5)
 | 
						|
#define NW_APP_TSFM_COLLECT_PHASE_IND              (6)
 | 
						|
#define NW_APP_TSFM_COLLECT_PHASE_RPT              (7)
 | 
						|
 | 
						|
#define NW_APP_TSFM_COLLECT_QUERY_PW               (180)
 | 
						|
#define NW_APP_TSFM_COLLECT_RESULT_PW              (181)
 | 
						|
 | 
						|
/* transformer detection feature type */
 | 
						|
#define NW_APP_TSFM_FEATURE_INVALID                (0)
 | 
						|
#define NW_APP_TSFM_FEATURE_VOLTAGE                (1)
 | 
						|
#define NW_APP_TSFM_FEATURE_FREQUENCY              (2)
 | 
						|
#define NW_APP_TSFM_FEATURE_PERIOD                 (3)
 | 
						|
 | 
						|
/* transformer detect result */
 | 
						|
#define NW_APP_TSFM_DETECT_RET_UNKNOWN             (0)
 | 
						|
#define NW_APP_TSFM_DETECT_RET_SAME                (1)
 | 
						|
#define NW_APP_TSFM_DETECT_RET_DIFFERENT           (2)
 | 
						|
 | 
						|
/* collect type */
 | 
						|
#define NW_APP_TSFM_COLLECT_TYPE_DEFAULT           (0)
 | 
						|
#define NW_APP_TSFM_COLLECT_TYPE_FALLING           (1)
 | 
						|
#define NW_APP_TSFM_COLLECT_TYPE_RISING            (2)
 | 
						|
#define NW_APP_TSFM_COLLECT_TYPE_EDGE              (3)
 | 
						|
 | 
						|
/* nw protocol phase definition */
 | 
						|
#define NW_APP_DATA_PHASE_DEFAULT                  (0)
 | 
						|
#define NW_APP_DATA_PHASE_A                        (1)
 | 
						|
#define NW_APP_DATA_PHASE_B                        (2)
 | 
						|
#define NW_APP_DATA_PHASE_C                        (3)
 | 
						|
 | 
						|
/* convert ntb to ms. in HW, the ntb clock freq is 25 mhz. */
 | 
						|
#define NW_APP_NTB_TO_MS(ntb)               ((ntb) / (25 * 1000))
 | 
						|
/* convert ms to ntb. in HW, the ntb clock freq is 25 mhz. */
 | 
						|
#define NW_APP_MS_TO_NTB(ms)                ((ms) * (25 * 1000))
 | 
						|
 | 
						|
/* nw protocol sta communication mode definition */
 | 
						|
#define NW_APP_COMM_MOD_UNKNOW                     (0)
 | 
						|
#define NW_APP_COMM_MOD_CARRIER                    (1)
 | 
						|
#define NW_APP_COMM_MOD_WIRELESS                   (2)
 | 
						|
 | 
						|
/* id type */
 | 
						|
#define NW_APP_ID_TYPE_MOD_COMPATIBLE              (0)
 | 
						|
#define NW_APP_ID_TYPE_CHIP                        (1)
 | 
						|
#define NW_APP_ID_TYPE_MOD                         (2)
 | 
						|
 | 
						|
/* nw power off bitmap TEI definitions */
 | 
						|
#define NW_APP_EVENT_TEI_FIRST                     (1)
 | 
						|
#define NW_APP_EVENT_TEI_LAST                      (PLC_NETWORK_SCALE)
 | 
						|
 | 
						|
/* nw node id information len */
 | 
						|
#define NW_APP_NODE_ID_INFO_LEN                    (24)
 | 
						|
 | 
						|
#define NW_APP_EVENT_TEI_IS_VALID(__tei) \
 | 
						|
    ((__tei) >= NW_APP_EVENT_TEI_FIRST && (__tei) <= NW_APP_EVENT_TEI_LAST)
 | 
						|
 | 
						|
/* nw tei to bitmap index conversion */
 | 
						|
#define NW_APP_TEI_TO_BM(tei) (tei + 1)
 | 
						|
 | 
						|
/* nan wang controller primary request message flag */
 | 
						|
#define NW_APP_CTRL_PRM_MASTER                     (1)
 | 
						|
#define NW_APP_CTRL_PRM_SLAVE                      (0)
 | 
						|
 | 
						|
/* nan wang controller protocol type */
 | 
						|
#define NW_APP_CTRL_PROTO_TYPE_DEF                 (0)
 | 
						|
 | 
						|
/* nw state run state info id */
 | 
						|
#define NW_APP_RUN_STATE_ID_RUNTIME                (0)
 | 
						|
#define NW_APP_RUN_STATE_ID_ZC                     (1)
 | 
						|
#define NW_APP_RUN_STATE_ID_UART                   (2)
 | 
						|
#define NW_APP_RUN_STATE_ID_LEAVE                  (3)
 | 
						|
#define NW_APP_RUN_STATE_ID_RESET                  (4)
 | 
						|
 | 
						|
/* uart state, used for NW_APP_RUN_STATE_ID_UART */
 | 
						|
#define NW_APP_RUN_UART_STATE_NORMAL               0
 | 
						|
#define NW_APP_RUN_UART_STATE_ONCE_ABNORMAL        1
 | 
						|
#define NW_APP_RUN_UART_STATE_ABNORMAL             2
 | 
						|
 | 
						|
/* leave net reason, used for NW_APP_RUN_STATE_ID_LEAVE */
 | 
						|
#define NW_APP_RUN_LEAVE_REASON_UNKNOWN            0
 | 
						|
#define NW_APP_RUN_LEAVE_REASON_SN_CHG             1
 | 
						|
#define NW_APP_RUN_LEAVE_REASON_NO_BC_RX           2
 | 
						|
#define NW_APP_RUN_LEAVE_REASON_TF_0               3
 | 
						|
#define NW_APP_RUN_LEAVE_REASON_LEVEL              4
 | 
						|
#define NW_APP_RUN_LEAVE_REASON_LEAVE_IND          5
 | 
						|
 | 
						|
/* reset reason, used for NW_APP_RUN_STATE_ID_RESET */
 | 
						|
#define NW_APP_RUN_RESET_REASON_POWER              0
 | 
						|
#define NW_APP_RUN_RESET_REASON_GPIO               1
 | 
						|
#define NW_APP_RUN_RESET_REASON_UPGRADE            2
 | 
						|
#define NW_APP_RUN_RESET_REASON_CCO                3
 | 
						|
 | 
						|
/* define neighbor node query max count */
 | 
						|
#define NW_APP_NEIGHBOR_NODE_QUREY_MAX_CNT         6
 | 
						|
 | 
						|
/* work code */
 | 
						|
#define NW_APP_WORK_CODE_TRANS_645                 0x00
 | 
						|
#define NW_APP_WORK_CODE_CORR_TIME                 0x01
 | 
						|
#define NW_APP_WORK_CODE_LOAD_CURVE                0x02
 | 
						|
 | 
						|
/* define load curve function code for shenzhen */
 | 
						|
#define NW_APP_LR_FN_CFG_CLCT_INTERVAL_SZ          0x01
 | 
						|
#define NW_APP_LR_FN_QUERY_CLCT_INTERVAL_SZ        0x02
 | 
						|
#define NW_APP_LR_FN_READ_DI_DATA_SZ               0x03
 | 
						|
 | 
						|
/* define load curve function code for NW */
 | 
						|
#define NW_APP_LR_FN_CFG_CLCT_INTERVAL             0x01
 | 
						|
#define NW_APP_LR_FN_READ_DI_DATA                  0x02
 | 
						|
 | 
						|
/* define load curve meter type */
 | 
						|
#define NW_APP_LR_METER_TYPE_SINGLE_PHASE          0x00
 | 
						|
#define NW_APP_LR_METER_TYPE_THREE_PHASE           0x01
 | 
						|
#define NW_APP_LR_METER_TYPE_MAX \
 | 
						|
    (NW_APP_LR_METER_TYPE_THREE_PHASE + 1)
 | 
						|
 | 
						|
/* define correct time port id */
 | 
						|
#define NW_APP_CORRECT_TIME_PORT_ID                0x01
 | 
						|
 | 
						|
/* edge computing event report type */
 | 
						|
#define NW_APP_EDGE_COMP_EVT_TYPE_UNDERVOLTAGE     (0xA1)
 | 
						|
#define NW_APP_EDGE_COMP_EVT_TYPE_OVERVOLTAGE      (0xA2)
 | 
						|
#define NW_APP_EDGE_COMP_EVT_TYPE_SEC_PULSE        (0xA3)
 | 
						|
#define NW_APP_EDGE_COMP_EVT_TYPE_HEALTH_STATUS    (0xA4)
 | 
						|
 | 
						|
/* south power grid application protocol frame header */
 | 
						|
typedef struct _nw_app_header {
 | 
						|
    /* message port, set as 0x11 or 0x13, see NW_APP_PORT */
 | 
						|
    uint8_t         port;
 | 
						|
    /* message identifier, in application level set as 0x0101 */
 | 
						|
    uint16_t        id;
 | 
						|
    /* reserved for future, set as 0 */
 | 
						|
    uint8_t         reserved;
 | 
						|
} nw_app_header_t;
 | 
						|
 | 
						|
/* frame control field in application level message data  */
 | 
						|
typedef struct _nw_app_control {
 | 
						|
    uint16_t frame_type  : 4, /* D0 - D3 */
 | 
						|
             reserved    : 8, /* D4 - D11 */
 | 
						|
             work_append : 1, /* D12 */
 | 
						|
             respond     : 1, /* D13 */
 | 
						|
             start       : 1, /* D14 */
 | 
						|
             dir         : 1; /* D15 */
 | 
						|
} nw_app_control_t;
 | 
						|
 | 
						|
/* south power grid application level message data */
 | 
						|
typedef struct _nw_app_data {
 | 
						|
    /* control field */
 | 
						|
    nw_app_control_t  control_field;
 | 
						|
    /* work id */
 | 
						|
    uint8_t           work_id;
 | 
						|
    /* application version */
 | 
						|
    uint8_t           ver;
 | 
						|
    /* sequence number */
 | 
						|
    uint16_t          sn;
 | 
						|
    /* data length */
 | 
						|
    uint16_t          len;
 | 
						|
    /* data */
 | 
						|
    uint8_t           data[0];
 | 
						|
} nw_app_data_t;
 | 
						|
 | 
						|
/* south power grid protocol version definition */
 | 
						|
#define NW_APP_VERSION          (0x01)
 | 
						|
#define NW_APP_PORT             (0x11)
 | 
						|
#define NW_APP_PORT_MGR         (0x13) /* manager message port */
 | 
						|
#define NW_APP_PORT_PT          (0xFF) /* production test message port */
 | 
						|
#define NW_APP_ID               (0x0101)
 | 
						|
#define NW_APP_CONTROL          (0x00)
 | 
						|
 | 
						|
#define NW_APP_NACK_COMM_TIMEOUT        (0x00)
 | 
						|
#define NW_APP_NACK_WORD_ID_NO_SUPPORT  (0x01)
 | 
						|
#define NW_APP_NACK_CCO_BUSY            (0x02)
 | 
						|
#define NW_APP_NACK_METER_LEVEL_NO_ACK  (0x03)
 | 
						|
#define NW_APP_NACK_FORMAT_ERROR        (0x04)
 | 
						|
#define NW_APP_NACK_OTHER               (0xFF)
 | 
						|
/* nack payload between cco and sta */
 | 
						|
typedef struct _nw_app_nack {
 | 
						|
    /* reason code */
 | 
						|
    uint8_t         reason;
 | 
						|
} nw_app_nack_t;
 | 
						|
 | 
						|
/* transfer payload from cco to sta module */
 | 
						|
typedef struct _nw_app_fwd_module_dl {
 | 
						|
    /* primary node address, default set as 0 */
 | 
						|
    uint8_t         src_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* sta module address */
 | 
						|
    uint8_t         dst_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* work code for hainan and shenzhen, see NW_APP_WORK_CODE_XXX */
 | 
						|
    uint8_t         work_code_other;
 | 
						|
    /* work code, see NW_APP_WORK_CODE_XXX */
 | 
						|
    uint8_t         work_code;
 | 
						|
    /* data length */
 | 
						|
    uint16_t        data_len;
 | 
						|
    /* data */
 | 
						|
    uint8_t         data[0];
 | 
						|
} nw_app_fwd_module_dl_t;
 | 
						|
 | 
						|
/* transfer payload from cco to sta */
 | 
						|
typedef struct _nw_app_fwd_dl {
 | 
						|
    /* primary node address, default set as 0 */
 | 
						|
    uint8_t         src_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* meter address */
 | 
						|
    uint8_t         dst_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* device timeout, unit: 100ms */
 | 
						|
    uint8_t         dev_timeout;
 | 
						|
    /* reserved for future, default set as 0 */
 | 
						|
    uint8_t         reserved;
 | 
						|
    /* data length */
 | 
						|
    uint16_t        data_len;
 | 
						|
    /* data */
 | 
						|
    uint8_t         data[0];
 | 
						|
} nw_app_fwd_dl_t;
 | 
						|
 | 
						|
/* transfer payload from sta to cco */
 | 
						|
typedef struct _nw_app_fwd_ul {
 | 
						|
    /* meter address */
 | 
						|
    uint8_t         src_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* primary node address, default set as 0 */
 | 
						|
    uint8_t         dst_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* work code for hainan and shenzhen, see NW_APP_WORK_CODE_XXX */
 | 
						|
    uint8_t         work_code_other;
 | 
						|
    /* work code, see NW_APP_WORK_CODE_XXX */
 | 
						|
    uint8_t         work_code;
 | 
						|
    /* data length */
 | 
						|
    uint16_t        data_len;
 | 
						|
    /* data */
 | 
						|
    uint8_t         data[0];
 | 
						|
} nw_app_fwd_ul_t;
 | 
						|
 | 
						|
/* base element */
 | 
						|
typedef struct _nw_app_base_meter_info {
 | 
						|
    /* meter address */
 | 
						|
    uint8_t         meter_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* power meter proto type. see NW_APP_DATA_TYPE_XXX */
 | 
						|
    uint8_t         proto_type;
 | 
						|
    /* reserved for future, default set as 0 */
 | 
						|
    uint8_t         reserved;
 | 
						|
} nw_app_base_meter_info_t;
 | 
						|
 | 
						|
/* query search meter result */
 | 
						|
typedef struct _nw_app_cmd_query_meter_result {
 | 
						|
    /* meter count */
 | 
						|
    uint8_t                   meter_count;
 | 
						|
    /* reserved for future, default set as 0 */
 | 
						|
    uint8_t                   rsvd[3];
 | 
						|
    /* meter information */
 | 
						|
    nw_app_base_meter_info_t meter_info[0];
 | 
						|
} nw_app_cmd_query_meter_result_t;
 | 
						|
 | 
						|
/* cco add meter list to sta */
 | 
						|
typedef struct _nw_app_cmd_dl_meter_list {
 | 
						|
    /* meter count */
 | 
						|
    uint8_t                   meter_count;
 | 
						|
    /* reserved for future, default set as 0 */
 | 
						|
    uint8_t                   rsvd[3];
 | 
						|
    /* meter information */
 | 
						|
    nw_app_base_meter_info_t meter_info[0];
 | 
						|
} nw_app_cmd_dl_meter_list_t;
 | 
						|
 | 
						|
typedef struct _nw_app_cmd_net_info {
 | 
						|
    /* major node addr, little endian */
 | 
						|
    uint8_t         major_node_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* meter addr, little endian */
 | 
						|
    uint8_t         meter_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* communication mode, see NW_APP_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 from power on to join network, unit is 1s */
 | 
						|
    uint32_t        cost_time;
 | 
						|
} nw_app_cmd_net_info_t;
 | 
						|
 | 
						|
/* transfer file payload from cco to sta */
 | 
						|
typedef struct _nw_app_cmd_file {
 | 
						|
    /* file transfer information id */
 | 
						|
    uint8_t         id;
 | 
						|
    /* reserved for future, set as 0 */
 | 
						|
    uint8_t         rsvd[3];
 | 
						|
    /* file transfer information */
 | 
						|
    uint8_t         data[0];
 | 
						|
} nw_app_cmd_file_t;
 | 
						|
 | 
						|
/* transfer file info from cco to sta by nw_app_cmd_file_t */
 | 
						|
typedef struct _nw_app_cmd_file_dl_file_info_dl {
 | 
						|
    /* file attribute - see : NW_APP_FILE_ATTRIBUTE_XXX */
 | 
						|
    uint8_t         file_type;
 | 
						|
    /* reserved for future, set as 0 */
 | 
						|
    uint8_t         reserved;
 | 
						|
    /* upgrade destination address, little endian,
 | 
						|
     * broadcast set as 0x999999999999.
 | 
						|
     */
 | 
						|
    uint8_t         dest_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* upgrade file crc */
 | 
						|
    uint32_t        file_crc;
 | 
						|
    /* file size, unit: byte */
 | 
						|
    uint32_t        file_size;
 | 
						|
    /* file total block count */
 | 
						|
    uint16_t        file_block_count;
 | 
						|
    /* upgrade time window - uint: minute */
 | 
						|
    uint16_t        window;
 | 
						|
    /* file identity */
 | 
						|
    uint32_t        file_id;
 | 
						|
} nw_app_cmd_file_dl_file_info_dl_t;
 | 
						|
 | 
						|
/* result of upgrade file info received */
 | 
						|
#define NW_APP_RECV_UPGRADE_INFO_SUCCESS        (0)
 | 
						|
#define NW_APP_RECV_UPGRADE_INFO_FAIL           (1)
 | 
						|
 | 
						|
/* sta ack cco that the file info receive result */
 | 
						|
typedef struct _nw_app_cmd_file_dl_file_info_ul {
 | 
						|
    /* file transfer id */
 | 
						|
    uint32_t        file_tran_id;
 | 
						|
    /* file info receive result, see NW_APP_RECV_UPGRADE_INFO_XXX */
 | 
						|
    uint16_t        result;
 | 
						|
    /* 0 - no error, other - reserved */
 | 
						|
    uint16_t        error_code;
 | 
						|
} nw_app_cmd_file_dl_file_info_ul_t;
 | 
						|
 | 
						|
/* transfer file data from coo to sta */
 | 
						|
typedef struct _nw_app_cmd_file_data_dl {
 | 
						|
    /* file block id */
 | 
						|
    uint16_t        file_block_id;
 | 
						|
    /* file total block count */
 | 
						|
    uint16_t        file_block_count;
 | 
						|
    /* file transfer id */
 | 
						|
    uint32_t        file_tran_id;
 | 
						|
    /* data length */
 | 
						|
    uint16_t        data_len;
 | 
						|
    /* data */
 | 
						|
    uint8_t         data[0];
 | 
						|
} nw_app_cmd_file_data_dl_t;
 | 
						|
 | 
						|
/* sta ack cco that the file data receive result */
 | 
						|
typedef struct _nw_app_cmd_file_dl_file_data_ul {
 | 
						|
    /* file transfer id */
 | 
						|
    uint32_t        file_tran_id;
 | 
						|
    /* 0 - success, other - reserved */
 | 
						|
    uint32_t        result;
 | 
						|
} nw_app_cmd_file_dl_file_data_ul_t;
 | 
						|
 | 
						|
/* query file data package receive state from sta */
 | 
						|
typedef struct _nw_app_cmd_file_pkg_state_dl {
 | 
						|
    /* file identity */
 | 
						|
    uint32_t        file_tran_id;
 | 
						|
    /* file start block id */
 | 
						|
    uint16_t        start_block_id;
 | 
						|
    /* continuous N file block state bitmap */
 | 
						|
    uint16_t        block_state_bitmap;
 | 
						|
} nw_app_cmd_file_pkg_state_dl_t;
 | 
						|
 | 
						|
/* sta upload file data package receive state to cco */
 | 
						|
typedef struct _nw_app_cmd_file_pkg_state_ul {
 | 
						|
    /* file transfer id */
 | 
						|
    uint32_t        file_tran_id;
 | 
						|
    /* sequence of first block to be queried */
 | 
						|
    uint16_t        start_seq;
 | 
						|
    /* upgrade status. See NW_APP_FILE_ST_DEST_XXX */
 | 
						|
    uint8_t         status;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t         reserved;
 | 
						|
    /* bitmap, size = (N+7)/8 */
 | 
						|
    uint8_t         bm[0];
 | 
						|
} nw_app_cmd_file_pkg_state_ul_t;
 | 
						|
 | 
						|
/* file transfer finish done notice */
 | 
						|
typedef struct _nw_app_cmd_file_finish_dl {
 | 
						|
    /* file transfer id */
 | 
						|
    uint32_t        file_tran_id;
 | 
						|
    /* delay use the file time, unit: s */
 | 
						|
    uint16_t        reset_dur;
 | 
						|
} nw_app_cmd_file_finish_dl_t;
 | 
						|
 | 
						|
/* sta ack cco that the file data transfer finish done result */
 | 
						|
typedef struct _nw_app_cmd_file_send_done_ul {
 | 
						|
    /* file transfer id */
 | 
						|
    uint32_t        file_tran_id;
 | 
						|
    /* 0 - success, other - reserved */
 | 
						|
    uint32_t        result;
 | 
						|
} nw_app_cmd_file_send_done_ul_t;
 | 
						|
 | 
						|
#define NW_APP_CMD_SEC_NODE_EVENT_DIS  (0x00)
 | 
						|
#define NW_APP_CMD_SEC_NODE_EVENT_EN   (0x01)
 | 
						|
/* cco set sta sec node reg state */
 | 
						|
typedef struct _nw_app_cmd_sec_node_evt {
 | 
						|
    /* flag to mark if enable sec node event report  */
 | 
						|
    uint8_t         evt_rpt_enable;
 | 
						|
    /* reserved for future, default set as 0 */
 | 
						|
    uint8_t         rsvd[3];
 | 
						|
} nw_app_cmd_sec_node_evt_t;
 | 
						|
 | 
						|
/* cco reboot the station delay max time, uint is 1ms*/
 | 
						|
#define NW_APP_SEC_REBOOT_DELAY_MAX_TIME    (60 * 1000)
 | 
						|
 | 
						|
/* cco reboot the station */
 | 
						|
typedef struct _nw_app_cmd_sec_node_reboot {
 | 
						|
    /* delay reboot time, unit: s */
 | 
						|
    uint8_t         delay;
 | 
						|
    /* reserved for future, default set as 0 */
 | 
						|
    uint8_t         rsvd[3];
 | 
						|
} nw_app_cmd_sec_node_reboot_t;
 | 
						|
 | 
						|
/* query sec node info from cco to sta */
 | 
						|
typedef struct _nw_app_cmd_sec_info_query_dl {
 | 
						|
    /* info list element count */
 | 
						|
    uint8_t         count;
 | 
						|
    /* info element id - see : NW_APP_CMD_SEC_NODE_INFO_XXX */
 | 
						|
    uint8_t         info_id[0];
 | 
						|
} nw_app_cmd_sec_info_query_dl_t;
 | 
						|
 | 
						|
/* base element */
 | 
						|
typedef struct _nw_app_base_sec_node_info {
 | 
						|
    /* element id */
 | 
						|
    uint8_t         id;
 | 
						|
    /* element data length */
 | 
						|
    uint8_t         data_len;
 | 
						|
    /* element data */
 | 
						|
    //uint8_t         data[0];
 | 
						|
} nw_app_base_sec_node_info_t;
 | 
						|
 | 
						|
/* vendor id base element */
 | 
						|
typedef struct _nw_app_base_sec_node_vendor_id {
 | 
						|
    /* vendor code, 2 byte ASCII */
 | 
						|
    uint16_t                    vendor_id;
 | 
						|
} nw_app_base_sec_node_vendor_id_t;
 | 
						|
 | 
						|
/* version number base element */
 | 
						|
typedef struct _nw_app_base_sec_node_ver {
 | 
						|
    /* version information, 2 byte BCD code */
 | 
						|
    uint16_t                    ver;
 | 
						|
} nw_app_base_sec_node_ver_t;
 | 
						|
 | 
						|
/* bootloader version base element */
 | 
						|
typedef struct _nw_app_base_sec_node_bootloader_ver {
 | 
						|
    /* bootloader version number, 1 byte BIN */
 | 
						|
    uint8_t                     bootloader_ver;
 | 
						|
} nw_app_base_sec_node_bootloader_ver_t;
 | 
						|
 | 
						|
/* upgrade file crc base element */
 | 
						|
typedef struct _nw_app_base_sec_node_upfile_crc {
 | 
						|
    /* upgrade file CRC32, 4 byte BIN */
 | 
						|
    uint32_t                    upfile_crc;
 | 
						|
} nw_app_base_sec_node_upfile_crc_t;
 | 
						|
 | 
						|
/* upgrade file len base element */
 | 
						|
typedef struct _nw_app_base_sec_node_upfile_len {
 | 
						|
    /* upgrade file length, 4 bytes BIN */
 | 
						|
    uint32_t                    upfile_len;
 | 
						|
} nw_app_base_sec_node_upfile_len_t;
 | 
						|
 | 
						|
/* chip code base element */
 | 
						|
typedef struct _nw_app_base_sec_node_chip_code {
 | 
						|
    /* chip code, 2 bytes ASCII */
 | 
						|
    uint16_t                    chip_code;
 | 
						|
} nw_app_base_sec_node_chip_code_t;
 | 
						|
 | 
						|
/* version date base element */
 | 
						|
typedef struct _nw_app_base_sec_node_ver_date {
 | 
						|
    /* version date, 3 bytes BIN */
 | 
						|
    uint8_t                     day;
 | 
						|
    uint8_t                     month;
 | 
						|
    uint8_t                     year;
 | 
						|
} nw_app_base_sec_node_ver_date_t;
 | 
						|
 | 
						|
/* upgrade status words base element */
 | 
						|
typedef struct _nw_app_base_upgrade_words {
 | 
						|
    /* upgrade status words, 8 bytes BIN */
 | 
						|
    uint8_t                     word1;
 | 
						|
    uint8_t                     rsvd[7];
 | 
						|
} nw_app_base_upgrade_words_t;
 | 
						|
 | 
						|
/* module mac addr info base element */
 | 
						|
typedef struct _nw_app_base_module_mac {
 | 
						|
    /* module mac addr, little endian */
 | 
						|
    uint8_t                     mac[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_base_module_mac_t;
 | 
						|
 | 
						|
/* ack node info from sta to cco */
 | 
						|
typedef struct _nw_app_cmd_sec_info_query_ul {
 | 
						|
    /* info list element count */
 | 
						|
    uint8_t                         count;
 | 
						|
    /* info element data */
 | 
						|
    nw_app_base_sec_node_info_t     info[0];
 | 
						|
} nw_app_cmd_sec_info_query_ul_t;
 | 
						|
 | 
						|
/* map list base element */
 | 
						|
typedef struct _nw_app_base_map_list_info {
 | 
						|
    /* login address */
 | 
						|
    uint8_t         login_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* meter address */
 | 
						|
    uint8_t         meter_addr[NW_APP_METER_ADDR_LEN];
 | 
						|
} nw_app_base_map_list_info_t;
 | 
						|
 | 
						|
/* cco add addr map list to sta */
 | 
						|
typedef struct _nw_app_cmd_dl_map_list {
 | 
						|
    /* map list count */
 | 
						|
    uint8_t                     list_count;
 | 
						|
    /* reserved for future, default set as 0 */
 | 
						|
    uint8_t                     rsvd[3];
 | 
						|
    /* map list information */
 | 
						|
    nw_app_base_map_list_info_t map_info[0];
 | 
						|
} nw_app_cmd_dl_map_list_t;
 | 
						|
 | 
						|
/* base element */
 | 
						|
typedef struct _nw_app_base_cycle_test {
 | 
						|
    /* frequency band */
 | 
						|
    uint8_t         freq_band : 4;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t         reserved : 4;
 | 
						|
} nw_app_base_cycle_test_t;
 | 
						|
 | 
						|
/* base element */
 | 
						|
typedef struct _nw_app_base_tran_test {
 | 
						|
    /* frequency band */
 | 
						|
    uint8_t         freq_band : 4;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t         reserved : 4;
 | 
						|
} nw_app_base_tran_test_t;
 | 
						|
 | 
						|
#define NW_APP_CMD_COMM_TEST_CYCLE    (0x00)
 | 
						|
#define NW_APP_CMD_COMM_TEST_TRAN     (0x01)
 | 
						|
/* communication test frame from cco to sta */
 | 
						|
typedef struct _nw_app_cmd_comm_test {
 | 
						|
    /* test id */
 | 
						|
    uint8_t         test_id;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t         reserved;
 | 
						|
    /* data length */
 | 
						|
    uint16_t        data_len;
 | 
						|
    union {
 | 
						|
        /* loopback test mode data */
 | 
						|
        nw_app_base_cycle_test_t cycle;
 | 
						|
        /* transparent forwarding mode data */
 | 
						|
        nw_app_base_tran_test_t  trans;
 | 
						|
    } res;
 | 
						|
} nw_app_cmd_comm_test_t;
 | 
						|
 | 
						|
/* event report payload between cco and sta */
 | 
						|
typedef struct _nw_app_rpt_evt_rpt_gd {
 | 
						|
    /* header length */
 | 
						|
    uint32_t    header_len  :6,
 | 
						|
    /* function code. see NW_APP_EVENT_FN_XXX */
 | 
						|
                fn          :6,
 | 
						|
    /* data length */
 | 
						|
                data_len    :12,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd1       :8;
 | 
						|
    /* reserved for future */
 | 
						|
    uint16_t    rsvd2;
 | 
						|
    /* power meter mac address */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} nw_app_rpt_evt_rpt_gd_t;
 | 
						|
 | 
						|
/* event report from sta to cco */
 | 
						|
typedef struct _nw_app_rpt_evt_rpt {
 | 
						|
    /* meter address */
 | 
						|
    uint8_t          meter_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* meter report data */
 | 
						|
    uint8_t          data[0];
 | 
						|
} nw_app_rpt_evt_rpt_t;
 | 
						|
 | 
						|
/* nw protocol event function code */
 | 
						|
#define NW_APP_EVENT_FN_MODULE_RPT          (0x1E)
 | 
						|
#define NW_APP_EVENT_FN_SCORE_RPT           (0x1F)
 | 
						|
/* guangdong protocol event function */
 | 
						|
/* downlink function code */
 | 
						|
#define NW_APP_EVENT_FN_CONF_ACK            (1)
 | 
						|
#define NW_APP_EVENT_FN_ALLOW_RPT           (2)
 | 
						|
#define NW_APP_EVENT_FN_FORBID_RPT          (3)
 | 
						|
#define NW_APP_EVENT_FN_FULL_ACK            (4)
 | 
						|
/* uplink function code */
 | 
						|
/* event triggered by sta modular */
 | 
						|
#define NW_APP_EVENT_FN_STA_RPT             (1)
 | 
						|
/* event triggered by collector */
 | 
						|
#define NW_APP_EVENT_FN_COLLECTOR_RPT       (2)
 | 
						|
 | 
						|
/* bitmap type data */
 | 
						|
#define NW_APP_EVENT_TYPE_POWER_DOWN        (1)
 | 
						|
#define NW_APP_EVENT_TYPE_POWER_UP          (2)
 | 
						|
/* address type data */
 | 
						|
#define NW_APP_EVENT_TYPE_POWER_DOWN_ADDR   (3)
 | 
						|
#define NW_APP_EVENT_TYPE_POWER_UP_ADDR     (4)
 | 
						|
 | 
						|
/* query node score donw link */
 | 
						|
typedef struct _nw_app_query_score_dl {
 | 
						|
    /* meter mac addr, little endian */
 | 
						|
    uint8_t         meter_mac[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_query_score_dl_t;
 | 
						|
 | 
						|
/* power meter score info */
 | 
						|
typedef struct _nw_app_pm_score_info {
 | 
						|
    /* assessment score */
 | 
						|
    uint8_t    score;
 | 
						|
    /* trouble data item, 4 byte to 32 bit.
 | 
						|
     * each bit corresponding to trouble data item.
 | 
						|
     * example: D0 is trouble, set bit0 is 1.
 | 
						|
     */
 | 
						|
    uint32_t   err_bm;
 | 
						|
    /* power meter mac address, little endian */
 | 
						|
    uint8_t    pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_pm_score_info_t;
 | 
						|
 | 
						|
/* power meter score info */
 | 
						|
typedef struct _nw_app_query_score_ul {
 | 
						|
    /* power meter score info */
 | 
						|
    nw_app_pm_score_info_t score_info[0];
 | 
						|
} nw_app_query_score_ul_t;
 | 
						|
 | 
						|
/* score event data field */
 | 
						|
typedef struct _nw_app_score_evt_data_field {
 | 
						|
    /* event function code, see NW_APP_EVENT_FN_XXX */
 | 
						|
    uint8_t    fn_code;
 | 
						|
    /* power meter score info */
 | 
						|
    nw_app_pm_score_info_t pm_info[0];
 | 
						|
} nw_app_score_evt_data_field_t;
 | 
						|
 | 
						|
/* power event data field */
 | 
						|
typedef struct _nw_app_evt_data_field {
 | 
						|
    /* event function code, see NW_APP_EVENT_FN_XXX */
 | 
						|
    uint8_t    fn_code;
 | 
						|
    /* reserve for future */
 | 
						|
    uint8_t    rsvd;
 | 
						|
    /* types of reported events, see NW_APP_EVENT_TYPE_POWER_XXX */
 | 
						|
    uint8_t    type;
 | 
						|
} nw_app_evt_data_field_t;
 | 
						|
 | 
						|
/* event data field */
 | 
						|
typedef struct _nw_app_evt_data_field_gd {
 | 
						|
    /* event type, see NW_APP_EVENT_TYPE_XXX */
 | 
						|
    uint8_t     evt_type;
 | 
						|
    /* data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} nw_app_evt_data_field_gd_t;
 | 
						|
 | 
						|
/* bitmap type for event data field */
 | 
						|
typedef struct _nw_app_evt_data_bitmap {
 | 
						|
    /* the tei of the start bit in the bitmap */
 | 
						|
    uint16_t    tei;
 | 
						|
    /* tei map */
 | 
						|
    uint8_t     map[0];
 | 
						|
} nw_app_evt_data_bitmap_t;
 | 
						|
 | 
						|
/* power meter info for module event report */
 | 
						|
typedef struct _nw_app_power_evt_pm_info {
 | 
						|
    /* power meter mac address, little endian */
 | 
						|
    uint8_t     mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* 0 - power off, 1- power on */
 | 
						|
    uint8_t     power_state;
 | 
						|
} nw_app_power_evt_pm_info_t;
 | 
						|
 | 
						|
/* addr type for event data field */
 | 
						|
typedef struct _nw_app_evt_data_addr {
 | 
						|
    /* power meter count */
 | 
						|
    uint16_t   pm_count;
 | 
						|
    /* power meter info */
 | 
						|
    nw_app_power_evt_pm_info_t pm_info[0];
 | 
						|
} nw_app_evt_data_addr_t;
 | 
						|
 | 
						|
/* query id info donw link */
 | 
						|
typedef struct _nw_app_cmd_id_dl {
 | 
						|
    /* id type, see NW_APP_ID_TYPE_XXX */
 | 
						|
    uint8_t         id_type;
 | 
						|
    /* id length */
 | 
						|
    uint8_t         id_len;
 | 
						|
    /* meter mac addr, little endian */
 | 
						|
    uint8_t         meter_mac[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_cmd_id_dl_t;
 | 
						|
 | 
						|
/* chip id information */
 | 
						|
typedef struct _nw_app_chip_id {
 | 
						|
    /** check code */
 | 
						|
    uint8_t             check_code[NW_APP_CHIP_ID_CRC_LEN];
 | 
						|
    /** equipment serial number */
 | 
						|
    uint8_t             dev_code[NW_APP_CHIP_ID_LEN];
 | 
						|
    /** chip mode */
 | 
						|
    uint16_t            chip_mode;
 | 
						|
    /** chip vendor code */
 | 
						|
    uint16_t            vendor;
 | 
						|
    /** 1 - narrowband, 2 - broadband */
 | 
						|
    uint8_t             dev_type;
 | 
						|
    /** fixed value: 0x01C1FB */
 | 
						|
    uint8_t             hd4_3;
 | 
						|
    uint8_t             hd4_2;
 | 
						|
    uint8_t             hd4_1;
 | 
						|
    /** fixed value: 0x9C */
 | 
						|
    uint8_t             hd3;
 | 
						|
    /** fixed value: 0x02 */
 | 
						|
    uint8_t             hd2;
 | 
						|
    /** fixed value: 0x01 */
 | 
						|
    uint8_t             hd1;
 | 
						|
} nw_app_chip_id_t;
 | 
						|
 | 
						|
/* query id info ul link */
 | 
						|
typedef struct _nw_app_cmd_id_info_hdr_ul {
 | 
						|
    /* id type, see NW_APP_ID_TYPE_XXX */
 | 
						|
    uint8_t         id_type;
 | 
						|
    /* id length */
 | 
						|
    uint8_t         id_len;
 | 
						|
} nw_app_cmd_id_info_hdr_ul_t;
 | 
						|
 | 
						|
/* query chip id info ul link */
 | 
						|
typedef struct _nw_app_cmd_chip_id {
 | 
						|
    /* meter mac addr, little endian */
 | 
						|
    uint8_t         meter_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* chip id */
 | 
						|
    nw_app_chip_id_t   chip_id;
 | 
						|
    /* device type, see IOT_PLC_DEV_TYPE_XXX */
 | 
						|
    uint8_t         dev_type;
 | 
						|
    /* 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;
 | 
						|
} nw_app_cmd_chip_id_t;
 | 
						|
 | 
						|
/* query node id info ul link */
 | 
						|
typedef struct _nw_app_cmd_node_id {
 | 
						|
    /* meter mac addr, little endian */
 | 
						|
    uint8_t         meter_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* id info */
 | 
						|
    uint8_t         id_info[NW_APP_NODE_ID_INFO_LEN];
 | 
						|
    /* device type, see IOT_PLC_DEV_TYPE_XXX */
 | 
						|
    uint8_t         dev_type;
 | 
						|
    /* 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;
 | 
						|
} nw_app_cmd_node_id_t;
 | 
						|
 | 
						|
/* guangdong transformer detect package */
 | 
						|
typedef struct _nw_app_tsfm_detect_guangdong {
 | 
						|
    /* header length */
 | 
						|
    uint8_t     header_len  :6,
 | 
						|
    /* collect phase, see NW_APP_DATA_PHASE_XXX. */
 | 
						|
                phase       :2;
 | 
						|
    /* reserved for future, default set as 0 */
 | 
						|
    uint8_t     rsvd[3];
 | 
						|
    /* cco mac address or sta mac address, big-endian */
 | 
						|
    uint8_t     addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* transformer feature type, see NW_APP_TSFM_FEATURE_XXX */
 | 
						|
    uint8_t     feature_type;
 | 
						|
    /* transformer feature collection type, see NW_APP_TSFM_COLLECT_XXX */
 | 
						|
    uint8_t     collect_type;
 | 
						|
    /* data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} nw_app_tsfm_detect_guangdong_t;
 | 
						|
 | 
						|
/* transformer detect package */
 | 
						|
typedef struct _nw_app_tsfm_detect {
 | 
						|
    /* header length */
 | 
						|
    uint8_t     header_len  :6,
 | 
						|
    /* collect phase, see NW_APP_DATA_PHASE_XXX. */
 | 
						|
                phase       :2;
 | 
						|
    /* cco mac address or sta mac address, big-endian */
 | 
						|
    uint8_t     addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* transformer feature type, see NW_APP_TSFM_FEATURE_XXX */
 | 
						|
    uint8_t     feature_type;
 | 
						|
    /* transformer feature collection type, see NW_APP_TSFM_COLLECT_XXX */
 | 
						|
    uint8_t     collect_type;
 | 
						|
    /* data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} nw_app_tsfm_detect_t;
 | 
						|
 | 
						|
/* transformer feature collection type package.
 | 
						|
 * NW_APP_TSFM_COLLECT_START package
 | 
						|
 */
 | 
						|
typedef struct _nw_app_tsfm_collect_start {
 | 
						|
    /* NTB at the start of the whole network collection */
 | 
						|
    uint32_t   start_ntb;
 | 
						|
    /* collection interval, uint is 1s. when transformer
 | 
						|
     * feature type is NW_APP_TSFM_FEATURE_PERIOD, interval
 | 
						|
     * is invalid.
 | 
						|
     */
 | 
						|
    uint8_t    interval;
 | 
						|
    /* collection cnt */
 | 
						|
    uint8_t    cnt;
 | 
						|
    /* collection sequence, the sequence is generated by CCO
 | 
						|
     * the value range of sequence is 1-255.
 | 
						|
     */
 | 
						|
    uint8_t    seq;
 | 
						|
    /* reserve for future */
 | 
						|
    uint8_t    rsvd;
 | 
						|
} nw_app_tsfm_collect_start_t;
 | 
						|
 | 
						|
/* transformer feature collection type package.
 | 
						|
 * NW_APP_TSFM_COLLECT_REPORT package
 | 
						|
 */
 | 
						|
typedef struct _nw_app_tsfm_collect_report {
 | 
						|
    /* tei of cco or sta */
 | 
						|
    uint16_t   tei          :12,
 | 
						|
    /* collect type, see NW_APP_TSFM_COLLECT_TYPE_XXX.
 | 
						|
     * valid only in the NW_APP_TSFM_FEATURE_PERIOD.
 | 
						|
     */
 | 
						|
               clct_type    :2,
 | 
						|
    /* reserved for future */
 | 
						|
               rsvd         :2;
 | 
						|
    /* collection sequence, the sequence is generated by CCO
 | 
						|
     * the value range of sequence is 1-255.
 | 
						|
     */
 | 
						|
    uint8_t    seq;
 | 
						|
    /* report feature total cnt */
 | 
						|
    uint8_t    cnt;
 | 
						|
    /* transformer feature collection data */
 | 
						|
    uint8_t    data[0];
 | 
						|
} nw_app_tsfm_collect_report_t;
 | 
						|
 | 
						|
/* transformer feature collection data */
 | 
						|
typedef struct _nw_app_tsfm_collect_data {
 | 
						|
    /* NTB at the start of the first collection */
 | 
						|
    uint32_t   start_ntb;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t    rsvd;
 | 
						|
    /* phase a report count */
 | 
						|
    uint8_t    phase1_cnt;
 | 
						|
    /* phase b report count */
 | 
						|
    uint8_t    phase2_cnt;
 | 
						|
    /* phase c report count */
 | 
						|
    uint8_t    phase3_cnt;
 | 
						|
    /* feature data */
 | 
						|
    int16_t    data[0];
 | 
						|
} nw_app_tsfm_collect_data_t;
 | 
						|
 | 
						|
/* transformer detection feature type package.
 | 
						|
 * NW_APP_TSFM_FEATURE_VOLTAGE package
 | 
						|
 */
 | 
						|
typedef struct _nw_app_tsfm_collect_v {
 | 
						|
    /* A phase voltage. use 2 bytes of BCD code to represent the voltage.
 | 
						|
     * for example, 220.0V uses 2 bytes of BCD code to represent
 | 
						|
     * the following 0x22, 0x00.
 | 
						|
     */
 | 
						|
    uint8_t    bcd[PROTO_645_V_LEN];
 | 
						|
} nw_app_tsfm_collect_v_t;
 | 
						|
 | 
						|
/* transformer detection feature type package.
 | 
						|
 * NW_APP_TSFM_FEATURE_FREQUENCY package
 | 
						|
 */
 | 
						|
typedef struct _nw_app_tsfm_collect_freq {
 | 
						|
    /* frequency. use 2 bytes of BCD code to represent the frequency.
 | 
						|
     * for example, 50.00V uses 2 bytes of BCD code to represent
 | 
						|
     * the following 0x50, 0x00.
 | 
						|
     */
 | 
						|
    uint8_t    bcd[PROTO_645_FREQ_LEN];
 | 
						|
} nw_app_tsfm_collect_freq_t;
 | 
						|
 | 
						|
/* transformer detection feature type package.
 | 
						|
 * NW_APP_TSFM_FEATURE_PERIOD package
 | 
						|
 */
 | 
						|
typedef struct _nw_app_tsfm_collect_period {
 | 
						|
    /* Each period value represents the difference
 | 
						|
     * between a zero-crossing period and 20ms.
 | 
						|
     * unit is 1/3125000S (the 8-minute frequency
 | 
						|
     * of the counting frequency is 25MHz, that is
 | 
						|
     * 3.125 MHz).
 | 
						|
     */
 | 
						|
    int16_t     period;
 | 
						|
} nw_app_tsfm_collect_period_t;
 | 
						|
 | 
						|
/* transformer detect result */
 | 
						|
typedef struct _nw_app_tsfm_detect_result {
 | 
						|
    /* node tei */
 | 
						|
    uint16_t    tei;
 | 
						|
    /* 0 - transformer detect in progress, 1 - transformer detect done */
 | 
						|
    uint8_t     done;
 | 
						|
    /* see NW_APP_TSFM_DETECT_RET_XXX */
 | 
						|
    uint8_t     result;
 | 
						|
    /* real transformer mac address, big-endian */
 | 
						|
    uint8_t     tsfm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_tsfm_detect_result_t;
 | 
						|
 | 
						|
/* phase feature collection indication */
 | 
						|
typedef struct _nw_app_phase_collect_ind {
 | 
						|
    /* collection feature total cnt */
 | 
						|
    uint8_t    cnt;
 | 
						|
    /* collection seq, generated by CCO, the value is 0-255 */
 | 
						|
    uint8_t    seq;
 | 
						|
    /* reserved for future */
 | 
						|
    uint16_t   rsvd;
 | 
						|
} nw_app_phase_collect_ind_t;
 | 
						|
 | 
						|
/* phase feature collection report */
 | 
						|
typedef struct _nw_app_phase_collect_rpt {
 | 
						|
    /* sta tei */
 | 
						|
    uint16_t   tei          :12,
 | 
						|
    /* collection edge type, see NW_APP_TSFM_COLLECT_TYPE_XXX */
 | 
						|
               edge_type    :2,
 | 
						|
    /* reserved for future */
 | 
						|
               rsvd1        :2;
 | 
						|
    /* collection seq, generated by CCO, the value is 0-255 */
 | 
						|
    uint8_t    seq;
 | 
						|
    /* report feature total cnt */
 | 
						|
    uint8_t    cnt;
 | 
						|
    /* standard NTB */
 | 
						|
    uint32_t   std_ntb;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t    rsvd2;
 | 
						|
    /* phase a report count */
 | 
						|
    uint8_t    phase1_cnt;
 | 
						|
    /* phase b report count */
 | 
						|
    uint8_t    phase2_cnt;
 | 
						|
    /* phase c report count */
 | 
						|
    uint8_t    phase3_cnt;
 | 
						|
    /* transformer feature collection data */
 | 
						|
    uint16_t   data[0];
 | 
						|
} nw_app_phase_collect_rpt_t;
 | 
						|
 | 
						|
/* private protocol transformer detect result */
 | 
						|
typedef struct _nw_app_tsfm_detect_result_pw {
 | 
						|
    /* node tei */
 | 
						|
    uint16_t    tei;
 | 
						|
    /* 0 - transformer detect in progress, 1 - transformer detect done */
 | 
						|
    uint8_t     done;
 | 
						|
    /* see NW_APP_TSFM_DETECT_RET_XXX */
 | 
						|
    uint8_t     result;
 | 
						|
    /* real transformer mac address, big-endian */
 | 
						|
    uint8_t     tsfm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* hardware transformer mac address, big-endian */
 | 
						|
    uint8_t     hw_tsfm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_tsfm_detect_result_pw_t;
 | 
						|
 | 
						|
/* collection task structure definition */
 | 
						|
/* define pm protocol type in collection task structure */
 | 
						|
#define NW_APP_CLCT_TASK_PROTO_TYPE_UNKNOWN 0
 | 
						|
#define NW_APP_CLCT_TASK_PROTO_TYPE_645_97  1
 | 
						|
#define NW_APP_CLCT_TASK_PROTO_TYPE_645_07  2
 | 
						|
 | 
						|
/* define pm type in collection task structure */
 | 
						|
#define NW_APP_CLCT_TASK_PM_TYPE_INVALID    0
 | 
						|
#define NW_APP_CLCT_TASK_PM_TYPE_SINGE      1
 | 
						|
#define NW_APP_CLCT_TASK_PM_TYPE_3P         2
 | 
						|
 | 
						|
/* define collection period in collection task structure */
 | 
						|
#define NW_APP_CLCT_TASK_PERIOD_DEFAULT     0
 | 
						|
#define NW_APP_CLCT_TASK_PERIOD_15MIN       3
 | 
						|
#define NW_APP_CLCT_TASK_PERIOD_30MIN       4
 | 
						|
#define NW_APP_CLCT_TASK_PERIOD_60MIN       5
 | 
						|
#define NW_APP_CLCT_TASK_PERIOD_DAY         6
 | 
						|
#define NW_APP_CLCT_TASK_PERIOD_15MIN_LR    13
 | 
						|
#define NW_APP_CLCT_TASK_PERIOD_30MIN_LR    14
 | 
						|
#define NW_APP_CLCT_TASK_PERIOD_60MIN_LR    15
 | 
						|
#define NW_APP_CLCT_TASK_PERIOD_SINGLE      16
 | 
						|
 | 
						|
/* define add collection task result */
 | 
						|
#define NW_APP_CLCT_TASK_ADD_OK             0
 | 
						|
#define NW_APP_CLCT_TASK_ADD_ERR_CRC        1
 | 
						|
#define NW_APP_CLCT_TASK_ADD_ERR_PROTO      2
 | 
						|
#define NW_APP_CLCT_TASK_ADD_ERR_NOMEM      3
 | 
						|
#define NW_APP_CLCT_TASK_ADD_ERR_PM         4
 | 
						|
 | 
						|
/* define del collection task result */
 | 
						|
#define NW_APP_CLCT_TASK_DEL_OK             0
 | 
						|
#define NW_APP_CLCT_TASK_DEL_ERR_NOTASK     1
 | 
						|
 | 
						|
/* define max cnt of support collection task */
 | 
						|
#define NW_APP_CLCT_TASK_SUPP_MAX           5
 | 
						|
 | 
						|
/* define task data flag */
 | 
						|
#define NW_APP_CLCT_TASK_DATA_VALID         0
 | 
						|
#define NW_APP_CLCT_TASK_DATA_INVALID       1
 | 
						|
 | 
						|
/* define task data invalid error code */
 | 
						|
#define NW_APP_CLCT_TASK_DATA_ERR_NOTASK    1
 | 
						|
#define NW_APP_CLCT_TASK_DATA_ERR_NOCCO     2
 | 
						|
 | 
						|
/* define max cnt of di in collect task */
 | 
						|
#define NW_APP_CLCT_TASK_DI_MAX             4
 | 
						|
 | 
						|
/* define length of clct passthrough baud */
 | 
						|
#define NW_APP_CLCT_TASK_BAUD_LEN           4
 | 
						|
 | 
						|
/* collection task correct time from cco to sta */
 | 
						|
typedef struct _nw_app_clct_task_correct_time_req {
 | 
						|
    /* major mac addr, BIN type, big endian */
 | 
						|
    uint8_t         major_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* correct time, BCD type */
 | 
						|
    uint8_t         second;
 | 
						|
    uint8_t         minute;
 | 
						|
    uint8_t         hour;
 | 
						|
    uint8_t         day;
 | 
						|
    uint8_t         month;
 | 
						|
    uint8_t         year;
 | 
						|
} nw_app_clct_task_correct_time_req_t;
 | 
						|
 | 
						|
/* collection task init resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_clct_task_init_resp {
 | 
						|
    /* unicast response, 0 - ack, others - nack */
 | 
						|
    uint8_t         ack;
 | 
						|
} nw_app_clct_task_init_resp_t;
 | 
						|
 | 
						|
/* collection di structure in collection task add req for dl/t 645-97 */
 | 
						|
typedef struct _nw_app_clct_task_id_97 {
 | 
						|
    /* control code */
 | 
						|
    uint8_t     control_code;
 | 
						|
    /* di of collection data, add 0x33 */
 | 
						|
    uint16_t    di;
 | 
						|
    /* length of collection data */
 | 
						|
    uint8_t     len_data;
 | 
						|
} nw_app_clct_task_id_97_t;
 | 
						|
 | 
						|
/* collection di structure in collection task add req for dl/t 645-07 */
 | 
						|
typedef struct _nw_app_clct_task_id_07 {
 | 
						|
    /* control code */
 | 
						|
    uint8_t     control_code;
 | 
						|
    /* di of collection data, add 0x33 */
 | 
						|
    uint32_t    di;
 | 
						|
    /* length of collection data */
 | 
						|
    uint8_t     len_data;
 | 
						|
} nw_app_clct_task_id_07_t;
 | 
						|
 | 
						|
/* collection fn structure in collection task */
 | 
						|
typedef struct _nw_app_clct_task_fn {
 | 
						|
      /* type of pm protocol, see NW_APP_CLCT_TASK_PROTO_TYPE_XXX */
 | 
						|
    uint16_t    proto_type : 3,
 | 
						|
    /* type of pm,  see NW_APP_CLCT_TASK_PM_TYPE_XXX */
 | 
						|
                meter_type : 2,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd       : 11;
 | 
						|
} nw_app_clct_task_fn_t;
 | 
						|
 | 
						|
/* collection data time structure, Guangdong appendix A.1 */
 | 
						|
typedef struct _nw_app_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 */
 | 
						|
} nw_app_clct_task_data_time_t;
 | 
						|
 | 
						|
/* collection task time structure */
 | 
						|
typedef struct _nw_app_clct_task_time {
 | 
						|
    /* task time, BCD code */
 | 
						|
    uint8_t     sec;
 | 
						|
    uint8_t     min;
 | 
						|
    uint8_t     hour;
 | 
						|
    uint8_t     day;
 | 
						|
    uint8_t     month;
 | 
						|
    uint8_t     year;
 | 
						|
} nw_app_clct_task_time_t;
 | 
						|
 | 
						|
/* collection task info structure in collection task */
 | 
						|
typedef struct _nw_app_clct_task_info {
 | 
						|
    /* task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* task control code */
 | 
						|
    nw_app_clct_task_fn_t fn;
 | 
						|
    /* task timout time, uint is 1s */
 | 
						|
    uint16_t    timeout;
 | 
						|
    /* collection base time */
 | 
						|
    nw_app_clct_task_data_time_t base_time;
 | 
						|
    /* collection period, see NW_APP_CLCT_TASK_PERIOD_XXX */
 | 
						|
    uint8_t     period;
 | 
						|
    /* cnt of di */
 | 
						|
    uint8_t     di_cnt;
 | 
						|
    /* collection data info, see nw_app_clct_task_id_97_t or
 | 
						|
     * nw_app_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;
 | 
						|
} nw_app_clct_task_info_t;
 | 
						|
 | 
						|
/* collection task add req structure from cco to sta */
 | 
						|
typedef struct _nw_app_clct_task_add_req {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* time stamp, BCD code to represent */
 | 
						|
    nw_app_clct_task_time_t tm;
 | 
						|
    /* cco address, big-endian */
 | 
						|
    uint8_t     cco_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* collection task info */
 | 
						|
    nw_app_clct_task_info_t  task_info;
 | 
						|
} nw_app_clct_task_add_req_t;
 | 
						|
 | 
						|
/* collection task add resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_clct_task_add_resp {
 | 
						|
    /* result of collection task add function,
 | 
						|
     * see NW_APP_CLCT_TASK_ADD_XXX
 | 
						|
     */
 | 
						|
    uint8_t     result;
 | 
						|
} nw_app_clct_task_add_resp_t;
 | 
						|
 | 
						|
/* collection task delete req structure from cco to sta */
 | 
						|
typedef struct _nw_app_clct_task_del_req {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
} nw_app_clct_task_del_req_t;
 | 
						|
 | 
						|
/* collection task add resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_clct_task_del_resp {
 | 
						|
    /* result of collection task delete function,
 | 
						|
     * see NW_APP_CLCT_TASK_DEL_XXX
 | 
						|
     */
 | 
						|
    uint8_t     result;
 | 
						|
} nw_app_clct_task_del_resp_t;
 | 
						|
 | 
						|
/* collection task id query req structure from cco to sta */
 | 
						|
typedef struct _nw_app_clct_task_id_query_req {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_clct_task_id_query_req_t;
 | 
						|
 | 
						|
/* collection task id query resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_clct_task_id_query_resp {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* max cnt of support task, see NW_APP_CLCT_TASK_SUPP_MAX */
 | 
						|
    uint8_t     max_cnt;
 | 
						|
    /* task cnt */
 | 
						|
    uint8_t     task_cnt;
 | 
						|
    /* task id list */
 | 
						|
    uint8_t     task_id[0];
 | 
						|
} nw_app_clct_task_id_query_resp_t;
 | 
						|
 | 
						|
/* collection task id info query req structure from cco to sta */
 | 
						|
typedef struct _nw_app_clct_task_id_info_query_req {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* cco address, big-endian */
 | 
						|
    uint8_t     cco_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
} nw_app_clct_task_id_info_query_req_t;
 | 
						|
 | 
						|
/* collection task id info query normal resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_clct_task_id_info_query_nor_resp {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* task info flag, see NW_APP_CLCT_TASK_DATA_VALID */
 | 
						|
    uint8_t     info_valid_flag;
 | 
						|
    /* collection task info */
 | 
						|
    nw_app_clct_task_info_t  task_info;
 | 
						|
} nw_app_clct_task_id_info_query_nor_resp_t;
 | 
						|
 | 
						|
/* collection task id info query abnormal resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_clct_task_id_info_query_abn_resp {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* task info flag, see NW_APP_CLCT_TASK_DATA_INVALID */
 | 
						|
    uint8_t     info_valid_flag;
 | 
						|
    /* error code, see NW_APP_CLCT_TASK_DATA_ERR_XXX */
 | 
						|
    uint8_t     err;
 | 
						|
} nw_app_clct_task_id_info_query_abn_resp_t;
 | 
						|
 | 
						|
/* collection data query req structure from cco to sta */
 | 
						|
typedef struct _nw_app_clct_data_query_req {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* cco address, big-endian */
 | 
						|
    uint8_t     cco_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* start time */
 | 
						|
    nw_app_clct_task_data_time_t start_time;
 | 
						|
    /* cnt of collection data */
 | 
						|
    uint8_t     cnt;
 | 
						|
} nw_app_clct_data_query_req_t;
 | 
						|
 | 
						|
/* collection data query normal resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_clct_data_query_nor_resp {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* time stamp, BCD code to represent */
 | 
						|
    nw_app_clct_task_time_t tm;
 | 
						|
    /* task data flag, see NW_APP_CLCT_TASK_DATA_VALID */
 | 
						|
    uint8_t     data_valid_flag;
 | 
						|
    /* task id list */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* crc code, as same as crc code in nw_app_clct_task_add_req_t */
 | 
						|
    uint16_t    crc_code;
 | 
						|
    /* collection data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} nw_app_clct_data_query_nor_resp_t;
 | 
						|
 | 
						|
/* collection data structure */
 | 
						|
typedef struct _nw_app_clct_data_struct {
 | 
						|
    /* control code as same as control in proto_645_header_t */
 | 
						|
    uint8_t control;
 | 
						|
    /* data field as same as data field in dl/t 645 */
 | 
						|
    uint8_t data[0];
 | 
						|
    /* There is a CS check behind the data
 | 
						|
     * CS as same as data field in dl/t 645
 | 
						|
     */
 | 
						|
    //uint8_t  cs;
 | 
						|
} nw_app_clct_data_struct_t;
 | 
						|
 | 
						|
/* collection data query abnormal resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_clct_data_query_abn_resp {
 | 
						|
    /* pm address, little-endian */
 | 
						|
    uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* time stamp, BCD code to represent */
 | 
						|
    nw_app_clct_task_time_t tm;
 | 
						|
    /* task data flag, see NW_APP_CLCT_TASK_DATA_INVALID */
 | 
						|
    uint8_t     data_valid_flag;
 | 
						|
    /* error code, see NW_APP_CLCT_TASK_DATA_ERR_XXX */
 | 
						|
    uint8_t     err;
 | 
						|
} nw_app_clct_data_query_abn_resp_t;
 | 
						|
 | 
						|
/* ctrl proto payload */
 | 
						|
typedef struct _nw_app_ctrl_proto {
 | 
						|
    /* protocol type, default value is 0 */
 | 
						|
    uint8_t     proto_type;
 | 
						|
    /* sequence number */
 | 
						|
    uint8_t     sn;
 | 
						|
    /* data length */
 | 
						|
    uint16_t    data_len;
 | 
						|
    /* data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} nw_app_ctrl_proto_t;
 | 
						|
 | 
						|
/* ctrl passthrough proto payload */
 | 
						|
typedef struct _nw_app_ctrl_proto_passthrough {
 | 
						|
    /* passthrough data protocol type, see NW_APP_CTRL_PROTO_TYPE_XXX */
 | 
						|
    uint8_t     proto_type;
 | 
						|
    /* primary request message flag, see NW_APP_CTRL_PRM_XXX */
 | 
						|
    uint8_t     prm : 1,
 | 
						|
    /* reserve1 for future */
 | 
						|
                rsvd1 : 7;
 | 
						|
    /* baudrate: small endian */
 | 
						|
    uint8_t     baud[NW_APP_CLCT_TASK_BAUD_LEN];
 | 
						|
    /* sequence number */
 | 
						|
    uint8_t     sn;
 | 
						|
    /* reserve2 for future */
 | 
						|
    uint8_t     rsvd2;
 | 
						|
    /* reserve3 for future */
 | 
						|
    uint8_t     rsvd3;
 | 
						|
    /* reserve4 for future */
 | 
						|
    uint8_t     rsvd4;
 | 
						|
    /* data length */
 | 
						|
    uint16_t    data_len;
 | 
						|
    /* data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} nw_app_ctrl_proto_passthrough_t;
 | 
						|
 | 
						|
/* sta run state query req structure from cco to sta */
 | 
						|
typedef struct _nw_app_run_state_query_req {
 | 
						|
    /* query info cnt */
 | 
						|
    uint8_t     cnt;
 | 
						|
    /* info id, see NW_APP_RUN_STATE_ID_XXX */
 | 
						|
    uint8_t     id[0];
 | 
						|
} nw_app_run_state_query_req_t;
 | 
						|
 | 
						|
/* sta run state query resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_run_state_query_resp {
 | 
						|
    /* query info cnt */
 | 
						|
    uint8_t     cnt;
 | 
						|
    /* info data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} nw_app_run_state_query_resp_t;
 | 
						|
 | 
						|
/* sta run state id info header */
 | 
						|
typedef struct _nw_app_run_state_id_hdr {
 | 
						|
    /* info id */
 | 
						|
    uint8_t    id;
 | 
						|
    /* info data lenght */
 | 
						|
    uint8_t    len;
 | 
						|
    /* info data */
 | 
						|
    uint8_t    data[0];
 | 
						|
} nw_app_run_state_id_hdr_t;
 | 
						|
 | 
						|
/* sta runtime info structure, id is NW_APP_RUN_STATE_ID_RUNTIME */
 | 
						|
typedef struct _nw_app_node_runtime_info {
 | 
						|
    /* runtime, uint is 1s */
 | 
						|
    uint32_t    runtime;
 | 
						|
} nw_app_node_runtime_info_t;
 | 
						|
 | 
						|
/* sta run other info structure,
 | 
						|
 * id is NW_APP_RUN_STATE_ID_ZC.
 | 
						|
 * id is NW_APP_RUN_STATE_ID_UART.
 | 
						|
 * id is NW_APP_RUN_STATE_ID_LEAVE.
 | 
						|
 * id is NW_APP_RUN_STATE_ID_RESET.
 | 
						|
 */
 | 
						|
typedef struct _nw_app_node_run_other_info {
 | 
						|
    uint8_t     result;
 | 
						|
} nw_app_node_run_other_info_t;
 | 
						|
 | 
						|
/* sta neighbor node query req structure from cco to sta */
 | 
						|
typedef struct _nw_app_neighbor_query_req {
 | 
						|
    /* query index */
 | 
						|
    uint16_t    index;
 | 
						|
    /* query cnt */
 | 
						|
    uint8_t     cnt;
 | 
						|
} nw_app_neighbor_query_req;
 | 
						|
 | 
						|
/* sta neighbor node info uint structure */
 | 
						|
typedef struct _nw_app_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 */
 | 
						|
    int8_t      signal_attenuation;
 | 
						|
} nw_app_neighbor_node_info_t;
 | 
						|
 | 
						|
/* sta neighbor node query resp structure from sta to cco */
 | 
						|
typedef struct _nw_app_neighbor_query_resp {
 | 
						|
    /* neighbor node total cnt */
 | 
						|
    uint16_t    total_cnt;
 | 
						|
    /* report cnt */
 | 
						|
    uint8_t     cnt;
 | 
						|
    /* neighbor node info */
 | 
						|
    nw_app_neighbor_node_info_t node_info[0];
 | 
						|
} nw_app_neighbor_query_resp;
 | 
						|
 | 
						|
/* sta transparent forwarding data for correct time */
 | 
						|
typedef struct _nw_app_trans_module_corr_time {
 | 
						|
    /* port id, hplc 0x01 */
 | 
						|
    uint16_t                port;
 | 
						|
    /* seq, start from 1 */
 | 
						|
    uint8_t                 seq;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t                 reserved;
 | 
						|
    /* cco ntb */
 | 
						|
    uint32_t                cco_ntb;
 | 
						|
    /* correct data */
 | 
						|
    uint8_t                 data[0];
 | 
						|
} nw_app_trans_module_corr_time_t;
 | 
						|
 | 
						|
/* shenzhen load curve config di unit */
 | 
						|
typedef struct _nw_app_lc_cfg_di_unit_sz {
 | 
						|
    /* di, see DL/T 645-2007 */
 | 
						|
    uint8_t         di[PROTO_645_2007_DI_LEN];
 | 
						|
    /* collect interval time, unit is 1min */
 | 
						|
    uint8_t         interval;
 | 
						|
} nw_app_lc_cfg_di_unit_sz_t;
 | 
						|
 | 
						|
/* shenzhen load curve config di infomation */
 | 
						|
typedef struct _nw_app_lc_cfg_di_info_sz {
 | 
						|
    /* meter type, see NW_APP_LR_METER_TYPE_XXX */
 | 
						|
    uint8_t         meter_type;
 | 
						|
    /* di count */
 | 
						|
    uint8_t         di_cnt;
 | 
						|
    /* di unit */
 | 
						|
    nw_app_lc_cfg_di_unit_sz_t di_unit[0];
 | 
						|
} nw_app_lc_cfg_di_info_sz_t;
 | 
						|
 | 
						|
/* shenzhen load curve config infomation */
 | 
						|
typedef struct _nw_app_lc_cfg_info_sz {
 | 
						|
    /* function code, see NW_APP_LR_FN_CFG_CLCT_INTERVAL_SZ */
 | 
						|
    uint8_t         fn;
 | 
						|
    /* flag for start and stop, 0 is stop 1 is start */
 | 
						|
    uint8_t         flag_start;
 | 
						|
    /* di infomation, see nw_app_lc_cfg_di_info_sz_t */
 | 
						|
    uint8_t         di_info[0];
 | 
						|
} nw_app_lc_cfg_info_sz_t;
 | 
						|
 | 
						|
/* shenzhen load curve interval time query dl */
 | 
						|
typedef struct _nw_app_lc_interval_time_query_dl_sz {
 | 
						|
    /* function code, see NW_APP_LR_FN_QUERY_CLCT_INTERVAL_SZ */
 | 
						|
    uint8_t         fn;
 | 
						|
    /* meter type, see NW_APP_LR_METER_TYPE_XXX */
 | 
						|
    uint8_t         meter_type;
 | 
						|
    /* di count */
 | 
						|
    uint8_t         di_cnt;
 | 
						|
    /* di, see DL/T 645-2007 */
 | 
						|
    uint32_t        di[0];
 | 
						|
} nw_app_lc_interval_time_query_dl_sz_t;
 | 
						|
 | 
						|
/* shenzhen load curve interval time query ul */
 | 
						|
typedef struct _nw_app_lc_interval_time_query_ul_sz {
 | 
						|
    /* function code, see NW_APP_LR_FN_QUERY_CLCT_INTERVAL_SZ */
 | 
						|
    uint8_t         fn;
 | 
						|
    /* meter type, see NW_APP_LR_METER_TYPE_XXX */
 | 
						|
    uint8_t         meter_type;
 | 
						|
    /* di count */
 | 
						|
    uint8_t         di_cnt;
 | 
						|
    /* di unit */
 | 
						|
    nw_app_lc_cfg_di_unit_sz_t di_unit[0];
 | 
						|
} nw_app_lc_interval_time_query_ul_sz_t;
 | 
						|
 | 
						|
/* shenzhen load curve collect data query dl and ul info */
 | 
						|
typedef struct _nw_app_lc_data_query_info_sz {
 | 
						|
    /* di, see DL/T 645-2007 */
 | 
						|
    uint32_t         di;
 | 
						|
    /* the specified time is seconds, minutes, hours,
 | 
						|
     * days and years use BCD code.
 | 
						|
     */
 | 
						|
    uint8_t          min;
 | 
						|
    uint8_t          hour;
 | 
						|
    uint8_t          day;
 | 
						|
    uint8_t          mon;
 | 
						|
    uint8_t          year;
 | 
						|
    /* curve point num to read */
 | 
						|
    uint8_t          n;
 | 
						|
    /* uint8_t data[0] for ul */
 | 
						|
} nw_app_lc_data_query_info_sz_t;
 | 
						|
 | 
						|
/* shenzhen load curve collect data query dl */
 | 
						|
typedef struct _nw_app_lc_data_query_dl_sz {
 | 
						|
    /* function code, see NW_APP_LR_FN_READ_DI_DATA_SZ */
 | 
						|
    uint8_t         fn;
 | 
						|
    /* meter type, see NW_APP_LR_METER_TYPE_XXX */
 | 
						|
    uint8_t         meter_type;
 | 
						|
    /* di count */
 | 
						|
    uint8_t         di_cnt;
 | 
						|
    /* data query info */
 | 
						|
    nw_app_lc_data_query_info_sz_t query_info[0];
 | 
						|
} nw_app_lc_data_query_dl_sz_t;
 | 
						|
 | 
						|
/* shenzhen load curve collect data query ul */
 | 
						|
typedef struct _nw_app_lc_data_query_ul_sz {
 | 
						|
    /* function code, see NW_APP_LR_FN_READ_DI_DATA_SZ */
 | 
						|
    uint8_t         fn;
 | 
						|
    /* meter type, see NW_APP_LR_METER_TYPE_XXX */
 | 
						|
    uint8_t         meter_type;
 | 
						|
    /* di count */
 | 
						|
    uint8_t         di_cnt;
 | 
						|
    /* data, see nw_app_lr_data_query_info_ul_t */
 | 
						|
    uint8_t         data[0];
 | 
						|
} nw_app_lc_data_query_ul_sz_t;
 | 
						|
 | 
						|
/* NW load curve config infomation */
 | 
						|
typedef struct _nw_app_lr_cfg_info {
 | 
						|
    /* function code, see NW_APP_LR_FN_CFG_CLCT_INTERVA */
 | 
						|
    uint8_t         fn;
 | 
						|
    /* collect interval time, unit is 1min */
 | 
						|
    uint8_t         interval;
 | 
						|
} nw_app_lr_cfg_info_t;
 | 
						|
 | 
						|
/* NW load curve data read dl */
 | 
						|
typedef struct _nw_app_lr_data_read_dl {
 | 
						|
    /* function code, see NW_APP_LR_FN_READ_DI_DATA */
 | 
						|
    uint8_t         fn;
 | 
						|
    /* meter type, see NW_APP_LR_METER_TYPE_XXX */
 | 
						|
    uint8_t         meter_type;
 | 
						|
    /* the specified time is seconds, minutes, hours,
 | 
						|
     * days and years use BCD code.
 | 
						|
     */
 | 
						|
    uint8_t         min;
 | 
						|
    uint8_t         hour;
 | 
						|
    uint8_t         day;
 | 
						|
    uint8_t         mon;
 | 
						|
    uint8_t         year;
 | 
						|
    /* curve point num to read */
 | 
						|
    uint8_t         n;
 | 
						|
    /* interval time, unit is 1min */
 | 
						|
    uint8_t         interval;
 | 
						|
    /* di count */
 | 
						|
    uint8_t         di_cnt;
 | 
						|
    /* di */
 | 
						|
    uint32_t        di[0];
 | 
						|
} nw_app_lr_data_read_dl_t;
 | 
						|
 | 
						|
/* NW load curve di data ul */
 | 
						|
typedef struct _nw_app_lr_di_data_ul {
 | 
						|
    /* di, see DL/T 645-2007 */
 | 
						|
    uint32_t        di;
 | 
						|
    /* data */
 | 
						|
    uint8_t         data[0];
 | 
						|
} nw_app_lr_di_data_ul_t;
 | 
						|
 | 
						|
/* NW load curve data read ul */
 | 
						|
typedef struct _nw_app_lr_data_read_ul {
 | 
						|
    /* function code, see NW_APP_LR_FN_READ_DI_DATA */
 | 
						|
    uint8_t         fn;
 | 
						|
    /* meter type, see NW_APP_LR_METER_TYPE_XXX */
 | 
						|
    uint8_t         meter_type;
 | 
						|
    /* the specified time is seconds, minutes, hours,
 | 
						|
     * days and years use BCD code.
 | 
						|
     */
 | 
						|
    uint8_t         min;
 | 
						|
    uint8_t         hour;
 | 
						|
    uint8_t         day;
 | 
						|
    uint8_t         mon;
 | 
						|
    uint8_t         year;
 | 
						|
    /* curve point num to read */
 | 
						|
    uint8_t         n;
 | 
						|
    /* interval time, unit is 1min */
 | 
						|
    uint8_t         interval;
 | 
						|
    /* di count */
 | 
						|
    uint8_t         di_cnt;
 | 
						|
    /* di data, see nw_app_lr_di_data_ul_t */
 | 
						|
    uint8_t         di_data[0];
 | 
						|
} nw_app_lr_data_read_ul_t;
 | 
						|
 | 
						|
/* south power grid application broadcast cmd header */
 | 
						|
typedef struct _nw_app_broadcast_cmd_hdr {
 | 
						|
    /* source address, little-endian */
 | 
						|
    uint8_t         src_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* destination address, little-endian */
 | 
						|
    uint8_t         dst_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* data */
 | 
						|
    uint8_t         data[0];
 | 
						|
} nw_app_broadcast_cmd_hdr;
 | 
						|
 | 
						|
/* transfer payload from sta to sta */
 | 
						|
typedef struct _nw_app_route_fwd {
 | 
						|
    /* source sta address, little endian */
 | 
						|
    uint8_t         src_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* destination sta address, little endian */
 | 
						|
    uint8_t         dst_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* reserved for future, default set as 0 */
 | 
						|
    uint16_t        reserved;
 | 
						|
    /* data length */
 | 
						|
    uint16_t        data_len;
 | 
						|
    /* data */
 | 
						|
    uint8_t         data[0];
 | 
						|
} nw_app_route_fwd_t;
 | 
						|
 | 
						|
/* define nw 21meter dev id len */
 | 
						|
#define NW_APP_21METER_SERIAL_NUM_LEN          (8)
 | 
						|
#define NW_APP_21METER_YEAR_CODE_LEN           (2)
 | 
						|
#define NW_APP_21METER_VENDOR_CODE_LEN         (2)
 | 
						|
#define NW_APP_21METER_COMM_MODE_LEN           (2)
 | 
						|
#define NW_APP_21METER_DEV_TYPE_LEN            (2)
 | 
						|
#define NW_APP_21METER_CUS_CODE_LEN            (2)
 | 
						|
 | 
						|
/* define nw 21meter device type */
 | 
						|
#define NW_APP_21METER_DEV_TYPE_1P             (1)
 | 
						|
#define NW_APP_21METER_DEV_TYPE_3P             (2)
 | 
						|
#define NW_APP_21METER_DEV_TYPE_CCTT           (3)
 | 
						|
#define NW_APP_21METER_DEV_TYPE_CT1            (4)
 | 
						|
#define NW_APP_21METER_DEV_TYPE_CT2            (5)
 | 
						|
 | 
						|
/* define nw 21meter customer code for dev id */
 | 
						|
#define NW_APP_DEV_ID_CUS_CODE_GUANGDONG       (3)
 | 
						|
#define NW_APP_DEV_ID_CUS_CODE_GUANGXI         (4)
 | 
						|
#define NW_APP_DEV_ID_CUS_CODE_YUNNAN          (5)
 | 
						|
#define NW_APP_DEV_ID_CUS_CODE_GUIZHOU         (6)
 | 
						|
#define NW_APP_DEV_ID_CUS_CODE_HAINAN          (7)
 | 
						|
#define NW_APP_DEV_ID_CUS_CODE_GUANGZHOU       (8)
 | 
						|
#define NW_APP_DEV_ID_CUS_CODE_SHENZHEN        (9)
 | 
						|
 | 
						|
/* define nw 21meter customer code for module mac */
 | 
						|
#define NW_APP_MODULR_CUS_CODE_GUANGDONG       (1)
 | 
						|
#define NW_APP_MODULR_CUS_CODE_GUANGXI         (2)
 | 
						|
#define NW_APP_MODULR_CUS_CODE_YUNNAN          (3)
 | 
						|
#define NW_APP_MODULR_CUS_CODE_GUIZHOU         (4)
 | 
						|
#define NW_APP_MODULR_CUS_CODE_HAINAN          (5)
 | 
						|
#define NW_APP_MODULR_CUS_CODE_GUANGZHOU       (6)
 | 
						|
#define NW_APP_MODULR_CUS_CODE_SHENZHEN        (7)
 | 
						|
 | 
						|
/* module dev id for nw 21meter */
 | 
						|
typedef struct _nw_app_21meter_module_dev_id {
 | 
						|
    /* serial number */
 | 
						|
    uint8_t serial_number[NW_APP_21METER_SERIAL_NUM_LEN];
 | 
						|
    /* year code */
 | 
						|
    uint8_t year_code[NW_APP_21METER_YEAR_CODE_LEN];
 | 
						|
    /* vendor code */
 | 
						|
    uint8_t vendor_code[NW_APP_21METER_VENDOR_CODE_LEN];
 | 
						|
    /* chip vendor code */
 | 
						|
    uint8_t chip_vendor_code[NW_APP_21METER_VENDOR_CODE_LEN];
 | 
						|
    /* reserve for future */
 | 
						|
    uint8_t reserve;
 | 
						|
    /* communication mode */
 | 
						|
    uint8_t comm_mode[NW_APP_21METER_COMM_MODE_LEN];
 | 
						|
    /* device type */
 | 
						|
    uint8_t dev_type[NW_APP_21METER_DEV_TYPE_LEN];
 | 
						|
    /* code type */
 | 
						|
     uint8_t code_type;
 | 
						|
    /* prefecture customer code */
 | 
						|
     uint8_t prefecture_code[NW_APP_21METER_CUS_CODE_LEN];
 | 
						|
    /* provincial customer code */
 | 
						|
     uint8_t provincial_code[NW_APP_21METER_CUS_CODE_LEN];
 | 
						|
} nw_app_21meter_module_dev_id_t;
 | 
						|
 | 
						|
/* NW 21meter module mac temp data, from serial_number to
 | 
						|
 * reserve1 is module mac valid data
 | 
						|
 */
 | 
						|
typedef struct _nw_app_21meter_module_mac_tmp {
 | 
						|
    /* invalid data */
 | 
						|
    uint32_t invalid_data_1   : 8,
 | 
						|
    /* serial number */
 | 
						|
             serial_number    : 24;
 | 
						|
    /* year code */
 | 
						|
    uint32_t year_code        : 6,
 | 
						|
    /* vendor code */
 | 
						|
             vendor_code      : 7,
 | 
						|
    /* reserve for future, delaut value is 0 */
 | 
						|
             reserve          : 5,
 | 
						|
    /* device type, see NW_APP_21METER_DEV_TYPE_XXX */
 | 
						|
             dev_type         : 3,
 | 
						|
    /* customer code, see NW_APP_MODULR_CUS_CODE_XXX */
 | 
						|
             cus_code         : 3,
 | 
						|
    /*  invalid data */
 | 
						|
             invalid_data_2   : 8;
 | 
						|
} nw_app_21meter_module_mac_tmp_t;
 | 
						|
 | 
						|
/* SPG product testing function set mac request emessage layout */
 | 
						|
typedef struct _nw_app_pt_set_mac_req {
 | 
						|
    /* node address -- little endian */
 | 
						|
    uint8_t node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* mac address to be set -- little endian */
 | 
						|
    uint8_t mac[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_pt_set_mac_req_t;
 | 
						|
 | 
						|
/* SPG product testing function set mac request emessage layout */
 | 
						|
typedef struct _nw_app_pt_set_mac_rsp {
 | 
						|
    /* node address -- little endian */
 | 
						|
    uint8_t node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* mac address -- little endian */
 | 
						|
    uint8_t mac[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_pt_set_mac_rsp_t;
 | 
						|
 | 
						|
/* SPG product testing query message layout */
 | 
						|
typedef struct _nw_app_pt_qr {
 | 
						|
    /* node address -- little endian */
 | 
						|
    uint8_t node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
} nw_app_pt_qr_t;
 | 
						|
 | 
						|
/* SPG product testing read version response message layout */
 | 
						|
typedef struct _nw_app_pt_ver_rsp {
 | 
						|
    /* node address -- little endian */
 | 
						|
    uint8_t     node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* vendor_id */
 | 
						|
    uint16_t    vendor_id;
 | 
						|
    /* chip_id */
 | 
						|
    uint16_t    chip_id;
 | 
						|
    /* external software version */
 | 
						|
    uint16_t    ver_ext;
 | 
						|
    uint8_t     ver_ext_day;
 | 
						|
    uint8_t     ver_ext_mon;
 | 
						|
    uint8_t     ver_ext_year;
 | 
						|
 | 
						|
    uint32_t    ver_chip_hw;
 | 
						|
    uint8_t     ver_chip_hw_day;
 | 
						|
    uint8_t     ver_chip_hw_mon;
 | 
						|
    uint8_t     ver_chip_hw_year;
 | 
						|
 | 
						|
    uint32_t    ver_chip_sw;
 | 
						|
    uint8_t     ver_chip_sw_day;
 | 
						|
    uint8_t     ver_chip_sw_mon;
 | 
						|
    uint8_t     ver_chip_sw_year;
 | 
						|
    /* internal software version */
 | 
						|
    uint8_t     ver_inter_day;
 | 
						|
    uint8_t     ver_inter_mon;
 | 
						|
    uint8_t     ver_inter_year;
 | 
						|
    uint16_t    ver_inter;
 | 
						|
} nw_app_pt_ver_rsp_t;
 | 
						|
 | 
						|
typedef struct _nw_app_edge_computing_conf {
 | 
						|
    /* 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;
 | 
						|
} nw_app_edge_computing_conf_t;
 | 
						|
 | 
						|
typedef struct _nw_app_edge_computing_dl {
 | 
						|
    /* source address, little enadian */
 | 
						|
    uint8_t                         src_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* destination address, little enadian */
 | 
						|
    uint8_t                         dest_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* edge computing task id */
 | 
						|
    uint8_t                         edge_computing_task;
 | 
						|
    /* edge computing data */
 | 
						|
    nw_app_edge_computing_conf_t    edge_conf;
 | 
						|
} nw_app_edge_computing_dl_t;
 | 
						|
 | 
						|
typedef struct _nw_app_edge_computing_ul {
 | 
						|
    /* source address, little enadian */
 | 
						|
    uint8_t     src_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* destination address, little enadian */
 | 
						|
    uint8_t     dest_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* edge computing task id */
 | 
						|
    uint8_t     edge_computing_task;
 | 
						|
    /* edge computing configuration result, 0 - success, others - fail */
 | 
						|
    uint8_t     result;
 | 
						|
} nw_app_edge_computing_ul_t;
 | 
						|
 | 
						|
typedef struct _nw_app_undervoltage_monitor_rpt {
 | 
						|
    /* event type, see NW_APP_EDGE_COMP_EVT_TYPE_XXX */
 | 
						|
    uint8_t     evt_type;
 | 
						|
    /* power meter mac address, little endian, BCD format */
 | 
						|
    uint8_t     pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* power meter type, 0x00 - single phase, 0x01 - three phase */
 | 
						|
    uint8_t     pm_type;
 | 
						|
    /* phase C min voltage in monitor */
 | 
						|
    uint16_t    phase_c;
 | 
						|
    /* phase B min voltage in monitor */
 | 
						|
    uint16_t    phase_b;
 | 
						|
    /* phase A min voltage in monitor */
 | 
						|
    uint16_t    phase_a;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t     rsvd[3];
 | 
						|
} nw_app_undervoltage_monitor_rpt_t;
 | 
						|
 | 
						|
typedef struct _nw_app_overvoltage_monitor_rpt {
 | 
						|
    /* event type, see NW_APP_EDGE_COMP_EVT_TYPE_XXX */
 | 
						|
    uint8_t     evt_type;
 | 
						|
    /* power meter mac address, little endian, BCD format */
 | 
						|
    uint8_t     pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* power meter type, 0x00 - single phase, 0x01 - three phase */
 | 
						|
    uint8_t     pm_type;
 | 
						|
    /* phase C max voltage in monitor */
 | 
						|
    uint16_t    phase_c;
 | 
						|
    /* phase B max voltage in monitor */
 | 
						|
    uint16_t    phase_b;
 | 
						|
    /* phase A max voltage in monitor */
 | 
						|
    uint16_t    phase_a;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t     rsvd[3];
 | 
						|
} nw_app_overvoltage_monitor_rpt_t;
 | 
						|
 | 
						|
typedef struct _nw_app_sec_pulse_monitor_rpt {
 | 
						|
    /* event type, see NW_APP_EDGE_COMP_EVT_TYPE_XXX */
 | 
						|
    uint8_t     evt_type;
 | 
						|
    /* power meter mac address, little endian, BCD format */
 | 
						|
    uint8_t     pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* max pulse error in monitor, unit is 1ms */
 | 
						|
    uint16_t    max_pulse_error;
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t     rsvd[8];
 | 
						|
} nw_app_sec_pulse_monitor_rpt_t;
 | 
						|
 | 
						|
typedef struct _nw_app_health_status_rpt {
 | 
						|
    /* event type, see NW_APP_EDGE_COMP_EVT_TYPE_XXX */
 | 
						|
    uint8_t     evt_type;
 | 
						|
    /* power meter mac address, little endian, BCD format */
 | 
						|
    uint8_t     pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* power meter health value */
 | 
						|
    uint8_t     value;
 | 
						|
    /* power meter error bitmap */
 | 
						|
    uint8_t     err_bitmap[4];
 | 
						|
    /* reserved for future */
 | 
						|
    uint8_t     rsvd[8];
 | 
						|
} nw_app_health_status_rpt_t;
 | 
						|
 | 
						|
#pragma pack(pop)  /* restore the pack status */
 | 
						|
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* PROTO_NW_APP_H */
 |