2594 lines
		
	
	
		
			89 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2594 lines
		
	
	
		
			89 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_3762_H
 | 
						|
#define PROTO_3762_H
 | 
						|
 | 
						|
#include "os_types_api.h"
 | 
						|
#include "iot_utils_api.h"
 | 
						|
#include "iot_sg_ext_api.h"
 | 
						|
#include "iot_cli_sg_api.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 */
 | 
						|
 | 
						|
#define PROTO_3762_FIX_FIELD_LEN           (6)
 | 
						|
#define PROTO_3762_FRAME_MIN_LEN           (15)
 | 
						|
 | 
						|
#define PROTO_3762_LENGTH_SIZE             (2)
 | 
						|
#define PROTO_3762_CTRL_OFFSET             (PROTO_3762_LENGTH_SIZE + 1)
 | 
						|
#define PROTO_3762_DATA_OFFSET             (PROTO_3762_CTRL_OFFSET + 1)
 | 
						|
#define PROTO_3762_CHECKSUM_LEN            (1)
 | 
						|
#define PROTO_3762_BACKCODE_LEN            (1)
 | 
						|
 | 
						|
#define PROTO_3762_MAC_ADDR_LEN            (6)
 | 
						|
 | 
						|
#define PROTO_3762_SOF_BYTE                (0x68)
 | 
						|
#define PROTO_3762_EOF_BYTE                (0x16)
 | 
						|
 | 
						|
#define PROTO_3762_PHY_TYPE_RESERVE        (0)
 | 
						|
#define PROTO_3762_PHY_TYPE_C_RCC          (1)
 | 
						|
#define PROTO_3762_PHY_TYPE_D_RCC          (2)
 | 
						|
#define PROTO_3762_PHY_TYPE_PLC            (3)
 | 
						|
#define PROTO_3762_PHY_TYPE_DUAL_MODE      (4)
 | 
						|
#define PROTO_3762_PHY_TYPE_WIRELESS       (10)
 | 
						|
#define PROTO_3762_PHY_TYPE_ETHERNET       (20)
 | 
						|
 | 
						|
#define PROTO_3762_COMM_TYPE_NARROWBAND    (1)
 | 
						|
#define PROTO_3762_COMM_TYPE_BROADBAND     (2)
 | 
						|
#define PROTO_3762_COMM_TYPE_MICRO_WIRL    (3)
 | 
						|
#define PROTO_3762_COMM_TYPE_DUAL_MODE     (4)
 | 
						|
 | 
						|
#define PROTO_3762_DIR_DOWN_LINK           (0)
 | 
						|
#define PROTO_3762_DIR_UP_LINK             (1)
 | 
						|
 | 
						|
#define PROTO_3762_PRM_MASTER              (1)
 | 
						|
#define PROTO_3762_PRM_SLAVE               (0)
 | 
						|
 | 
						|
#define PROTO_3762_DEV_TYPE_COLLECTOR      (0)
 | 
						|
#define PROTO_3762_DEV_TYPE_METER          (1)
 | 
						|
#define PROTO_3762_DEV_TYPE_STA            (2)
 | 
						|
/* pw device type */
 | 
						|
#define PROTO_3762_DEV_TYPE_BRANCH_MONITOR (0xF0)
 | 
						|
#define PROTO_3762_DEV_TYPE_BREAKER        (0xF1)
 | 
						|
 | 
						|
/* app function number definition */
 | 
						|
#define PROTO_3762_AFN_00       (0x00)
 | 
						|
#define PROTO_3762_AFN_01       (0x01)
 | 
						|
#define PROTO_3762_AFN_02       (0x02)
 | 
						|
#define PROTO_3762_AFN_03       (0x03)
 | 
						|
#define PROTO_3762_AFN_04       (0x04)
 | 
						|
#define PROTO_3762_AFN_05       (0x05)
 | 
						|
#define PROTO_3762_AFN_06       (0x06)
 | 
						|
 | 
						|
#define PROTO_3762_AFN_10       (0x10)
 | 
						|
#define PROTO_3762_AFN_11       (0x11)
 | 
						|
#define PROTO_3762_AFN_12       (0x12)
 | 
						|
#define PROTO_3762_AFN_13       (0x13)
 | 
						|
#define PROTO_3762_AFN_14       (0x14)
 | 
						|
#define PROTO_3762_AFN_15       (0x15)  /* only for 1367.2 */
 | 
						|
#define PROTO_3762_AFN_20       (0x20)
 | 
						|
#define PROTO_3762_AFN_EA       (0xEA)
 | 
						|
#define PROTO_3762_AFN_EB       (0xEB)
 | 
						|
#define PROTO_3762_AFN_EC       (0xEC)
 | 
						|
#define PROTO_3762_AFN_ED       (0xED)
 | 
						|
#define PROTO_3762_AFN_F0       (0xF0)  /* debug AFN */
 | 
						|
#define PROTO_3762_AFN_F1       (0xF1)  /* only for sg supplement */
 | 
						|
#define PROTO_3762_AFN_F2       (0xF2)
 | 
						|
 | 
						|
/* function code for each command */
 | 
						|
#define PROTO_3762_FN_INVALID   (0)
 | 
						|
#define PROTO_3762_F1           (1)
 | 
						|
#define PROTO_3762_F2           (2)
 | 
						|
#define PROTO_3762_F3           (3)
 | 
						|
#define PROTO_3762_F4           (4)
 | 
						|
#define PROTO_3762_F5           (5)
 | 
						|
#define PROTO_3762_F6           (6)
 | 
						|
#define PROTO_3762_F7           (7)
 | 
						|
#define PROTO_3762_F8           (8)
 | 
						|
#define PROTO_3762_F9           (9)
 | 
						|
#define PROTO_3762_F10          (10)
 | 
						|
#define PROTO_3762_F11          (11)
 | 
						|
#define PROTO_3762_F12          (12)
 | 
						|
#define PROTO_3762_F13          (13)
 | 
						|
#define PROTO_3762_F14          (14)
 | 
						|
#define PROTO_3762_F16          (16)
 | 
						|
#define PROTO_3762_F17          (17)
 | 
						|
#define PROTO_3762_F18          (18)
 | 
						|
#define PROTO_3762_F19          (19)
 | 
						|
#define PROTO_3762_F20          (20)
 | 
						|
#define PROTO_3762_F21          (21)
 | 
						|
#define PROTO_3762_F27          (27)
 | 
						|
 | 
						|
#define PROTO_3762_F30          (30)
 | 
						|
#define PROTO_3762_F31          (31)
 | 
						|
#define PROTO_3762_F32          (32)
 | 
						|
#define PROTO_3762_F33          (33)
 | 
						|
#define PROTO_3762_F40          (40)
 | 
						|
#define PROTO_3762_F41          (41)
 | 
						|
#define PROTO_3762_F56          (56)
 | 
						|
 | 
						|
#define PROTO_3762_F80          (80)
 | 
						|
#define PROTO_3762_F81          (81)
 | 
						|
#define PROTO_3762_F82          (82)
 | 
						|
 | 
						|
#define PROTO_3762_F90          (90)
 | 
						|
#define PROTO_3762_F92          (92)
 | 
						|
#define PROTO_3762_F93          (93)
 | 
						|
#define PROTO_3762_F94          (94)
 | 
						|
#define PROTO_3762_F100         (100)
 | 
						|
#define PROTO_3762_F101         (101)
 | 
						|
#define PROTO_3762_F102         (102)
 | 
						|
#define PROTO_3762_F103         (103)
 | 
						|
#define PROTO_3762_F104         (104)
 | 
						|
#define PROTO_3762_F106         (106)
 | 
						|
 | 
						|
#define PROTO_3762_F111         (111)
 | 
						|
#define PROTO_3762_F112         (112)
 | 
						|
 | 
						|
#define PROTO_3762_F120         (120)
 | 
						|
#define PROTO_3762_F121         (121)
 | 
						|
 | 
						|
#define PROTO_3762_F126         (126)
 | 
						|
#define PROTO_3762_F127         (127)
 | 
						|
 | 
						|
#define PROTO_3762_F130         (130)
 | 
						|
#define PROTO_3762_F131         (131)
 | 
						|
#define PROTO_3762_F150         (150)
 | 
						|
#define PROTO_3762_F200         (200)
 | 
						|
#define PROTO_3762_F201         (201)
 | 
						|
 | 
						|
#define PROTO_3762_F225         (225)
 | 
						|
#define PROTO_3762_F230         (230)
 | 
						|
#define PROTO_3762_F231         (231)
 | 
						|
#define PROTO_3762_F232         (232)
 | 
						|
 | 
						|
#define PROTO_3762_F255         (255)
 | 
						|
 | 
						|
#define WORK_STATE_RNNING       (0)
 | 
						|
#define WORK_STATE_PAUSED       (1)
 | 
						|
 | 
						|
#define PROTO_3762_2013_START_CHAR          0x68
 | 
						|
#define PROTO_3762_2013_END_CHAR            0x16
 | 
						|
 | 
						|
/* invalid segment index. In 15H01F up link. */
 | 
						|
#define PROTO_3762_INVALID_SEG_INDEX        0xFFFF
 | 
						|
 | 
						|
/* default channel state */
 | 
						|
#define PROTO_3762_DEFAULT_CH_STATE         0x0
 | 
						|
/* hunan channel state */
 | 
						|
#define PROTO_3762_HUNAN_CH_STATE           0xFFFE
 | 
						|
 | 
						|
/* wait 0 seconds by default */
 | 
						|
#define PROTO_3762_DEFAULT_WAIT_TIME        (0)
 | 
						|
/* wait 5 * 30 seconds for setting band */
 | 
						|
#define PROTO_3762_SET_BAND_WAIT_TIME       (5 * 60)
 | 
						|
 | 
						|
#define PROTO_3762_READ_PM_FAILED           (0)
 | 
						|
#define PROTO_3762_READ_PM_SUCCEED          (1)
 | 
						|
#define PROTO_3762_MAY_READ_PM              (2)
 | 
						|
 | 
						|
#define PROTO_3762_DATETIME_LEN             (6)
 | 
						|
 | 
						|
#define PROTO_3762_NID_LEN                  (3)
 | 
						|
 | 
						|
#define PROTO_3762_COMM_DELAY               (1) // comm delay in seconds
 | 
						|
 | 
						|
#define PROTO_3762_15H_CLEAR_FILE               (0x00)
 | 
						|
#define PROTO_3762_15H_UPGRADE_LOCAL_MODULE     (0x03)
 | 
						|
#define PROTO_3762_15H_UPGRADE_STA_MODULE_ZHHW  (0x04)
 | 
						|
#define PROTO_3762_15H_UPGRADE_CCO_STA_MODULE   (0x07)
 | 
						|
#define PROTO_3762_15H_UPGRADE_STA_MODULE       (0x08)
 | 
						|
 | 
						|
#define PROTO_3762_2013_READ_METER_STOP         (0x01)
 | 
						|
#define PROTO_3762_2013_SEARCH_METER_STOP       (0x02)
 | 
						|
#define PROTO_3762_2013_TSFM_DETECT_STOP        (0x03)
 | 
						|
 | 
						|
/* defines secondary node registration time unit(1min), uins is 1s */
 | 
						|
#define PROTO_3762_SEC_NODE_REG_TIME_UNIT_DUR   (60)
 | 
						|
 | 
						|
#define PROTO_3762_CHIP_ID_SERIAL_NUM_LEN       (5)
 | 
						|
#define PROTO_3762_CHIP_ID_CRC_LEN              (8)
 | 
						|
 | 
						|
/* proto 03f11 fn buf length */
 | 
						|
#define PROTO_3762_03F11_FNLEN                  (32)
 | 
						|
#define PROTO_3762_03F11_FNLEN_BITS             (PROTO_3762_03F11_FNLEN << 3)
 | 
						|
 | 
						|
/* proto 10f100 network size */
 | 
						|
#define PROTO_3762_10F100_MIN_NW_SIZE           (2)
 | 
						|
#define PROTO_3762_10F100_MAX_NW_SIZE           (512)
 | 
						|
#define PROTO_3762_10F100_DEFAULT_NW_SIZE       (256)
 | 
						|
 | 
						|
/********* TSFM state of station define for hebei province *********/
 | 
						|
/* different transformer and in white list */
 | 
						|
#define PROTO_3762_HEBEI_PM_TO_TSFM_1           (1)
 | 
						|
/* same transformer and not in white list */
 | 
						|
#define PROTO_3762_HEBEI_PM_TO_TSFM_2           (2)
 | 
						|
 | 
						|
#define PROTO_3762_PRIM_VER_LEN                 (3)
 | 
						|
 | 
						|
/* device type defined in sx protocol */
 | 
						|
/* invaild type */
 | 
						|
#define PROTO_3762_DEV_TYPE_INVAILD            (0)
 | 
						|
/* meter controller */
 | 
						|
#define PROTO_3762_DEV_TYPE_METER_CONTROLLER   (1 << 0)
 | 
						|
/* concentrator */
 | 
						|
#define PROTO_3762_DEV_TYPE_CONCENTRATOR       (1 << 1)
 | 
						|
/* power meter */
 | 
						|
#define PROTO_3762_DEV_TYPE_POWER_METER        (1 << 2)
 | 
						|
/* repeater */
 | 
						|
#define PROTO_3762_DEV_TYPE_REPEATER           (1 << 3)
 | 
						|
/* collector II */
 | 
						|
#define PROTO_3762_DEV_TYPE_COLLECTOR_2        (1 << 4)
 | 
						|
/* collector I */
 | 
						|
#define PROTO_3762_DEV_TYPE_COLLECTOR_1        (1 << 5)
 | 
						|
/* tsfm detector */
 | 
						|
#define PROTO_3762_DEV_TYPE_TSFM_DETECTOR      (1 << 6)
 | 
						|
/* bimodule */
 | 
						|
#define PROTO_3762_DEV_TYPE_BIMODULE           (1 << 7)
 | 
						|
/* 485 meter */
 | 
						|
#define PROTO_3762_DEV_TYPE_485_METER          (1 << 8)
 | 
						|
/* three phase power meter */
 | 
						|
#define PROTO_3762_DEV_TYPE_POWER_METER_3P     (1 << 9)
 | 
						|
 | 
						|
/* station dynamic state change type define in sx protocol */
 | 
						|
#define PROTO_3762_STATE_OFFLINE_TO_ONLINE (0)
 | 
						|
#define PROTO_3762_STATE_ONLINE_TO_OFFLINE (1)
 | 
						|
 | 
						|
/* alternate response 03hf1 with month and without month count */
 | 
						|
#define PROTO_3762_ALTERNATE_RSP_03HF1_CNT                3
 | 
						|
 | 
						|
/* module id type */
 | 
						|
#define PROTO_3762_MODULE_ID_TYPE_COMBINATION             0
 | 
						|
#define PROTO_3762_MODULE_ID_TYPE_BCD                     1
 | 
						|
#define PROTO_3762_MODULE_ID_TYPE_BIN                     2
 | 
						|
#define PROTO_3762_MODULE_ID_TYPE_ASCII                   3
 | 
						|
 | 
						|
/* module device type */
 | 
						|
#define PROTO_3762_MODULE_DEV_TYPE_METER                  0
 | 
						|
#define PROTO_3762_MODULE_DEV_TYPE_COLLECTOR              1
 | 
						|
#define PROTO_3762_MODULE_DEV_TYPE_UNKNOWN                15
 | 
						|
 | 
						|
/* module id information length */
 | 
						|
#define PROTO_3762_MODULE_ID_INFO_LEN                     (11)
 | 
						|
#define PROTO_3762_CHIP_ID_INFO_LEN                       (24)
 | 
						|
 | 
						|
/* id information type */
 | 
						|
#define PROTO_3762_ID_INFO_TYPE_CHIP                      1
 | 
						|
#define PROTO_3762_ID_INFO_TYPE_MOD                       2
 | 
						|
 | 
						|
/* node device type for 10H_F40 */
 | 
						|
#define PROTO_3762_NODE_DEV_TYPE_METER_CONTROLLER         1
 | 
						|
#define PROTO_3762_NODE_DEV_TYPE_CONCENTRATOR             2
 | 
						|
#define PROTO_3762_NODE_DEV_TYPE_POWER_METER              3
 | 
						|
#define PROTO_3762_NODE_DEV_TYPE_REPEATER                 4
 | 
						|
#define PROTO_3762_NODE_DEV_TYPE_COLLECTOR_2              5
 | 
						|
#define PROTO_3762_NODE_DEV_TYPE_COLLECTOR_1              6
 | 
						|
 | 
						|
/* event type for other */
 | 
						|
#define PROTO_3762_EVENT_NORMAL                           (0)
 | 
						|
#define PROTO_3762_EVENT_POWER_DOWN                       (1)
 | 
						|
#define PROTO_3762_EVENT_POWER_UP                         (2)
 | 
						|
#define PROTO_3762_EVENT_POWER_DOWN_C                     (3)
 | 
						|
#define PROTO_3762_EVENT_POWER_UP_C                       (4)
 | 
						|
 | 
						|
/* channel feature */
 | 
						|
/* 1 phase power supply, 1 logical channel. */
 | 
						|
#define PROTO_3762_PM_CH_FR_1PWR_1CH                      1
 | 
						|
/* 1 phase power supply, 2 logical channel. */
 | 
						|
#define PROTO_3762_PM_CH_FR_1PWR_2CH                      2
 | 
						|
/* 1 phase power supply, 3 logical channel. */
 | 
						|
#define PROTO_3762_PM_CH_FR_1PWR_3CH                      3
 | 
						|
/* 3 phase power supply, 3 logical channel. */
 | 
						|
#define PROTO_3762_PM_CH_FR_3PWR_3CH                      4
 | 
						|
 | 
						|
/* max report node count */
 | 
						|
#define PROTO_3762_MAX_RPT_NODE_CNT                       64
 | 
						|
#define PROTO_3762_MODULE_ID_RPT_MAX_CNT                  32
 | 
						|
#define PROTO_3762_TOPO_RPT_MAX_CNT                       64
 | 
						|
 | 
						|
/* max report topo info node count of sxhw and hx */
 | 
						|
#define PROTO_3762_TOPO_RPT_MAX_CNT_SXHW_AND_HX           36
 | 
						|
/* signal attenuation invalid value of sxhw */
 | 
						|
#define PROTO_3762_INVALID_ATT_VALUE_SXHW                 127
 | 
						|
/* max set blacklist count */
 | 
						|
#define PROTO_3762_BL_KICKOUT_METER_CNT                   36
 | 
						|
/* max set vendor device sn length of sxhw */
 | 
						|
#define PROTE_3762_VENDOR_DEVICE_SN_LEN_MAX               32
 | 
						|
 | 
						|
/* CJ/T 188-2004 mac address length */
 | 
						|
#define PROTO_3762_188_ADDR_LEN                           7
 | 
						|
 | 
						|
/* meter time length */
 | 
						|
#define PROTO_3762_188_METER_TIME_LEN                     6
 | 
						|
 | 
						|
/* meter accumulative value length */
 | 
						|
#define PROTO_3762_188_METER_ACC_VAL_LEN                  4
 | 
						|
 | 
						|
/* transformer detect timeout for beijing, unit is 1s */
 | 
						|
#define PROTO_3762_TSFM_DETECT_TIMEOUT_BEIJING            (6 * 60 * 60)
 | 
						|
 | 
						|
/* set tsfm addr command type */
 | 
						|
#define PROTO_3762_TSFM_ADDR_CMD_SET                      0
 | 
						|
#define PROTO_3762_TSFM_ADDR_CMD_DEL                      1
 | 
						|
 | 
						|
/* secondary node network lock command type */
 | 
						|
#define PROTO_3762_SEC_NODE_NW_CMD_LOCK                   0
 | 
						|
#define PROTO_3762_SEC_NODE_NW_CMD_UNLOCK                 1
 | 
						|
 | 
						|
/* whole network set mode */
 | 
						|
#define PROTO_3762_NW_SET_MODE_SINGLE                     (0x00)
 | 
						|
#define PROTO_3762_NW_SET_MODE_ALL                        (0x01)
 | 
						|
 | 
						|
/* firmware sha1 check code value length */
 | 
						|
#define PROTO_3762_SHA1_CHECK_LEN                         (20)
 | 
						|
 | 
						|
#define PRPTO_3762_ZHHW_AUTO_REG_ACTIVE_WHITELIST         (0x5A)
 | 
						|
#define PRPTO_3762_ZHHW_AUTO_REG_ACTIVE                   (0x5F)
 | 
						|
 | 
						|
/* sta collect parameter v2.8 task configuration result */
 | 
						|
#define PRPTO_3762_CURVE_DATA_RET_SUCCESS                 (0)
 | 
						|
#define PRPTO_3762_CURVE_DATA_RET_TASK_NO_EXIST           (1)
 | 
						|
#define PRPTO_3762_CURVE_DATA_RET_REPEAT                  (2)
 | 
						|
#define PRPTO_3762_CURVE_DATA_RET_PROTO_INVALID           (3)
 | 
						|
#define PRPTO_3762_CURVE_DATA_RET_TASK_ERROR              (4)
 | 
						|
#define PRPTO_3762_CURVE_DATA_RET_CONF_DATA_ERROR         (5)
 | 
						|
 | 
						|
/* sta collect parameter v2.8 task configuration node addr result */
 | 
						|
#define PRPTO_3762_CURVE_DATA_NODE_RET_SUCCESS            (0)
 | 
						|
#define PRPTO_3762_CURVE_DATA_NODE_RET_TASK_INVALID       (1)
 | 
						|
#define PRPTO_3762_CURVE_DATA_NODE_RET_ADDR_INVALID       (2)
 | 
						|
 | 
						|
/* sta collect parameter v2.8 task max task id */
 | 
						|
#define PRPTO_3762_CURVE_DATA_MAX_TASK_ID                 (7)
 | 
						|
#define PRPTO_3762_CURVE_DATA_ALL_TASK_ID                 (0xFF)
 | 
						|
 | 
						|
/* flag of minute collection config for v2.8-2 */
 | 
						|
#define PRPTO_3762_MIN_CLCT_RPT_CFG_FLAG_INVALID          (0)
 | 
						|
#define PRPTO_3762_MIN_CLCT_RPT_CFG_FLAG_VALID            (1)
 | 
						|
 | 
						|
/* minute collection config state for v2.8-2 */
 | 
						|
#define PRPTO_3762_MIN_CLCT_CFG_SUCCESS                   (0)
 | 
						|
#define PRPTO_3762_MIN_CLCT_CFG_FAIL                      (1)
 | 
						|
 | 
						|
/* set force link type for 3762 */
 | 
						|
#define PROTO_3762_FORCE_LINK_TYPE_MIX                    (0)
 | 
						|
#define PROTO_3762_FORCE_LINK_TYPE_HPLC                   (1)
 | 
						|
#define PROTO_3762_FORCE_LINK_TYPE_RF                     (2)
 | 
						|
 | 
						|
typedef struct _module_hw_info {
 | 
						|
    uint16_t        vendor_id;          /* manufacture code */
 | 
						|
    uint16_t        chip_code;          /* chip code */
 | 
						|
    uint8_t         day;                /* day in BCD */
 | 
						|
    uint8_t         month;              /* month in BCD */
 | 
						|
    uint8_t         year;               /* year in BCD */
 | 
						|
    uint8_t         version[2];         /* version in BCD */
 | 
						|
}mod_hw_info_t;
 | 
						|
 | 
						|
typedef struct _module_hw_info_without_month {
 | 
						|
    uint16_t        vendor_id;          /* manufacture code */
 | 
						|
    uint16_t        chip_code;          /* chip code */
 | 
						|
    uint8_t         day;                /* day in BCD */
 | 
						|
    uint8_t         year;               /* year in BCD */
 | 
						|
    uint8_t         version[2];         /* version in BCD */
 | 
						|
}mod_hw_info_without_month_t;
 | 
						|
 | 
						|
typedef struct _proto_3762_ctrl {
 | 
						|
    uint8_t phy_type : 6;   /* bit 0 - bit 5 */
 | 
						|
    uint8_t prm : 1;        /* bit 6 */
 | 
						|
    uint8_t dir : 1;        /* bit 7 */
 | 
						|
}proto_3762_ctrl_t;
 | 
						|
 | 
						|
/* fixed resource info field for down link */
 | 
						|
typedef struct _info_dl {
 | 
						|
    /* byte 1 */
 | 
						|
    uint8_t     route_flag : 1;     /* bit0: 0 - has route module; */
 | 
						|
    uint8_t     has_sub_node : 1;   /* bit1 */
 | 
						|
    uint8_t     comm_module : 1;    /* bit2: 0 - concentrator; 1 - meter */
 | 
						|
    uint8_t     conflict_detect : 1;/* bit3: conflict detect flag*/
 | 
						|
    uint8_t     rpter_level : 4;    /* bit4 - bit 7: level of repeater */
 | 
						|
 | 
						|
                                    /* byte 2 */
 | 
						|
    uint8_t     channel_id : 4;     /* bit0 - bit3 */
 | 
						|
    uint8_t     ecc_type : 4;       /* bit4 - bit7: error correcting code type
 | 
						|
                                    0 - no coding; 1 - RS coding*/
 | 
						|
 | 
						|
                                    /* byte 3 */
 | 
						|
    uint8_t     rsp_len;            /* estimated length of response */
 | 
						|
 | 
						|
                                    /* byte 4-5 */
 | 
						|
    uint16_t    baud_rate : 15;     /* bit0 - bit14*/
 | 
						|
    uint16_t    rate_unit : 1;      /* bit15: 0 - bps; 1 - kbps */
 | 
						|
 | 
						|
                                    /* byte 6 */
 | 
						|
    uint8_t     sn;                 /* sequence number for this packet*/
 | 
						|
}dl_info_t;
 | 
						|
 | 
						|
/* fixed resource info field for up link */
 | 
						|
typedef struct _info_ul {
 | 
						|
    /* byte 1 */
 | 
						|
    uint8_t     route_flag : 1;     /* bit0: 0 - has route module; */
 | 
						|
    uint8_t     dummy1 : 1;         /* bit1: dummy */
 | 
						|
    uint8_t     comm_module : 1;    /* bit2: 0 - concentrator; 1 - meter */
 | 
						|
    uint8_t     dummy2 : 1;         /* bit3: dummy */
 | 
						|
    uint8_t     rpter_level : 4;    /* bit4 - bit7: level of repeater */
 | 
						|
 | 
						|
                                    /* byte 2 */
 | 
						|
    uint8_t     channel_id : 4;     /* bit0 - bit3 */
 | 
						|
    uint8_t     dummy3 : 4;         /* bit4 - bit7: dummy */
 | 
						|
 | 
						|
                                    /* byte 3 */
 | 
						|
    uint8_t     phy_phase : 4;      /* bit0 - bit3: physical phase */
 | 
						|
    uint8_t     meter_ch_ftr : 4;   /* bit4 - bit7: meter channel feature */
 | 
						|
 | 
						|
                                    /* byte 4 */
 | 
						|
    uint8_t     cmd_snr : 4;        /* bit0 - bit3 */
 | 
						|
    uint8_t     rsp_snr : 4;        /* bit4 - bit7 */
 | 
						|
 | 
						|
                                    /* byte 5 */
 | 
						|
    uint8_t     event_flag  : 1;    /* bit0 */
 | 
						|
    uint8_t     line_flag   : 1;    /* bit1 */
 | 
						|
    uint8_t     tsfm_status : 3;    /* bit2 - bit4: transformer's status */
 | 
						|
    uint8_t     reserved    : 3;    /* bit5 - bit7: reserved */
 | 
						|
 | 
						|
    uint8_t     sn;                 /* sequence number for the packet */
 | 
						|
}ul_info_t;
 | 
						|
 | 
						|
/* structure of 376.2 frame
 | 
						|
 -------------
 | 
						|
 |----68H----|  start of frame, 0x68
 | 
						|
 |----Len----|  2 byte for 376.2-2009, 2 byte for 376.2-2013
 | 
						|
 |----Ctrl---|  1 byte of control
 | 
						|
 |----Data---|  data. length is variable
 | 
						|
 |----CS-----|  checksum
 | 
						|
 |----16H----|  end of frame, 0x16
 | 
						|
 -------------
 | 
						|
 */
 | 
						|
 | 
						|
typedef struct _user_data {
 | 
						|
    union info {
 | 
						|
        dl_info_t   dl_info;
 | 
						|
        ul_info_t   ul_info;
 | 
						|
    }res;
 | 
						|
    uint8_t         data[0];
 | 
						|
}user_data_t;
 | 
						|
 | 
						|
typedef struct _pkt_3762_hdr {
 | 
						|
    uint8_t           sof_byte;
 | 
						|
    uint16_t          len;
 | 
						|
    proto_3762_ctrl_t ctrl_byte;
 | 
						|
    user_data_t       user_data;
 | 
						|
} pkt_3762_hdr_t;
 | 
						|
 | 
						|
typedef struct _proto_3762_app_data {
 | 
						|
    uint8_t         afn;
 | 
						|
    uint16_t        fn;
 | 
						|
    uint8_t         data[0];
 | 
						|
} proto_3762_app_data_t;
 | 
						|
 | 
						|
/* data struct for AFN 00 */
 | 
						|
typedef struct _afn00_fn01_conf_09 {
 | 
						|
    /* 0 - cmd NOT handled. 1 - cmd handled. */
 | 
						|
    uint16_t        cmd_state : 1;
 | 
						|
    /* 0 - channel is busy. 1 - idle */
 | 
						|
    uint16_t        ch1_state : 1;
 | 
						|
    uint16_t        ch2_state : 1;
 | 
						|
    uint16_t        ch3_state : 1;
 | 
						|
    uint16_t        ch4_state : 1;
 | 
						|
    uint16_t        ch5_state : 1;
 | 
						|
    uint16_t        ch6_state : 1;
 | 
						|
    uint16_t        ch7_state : 1;
 | 
						|
    uint16_t        ch8_state : 1;
 | 
						|
    uint16_t        ch9_state : 1;
 | 
						|
    uint16_t        ch10_state : 1;
 | 
						|
    uint16_t        ch11_state : 1;
 | 
						|
    uint16_t        ch12_state : 1;
 | 
						|
    uint16_t        ch13_state : 1;
 | 
						|
    uint16_t        ch14_state : 1;
 | 
						|
    uint16_t        ch15_state : 1;
 | 
						|
 | 
						|
    /* wait timeout limit in second */
 | 
						|
    uint16_t        wait_duration;
 | 
						|
}afn00_fn01_conf_09_t;
 | 
						|
 | 
						|
 | 
						|
/* data struct for AFN 00 */
 | 
						|
typedef struct _afn00_fn01_conf_13 {
 | 
						|
    /* 0 - cmd NOT handled. 1 - cmd handled. */
 | 
						|
    uint16_t        cmd_state : 1;
 | 
						|
    /* 0 - channel is busy. 1 - idle */
 | 
						|
    uint16_t        ch1_state : 1;
 | 
						|
    uint16_t        ch2_state : 1;
 | 
						|
    uint16_t        ch3_state : 1;
 | 
						|
    uint16_t        ch4_state : 1;
 | 
						|
    uint16_t        ch5_state : 1;
 | 
						|
    uint16_t        ch6_state : 1;
 | 
						|
    uint16_t        ch7_state : 1;
 | 
						|
    uint16_t        ch8_state : 1;
 | 
						|
    uint16_t        ch9_state : 1;
 | 
						|
    uint16_t        ch10_state : 1;
 | 
						|
    uint16_t        ch11_state : 1;
 | 
						|
    uint16_t        ch12_state : 1;
 | 
						|
    uint16_t        ch13_state : 1;
 | 
						|
    uint16_t        ch14_state : 1;
 | 
						|
    uint16_t        ch15_state : 1;
 | 
						|
 | 
						|
    uint16_t        reserved;
 | 
						|
    /* wait timeout limit in second */
 | 
						|
    uint16_t        wait_duration;
 | 
						|
}afn00_fn01_conf_13_t;
 | 
						|
 | 
						|
/* error no for reject packet */
 | 
						|
#define COMM_TIMEOUT                0
 | 
						|
#define INVALID_DATA                1
 | 
						|
#define INVALID_DATA_LEN            2
 | 
						|
#define VALIDATE_FAILED             3
 | 
						|
#define INFO_TYPE_NOT_EXIST         4
 | 
						|
#define INVALID_FORMAT              5
 | 
						|
#define METER_NO_DUPLICATED         6
 | 
						|
#define METER_NO_NOT_EXIST          7
 | 
						|
#define METER_APP_NO_RSP            8
 | 
						|
#define MASTER_IS_BUSY              9
 | 
						|
#define MASTER_UNSUPPORTED_CMD      10
 | 
						|
#define SLAVE_NO_RSP                11
 | 
						|
#define SLAVE_NOT_IN_NW             12
 | 
						|
#define EXCEED_MAX_CONCURRENT_COUNT 109
 | 
						|
#define EXCEED_MAX_PKT_COUNT        110
 | 
						|
#define METER_ALREADY_EXIST         111
 | 
						|
 | 
						|
#define PROTO_TYPE_RAW_DATA         (0x00)  /* transparent transmission */
 | 
						|
#define PROTO_TYPE_645_1997         (0x01)  /* 645 protocol, version 1997 */
 | 
						|
#define PROTO_TYPE_645_2007         (0x02)  /* 645 protocol, version 2007 */
 | 
						|
#define PROTO_TYPE_698_45           (0x03)  /* 698.45 protocol */
 | 
						|
#define PROTO_TYPE_POWER_EVT        (0x04)  /* power down and power up event */
 | 
						|
#define PROTO_TYPE_RPT_MOD_WM       (0x04)  /* report model water meter */
 | 
						|
#define PROTO_TYPE_MR_MOD_WM        (0x05)  /* real-time MR model water meter */
 | 
						|
#define PROTO_TYPE_GAS_METER        (0x06)  /* gas meter */
 | 
						|
#define PROTO_TYPE_HEAT_METER       (0x07)  /* heat meter */
 | 
						|
#define PROTO_TYPE_RSVD             (0xFF)  /* reserved */
 | 
						|
 | 
						|
/* route type: local module does not support route management */
 | 
						|
#define RT_TYPE_LOCAL_NO_ROUTE_MNGT 0
 | 
						|
/* route type: local module support route management */
 | 
						|
#define RT_TYPE_LOCAL_ROUTE_MNGT    1
 | 
						|
 | 
						|
/* don't distribute slave info */
 | 
						|
#define SLAVE_INFO_NO_DISTRUBITE    0
 | 
						|
/* distribute slave info */
 | 
						|
#define SLAVE_INFO_DISTRUBITE       1
 | 
						|
 | 
						|
/* type of meter checking period */
 | 
						|
#define CHECK_PERIOD_CNCENTR        1
 | 
						|
#define CHECK_PERIOD_ROUTER         2
 | 
						|
#define CHECK_PERIOD_BOTH           3
 | 
						|
 | 
						|
/* uart baud rate number */
 | 
						|
#define PROTO_3762_UART_BAUD_NUM_9600    (0)
 | 
						|
#define PROTO_3762_UART_BAUD_NUM_19200   (1)
 | 
						|
#define PROTO_3762_UART_BAUD_NUM_38400   (2)
 | 
						|
#define PROTO_3762_UART_BAUD_NUM_57600   (3)
 | 
						|
#define PROTO_3762_UART_BAUD_NUM_115200  (4)
 | 
						|
 | 
						|
/* data struct for AFN 02, fn 01. It's for both up link and down link */
 | 
						|
typedef struct _afn02_fn01_data_fwd {
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint8_t         len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afn02_fn01_data_fwd_t;
 | 
						|
 | 
						|
typedef struct _afn02_fn02_data_fwd {
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint16_t        len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afn02_fn02_data_fwd_t;
 | 
						|
 | 
						|
typedef struct _afn00_fn02_reject {
 | 
						|
    uint8_t         err_no;
 | 
						|
}afn00_fn02_reject_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn01_hw_info_without_month {
 | 
						|
    mod_hw_info_without_month_t info;
 | 
						|
}afn03_fn01_hw_info_without_month_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn01_hw_info {
 | 
						|
    mod_hw_info_t info;
 | 
						|
}afn03_fn01_hw_info_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn02_noise {
 | 
						|
    uint8_t         noise : 4;          /* noise level. 0 - 15 */
 | 
						|
    uint8_t         reserved : 4;
 | 
						|
}afn03_fn02_noise_t;
 | 
						|
 | 
						|
/* data struct for AFN 03 */
 | 
						|
typedef struct _afn03_fn03_slave_listen_info_req {
 | 
						|
    uint8_t         start_index;
 | 
						|
    uint8_t         node_count;
 | 
						|
}afn03_fn03_slave_listen_info_req_t;
 | 
						|
 | 
						|
typedef struct _slave_listen_info {
 | 
						|
    uint8_t         mac[PROTO_3762_MAC_ADDR_LEN];
 | 
						|
    uint8_t         repeater_level : 5;
 | 
						|
    uint8_t         signal_level : 3;
 | 
						|
    uint8_t         listen_count : 5;
 | 
						|
    uint8_t         reserved : 3;
 | 
						|
}slave_info_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn03_slave_listen_info_rsp {
 | 
						|
    uint8_t         slave_count;
 | 
						|
    uint8_t         listend_slave_count;
 | 
						|
    slave_info_t    info[0];
 | 
						|
}afn03_fn03_slave_listen_info_rsp_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn04_cco_mac {
 | 
						|
    uint8_t         cco_mac[IOT_MAC_ADDR_LEN];
 | 
						|
}afn03_fn04_cco_mac_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn08_info_wf {
 | 
						|
    uint8_t         channel_group;
 | 
						|
    uint8_t         trans_power;
 | 
						|
}afn03_fn08_info_wf_t;
 | 
						|
 | 
						|
typedef struct _data_rate {
 | 
						|
    uint16_t    rate : 15;
 | 
						|
    uint16_t    unit : 1;
 | 
						|
}data_rate_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn05_module_status_baudrate {
 | 
						|
    /* byte 1 */
 | 
						|
    uint8_t         baudrate_num : 4;
 | 
						|
    uint8_t         cco_channel_type : 2;
 | 
						|
    uint8_t         check_period_type : 2;
 | 
						|
 | 
						|
    /* byte 2 */
 | 
						|
    uint8_t         channel_count : 4;
 | 
						|
    uint8_t         reserved : 4;
 | 
						|
 | 
						|
    data_rate_t     data_rate;    /*here we only support one rate*/
 | 
						|
}afn03_fn05_module_status_baudrate_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn06_master_interfere {
 | 
						|
    uint8_t         duration;
 | 
						|
}afn03_fn06_master_interfere_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn08_wireless_param {
 | 
						|
    uint8_t         channel_id;
 | 
						|
    uint8_t         transmit_power;
 | 
						|
}afn03_fn08_wireless_param_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn09_data_len_query_dl {
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint8_t         frame_len;
 | 
						|
    uint8_t         frame_data[0];
 | 
						|
}afn03_fn09_data_len_query_dl_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn09_data_len_query_ul {
 | 
						|
    uint16_t        bacast_delay_time;
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint8_t         frame_len;
 | 
						|
    uint8_t         frame_data[0];
 | 
						|
}afn03_fn09_data_len_query_ul_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn10_module_work_mode {
 | 
						|
    uint8_t         phy_type : 4;
 | 
						|
    uint8_t         route_type : 1;
 | 
						|
    uint8_t         sec_node_info_type : 1;
 | 
						|
    uint8_t         meter_read_mode : 2;
 | 
						|
 | 
						|
    uint8_t         defer_send_support : 3;
 | 
						|
    uint8_t         failed_node_switch : 2;
 | 
						|
    uint8_t         bcast_cmd_ack_type : 1;
 | 
						|
    uint8_t         bcast_cmd_exe_type : 2;
 | 
						|
 | 
						|
    uint8_t         ch_count : 5;
 | 
						|
    uint8_t         low_vol_grid_failed : 3;
 | 
						|
 | 
						|
    uint8_t         rate_count      : 4,
 | 
						|
    /* minute collect flag for jiangsu  */
 | 
						|
                    js_minute_clct  : 1,
 | 
						|
    /* gw v2.8 minute collect flag */
 | 
						|
                    v28_minute_clct : 1,
 | 
						|
                    reserved1       : 2;
 | 
						|
 | 
						|
    uint16_t        reserved2;
 | 
						|
 | 
						|
    /* should be 1 byte which is different with 13 spec */
 | 
						|
    uint8_t         node_monitor_max_dur;
 | 
						|
    uint16_t        bcast_cmd_max_dur;
 | 
						|
    uint16_t        datagram_mtu;
 | 
						|
    uint16_t        file_send_mtu;
 | 
						|
    uint8_t         upgrade_wait_dur;
 | 
						|
 | 
						|
    uint8_t         cco_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint16_t        sec_node_cnt_max;
 | 
						|
    uint16_t        sec_node_cnt;
 | 
						|
    uint8_t         proto_rel_date[3];
 | 
						|
    uint8_t         proto_file_date[3];
 | 
						|
    mod_hw_info_t   hw_info;
 | 
						|
    data_rate_t     data_rate[0];
 | 
						|
}afn03_fn10_mod_work_mode_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn11_afn_query_dl {
 | 
						|
    uint8_t         afn_index;
 | 
						|
}afn03_fn11_afn_query_dl_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn11_afn_query_ul {
 | 
						|
    uint8_t         afn_index;
 | 
						|
    uint8_t         fn_buf[PROTO_3762_03F11_FNLEN];
 | 
						|
}afn03_fn11_afn_query_ul_t;
 | 
						|
 | 
						|
/* chip id information */
 | 
						|
typedef struct _proto_3762_chip_id {
 | 
						|
    /* check code */
 | 
						|
    uint8_t         check_code[PROTO_3762_CHIP_ID_CRC_LEN];
 | 
						|
    /* device serial */
 | 
						|
    uint8_t         dev_code[PROTO_3762_CHIP_ID_SERIAL_NUM_LEN];
 | 
						|
    /* chip mode */
 | 
						|
    uint16_t        chip_mode;
 | 
						|
    /* 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;
 | 
						|
} proto_3762_chip_id_t;
 | 
						|
 | 
						|
typedef struct _proto_3762_module_info {
 | 
						|
    /* module manufacture code */
 | 
						|
    uint16_t        module_mf_code;
 | 
						|
    /* module id length */
 | 
						|
    uint8_t         module_id_len;
 | 
						|
    /* module id type, see PROTO_3762_MODULE_ID_TYPE_XXX */
 | 
						|
    uint8_t         module_id_type;
 | 
						|
    /* module id information */
 | 
						|
    //uint8_t       module_id_info[0];
 | 
						|
} proto_3762_module_info_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn12_main_node_query_ul {
 | 
						|
    proto_3762_module_info_t info;
 | 
						|
}afn03_fn12_main_node_query_ul_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn16_query_freq_band {
 | 
						|
    uint8_t         freq_band;
 | 
						|
}afn03_fn16_query_freq_band_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn17_query_rf_channel {
 | 
						|
    /* rf option */
 | 
						|
    uint8_t              option;
 | 
						|
    /* rf channel */
 | 
						|
    uint8_t              channel;
 | 
						|
    /* flag to mark if enable rf channel coordination */
 | 
						|
    uint8_t              rf_cod_enable;
 | 
						|
}afn03_fn17_query_rf_channel_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn17_query_vendor_device_sn_ul {
 | 
						|
    /* vendor device sn length, max length is 32 */
 | 
						|
    uint8_t          sn_len;
 | 
						|
    /* vendor device sn info */
 | 
						|
    uint8_t          vendor_device_sn[0];
 | 
						|
}afn03_fn17_query_vendor_device_sn_ul_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn18_query_force_link_type_ul {
 | 
						|
    /* force link type, 0 - defaule, 1 - force hplc, 2 - force rf */
 | 
						|
    uint8_t          link_type;
 | 
						|
}afn03_fn18_query_force_link_type_ul_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn21_query_node_info_dl {
 | 
						|
    /* node address, little-endian */
 | 
						|
    uint8_t         addr[IOT_MAC_ADDR_LEN];
 | 
						|
}afn03_fn21_query_node_info_dl_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn21_query_node_info_ul {
 | 
						|
    /* node information */
 | 
						|
    mod_hw_info_t   info;
 | 
						|
}afn03_fn21_query_node_info_ul_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn30_query_lock_time_ul {
 | 
						|
    /* net lock time, uint is 1min. 0 means no lock. */
 | 
						|
    uint16_t              net_lock_time;
 | 
						|
    /* the lock time of abnormal leave net, uint is 1min. 0 means no lock. */
 | 
						|
    uint16_t              abn_lock_time;
 | 
						|
} afn03_fn30_query_lock_time_ul;
 | 
						|
 | 
						|
typedef struct _afn03_fn56_query_uart_conf_ul {
 | 
						|
    /* uart config baud rate type */
 | 
						|
    uint8_t               baud;
 | 
						|
    /* uart config max baud rate */
 | 
						|
    uint8_t               max_baud;
 | 
						|
    /* auto recover default baud rate time, unit is 1min */
 | 
						|
    uint16_t              rec_time;
 | 
						|
} afn_03_fn56_query_uart_conf_ul_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn112_query_chip_info_dl {
 | 
						|
    /* start index, 1 means major node */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* query count */
 | 
						|
    uint8_t               node_count;
 | 
						|
} afn03_fn112_query_chip_info_dl_t;
 | 
						|
 | 
						|
/* node hardware information */
 | 
						|
typedef struct _node_hw_info {
 | 
						|
    /* mac address, little endian */
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* device type, see IOT_PLC_DEV_TYPE_XXX */
 | 
						|
    uint8_t               dev_type;
 | 
						|
    /* chip id information */
 | 
						|
    proto_3762_chip_id_t  chip_id;
 | 
						|
    /* software version */
 | 
						|
    uint16_t              sw_version;
 | 
						|
} node_hw_info_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn112_query_chip_info_ul {
 | 
						|
    /* total count */
 | 
						|
    uint16_t              total_node_cnt;
 | 
						|
    /* start index */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* report count */
 | 
						|
    uint8_t               ack_node_count;
 | 
						|
    /* node information */
 | 
						|
    node_hw_info_t        node_info[0];
 | 
						|
} afn03_fn112_query_chip_info_ul_t;
 | 
						|
 | 
						|
typedef struct _afn04_fn03_comm_test {
 | 
						|
    uint8_t         rate_test;
 | 
						|
    uint8_t         mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint8_t         data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afn04_fn03_comm_test_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn01_set_master_address_req {
 | 
						|
    uint8_t         mac[PROTO_3762_MAC_ADDR_LEN];
 | 
						|
}afn05_fn01_set_master_address_req_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn02_set_sec_node_rpt {
 | 
						|
    uint8_t     rpt_allowed;
 | 
						|
}afn05_fn02_set_sec_node_rpt_t;
 | 
						|
 | 
						|
typedef struct _datagram {
 | 
						|
    uint8_t     data_len;
 | 
						|
    uint8_t     data[0];
 | 
						|
}datagram_t;
 | 
						|
 | 
						|
typedef struct _datagram2 {
 | 
						|
    uint16_t    data_len;
 | 
						|
    uint8_t     data[0];
 | 
						|
}datagram2_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn03_start_broadcast_req {
 | 
						|
    uint8_t     proto_type;
 | 
						|
    datagram_t  datagram;               /* datagram to be broad cast */
 | 
						|
}afn05_fn03_start_broadcast_req_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn03_start_broadcast_req_zhhw {
 | 
						|
    uint8_t     proto_type;
 | 
						|
    datagram2_t datagram;               /* datagram to be broad cast */
 | 
						|
}afn05_fn03_start_broadcast_req_zhhw_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn04_set_sec_node_max_dur {
 | 
						|
    uint8_t              max_dur;
 | 
						|
}afn05_fn04_set_sec_node_max_dur_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn04_set_auto_reg_active {
 | 
						|
    /* 0x5A - whitelist model,
 | 
						|
     * 0x5F and others - auto register active model(default)
 | 
						|
     * see PRPTO_3762_ZHHW_AUTO_REG_ACTIVE_XXX.
 | 
						|
     */
 | 
						|
    uint8_t              auto_reg_active;
 | 
						|
}afn05_fn04_set_auto_reg_active_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn06_tsfm_detect {
 | 
						|
    /* 0 - disable, 1 - enable */
 | 
						|
    uint8_t              enabled;
 | 
						|
}afn05_fn06_tsfm_detect_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn10_set_serial_comm_rate {
 | 
						|
    /* serial communication rate number, see PROTO_3762_UART_BAUD_NUM_XXXX */
 | 
						|
    uint8_t              comm_rate_num;
 | 
						|
} afn05_fn10_set_serial_rate_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn16_set_carrier_comm_para {
 | 
						|
    uint8_t              freq_band;
 | 
						|
}afn05_fn16_set_carrier_comm_para_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn17_set_rf_band {
 | 
						|
    /* rf option */
 | 
						|
    uint8_t              option;
 | 
						|
    /* rf channel */
 | 
						|
    uint8_t              channel;
 | 
						|
    /* flag to mark if enable rf channel coordination */
 | 
						|
    uint8_t              rf_cod_enable;
 | 
						|
} afn05_fn17_set_rf_band_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn18_set_force_link_type {
 | 
						|
    /* force link type, 0 - defaule, 1 - force hplc, 2 - force rf */
 | 
						|
    uint8_t               link_type;
 | 
						|
} afn05_fn18_set_force_link_type_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn18_bl_kickout_meter {
 | 
						|
    /* node count */
 | 
						|
    uint8_t              node_count;
 | 
						|
    /* node mac */
 | 
						|
    uint8_t              node_mac[0][IOT_MAC_ADDR_LEN];
 | 
						|
} afn05_fn18_bl_kickout_meter_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn19_set_vendor_device_sn_info {
 | 
						|
    /* sxhw vendor device sn length */
 | 
						|
    uint8_t              vendor_device_sn_len;
 | 
						|
    /* sxhw vendor device sn info */
 | 
						|
    uint8_t              vendor_device_sn_info[0];
 | 
						|
} afn05_fn19_set_vendor_device_sn_info_t;
 | 
						|
 | 
						|
/* transformer detect set lock time for zhejiang */
 | 
						|
typedef struct _afn05_fn30_tsfm_detect_lock_set {
 | 
						|
    /* net lock time, uint is 1min.
 | 
						|
     * 0 means no lock.
 | 
						|
     */
 | 
						|
    uint16_t    net_lock_time;
 | 
						|
    /* the lock time of abnormal leave net, uint is 1min.
 | 
						|
     * 0 means no lock.
 | 
						|
     */
 | 
						|
    uint16_t    abn_lock_time;
 | 
						|
} afn05_fn30_tsfm_detect_lock_set_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn80_set_force_link_type {
 | 
						|
    /* link communication type, see PROTO_3762_FORCE_LINK_TYPE_XXX */
 | 
						|
    uint8_t             link_type;
 | 
						|
} afn05_fn80_set_force_link_type_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn81_set_rf_band {
 | 
						|
    /* rf option */
 | 
						|
    uint8_t             option;
 | 
						|
    /* rf channel */
 | 
						|
    uint8_t             channel;
 | 
						|
} afn05_fn81_set_rf_band_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn90_clock_manager_set {
 | 
						|
    /* node addr, little endian */
 | 
						|
    uint8_t             mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* cmd type, 1 - auto correct time */
 | 
						|
    uint8_t             cmd_type;
 | 
						|
    /* cmd state, 0 - disable, 1 - enable */
 | 
						|
    uint8_t             cmd_state;
 | 
						|
} afn05_fn90_clock_manager_set_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn92_accurate_correct_time {
 | 
						|
    /* node addr, little endian */
 | 
						|
    uint8_t             mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* data len */
 | 
						|
    uint16_t            data_len;
 | 
						|
    /* data */
 | 
						|
    uint8_t             data[0];
 | 
						|
} afn05_fn92_accurate_correct_time_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn93_set_corr_time_period {
 | 
						|
    /* clock manager correct time period, unit is 1min */
 | 
						|
    uint16_t            period;
 | 
						|
} afn05_fn93_set_corr_time_period_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn94_clock_err_threshold_set {
 | 
						|
    /* node addr, little endian */
 | 
						|
    uint8_t             mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* clock error report threshold, unit is 1min */
 | 
						|
    uint8_t             threshold;
 | 
						|
} afn05_fn94_clock_err_threshold_set_t;
 | 
						|
 | 
						|
typedef struct _afn05_fn102_correct_para {
 | 
						|
    /* broadcast period */
 | 
						|
    uint8_t             bcast_period;
 | 
						|
    /* broadcast period unit, 1 is min, 2 is hour */
 | 
						|
    uint8_t             period_unit;
 | 
						|
}afn05_fn102_correct_para_t;
 | 
						|
 | 
						|
/* di and result length */
 | 
						|
typedef struct _proto_3762_di_info {
 | 
						|
    /* di */
 | 
						|
    uint32_t            di;
 | 
						|
    /* meter reading result length */
 | 
						|
    uint8_t             di_result_len;
 | 
						|
} proto_3762_di_info_t;
 | 
						|
 | 
						|
typedef struct _proto_3762_meter_clct_param {
 | 
						|
    /* 0 - single phase meter, 1 - three phase meter */
 | 
						|
    uint8_t                 pm_type;
 | 
						|
    /* di count of single phase meter */
 | 
						|
    uint8_t                 di_cnt;
 | 
						|
    /* di result total length of single phase meter */
 | 
						|
    uint8_t                 di_result_len;
 | 
						|
    /* di information of single phase meter */
 | 
						|
    proto_3762_di_info_t    di_info[0];
 | 
						|
} proto_3762_meter_clct_param_t;
 | 
						|
 | 
						|
typedef struct _proto_3762_meter_clct_param_v28 {
 | 
						|
    /* 0 - single phase meter, 1 - three phase meter */
 | 
						|
    uint8_t                 pm_type;
 | 
						|
    /* di count of single phase meter */
 | 
						|
    uint8_t                 di_cnt;
 | 
						|
    /* di result total length of single phase meter */
 | 
						|
    uint16_t                di_result_len;
 | 
						|
    /* di information of single phase meter */
 | 
						|
    proto_3762_di_info_t    di_info[0];
 | 
						|
} proto_3762_meter_clct_param_v28_t;
 | 
						|
 | 
						|
/* sta collect parameter */
 | 
						|
typedef struct _afn05_fn103_sta_curve_data {
 | 
						|
    /* 0 - disabled, 1 - enabled */
 | 
						|
    uint8_t             enabled;
 | 
						|
    /* unit is 1min */
 | 
						|
    uint8_t             clct_period;
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t             proto_type;
 | 
						|
    /* collect parameter */
 | 
						|
    //proto_3762_meter_clct_param_t clct_param[0];
 | 
						|
} afn05_fn103_sta_curve_data_t;
 | 
						|
 | 
						|
/* configure abnormal electric current event report */
 | 
						|
typedef struct _afn05_fn104_nli_abnormal_cfg {
 | 
						|
    /* abnormal report enable flag, 0 - disable, 1 - enable */
 | 
						|
    uint8_t             enable;
 | 
						|
} afn05_fn104_nli_abnormal_cfg_t;
 | 
						|
 | 
						|
/* transformer detect for beijing */
 | 
						|
typedef struct _afn05_fn130_tsfm_detect {
 | 
						|
    /* 0 - disable, 1 - enable */
 | 
						|
    uint8_t              enabled;
 | 
						|
} afn05_fn130_tsfm_detect_t;
 | 
						|
 | 
						|
/* set whitelist state for beijing */
 | 
						|
typedef struct _afn05_fn131_set_wl_state {
 | 
						|
    /* whitelist status, 0 - disable, 1- enable */
 | 
						|
    uint8_t     wl_state;
 | 
						|
} afn05_fn131_set_wl_state_t;
 | 
						|
 | 
						|
/* new node event report */
 | 
						|
typedef struct _afn05_fn200_new_node_rpt {
 | 
						|
    uint8_t     rpt_allowed;
 | 
						|
} afn05_fn200_new_node_rpt_t;
 | 
						|
 | 
						|
/* node leave network check event report */
 | 
						|
typedef struct _afn05_fn201_leave_net_rpt {
 | 
						|
    uint8_t     rpt_allowed;
 | 
						|
} afn05_fn201_leave_net_rpt_t;
 | 
						|
 | 
						|
/* sta join certification for hunan */
 | 
						|
typedef struct _afn05_fn201_join_check {
 | 
						|
    /* sta join certification state, 0 - disable, 1 - enable */
 | 
						|
    uint8_t     check_enable;
 | 
						|
} afn05_fn201_join_check_t;
 | 
						|
 | 
						|
typedef struct _sec_node_info_0601 {
 | 
						|
    uint8_t     mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint8_t     proto_type;
 | 
						|
    uint16_t    node_index;
 | 
						|
} sec_node_info_0601_t;
 | 
						|
 | 
						|
/* data type for IOT_SG_CCO_SEC_NODE_INFO */
 | 
						|
typedef struct _afn06_fn01_sec_node_info {
 | 
						|
    uint8_t                  sec_node_count;
 | 
						|
    sec_node_info_0601_t     node_info[0];
 | 
						|
} afn06_fn01_sec_node_info_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn02_router_data_fwd_2009 {
 | 
						|
    uint16_t    node_index;
 | 
						|
    uint8_t     proto_type;
 | 
						|
    uint8_t     data_len;
 | 
						|
    uint8_t     data[0];    // data len
 | 
						|
}afn06_fn02_router_data_fwd_2009_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn02_router_data_fwd_2013 {
 | 
						|
    uint16_t    node_index;
 | 
						|
    uint8_t     proto_type;
 | 
						|
    uint16_t    comm_dur;
 | 
						|
    uint8_t     data_len;
 | 
						|
    uint8_t     data[0];    // data len
 | 
						|
}afn06_fn02_router_data_fwd_2013_t;
 | 
						|
 | 
						|
typedef struct _sec_node_son_info
 | 
						|
{
 | 
						|
    uint8_t     meter_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    uint8_t     proto_type;
 | 
						|
}sec_node_son_info_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn03_router_info
 | 
						|
{
 | 
						|
    uint8_t     mission_change;
 | 
						|
}afn06_fn03_router_info_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn04_sec_node_info {
 | 
						|
    uint8_t             sec_node_count;
 | 
						|
    uint8_t             sta_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    uint8_t             proto_type;
 | 
						|
    uint16_t            sec_node_index;
 | 
						|
    uint8_t             device_type;
 | 
						|
    uint8_t             total_child_cnt;
 | 
						|
    uint8_t             send_child_cnt;
 | 
						|
    sec_node_son_info_t node_info[0];
 | 
						|
}afn06_fn04_sec_node_info_t;
 | 
						|
 | 
						|
typedef struct _tsfm_chg_node_info {
 | 
						|
    uint8_t             addr[IOT_MAC_ADDR_LEN];
 | 
						|
    uint8_t             dev_type;
 | 
						|
} tsfm_chg_node_info_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn05_tsfm_chg_rpt {
 | 
						|
    uint8_t              cnt;
 | 
						|
    tsfm_chg_node_info_t node_info[0];
 | 
						|
} afn06_fn05_tsfm_chg_rpt_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn05_node_evt_rpt {
 | 
						|
    uint8_t             dev_type;
 | 
						|
    uint8_t             proto_type;
 | 
						|
    uint8_t             data_len;
 | 
						|
    uint8_t             data[0];
 | 
						|
}afn06_fn05_node_evt_rpt_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn08_sec_node_info {
 | 
						|
    /* registered node mac addr, little endian*/
 | 
						|
    uint8_t             mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* short addr */
 | 
						|
    uint16_t            tei;
 | 
						|
} afn06_fn08_sec_node_info_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn09_power_down_evt_rpt {
 | 
						|
    /* report power down meter count */
 | 
						|
    uint8_t             cnt;
 | 
						|
    /* power meter address, little endian */
 | 
						|
    uint8_t             mac_addr[0][IOT_MAC_ADDR_LEN];
 | 
						|
} afn06_fn09_power_down_evt_rpt_t;
 | 
						|
 | 
						|
typedef struct dynamic_state_chg_info {
 | 
						|
    /* mac address of STA */
 | 
						|
    uint8_t             mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* see PROTO_3762_STATE_XXX */
 | 
						|
    uint8_t             state_chg_type;
 | 
						|
    /* duration of STA offline, uint is 1s */
 | 
						|
    uint32_t            dur;
 | 
						|
    /* see IOT_SG_STA_STATE_CHG_REASON_XXX */
 | 
						|
    uint8_t             reason;
 | 
						|
} dynamic_state_info_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn10_sta_dynamic_state_rpt {
 | 
						|
    /* total STA count which state changed */
 | 
						|
    uint16_t             total_sta;
 | 
						|
    /* report STA count */
 | 
						|
    uint8_t              rpt_cnt;
 | 
						|
    /* start index of first secondary node reported in total STA count */
 | 
						|
    uint16_t             start_index;
 | 
						|
    /* state change info of each STA */
 | 
						|
    dynamic_state_info_t state_chg_info[0];
 | 
						|
}afn06_fn10_sta_dynamic_state_rpt_t;
 | 
						|
 | 
						|
typedef struct dynamic_state_chg_info_xian {
 | 
						|
    /* mac address of STA, little endian */
 | 
						|
    uint8_t                     mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* state of change, see CCTT_DRV_SEC_NODE_STATE_CHANGE_TO_XXX */
 | 
						|
    uint8_t                     state_chg;
 | 
						|
    /* duration of STA offline, uint is 1s */
 | 
						|
    uint32_t                    dur;
 | 
						|
    /* see IOT_SG_STA_STATE_CHG_REASON_XXX */
 | 
						|
    uint8_t                     leave_reason;
 | 
						|
    /* chip id of STA */
 | 
						|
    proto_3762_chip_id_t        chip_id;
 | 
						|
} dynamic_state_info_xian_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn10_sta_dynamic_state_xian_rpt {
 | 
						|
    /* total report STA count which state changed */
 | 
						|
    uint16_t                    rpt_total_cnt;
 | 
						|
    /* current report STA count */
 | 
						|
    uint8_t                     cur_rpt_cnt;
 | 
						|
    /* start index of first secondary node reported */
 | 
						|
    uint16_t                    start_index;
 | 
						|
    /* state change info of each STA */
 | 
						|
    dynamic_state_info_xian_t   state_chg_info[0];
 | 
						|
}afn06_fn10_sta_dynamic_state_rpt_xian_t;
 | 
						|
 | 
						|
typedef struct _afn06_fn230_clct_data_rpt {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t                     task_id;
 | 
						|
    /* power meter address, little endian */
 | 
						|
    uint8_t                     pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* proto type, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t                     proto_type;
 | 
						|
    /* time stamp, BCD code to represent */
 | 
						|
    uint8_t                     year;
 | 
						|
    uint8_t                     month;
 | 
						|
    uint8_t                     day;
 | 
						|
    uint8_t                     hour;
 | 
						|
    uint8_t                     min;
 | 
						|
    uint8_t                     sec;
 | 
						|
    /* sta collect data length */
 | 
						|
    uint16_t                    data_len;
 | 
						|
    /* sta collect data */
 | 
						|
    uint8_t                     data[0];
 | 
						|
} afn06_fn230_clct_data_rpt;
 | 
						|
 | 
						|
typedef struct _afn06_fn255_node_evt_rpt_ex {
 | 
						|
    /* node device type */
 | 
						|
    uint8_t                     dev_type;
 | 
						|
    /* meter proto type */
 | 
						|
    uint8_t                     proto_type;
 | 
						|
    /* report data length */
 | 
						|
    uint16_t                    data_len;
 | 
						|
    /* report data*/
 | 
						|
    uint8_t                     data[0];
 | 
						|
}afn06_fn255_node_evt_rpt_ex_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn01_sec_node_num {
 | 
						|
    uint16_t        sec_node_num;
 | 
						|
    uint16_t        max_sec_node_num;
 | 
						|
}afn10_fn01_sec_node_num_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn02_sec_node_info_req {
 | 
						|
    uint16_t    start_index;
 | 
						|
    uint8_t     count;
 | 
						|
}afn10_fn02_sec_node_info_req_t;
 | 
						|
 | 
						|
typedef struct _sec_node_info {
 | 
						|
    uint8_t     sec_node_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint16_t    rpt_level       : 4,
 | 
						|
                signal_level    : 4,
 | 
						|
                phase           : 3,
 | 
						|
                proto_type      : 3,
 | 
						|
    /* if support minutes collect */
 | 
						|
                clct_min        : 1,
 | 
						|
                reserved        : 1;
 | 
						|
}sec_node_info_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn02_slave_info_rsp {
 | 
						|
    /* total count of secondary nodes */
 | 
						|
    uint16_t        total_count;
 | 
						|
    /* count of secondary nodes returned in this packet */
 | 
						|
    uint8_t         count;
 | 
						|
    /* secondary nodes info */
 | 
						|
    sec_node_info_t sec_node[0];
 | 
						|
}afn10_fn02_sec_node_info_rsp_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn03_father_node_route_info
 | 
						|
{
 | 
						|
    uint8_t                 sec_node_count_for_route;
 | 
						|
    sec_node_info_t         sec_node[0];
 | 
						|
}afn10_fn03_father_node_route_info_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn04_route_status_rsp {
 | 
						|
    /* run status work */
 | 
						|
    uint8_t         route_finish_flag : 1;
 | 
						|
    uint8_t         work_flag : 1;
 | 
						|
    uint8_t         fwd_evt_flag : 1;
 | 
						|
    uint8_t         reserved_1 : 1;
 | 
						|
    uint8_t         ecc_type : 4;  /* bit4 - bit7: error correcting code type */
 | 
						|
    /* slave node count */
 | 
						|
    uint16_t        sec_node_count;
 | 
						|
    /* meter finished node count */
 | 
						|
    uint16_t        meter_sec_node_count;
 | 
						|
    /* the slave node count of relay meter */
 | 
						|
    uint16_t        relay_meter_sec_node_cout;
 | 
						|
    /* work switch */
 | 
						|
    uint8_t         work_mode    :1, /* 1 - studying, 0 - meter reading */
 | 
						|
                    reg_allowed  :1, /* 1 - reg allowed, 0 - not allowed */
 | 
						|
                    evt_rpt_allowed     :1, /* 1 - allow, 0 - not allow */
 | 
						|
                    tsfm_detect_allowed :1, /* 1 - allow, 0 - not allow */
 | 
						|
                    tsfm_detect_flag    :1, /* see IOT_SG_CCO_TSFM_DETECT_XXX */
 | 
						|
                    reserved_2   :1,
 | 
						|
                    work_type    :2; /* see IOT_SG_CCO_ROUTER_WORK_TYPE_XXX */
 | 
						|
    /* communication rate */
 | 
						|
    uint16_t        rate;
 | 
						|
    /* relay level */
 | 
						|
    uint8_t         phase1_phase_relay_level;
 | 
						|
    uint8_t         phase2_phase_relay_level;
 | 
						|
    uint8_t         phase3_phase_relay_level;
 | 
						|
    /* wrok step */
 | 
						|
    uint8_t         phase1_work_step;
 | 
						|
    uint8_t         phase2_work_step;
 | 
						|
    uint8_t         phase3_work_step;
 | 
						|
}afn10_fn04_route_status_rsp_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn04_route_status_rsp_bj {
 | 
						|
    /* run status work */
 | 
						|
    uint8_t         route_finish_flag : 1;
 | 
						|
    uint8_t         work_flag : 1;
 | 
						|
    uint8_t         fwd_evt_flag : 1;
 | 
						|
    uint8_t         reserved_1 : 1;
 | 
						|
    uint8_t         ecc_type : 4;  /* bit4 - bit7: error correcting code type */
 | 
						|
                                   /* slave node count */
 | 
						|
    uint16_t        sec_node_count;
 | 
						|
    /* meter finished node count */
 | 
						|
    uint16_t        meter_sec_node_count;
 | 
						|
    /* the slave node count of relay meter */
 | 
						|
    uint16_t        relay_meter_sec_node_cout;
 | 
						|
    /* work switch */
 | 
						|
    uint8_t         work_mode : 1;   /* bit0: 1 - studying, 0 - meter reading */
 | 
						|
    uint8_t         reg_allowed : 1;/* bit1: 1 - reg allowed, 0 - not allowed */
 | 
						|
    uint8_t         work_type : 2; /* see IOT_SG_CCO_ROUTER_WORK_TYPE_XXX */
 | 
						|
    uint8_t         tsfm_detect_flag : 1; /* see IOT_SG_CCO_TSFM_DETECT_XXX */
 | 
						|
    uint8_t         reserved_2 : 3;
 | 
						|
    /* communication rate */
 | 
						|
    uint16_t        rate;
 | 
						|
    /* relay level */
 | 
						|
    uint8_t         phase1_phase_relay_level;
 | 
						|
    uint8_t         phase2_phase_relay_level;
 | 
						|
    uint8_t         phase3_phase_relay_level;
 | 
						|
    /* wrok step */
 | 
						|
    uint8_t         phase1_work_step;
 | 
						|
    uint8_t         phase2_work_step;
 | 
						|
    uint8_t         phase3_work_step;
 | 
						|
}afn10_fn04_route_status_rsp_bj_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn05_06_sec_node_info_dl {
 | 
						|
    uint16_t              sec_node_start_index;
 | 
						|
    uint8_t               sec_node_count;
 | 
						|
}afn10_fn05_06_sec_node_info_dl_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn05_06_sec_node_info_ul {
 | 
						|
    uint16_t              sec_node_count;
 | 
						|
    uint8_t               rsp_sec_node_count;
 | 
						|
    sec_node_info_t       node_info[0];
 | 
						|
}afn10_fn05_06_sec_node_info_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn7_sec_node_query_dl {
 | 
						|
    uint16_t              start_index;
 | 
						|
    uint8_t               node_count;
 | 
						|
}afn10_fn7_sec_node_query_dl_t;
 | 
						|
 | 
						|
typedef struct _node_module_info {
 | 
						|
    /* node mac addr, little endian */
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* node module type, see PROTO_3762_MODULE_DEV_TYPE_XXX */
 | 
						|
    uint8_t               module_type :4,
 | 
						|
    /* flag to mark if node support minute collection for jiangsu */
 | 
						|
                          minute_clct :1,
 | 
						|
    /* reserved */
 | 
						|
                          rsvd        :2,
 | 
						|
    /* 0 - update completed, 1 - not updated */
 | 
						|
                          update_flag :1;
 | 
						|
    /* module info */
 | 
						|
    proto_3762_module_info_t module_info;
 | 
						|
}node_module_info_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn7_sec_node_query_ul {
 | 
						|
    uint16_t              total_cnt;
 | 
						|
    uint8_t               rpt_cnt;
 | 
						|
    node_module_info_t    node_info[0];
 | 
						|
}afn10_fn7_sec_node_query_ul_t;
 | 
						|
 | 
						|
typedef struct afn10_fn9_query_nw_size_ul_t {
 | 
						|
    uint16_t              nw_size;
 | 
						|
}afn10_fn9_query_nw_size_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn21_query_topo_dl {
 | 
						|
    uint16_t              start_index;
 | 
						|
    uint8_t               node_count;
 | 
						|
}afn10_fn21_query_topo_dl_t;
 | 
						|
 | 
						|
typedef struct _sec_node_net_info {
 | 
						|
    uint16_t              node_identity;
 | 
						|
    uint16_t              pco_node_identity;
 | 
						|
    uint8_t               node_level : 4;
 | 
						|
    uint8_t               node_role  : 4;
 | 
						|
}sec_node_net_info_t;
 | 
						|
 | 
						|
/* sec node network topo info */
 | 
						|
typedef struct _node_info_for_topo {
 | 
						|
    /* node mac address - little endian */
 | 
						|
    uint8_t                   mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* node identity */
 | 
						|
    uint16_t                  tei      :12,
 | 
						|
    /* communication type, for rf */
 | 
						|
                              comm_type:4;
 | 
						|
    /* proxy node identity */
 | 
						|
    uint16_t                  pco_tei;
 | 
						|
    /* node level */
 | 
						|
    uint8_t                   level    :4,
 | 
						|
    /* node role */
 | 
						|
                              role     :3,
 | 
						|
    /* pco link type, for rf */
 | 
						|
                              pco_type :1;
 | 
						|
}node_info_for_topo_t;
 | 
						|
 | 
						|
/* report topo info to cctt */
 | 
						|
typedef struct _afn10_fn21_query_topo_ul {
 | 
						|
    /* total node count in network topo */
 | 
						|
    uint16_t                  node_count;
 | 
						|
    /* node start index in network topo */
 | 
						|
    uint16_t                  node_start_index;
 | 
						|
    /* acknowledge node count */
 | 
						|
    uint8_t                   ack_node_count;
 | 
						|
    /* network topo info list of the node */
 | 
						|
    node_info_for_topo_t      node_info[0];
 | 
						|
}afn10_fn21_query_topo_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn27_query_topo_sxhw_and_hx_dl {
 | 
						|
    /* start node index */
 | 
						|
    uint16_t                  start_index;
 | 
						|
    /* query node conut */
 | 
						|
    uint8_t                   node_count;
 | 
						|
} afn10_fn27_query_topo_sxhw_and_hx_dl_t;
 | 
						|
 | 
						|
/* sec node network topo info for sxhw */
 | 
						|
typedef struct _node_info_for_topo_sxhw {
 | 
						|
    /* node mac address - little endian */
 | 
						|
    uint8_t                   mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* node identity */
 | 
						|
    uint16_t                  tei;
 | 
						|
    /* proxy node address - little endian */
 | 
						|
    uint8_t                   proxy_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* node signal attenuation */
 | 
						|
    uint8_t                   node_att;
 | 
						|
    /* network state */
 | 
						|
    uint8_t                   net_state;
 | 
						|
    /* node longitude */
 | 
						|
    uint32_t                  longitude;
 | 
						|
    /* node latitude */
 | 
						|
    uint32_t                  latitude;
 | 
						|
    /* node phase */
 | 
						|
    uint8_t                   phase;
 | 
						|
    /* average snr */
 | 
						|
    int8_t                    snr;
 | 
						|
} node_info_for_topo_sxhw_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn27_query_topo_sxhw_ul {
 | 
						|
    /* node total count */
 | 
						|
    uint8_t                   total_count;
 | 
						|
    /* node topo info */
 | 
						|
    node_info_for_topo_sxhw_t node_info[0];
 | 
						|
} afn10_fn27_query_topo_sxhw_ul_t;
 | 
						|
 | 
						|
/* sec node network topo info for hx */
 | 
						|
typedef struct _node_info_for_topo_hx {
 | 
						|
    /* node mac address - little endian */
 | 
						|
    uint8_t                   mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* node identity */
 | 
						|
    uint16_t                  tei;
 | 
						|
    /* proxy node address - little endian */
 | 
						|
    uint8_t                   proxy_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* snr absolute value */
 | 
						|
    uint8_t                   snr;
 | 
						|
    /* network state */
 | 
						|
    uint8_t                   net_state;
 | 
						|
    /* node longitude */
 | 
						|
    uint32_t                  longitude;
 | 
						|
    /* node latitude */
 | 
						|
    uint32_t                  latitude;
 | 
						|
    /* node phase */
 | 
						|
    uint8_t                   phase;
 | 
						|
} node_info_for_topo_hx_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn27_query_topo_hx_ul {
 | 
						|
    /* node total count */
 | 
						|
    uint8_t                   total_count;
 | 
						|
    /* node topo info */
 | 
						|
    node_info_for_topo_hx_t   node_info[0];
 | 
						|
} afn10_fn27_query_topo_hx_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn28_query_wl_state_ul {
 | 
						|
    /* wl state value */
 | 
						|
    uint8_t               wl_state;
 | 
						|
} afn10_fn28_query_wl_state_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn31_query_phase_dl {
 | 
						|
    uint16_t              start_index;
 | 
						|
    uint8_t               node_count;
 | 
						|
} afn10_fn31_query_phase_dl_t;
 | 
						|
 | 
						|
typedef struct _node_phase_info {
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* phase that device is connected to.
 | 
						|
     *  bit0 set to 1 means device is connected to phase A.
 | 
						|
     *  bit1 set to 1 means device is connected to phase B.
 | 
						|
     *  bit2 set to 1 means device is connected to phase C.
 | 
						|
     */
 | 
						|
    uint16_t              phase            : 3,
 | 
						|
    /* power meter type, 0: single phase, 1: three phase */
 | 
						|
                          pm_type          : 1,
 | 
						|
    /* flag to mark if opposite phase
 | 
						|
     * 0: line normal or not support identification.
 | 
						|
     * 1: line abnormal.
 | 
						|
     * it means neutral wire and live wire reversed when pm type is single
 | 
						|
     * phase.
 | 
						|
     * it means reverse phase sequence when pm type is three phase.
 | 
						|
     */
 | 
						|
                          opposite_phase   : 1,
 | 
						|
    /* phase type of three phase meter, see IOT_SG_CCO_PHASE_SEQ_XXX */
 | 
						|
                          phase_type       : 3,
 | 
						|
                          rsvd_2           : 8;
 | 
						|
} node_phase_info_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn31_query_phase_ul {
 | 
						|
    uint16_t              total_node_cnt;
 | 
						|
    uint16_t              start_index;
 | 
						|
    uint8_t               ack_node_count;
 | 
						|
    node_phase_info_t     node_info[0];
 | 
						|
} afn10_fn31_query_phase_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn32_query_snr_dl {
 | 
						|
    uint16_t              start_index;
 | 
						|
    uint8_t               node_count;
 | 
						|
} afn10_fn32_query_snr_dl_t;
 | 
						|
 | 
						|
typedef struct _node_snr_info {
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint8_t               ul_snr;
 | 
						|
    uint8_t               dl_snr;
 | 
						|
} node_snr_info_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn32_query_snr_ul {
 | 
						|
    uint16_t              total_node_cnt;
 | 
						|
    uint16_t              start_index;
 | 
						|
    uint8_t               ack_node_count;
 | 
						|
    node_snr_info_t       node_info[0];
 | 
						|
} afn10_fn32_query_snr_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn33_query_node_id_dl {
 | 
						|
    uint16_t              start_index;
 | 
						|
    uint8_t               node_count;
 | 
						|
} afn10_fn33_query_node_id_dl_t;
 | 
						|
 | 
						|
/* node hardware information */
 | 
						|
typedef struct _node_id_info {
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    proto_3762_chip_id_t  chip_id;
 | 
						|
} node_id_info_t;
 | 
						|
 | 
						|
typedef struct _afn10h_fn33_query_node_id_ul {
 | 
						|
    uint16_t              total_node_cnt;
 | 
						|
    uint16_t              start_index;
 | 
						|
    uint8_t               ack_node_count;
 | 
						|
    node_id_info_t        node_info[0];
 | 
						|
} afn10h_fn33_query_node_id_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10h_fn40_query_node_id_dl {
 | 
						|
    /* node device type, see PROTO_3762_NODE_DEV_TYPE_xxx */
 | 
						|
    uint8_t               dev_type;
 | 
						|
    /* mac address of the node: small endian */
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* id information type, see PROTO_3762_ID_INFO_TYPE_xxx */
 | 
						|
    uint8_t               id_type;
 | 
						|
} afn10h_fn40_query_node_id_dl_t;
 | 
						|
 | 
						|
typedef struct _afn10h_fn40_query_node_id_ul {
 | 
						|
    /* node device type, see PROTO_3762_NODE_DEV_TYPE_xxx */
 | 
						|
    uint8_t               dev_type;
 | 
						|
    /* mac address of the node: small endian */
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* id information type, see PROTO_3762_ID_INFO_TYPE_xxx */
 | 
						|
    uint8_t               id_type;
 | 
						|
    /* id information length */
 | 
						|
    uint8_t               id_len;
 | 
						|
    /* id information */
 | 
						|
    uint8_t               id_info[0];
 | 
						|
} afn10h_fn40_query_node_id_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10h_fn90_qr_clock_manager_param_dl {
 | 
						|
    /* node addr, little endian */
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
} afn10h_fn90_qr_clock_manager_param_dl_t;
 | 
						|
 | 
						|
typedef struct _afn10h_fn90_qr_clock_manager_param_ul {
 | 
						|
    /* node addr, little endian */
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* auto correct time state, 0 - disable, 1 - enable */
 | 
						|
    uint8_t               auto_corr_state;
 | 
						|
    /* reserved */
 | 
						|
    uint8_t               reserved;
 | 
						|
    /* clock error report threshold, unit is 1min */
 | 
						|
    uint8_t               threshold;
 | 
						|
} afn10h_fn90_qr_clock_manager_param_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10h_fn93_qr_corr_time_period_ul {
 | 
						|
    /* clock manager correct time period, unit is 1min */
 | 
						|
    uint16_t              period;
 | 
						|
} afn10h_fn93_qr_corr_time_period_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn100_query_network_size_ul {
 | 
						|
    /* value is [2,512] */
 | 
						|
    uint16_t              nw_size;
 | 
						|
} afn10_fn100_query_nw_size_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn101_query_node_info_dl {
 | 
						|
    uint16_t              start_index;
 | 
						|
    uint8_t               node_count;
 | 
						|
} afn10_fn101_query_node_info_dl_t;
 | 
						|
 | 
						|
typedef struct _f101_node_info {
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint16_t              level : 4;
 | 
						|
    uint16_t              snr : 4;
 | 
						|
    uint16_t              phase : 3;
 | 
						|
    uint16_t              proto_type : 3;
 | 
						|
    uint16_t              rsvd : 2;
 | 
						|
    uint16_t              app_ver;
 | 
						|
    uint8_t               bootloader_ver;
 | 
						|
} f101_node_info_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn101_query_node_info_ul {
 | 
						|
    uint16_t              total_node_cnt;
 | 
						|
    uint8_t               ack_node_count;
 | 
						|
    f101_node_info_t      node_info[0];
 | 
						|
} afn10_fn101_query_node_info_ul_t;
 | 
						|
 | 
						|
/* command to query nodes information protocol */
 | 
						|
typedef struct _afn10_fn102_query_node_info_dl {
 | 
						|
    /* start index */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* query node count */
 | 
						|
    uint8_t               node_count;
 | 
						|
} afn10_fn102_query_node_info_dl_t;
 | 
						|
 | 
						|
typedef struct _node_phase_info_xiand {
 | 
						|
    /* node mac addr, little endian */
 | 
						|
    uint8_t     node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* 0 - not in the whitelist, 1 - in the whitelist */
 | 
						|
    uint16_t    in_wl               : 1,
 | 
						|
    /* phase that device is connected to.
 | 
						|
     *  bit0 set to 1 means device is connected to phase A.
 | 
						|
     *  bit1 set to 1 means device is connected to phase B.
 | 
						|
     *  bit2 set to 1 means device is connected to phase C.
 | 
						|
     */
 | 
						|
                phase               : 3,
 | 
						|
    /* flag to mark if L/N reversed in Single-phase power meter or phase
 | 
						|
     * sequence reversed in Three-phase power meter.
 | 
						|
     */
 | 
						|
                opposite_phase      : 1,
 | 
						|
    /* reserved */
 | 
						|
                rsvd                : 3,
 | 
						|
    /* node phase */
 | 
						|
                phase3              : 2,
 | 
						|
                phase2              : 2,
 | 
						|
                phase1              : 2,
 | 
						|
   /*  power meter type, 0 - single phase meter, 1 - three phase meter */
 | 
						|
                pm_type             : 2;
 | 
						|
} node_phase_info_xiand_t;
 | 
						|
 | 
						|
/* data to response for requesting nodes phase information for xi'an
 | 
						|
 * local electric.
 | 
						|
 */
 | 
						|
typedef struct _afn10_fn102_query_node_phase_info_ul {
 | 
						|
    /* total count of in network nodes */
 | 
						|
    uint16_t                    total_node_cnt;
 | 
						|
    /* current reported count of nodes */
 | 
						|
    uint8_t                     ack_node_count;
 | 
						|
    /* node phase information for xi'an*/
 | 
						|
    node_phase_info_xiand_t      node_info[0];
 | 
						|
} afn10_fn102_query_node_phase_info_ul_t;
 | 
						|
 | 
						|
/* command to query sta module configuration state for xian protocol. */
 | 
						|
typedef struct _afn10_fn103_query_sta_cfg_state_dl {
 | 
						|
    /* start query index */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* query node count */
 | 
						|
    uint8_t               count;
 | 
						|
} afn10_fn103_query_sta_cfg_state_dl_t;
 | 
						|
 | 
						|
typedef struct _sta_cfg_state {
 | 
						|
    /* node mac address, little endian  */
 | 
						|
    uint8_t               node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* configuration state, 0 fail, 1 success */
 | 
						|
    uint8_t               cfg_state;
 | 
						|
} sta_cfg_state_t;
 | 
						|
 | 
						|
/* data to response for requesting sta module configuration state. */
 | 
						|
typedef struct _afn10_fn103_query_sta_cfg_state_ul {
 | 
						|
    /* total node count */
 | 
						|
    uint16_t              total_count;
 | 
						|
    /* report count */
 | 
						|
    uint8_t               rpt_count;
 | 
						|
   /* node configuration state info */
 | 
						|
    sta_cfg_state_t   mod_cfg[0];
 | 
						|
} afn10_fn103_query_sta_cfg_state_ul_t;
 | 
						|
 | 
						|
/* command to query nodes' mac and version information */
 | 
						|
typedef struct _afn10_fn104_query_node_info_dl {
 | 
						|
    /* query start index - 0 is cco, others station */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* query node count */
 | 
						|
    uint8_t               total_cnt;
 | 
						|
} afn10_fn104_query_node_info_dl_t;
 | 
						|
 | 
						|
typedef struct _node_info_ver_info {
 | 
						|
    /* mac address of the station: small endian */
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* software version */
 | 
						|
    uint16_t              sw_ver;
 | 
						|
    /* software version day */
 | 
						|
    uint8_t               sw_ver_day;
 | 
						|
    /* software version month */
 | 
						|
    uint8_t               sw_ver_month;
 | 
						|
    /* software version year */
 | 
						|
    uint8_t               sw_ver_year;
 | 
						|
    /* node vendor id */
 | 
						|
    uint16_t              vendor_id;
 | 
						|
    /* node chip id */
 | 
						|
    uint16_t              chip_id;
 | 
						|
} node_info_ver_info_t;
 | 
						|
 | 
						|
/* data to response for requesting nodes' information. */
 | 
						|
typedef struct _afn10_fn104_query_node_info_ul {
 | 
						|
    /* total node count */
 | 
						|
    uint16_t              ack_node_count;
 | 
						|
    /* rsp node count */
 | 
						|
    uint8_t               rsp_cnt;
 | 
						|
    node_info_ver_info_t  node_info[0];
 | 
						|
}afn10_fn104_query_node_info_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10h_fn111_net_info {
 | 
						|
    uint8_t               total_node_cnt;
 | 
						|
    uint8_t               local_nid[PROTO_3762_NID_LEN]; /* 3 bytes */
 | 
						|
    uint8_t               local_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint8_t               nb_nid[0][PROTO_3762_NID_LEN];
 | 
						|
}afn10h_fn111_net_info_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn112_query_chip_info_dl {
 | 
						|
    /* start index, 1 means major node */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* query count */
 | 
						|
    uint8_t               node_count;
 | 
						|
} afn10_fn112_query_chip_info_dl_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn112_query_chip_info_ul {
 | 
						|
    /* total count */
 | 
						|
    uint16_t              total_node_cnt;
 | 
						|
    /* start index */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* report count */
 | 
						|
    uint8_t               ack_node_count;
 | 
						|
    /* node information */
 | 
						|
    node_hw_info_t        node_info[0];
 | 
						|
} afn10_fn112_query_chip_info_ul_t;
 | 
						|
 | 
						|
/* command to query power meter information */
 | 
						|
typedef struct _afn10_fn150_query_pm_info_dl {
 | 
						|
    /* query pm start index from 1 */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* query pm count */
 | 
						|
    uint8_t               pm_cnt;
 | 
						|
} afn10_fn150_query_pm_info_dl_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn150_pm_info {
 | 
						|
    /* device mac address, if the device type is collector,
 | 
						|
     * the mac is the collector mac address, little-endian.
 | 
						|
     */
 | 
						|
    uint8_t               dev_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* mac address of the pm, little-endian */
 | 
						|
    uint8_t               pm_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* power meter proto type, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t               proto_type;
 | 
						|
} afn10_fn150_pm_info_t;
 | 
						|
 | 
						|
/* data to response for requesting power meter information. */
 | 
						|
typedef struct _afn10_fn150_query_pm_info_ul {
 | 
						|
    /* total pm count */
 | 
						|
    uint16_t              total_pm_count;
 | 
						|
    /* report pm start index */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* ack pm count */
 | 
						|
    uint8_t               ack_cnt;
 | 
						|
    /* query pm info */
 | 
						|
    afn10_fn150_pm_info_t pm_info[0];
 | 
						|
} afn10_fn150_query_pm_info_ul_t;
 | 
						|
 | 
						|
/* data to response for query collect parameter v2.8 task id . */
 | 
						|
typedef struct _afn10_fn230_query_task_id_cnt_ul {
 | 
						|
    /* total task count */
 | 
						|
    uint8_t               task_cnt;
 | 
						|
    /* clct task bitmap */
 | 
						|
    uint8_t               task_bitmap[4];
 | 
						|
} afn10_fn230_query_task_id_cnt_ul_t;
 | 
						|
 | 
						|
/* command to query curve collect parameter v2.8 configuration */
 | 
						|
typedef struct _afn10_fn231_query_curve_node_conf_dl {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t               task_id;
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t               proto_type;
 | 
						|
} afn10_fn231_query_curve_node_conf_dl_t;
 | 
						|
 | 
						|
/* data to response for query collect parameter v2.8 configuration */
 | 
						|
typedef struct _afn10_fn231_query_curve_node_conf_ul {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t               task_id;
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t               proto_type;
 | 
						|
    /* collect period, unit is 1min */
 | 
						|
    uint8_t               clct_period;
 | 
						|
    /* task configuration node count */
 | 
						|
    uint16_t              task_node_cnt;
 | 
						|
    /* collect parameter */
 | 
						|
    uint8_t               data[0];
 | 
						|
} fn10_fn231_query_curve_node_conf_ul_t;
 | 
						|
 | 
						|
/* command to query collect parameter v2.8 task configuration address */
 | 
						|
typedef struct _afn10_fn232_query_task_addr_dl {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t               task_id;
 | 
						|
    /* start index */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* query count */
 | 
						|
    uint8_t               cnt;
 | 
						|
} afn10_fn232_query_task_addr_dl_t;
 | 
						|
 | 
						|
/* data to response for query collect parameter v2.8 task configuration address */
 | 
						|
typedef struct _afn10_fn232_query_task_addr_ul {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t               task_id;
 | 
						|
    /* task configuration address total address count */
 | 
						|
    uint16_t              total_cnt;
 | 
						|
    /* report address count */
 | 
						|
    uint8_t               cnt;
 | 
						|
    /* power meter address, little endian */
 | 
						|
    uint8_t               pm_mac[0][IOT_MAC_ADDR_LEN];
 | 
						|
} afn10_fn232_query_task_addr_ul_t;
 | 
						|
 | 
						|
typedef struct _afn10_fn244_query_topo_dl {
 | 
						|
    /* start node index */
 | 
						|
    uint16_t              start_index;
 | 
						|
    /* query node conut */
 | 
						|
    uint8_t               node_count;
 | 
						|
} afn10_fn244_query_topo_dl_t;
 | 
						|
 | 
						|
typedef struct _topo_hx_data {
 | 
						|
    /* node mac address - little endian */
 | 
						|
    uint8_t               mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* node identity */
 | 
						|
    uint16_t              tei;
 | 
						|
    /* plc proxy node address - little endian */
 | 
						|
    uint8_t               plc_proxy_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* plc path level */
 | 
						|
    uint8_t               plc_path_level;
 | 
						|
    /* plc snr absolute value */
 | 
						|
    uint8_t               plc_snr;
 | 
						|
    /* plc network state */
 | 
						|
    uint8_t               plc_net_state;
 | 
						|
    /* plc node phase */
 | 
						|
    uint8_t               plc_phase;
 | 
						|
    /* rf proxy node address - little endian */
 | 
						|
    uint8_t               rf_proxy_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    /* rf path level */
 | 
						|
    uint8_t               rf_path_level;
 | 
						|
    /* rf snr absolute value */
 | 
						|
    uint8_t               rf_snr;
 | 
						|
    /* rf network state */
 | 
						|
    uint8_t               rf_net_state;
 | 
						|
    /* node longitude */
 | 
						|
    uint8_t               longitude[8];
 | 
						|
    /* node latitude */
 | 
						|
    uint8_t               latitude[8];
 | 
						|
} topo_hx_data;
 | 
						|
 | 
						|
/* data to response for query hx topo data */
 | 
						|
typedef struct _afn10_fn244_query_topo_ul {
 | 
						|
    /* report node count */
 | 
						|
    uint8_t               cnt;
 | 
						|
    /* node hx topo data */
 | 
						|
    topo_hx_data          topo_data[0];
 | 
						|
} afn10_fn244_query_topo_ul_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn102_query_curve_data_dl {
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t               proto_type;
 | 
						|
} afn03_fn102_query_curve_data_dl_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn102_query_curve_data_ul {
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t               proto_type;
 | 
						|
    /* collect parameter */
 | 
						|
    //proto_3762_meter_clct_param_t clct_param[0];
 | 
						|
} afn03_fn102_query_curve_data_ul_t;
 | 
						|
 | 
						|
/* query curve data for hunan */
 | 
						|
typedef struct _afn03_fn102_query_curve_data_ex_ul {
 | 
						|
    /* 0 - disabled, 1 - enabled */
 | 
						|
    uint8_t               enabled;
 | 
						|
    /* unit is 1min */
 | 
						|
    uint8_t               clct_period;
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t               proto_type;
 | 
						|
    /* collect parameter */
 | 
						|
    //proto_3762_meter_clct_param_t clct_param[0];
 | 
						|
} afn03_fn102_query_curve_data_ex_ul_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn102_query_auto_reg_active {
 | 
						|
    /* 0x5A - whitelist model,
 | 
						|
     * 0x5F and others - auto register active model(default)
 | 
						|
     * see PRPTO_3762_ZHHW_AUTO_REG_ACTIVE_XXX.
 | 
						|
     */
 | 
						|
    uint8_t               auto_reg_active;
 | 
						|
} afn03_fn102_query_auto_reg_active_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn130_fn120_query_build_info {
 | 
						|
    /* cpu number */
 | 
						|
    uint8_t         cpu_number;
 | 
						|
    /* 2 bytes for vendor id */
 | 
						|
    uint16_t        vendor_id;
 | 
						|
    /* reserved */
 | 
						|
    uint8_t         rsvd        :3,
 | 
						|
    /* version date day, BIN format */
 | 
						|
                    ver_day     :5;
 | 
						|
    /* version date month, BIN format */
 | 
						|
    uint16_t        ver_mon     :4,
 | 
						|
    /* version date year, BIN format */
 | 
						|
                    ver_year    :12;
 | 
						|
    /* hardware version, BCD format, for fn130. reserved for fn 120. */
 | 
						|
    uint16_t        hw_ver;
 | 
						|
    /* software version, BCD format */
 | 
						|
    uint16_t        sw_ver;
 | 
						|
    /* mcu type length */
 | 
						|
    uint8_t         mcu_type_len;
 | 
						|
    /* mcu type */
 | 
						|
    uint8_t         mcu_type[0];
 | 
						|
} afn03_fn130_fn120_query_build_info_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn131_fn121_query_compare_data_info_dl {
 | 
						|
    /* cpu number */
 | 
						|
    uint8_t         cpu_number;
 | 
						|
    /* compare data start addr */
 | 
						|
    uint32_t        start_addr;
 | 
						|
    /* compare data length */
 | 
						|
    uint16_t        data_len;
 | 
						|
} afn03_fn131_fn121_query_compare_data_info_dl_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn131_fn121_query_compare_data_info_ul {
 | 
						|
    /* compare data */
 | 
						|
    uint8_t         compare_data[PROTO_3762_SHA1_CHECK_LEN];
 | 
						|
} afn03_fn131_fn121_query_compare_data_info_ul_t;
 | 
						|
 | 
						|
typedef struct _afn03_fn131_query_wl_state_ul {
 | 
						|
    /* flag to mark if whitelist enable, 0 - disable, 1 - enable */
 | 
						|
    uint8_t         wl_task_flag;
 | 
						|
} afn03_fn131_query_wl_state_ul_t;
 | 
						|
 | 
						|
typedef struct _slave_info_entry_2009 {
 | 
						|
    uint8_t         mac[PROTO_3762_MAC_ADDR_LEN];
 | 
						|
    uint16_t        node_index; /* just for 3762-2009 */
 | 
						|
    /* meter proto type, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t         proto_type;
 | 
						|
}slave_info_entry_2009_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn01_add_sec_node_req_2009 {
 | 
						|
    uint8_t                  sec_node_cnt;    /* slave count*/
 | 
						|
    slave_info_entry_2009_t  sec_node[0];
 | 
						|
}afn11_fn01_add_sec_node_req_2009_t;
 | 
						|
 | 
						|
typedef struct _slave_info_entry_2013 {
 | 
						|
    uint8_t         mac[PROTO_3762_MAC_ADDR_LEN];
 | 
						|
    /* meter proto type, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t         proto_type;
 | 
						|
}slave_info_entry_2013_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn01_add_sec_node_req_2013 {
 | 
						|
    uint8_t                  sec_node_cnt;    /* slave count*/
 | 
						|
    slave_info_entry_2013_t  sec_node[0];
 | 
						|
}afn11_fn01_add_sec_node_req_2013_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn02_rmv_sec_node_req {
 | 
						|
    uint8_t             sec_node_cnt;    /* node count*/
 | 
						|
    uint8_t             mac_addr[0][IOT_MAC_ADDR_LEN];
 | 
						|
} afn11_fn02_rmv_sec_node_req_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn04_set_rt_mode {
 | 
						|
    /* bit0: 1 - studying, 0 - meter reading */
 | 
						|
    uint8_t     work_mode       :1,
 | 
						|
    /* bit1: 1 - reg allowed, 0 - not allowed */
 | 
						|
                reg_allowed     :1,
 | 
						|
    /* bit2 - bit3: reserved */
 | 
						|
                reserved        :2,
 | 
						|
    /* bit4 - bit7: error correcting code type
 | 
						|
     * 0 - no coding, 1 - RS coding */
 | 
						|
                ecc_type        :4;
 | 
						|
    /* communication rate */
 | 
						|
    uint16_t    comm_rate       :15,
 | 
						|
    /* rata unit, 0 - bps, 1 - kbps */
 | 
						|
                rate_unit       :1;
 | 
						|
}afn11_fn04_set_rt_mode_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn05_start_node_reg {
 | 
						|
    uint8_t     start_time[PROTO_3762_DATETIME_LEN];
 | 
						|
    uint16_t    duration;       /* in minute */
 | 
						|
    uint8_t     retry_cnt;
 | 
						|
    uint8_t     wait_tick_cnt;  /* each wait tick is 150ms */
 | 
						|
}afn11_fn05_start_node_reg_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn07_set_wl_state {
 | 
						|
    /* wl switch value, 1 - enable, 0 - disable. */
 | 
						|
    uint8_t     wl_state;
 | 
						|
} afn11_fn07_set_wl_state_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn100_set_network_size_dl {
 | 
						|
    /* value is [2,512] */
 | 
						|
    uint16_t              nw_size;
 | 
						|
} afn11_fn100_set_nw_size_dl_t;
 | 
						|
 | 
						|
typedef struct _set_sec_node_tsfm_addr {
 | 
						|
    /* tsfm_address, little endian */
 | 
						|
    uint8_t     tsfm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* whole network set mode, see PROTO_3762_NW_SET_MODE_XXX */
 | 
						|
    uint8_t     set_mode;
 | 
						|
    /* reserved */
 | 
						|
    uint8_t     rsvd[3];
 | 
						|
    /* secondary node addres, only valid in single set, little endian */
 | 
						|
    uint8_t     sec_node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
} set_sec_node_tsfm_addr_t;
 | 
						|
 | 
						|
typedef struct _del_sec_node_tsfm_addr {
 | 
						|
    /* whole network set mode, see PROTO_3762_NW_SET_MODE_XXX */
 | 
						|
    uint8_t     set_mode;
 | 
						|
    /* reserved */
 | 
						|
    uint8_t     rsvd;
 | 
						|
    /* secondary node addres, only valid in single set, little endian */
 | 
						|
    uint8_t     sec_node_addr[IOT_MAC_ADDR_LEN];
 | 
						|
} del_sec_node_tsfm_addr_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn127_set_tsfm_addr_dl {
 | 
						|
    /* set tsfm addr commad type, see PROTO_3762_TSFM_ADDR_CMD_XXX */
 | 
						|
    uint8_t     cmd_type;
 | 
						|
    /* data length */
 | 
						|
    uint8_t     data_len;
 | 
						|
    /* reserved */
 | 
						|
    uint16_t    rsvd;
 | 
						|
    /* cmd data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} afn11_fn127_set_tsfm_addr_dl_t;
 | 
						|
 | 
						|
typedef struct _sec_node_nw_lock_set_data {
 | 
						|
    /* whole network set mode, see PROTO_3762_NW_SET_MODE_XXX */
 | 
						|
    uint8_t     set_mode;
 | 
						|
    /* reserved */
 | 
						|
    uint8_t     rsvd;
 | 
						|
    /* secondary node addres, only valid in single set, little endian */
 | 
						|
    uint8_t     sec_node_mac[IOT_MAC_ADDR_LEN];
 | 
						|
} sec_node_nw_lock_set_data_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn126_nw_lock_cmd {
 | 
						|
    /* command type, see PROTO_3762_SEC_NODE_NW_CMD_XXX */
 | 
						|
    uint8_t     cmd_type;
 | 
						|
    /* data length */
 | 
						|
    uint8_t     data_len;
 | 
						|
    /* reserved */
 | 
						|
    uint16_t    rsvd;
 | 
						|
    /* command data */
 | 
						|
    uint8_t     data[0];
 | 
						|
} afn11_fn126_nw_lock_cmd_t;
 | 
						|
 | 
						|
/* start secondary node registration for hunan */
 | 
						|
typedef struct _afn11_fn225_start_node_reg {
 | 
						|
    uint8_t     start_time[PROTO_3762_DATETIME_LEN];
 | 
						|
    uint16_t    duration;       /* in minute */
 | 
						|
    uint8_t     retry_cnt;
 | 
						|
    uint8_t     wait_tick_cnt;  /* each wait tick is 150ms */
 | 
						|
}afn11_fn225_start_node_reg_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn231_curve_data_conf {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* 0 - disabled, 1 - enabled */
 | 
						|
    uint8_t     enabled;
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t     proto_type;
 | 
						|
    /* unit is 1min */
 | 
						|
    uint8_t     clct_period;
 | 
						|
    /* collect parameter */
 | 
						|
    //proto_3762_meter_clct_param_t clct_param[0];
 | 
						|
} afn11_fn231_curve_data_conf_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn231_curve_data_conf_rpt {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* 0 - disabled, 1 - enabled */
 | 
						|
    uint8_t     enabled;
 | 
						|
    /* 2 - DL/T645-2007, 3 - DL/T698.45, other - reserve, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t     proto_type;
 | 
						|
    /* unit is 1min */
 | 
						|
    uint8_t     clct_period;
 | 
						|
    /* configuration result, see PRPTO_3762_CURVE_DATA_RET_XXX */
 | 
						|
    uint8_t     result;
 | 
						|
} afn11_fn231_curve_data_conf_rpt_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn232_curve_node_conf {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* node addr count */
 | 
						|
    uint16_t    cnt;
 | 
						|
    /* node addr, little endian */
 | 
						|
    uint8_t     node_addr[0][IOT_MAC_ADDR_LEN];
 | 
						|
} afn11_fn232_curve_node_conf_t;
 | 
						|
 | 
						|
typedef struct _afn11_fn232_curve_node_conf_rpt {
 | 
						|
    /* sta collect parameter v2.8 task id */
 | 
						|
    uint8_t     task_id;
 | 
						|
    /* configuration result, see PRPTO_3762_CURVE_DATA_NODE_RET_XXX */
 | 
						|
    uint8_t     result;
 | 
						|
} afn11_fn232_curve_node_conf_rpt_t;
 | 
						|
 | 
						|
typedef struct _afn13_fn01_router_data_fwd_2009 {
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint8_t         sec_node_cnt;
 | 
						|
    uint8_t         mac[0][PROTO_3762_MAC_ADDR_LEN];
 | 
						|
    //datagram_t    datagram;               /* datagram to be forward */
 | 
						|
}afn13_fn01_router_data_fwd_2009_t;
 | 
						|
 | 
						|
typedef struct _afn13_fn01_router_data_fwd_2013 {
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint8_t         defer_flag;
 | 
						|
    uint8_t         sec_node_cnt;
 | 
						|
    uint8_t         mac[0][PROTO_3762_MAC_ADDR_LEN];
 | 
						|
    //datagram_t    datagram;               /* datagram to be forward */
 | 
						|
}afn13_fn01_router_data_fwd_2013_t;
 | 
						|
 | 
						|
typedef struct _afn13_fn01_router_data_rpt_2009 {
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint8_t         data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afn13_fn01_router_data_rpt_2009_t;
 | 
						|
 | 
						|
typedef struct _afn13_fn01_router_data_rpt_2013 {
 | 
						|
    uint16_t        comm_dur;
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint8_t         data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afn13_fn01_router_data_rpt_2013_t;
 | 
						|
 | 
						|
typedef struct _afn13_fn02_router_data_rpt_2013 {
 | 
						|
    uint16_t        comm_dur;
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint16_t        data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afn13_fn02_router_data_rpt_2013_t;
 | 
						|
 | 
						|
typedef struct _afn14_fn01_rt_req_data {
 | 
						|
    uint8_t         phase;
 | 
						|
    uint8_t         meter_mac[IOT_MAC_ADDR_LEN];
 | 
						|
    uint16_t        index;
 | 
						|
}afn14_fn01_rt_req_data_t;
 | 
						|
 | 
						|
typedef struct _afn14_fn01_mac_info {
 | 
						|
    uint8_t         mac_count;
 | 
						|
    uint8_t         mac[0][IOT_MAC_ADDR_LEN];
 | 
						|
} afn14_fn01_mac_info;
 | 
						|
 | 
						|
typedef struct _afn14_fn01_rt_req_data_rsp_2013 {
 | 
						|
    uint8_t         read_flag;
 | 
						|
    uint8_t         defer_flag;
 | 
						|
    uint8_t         data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
    //afn14_fn01_mac_info mac_info; /* mac info after data */
 | 
						|
}afn14_fn01_rt_req_data_rsp_2013_t;
 | 
						|
 | 
						|
typedef struct _afn14_fn01_rt_req_data_rsp_2009 {
 | 
						|
    uint8_t         read_flag;
 | 
						|
    uint8_t         data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
    //afn14_fn01_mac_info mac_info; /* mac info after data */
 | 
						|
}afn14_fn01_rt_req_data_rsp_2009_t;
 | 
						|
 | 
						|
typedef struct _afn14_fn02_cctt_time {
 | 
						|
    uint8_t         sec;
 | 
						|
    uint8_t         min;
 | 
						|
    uint8_t         hour;
 | 
						|
    uint8_t         day;
 | 
						|
    uint8_t         mon;
 | 
						|
    uint8_t         year_l;
 | 
						|
}afn14_fn02_cctt_time_t;
 | 
						|
 | 
						|
typedef struct _afn14_fn03_req_data_fix {
 | 
						|
    uint8_t         mac_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    uint16_t        delay_second;
 | 
						|
    uint8_t         data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afn14_fn03_req_data_fix_t;
 | 
						|
 | 
						|
typedef struct _afn14_fn03_req_data_fix_dl {
 | 
						|
    uint8_t         data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afn14_fn03_req_data_fix_dl_t;
 | 
						|
 | 
						|
typedef struct _afn15_fn01_send_file_dl {
 | 
						|
    /* see PROTO_3762_15H_XXX */
 | 
						|
    uint8_t         action;
 | 
						|
    /* 0x01 -end frame, 0x00 - other frame */
 | 
						|
    uint8_t         is_last_seg;
 | 
						|
    /* file command, fixed value: 0x01 */
 | 
						|
    uint8_t         file_cmd;
 | 
						|
    /* total segment count */
 | 
						|
    uint16_t        total_seg_cnt;
 | 
						|
    /* segment index */
 | 
						|
    uint32_t        seg_index;
 | 
						|
    /* current segment length */
 | 
						|
    uint16_t        cur_seg_len;
 | 
						|
    /* data */
 | 
						|
    uint8_t         data[0];
 | 
						|
}afn15_fn01_send_file_dl_t;
 | 
						|
 | 
						|
typedef struct _afn15_fn01_send_file_ul {
 | 
						|
    /* segment index in down link afn15_fn01 */
 | 
						|
    uint32_t        segment_index;
 | 
						|
}afn15_fn01_send_file_ul_t;
 | 
						|
 | 
						|
typedef struct _lp_meter_rpt_info {
 | 
						|
    /* low power meter addr, little endian */
 | 
						|
    uint8_t         mac_addr[PROTO_3762_188_ADDR_LEN];
 | 
						|
    /* low power meter report time */
 | 
						|
    uint8_t         rpt_time[PROTO_3762_188_METER_TIME_LEN];
 | 
						|
    /* low power type */
 | 
						|
    uint8_t         lp_meter_type;
 | 
						|
    /* accumulative value  */
 | 
						|
    uint8_t         acc_value[PROTO_3762_188_METER_ACC_VAL_LEN];
 | 
						|
    /* statistical time */
 | 
						|
    uint8_t         stat_time;
 | 
						|
    /* last month accumulative value */
 | 
						|
    uint8_t         last_mon_acc_value[PROTO_3762_188_METER_ACC_VAL_LEN];
 | 
						|
    /* meter undervoltage */
 | 
						|
    uint8_t         uvp:1,
 | 
						|
    /* reserved */
 | 
						|
                    rsvd:7;
 | 
						|
    /* release date */
 | 
						|
    uint8_t         release_date;
 | 
						|
} lp_meter_rpt_info_t;
 | 
						|
 | 
						|
typedef struct _afn20_fn03_rpt_water_meter_info {
 | 
						|
    /* report sequence */
 | 
						|
    uint8_t         rpt_seq;
 | 
						|
    /* report low power meter count */
 | 
						|
    uint8_t         rpt_cnt;
 | 
						|
    /* report low power meter info */
 | 
						|
    lp_meter_rpt_info_t      rpt_info[0];
 | 
						|
} afn20_fn03_rpt_lp_meter_info_t;
 | 
						|
 | 
						|
typedef struct _nw_level_info {
 | 
						|
    /* current level */
 | 
						|
    uint8_t level;
 | 
						|
    /* station counte of current level */
 | 
						|
    uint16_t sta_cnt;
 | 
						|
} nw_level_info_t;
 | 
						|
 | 
						|
typedef struct _afnf0_fn100_nw_info_ul {
 | 
						|
    /* total station count in network */
 | 
						|
    uint16_t              total_sta_cnt;
 | 
						|
    /* station count that are online */
 | 
						|
    uint16_t              online_sta_cnt;
 | 
						|
    /* duration from CCO booting up to starting grouping network - unit 1s */
 | 
						|
    uint32_t              boot_fmt_time;
 | 
						|
    /* network grouping time - unit 1s */
 | 
						|
    uint16_t              fmt_dur;
 | 
						|
    /* beacon period - unit 1s */
 | 
						|
    uint8_t               bc_period;
 | 
						|
    /* rout period - unit 1s */
 | 
						|
    uint16_t              rt_period;
 | 
						|
    /* topo changing count */
 | 
						|
    uint16_t              topo_change_cnt;
 | 
						|
    /* maximum topo level */
 | 
						|
    uint8_t               max_level;
 | 
						|
    /* info of each level */
 | 
						|
    nw_level_info_t nw_level_info[0];
 | 
						|
}afnf0_fn100_nw_info_ul_t;
 | 
						|
 | 
						|
/* command to query nodes information. */
 | 
						|
typedef struct _afnf0_fn102_req_node_info_dl{
 | 
						|
    /* start index */
 | 
						|
    uint16_t        start_index;
 | 
						|
    /* total queried node number */
 | 
						|
    uint8_t         total_cnt;
 | 
						|
}afnf0_fn102_req_node_info_dl_t;
 | 
						|
 | 
						|
typedef struct _afnf0_fn102_sec_node_info {
 | 
						|
    /* mac address of the meter: small endian */
 | 
						|
    uint8_t         addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* proto type the meter supported, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t         proto_type;
 | 
						|
     /* device type: 01--485 meter, other--reserved */
 | 
						|
    uint8_t         dev_type;
 | 
						|
}afnf0_fn102_sec_node_info_t;
 | 
						|
 | 
						|
typedef struct _afnf0_sx_node_info {
 | 
						|
    /* mac address of the station: small endian */
 | 
						|
    uint8_t         addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* tei of the station */
 | 
						|
    uint16_t        sta_tei;
 | 
						|
    /* tei of the proxy */
 | 
						|
    uint16_t        proxy_tei;
 | 
						|
 | 
						|
    /* level of the station */
 | 
						|
    uint8_t         level           :4,
 | 
						|
    /* role of the device */
 | 
						|
                    role            :4;
 | 
						|
 | 
						|
    /* online flag */
 | 
						|
    uint8_t         is_online       :1,
 | 
						|
    /* beacon slot arranged flag */
 | 
						|
                    is_slot_set     :1,
 | 
						|
    /* in whitelist flag */
 | 
						|
                    is_in_wl        :1,
 | 
						|
    /* heart-beat received flag */
 | 
						|
                    is_hb_rec       :1,
 | 
						|
    /* counter of route period missed since last hb, dual mode set to 0 */
 | 
						|
                    rt_period_miss  :4;
 | 
						|
 | 
						|
    /* device type, see PROTO_3762_DEV_TYPE_XXX */
 | 
						|
    uint16_t        dev_type;
 | 
						|
    /* physical phase of the station */
 | 
						|
    uint8_t         phy_phase;
 | 
						|
    /* how many times the node change proxy accepted since join the network */
 | 
						|
    uint16_t        proxy_chg_accept_cnt;
 | 
						|
    /* how many times sta been kicked out */
 | 
						|
    uint16_t        leave_cnt;
 | 
						|
    /* time span from the last time sta been kicked out to rejoin, unit is 1s */
 | 
						|
    uint32_t        last_leave_dur;
 | 
						|
    /* max time span from sta been kicked out to rejoin, unit is 1s */
 | 
						|
    uint32_t        max_leave_dur;
 | 
						|
    /* uplink traffic success ratio */
 | 
						|
    uint32_t        ul_tf_sr;
 | 
						|
    /* downlink traffic success ratio */
 | 
						|
    uint32_t        dl_tf_sr;
 | 
						|
    /* primary version */
 | 
						|
    uint8_t         prim_ver[PROTO_3762_PRIM_VER_LEN];
 | 
						|
    /* secondary version */
 | 
						|
    uint16_t        seco_ver;
 | 
						|
    /* next hop's infor */
 | 
						|
    uint16_t        next_hop;
 | 
						|
    /* channel type: the comunication method between CCO and STA */
 | 
						|
    uint16_t        chnnl_type;
 | 
						|
    /* protocal type, see PROTO_TYPE_XXX */
 | 
						|
    uint8_t         proto_type;
 | 
						|
    /* transformer status, see PROTO_3762_TSFM_STATUS_X */
 | 
						|
    uint8_t         tsfm_status;
 | 
						|
    /* transformer address: small endian*/
 | 
						|
    uint8_t         tsfm_addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* total count of secondary node */
 | 
						|
    uint8_t         total_sec_cnt;
 | 
						|
}afnf0_sx_node_info_t;
 | 
						|
 | 
						|
/* data to response for requesting nodes information. */
 | 
						|
typedef struct _afnf0_fn102_req_node_info_rsp_ul {
 | 
						|
    /* total counter of in network nodes */
 | 
						|
    uint16_t        total_cnt;
 | 
						|
    /* current reported counter of nodes */
 | 
						|
    uint16_t        rpt_cnt;
 | 
						|
    /* start index */
 | 
						|
    uint16_t        start_index;
 | 
						|
    /* node infor */
 | 
						|
    afnf0_sx_node_info_t node[0];
 | 
						|
}afnf0_fn102_req_node_info_rsp_ul_t;
 | 
						|
 | 
						|
/* command to query nominated nodes' information. */
 | 
						|
typedef struct _afnf0_fn103_req_node_info_dl {
 | 
						|
    /* total node count */
 | 
						|
    uint8_t         total_cnt;
 | 
						|
    /* nodes' address: small endian */
 | 
						|
    uint8_t         mac[0][IOT_MAC_ADDR_LEN];
 | 
						|
}afnf0_fn103_req_node_info_dl_t;
 | 
						|
 | 
						|
/* data to response for requesting nominated nodes' information. */
 | 
						|
typedef struct _afnf0_fn103_node_info_rsp_ul {
 | 
						|
    /* current reported counter of nodes */
 | 
						|
    uint16_t        rpt_cnt;
 | 
						|
    /* node info */
 | 
						|
    afnf0_sx_node_info_t node[0];
 | 
						|
}afnf0_fn103_node_info_rsp_ul_t;
 | 
						|
 | 
						|
/* concurrent meter reading down link data */
 | 
						|
typedef struct _afnf1_fn01_con_read_meter_dl {
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint8_t         revered;
 | 
						|
    uint16_t        data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afnf1_fn01_con_read_meter_dl_t;
 | 
						|
 | 
						|
/* concurrent meter reading up link data */
 | 
						|
typedef struct _afnf1_fn01_con_read_meter_ul {
 | 
						|
    uint8_t         proto_type;
 | 
						|
    uint16_t        data_len;
 | 
						|
    uint8_t         data[0];
 | 
						|
}afnf1_fn01_con_read_meter_ul_t;
 | 
						|
 | 
						|
/* minute collection task information */
 | 
						|
typedef struct _afnf2_fn01_min_clct_task_info {
 | 
						|
    /* collection interval, unit is 1 minute */
 | 
						|
    uint8_t         interval;
 | 
						|
    /* meter count */
 | 
						|
    uint16_t        meter_cnt;
 | 
						|
} afnf2_fn01_min_clct_task_info_t;
 | 
						|
 | 
						|
typedef struct _afnf2_fn01_min_clct_rpt_ctrl {
 | 
						|
    /* report control flag */
 | 
						|
    uint8_t         rpt_flag;
 | 
						|
    /* task count */
 | 
						|
    uint8_t         task_cnt;
 | 
						|
    /* task information */
 | 
						|
    afnf2_fn01_min_clct_task_info_t task_info[0];
 | 
						|
} afnf2_fn01_min_clct_rpt_ctrl_t;
 | 
						|
 | 
						|
/* minute collect configuration information */
 | 
						|
typedef struct _afnf2_min_clct_cfg_info {
 | 
						|
    /* dst meter address, little-endian  */
 | 
						|
    uint8_t         addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* collection interval, unit is 1 minute */
 | 
						|
    uint8_t         interval;
 | 
						|
    /* flag of cfg, see PROTO_3762_MIN_CLCT_RPT_CFG_FLAG_XXX */
 | 
						|
    uint8_t         flag;
 | 
						|
    /* proto data type. see PROTO_TYPE_XXX */
 | 
						|
    uint8_t         proto_type;
 | 
						|
    /* master di, master di is 698 protocol frozen data di */
 | 
						|
    uint32_t        m_di;
 | 
						|
    /* secondary di cnt */
 | 
						|
    uint8_t         cnt;
 | 
						|
    /* secondary di, secondary di is 698 protocol data di */
 | 
						|
    uint32_t        s_di[0];
 | 
						|
} afnf2_min_clct_cfg_info_t;
 | 
						|
 | 
						|
typedef struct _afnf2_f02_min_clct_cfg_dl {
 | 
						|
    /* config information */
 | 
						|
    afnf2_min_clct_cfg_info_t cfg;
 | 
						|
} afnf2_f02_min_clct_cfg_dl_t;
 | 
						|
 | 
						|
typedef struct _afnf2_f02_min_clct_cfg_ul {
 | 
						|
    /* see PRPTO_3762_MIN_CLCT_CFG_XXX. */
 | 
						|
    uint8_t         state;
 | 
						|
} afnf2_f02_min_clct_cfg_ul_t;
 | 
						|
 | 
						|
typedef struct _afnf2_f03_min_clct_cfg {
 | 
						|
    /* config information */
 | 
						|
    afnf2_min_clct_cfg_info_t cfg;
 | 
						|
} afnf2_f03_min_clct_cfg_t;
 | 
						|
 | 
						|
/* minute collect con meter reading data structure */
 | 
						|
typedef struct _afnf2_min_clct_con_mr_data {
 | 
						|
    /* proto data type. PROTO_TYPE_XXX */
 | 
						|
    uint8_t         proto_type;
 | 
						|
    /* reserved */
 | 
						|
    uint8_t         rsvd;
 | 
						|
    /* data length */
 | 
						|
    uint16_t        len;
 | 
						|
    /* report data */
 | 
						|
    uint8_t         data[0];
 | 
						|
} afnf2_min_clct_con_mr_data_t;
 | 
						|
 | 
						|
typedef struct _afnf2_fn04_min_clct_con_req {
 | 
						|
    /* data request */
 | 
						|
    afnf2_min_clct_con_mr_data_t req;
 | 
						|
} afnf2_fn04_min_clct_con_req_t;
 | 
						|
 | 
						|
typedef struct _afnf2_fn04_clct_con_rsp {
 | 
						|
    /* data respond */
 | 
						|
    afnf2_min_clct_con_mr_data_t rsp;
 | 
						|
} afnf2_fn04_min_clct_rsp;
 | 
						|
 | 
						|
/* proto_3762_get_checksum - calculate the check sum according to 376.2 protocol
 | 
						|
 * @ctrl:       ctrl byte for calculating checksum
 | 
						|
 * @data:       data to calculate checksum
 | 
						|
 * @len:        length of data
 | 
						|
 * @return:     the checksum
 | 
						|
 */
 | 
						|
uint8_t proto_3762_get_checksum(uint8_t ctrl, uint8_t *data, uint32_t len);
 | 
						|
 | 
						|
/* proto_3762_get_fn_code - get function code according to 376.2 protocol
 | 
						|
 * @data:       data buffer point to Fn of 376.2 packet
 | 
						|
 * @return:     the Fn code
 | 
						|
 */
 | 
						|
uint8_t proto_3762_get_fn_code(uint8_t *data);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief sanity_check_2013 - check if a 376.2 packet is a valid
 | 
						|
 * @param data:       packet data
 | 
						|
 * @param len:        length of the packet data
 | 
						|
 * @retval:     0                 -- sanity check passed
 | 
						|
 * @retval:     INVALID_DATA      -- invalid data
 | 
						|
 * @retval:     INVALID_DATA_LEN  -- invalid data length
 | 
						|
 * @retval:     VALIDATE_FAILED   -- validate failed
 | 
						|
 * @retval:     INVALID_FORMAT    -- invalid format
 | 
						|
 */
 | 
						|
uint32_t proto_3762_sanity_check(uint8_t* data, uint16_t len);
 | 
						|
 | 
						|
 /**
 | 
						|
 * @brief proto_3762_convert_max_fn_to_bitmap() - convert a fn to a bitmap.
 | 
						|
 *        each bit in the bitmap indicate if the corresponding fn is supported.
 | 
						|
 *        assume all fn less than the max_fn are also supported.
 | 
						|
 *        example max_fn = 64 means fn1 to fn64 are supported.
 | 
						|
 *        set fn_bf[0] to fn_bf[7] is 0xff, set fn_bf[8] to fn_bf[31] is 0x00
 | 
						|
 *
 | 
						|
 * @param max_fn:  the max fn of supports, value range: 1 - 255
 | 
						|
 * @param fn_buf: An array of 32 bytes
 | 
						|
 */
 | 
						|
void proto_3762_convert_max_fn_to_bitmap(uint16_t max_fn, uint8_t *fn_buf);
 | 
						|
 | 
						|
/* proto_3762_fn_index_add - add a fn support in bitmap
 | 
						|
 * @fn:            the fn that need to support
 | 
						|
 * @fn_buf:        the bitmap buf
 | 
						|
 */
 | 
						|
void proto_3762_fn_index_add(uint8_t fn, uint8_t *fn_buf);
 | 
						|
 | 
						|
/* proto_3762_fn_index_del - delete a fn nonsupport in bitmap
 | 
						|
 * @fn:            the fn that need to nonsupport
 | 
						|
 * @fn_buf:        the bitmap buf
 | 
						|
 */
 | 
						|
void proto_3762_fn_index_del(uint8_t fn, uint8_t *fn_buf);
 | 
						|
 | 
						|
/* 1 byte checksum , and 1 byte backcode */
 | 
						|
#define PROTO_3762_CS_BCODE_LEN     2
 | 
						|
 | 
						|
/* 3762 data length before app data */
 | 
						|
#define PROTO_3762_RSVD_LEN         (sizeof(pkt_3762_hdr_t) + \
 | 
						|
                                     sizeof(proto_3762_app_data_t))
 | 
						|
 | 
						|
/* @brief:         get header length before app data in 3762 pkt.
 | 
						|
 * @param mac_cnt: mac count of the 3762 proto
 | 
						|
 * @return:        header length of the 3762 proto.
 | 
						|
 */
 | 
						|
static inline uint32_t proto_3762_get_header_len(uint32_t mac_cnt)
 | 
						|
{
 | 
						|
    return PROTO_3762_RSVD_LEN + mac_cnt * PROTO_3762_MAC_ADDR_LEN;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:         get length to reserve before app data in 3762 pkt.
 | 
						|
 *                 it's the sum of header length and extra headroom.
 | 
						|
 * @param mac_cnt: mac count of the 3762 proto
 | 
						|
 * @return:        length of 3762 UART packet header.
 | 
						|
 */
 | 
						|
static inline uint32_t proto_3762_get_rsvd_len(uint32_t mac_cnt)
 | 
						|
{
 | 
						|
    return max(IOT_SG_EXT_HEADROOM, IOT_SG_CLI_CHANNEL_HEADROOM) +
 | 
						|
        proto_3762_get_header_len(mac_cnt);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief:         get length of iot_pkt to alloc for sending the 3762 pkt
 | 
						|
 *                 to uart.
 | 
						|
 * @mac_cnt:       mac count in address field in 3762
 | 
						|
 * @data_len:      app data len in 3762 packet
 | 
						|
 * return:         length of the 3762 UART packet
 | 
						|
 */
 | 
						|
static inline uint32_t proto_3762_get_pkt_len(uint32_t mac_cnt,
 | 
						|
    uint32_t data_len)
 | 
						|
{
 | 
						|
    return proto_3762_get_rsvd_len(mac_cnt) + data_len +
 | 
						|
        PROTO_3762_CS_BCODE_LEN;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief proto_3762_nid_to_buf() - convert uint32_t's nid to 3 bytes
 | 
						|
 *
 | 
						|
 * @param nid:        the value of uint32_t's network id
 | 
						|
 * @param p_nid:      the pointer of 3 bytes buf
 | 
						|
 */
 | 
						|
void proto_3762_nid_to_buf(uint32_t nid, uint8_t *p_nid);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief proto_3762_check_frame_handler - check whether the frame is legitimate.
 | 
						|
 * @param buffer:       the buffer containing 3762 data.
 | 
						|
 * @param buffer_len:   len of the buffer.
 | 
						|
 * @param is_frame:     false: the frame isn't legitimate; true: the frame is
 | 
						|
 *                      legitimate.
 | 
						|
 */
 | 
						|
void proto_3762_check_frame_handler(uint8_t* buffer, uint32_t buffer_len,
 | 
						|
    bool_t* is_frame);
 | 
						|
 | 
						|
#pragma pack(pop)   /* restore the pack status */
 | 
						|
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* PROTO_3762_H */
 |