2073 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			2073 lines
		
	
	
		
			67 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_GW_APP_H
 | |
| #define PROTO_GW_APP_H
 | |
| 
 | |
| #include "os_types_api.h"
 | |
| #include "iot_utils_api.h"
 | |
| #include "proto_645.h"
 | |
| #include "iot_config_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 */
 | |
| 
 | |
| /* guo wang application protocol version */
 | |
| #define GW_APP_PROTO_VERSION        0x01
 | |
| 
 | |
| /* guo wang application protocol port definitions */
 | |
| #define GW_APP_PORT_OTHER           0x11
 | |
| #define GW_APP_PORT_UPGRADE         0x12
 | |
| /* guo wang application protocol port definitions for production testing */
 | |
| #define GW_APP_PORT_PRODUCT_TEST    0xff
 | |
| 
 | |
| /* guo wang application protocol id definitions */
 | |
| #define GW_APP_ID_CONCENTRATOR_METER_R      0x0001
 | |
| #define GW_APP_ID_ROUTE_METER_R             0x0002
 | |
| #define GW_APP_ID_CONCENTRATOR_P_METER_R    0x0003
 | |
| #define GW_APP_ID_CORRECTING_TIME           0x0004
 | |
| #define GW_APP_ID_COMM_TEST                 0x0006
 | |
| #define GW_APP_ID_EVENT_REPORT              0x0008
 | |
| 
 | |
| /* sta report minute collection function in V2.8 */
 | |
| #define GW_APP_ID_MIN_CLCT_REPORT           0x000A
 | |
| 
 | |
| #define GW_APP_ID_QUERY_SEC_NODE_REG        0x0011
 | |
| #define GW_APP_ID_START_SEC_NODE_REG        0x0012
 | |
| #define GW_APP_ID_STOP_SEC_NODE_REG         0x0013
 | |
| #define GW_APP_ID_ACK_NACK                  0x0020
 | |
| #define GW_APP_ID_DATA_COLLECT              0x0021
 | |
| /* extend protocol of heilongjiang */
 | |
| #define GW_APP_ID_CLOCK_MANAGER             0x0028
 | |
| #define GW_APP_ID_CLOCK_QUERY               0x0029
 | |
| 
 | |
| #define GW_APP_ID_START_UPGRADE             0x0030
 | |
| #define GW_APP_ID_STOP_UPGRADE              0x0031
 | |
| #define GW_APP_ID_TRANSFER_FILE_DATA        0x0032
 | |
| #define GW_APP_ID_TRANSFER_FILE_DATA_B      0x0033
 | |
| #define GW_APP_ID_QUERY_UPGTADE_STATUS      0x0034
 | |
| #define GW_APP_ID_EXECUTE_UPGRADE           0x0035
 | |
| #define GW_APP_ID_QUERY_STATION_INFO        0x0036
 | |
| #define GW_APP_ID_QUERY_MODULE_ID_INFO_HN   0x0037
 | |
| #define GW_APP_ID_CTRL_PROTO                0x0040
 | |
| #define GW_APP_ID_CTRL_PASSTHROUGH_YN       0x0041
 | |
| #define GW_APP_ID_RTC_TIMER_SYNC            0x0070
 | |
| #define GW_APP_ID_TSFM_DETECT               0x00A1
 | |
| #define GW_APP_ID_QUERY_MODULE_ID_INFO      0x00A2
 | |
| #define GW_APP_ID_ACCURATE_CORRECT_TIME     0x00A3
 | |
| 
 | |
| /* extend protocol of xi'an */
 | |
| #define GW_APP_ID_NLI_ABNORMAL              0x00B0
 | |
| #define GW_APP_ID_STA_CORRECT_TIME          0x00B1
 | |
| #define GW_APP_ID_SET_MODULE_CLCT_PARAM     0x00B2
 | |
| #define GW_APP_ID_HISTORY_DATA_READ         0x00B3
 | |
| #define GW_APP_ID_QUERY_METER_PARAM         0x00B4
 | |
| 
 | |
| /* extend protocol of hunan */
 | |
| #define GW_APP_ID_STA_JOIN_CHECK             0x00C1
 | |
| 
 | |
| /* extend protocol of v2.8 */
 | |
| #define GW_APP_ID_CLCT_TASK_CONFIG_SET       0x00E2
 | |
| #define GW_APP_ID_CLCT_TASK_DATA_READ        0x00E3
 | |
| 
 | |
| /* extend protocol of zhe'jiang */
 | |
| #define GW_APP_ID_STA_NET_LOCK_TIME         0x00F0
 | |
| 
 | |
| /* extend protocol of production testing,
 | |
|  * only for GW_APP_PORT_PRODUCT_TEST
 | |
|  */
 | |
| #define GW_APP_ID_PRODUCTION_TEST           0x00ff
 | |
| 
 | |
| /* extend protocol id definitions. */
 | |
| #define GW_APP_ID_QUERY_VENDOR_INFO         0xA001
 | |
| #define GW_APP_ID_CORRECT_TIME_EXT          0xA002
 | |
| 
 | |
| /* guo wang application protocol frame header */
 | |
| typedef struct _gw_app_header {
 | |
|     uint8_t     port;
 | |
|     uint16_t    id;
 | |
|     uint8_t     control;
 | |
| } gw_app_header_t;
 | |
| 
 | |
| /* guo wang protocol version defintion */
 | |
| #define GW_APP_VERSION          1
 | |
| #define GW_APP_CONTROL          0
 | |
| 
 | |
| /* parameter for secondary node registration */
 | |
| #define GW_APP_SEC_NODE_REG_NO_FORCE_ACK    0
 | |
| #define GW_APP_SEC_NODE_REG_FORCE_ACK       1
 | |
| 
 | |
| /* guo wang protocol data type definition */
 | |
| #define GW_APP_DATA_TYPE_TRANSPARENT        0
 | |
| #define GW_APP_DATA_TYPE_645_1997           1
 | |
| #define GW_APP_DATA_TYPE_645_2007           2
 | |
| #define GW_APP_DATA_TYPE_69845              3
 | |
| #define GW_APP_DATA_TYPE_SEC_AUTH           4
 | |
| #define GW_APP_DATA_TYPE_LP_METER_RAW       15
 | |
| 
 | |
| /* low power meter type */
 | |
| #define GW_APP_LP_METER_TYPE_UNKNOWN        0
 | |
| #define GW_APP_LP_METER_TYPE_RPT_MOD_WM     4 /* report model water meter */
 | |
| #define GW_APP_LP_METER_TYPE_NORMAL_WM_GM   5 /* normal model water gas meter */
 | |
| #define GW_APP_LP_METER_TYPE_GAS_METER      6 /* gas meter */
 | |
| #define GW_APP_LP_METER_TYPE_HEAT_METER     7 /* heat meter */
 | |
| 
 | |
| /* low power meter frame type */
 | |
| #define GW_APP_LP_METER_CMD_BCAST_QR        1
 | |
| #define GW_APP_LP_METER_CMD_RSSI_QR         2
 | |
| #define GW_APP_LP_METER_CMD_MR              3
 | |
| #define GW_APP_LP_METER_CMD_DEV_TYPE_QR     4
 | |
| 
 | |
| /* rssi threshold value */
 | |
| #define GW_APP_LP_METRE_RSSI_THRESHOLD      95
 | |
| 
 | |
| /* secondary node register parameter */
 | |
| #define GW_APP_REG_PARAM_QUERY_RESULT       0
 | |
| #define GW_APP_REG_PARAM_START_REG          1
 | |
| #define GW_APP_REG_PARAM_LOCK               2
 | |
| #define GW_APP_REG_PARAM_QR_NODE_PARAM      3
 | |
| #define GW_APP_REG_PARAM_LP_METER           4
 | |
| #define GW_APP_REG_PARAM_STORAGE_DEV_TYPE   5
 | |
| #define GW_APP_REG_PARAM_NETWORK_LOCK       6
 | |
| 
 | |
| /* low power dev type definition */
 | |
| #define GW_APP_LP_DEV_TYPE_HPLC_COLLECTOR   1
 | |
| #define GW_APP_LP_DEV_TYPE_LP_COLLECTOR     2
 | |
| 
 | |
| /* guo wang device type definition */
 | |
| #define GW_APP_DEV_TYPE_POWER_METER         0
 | |
| #define GW_APP_DEV_TYPE_COLLECTOR_T1        1
 | |
| #define GW_APP_DEV_TYPE_COLLECTOR_T2        2
 | |
| 
 | |
| /* guo wang event function code definition */
 | |
| /* downlink function code */
 | |
| #define GW_APP_EVENT_FN_CONF_ACK            1
 | |
| #define GW_APP_EVENT_FN_ALLOW_RPT           2
 | |
| #define GW_APP_EVENT_FN_FORBID_RPT          3
 | |
| #define GW_APP_EVENT_FN_FULL_ACK            4
 | |
| /* uplink function code */
 | |
| /* event triggered by smart meter */
 | |
| #define GW_APP_EVENT_FN_METER_RPT           1
 | |
| /* event triggered by sta modular */
 | |
| #define GW_APP_EVENT_FN_STA_RPT             2
 | |
| /* event triggered by collector */
 | |
| #define GW_APP_EVENT_FN_COLLECTOR_RPT       3
 | |
| 
 | |
| /* bitmap type data */
 | |
| #define GW_APP_EVENT_TYPE_POWER_DOWN        1
 | |
| #define GW_APP_EVENT_TYPE_POWER_UP          2
 | |
| /* address type data */
 | |
| #define GW_APP_EVENT_TYPE_POWER_DOWN_ADDR   3
 | |
| #define GW_APP_EVENT_TYPE_POWER_UP_ADDR     4
 | |
| /* abnormal electric current event report for neutralwire and livewire */
 | |
| #define GW_APP_EVENT_TYPE_RPT_NLI_ABNORMAL  6
 | |
| /* phase type data */
 | |
| #define GW_APP_EVENT_TYPE_PHASE_SEQUENCE    0xA
 | |
| /* search meter result data */
 | |
| #define GW_APP_EVENT_TYPE_SEARCH_RESULT     0x32
 | |
| 
 | |
| /* guo wang frame priority definition */
 | |
| #define GW_APP_PRIO_METER_READ              3
 | |
| #define GW_APP_PRIO_CORRECTING_TIME         3
 | |
| #define GW_APP_PRIO_EVENT_REPORT            3
 | |
| #define GW_APP_PRIO_PING_TEST               3
 | |
| #define GW_APP_PRIO_SEC_NODE_REG            2
 | |
| #define GW_APP_PRIO_UPGRADE                 2
 | |
| #define GW_APP_PRIO_COMM_TEST               2
 | |
| #define GW_APP_PRIO_TSFM_DETECT             3
 | |
| #define GW_APP_PRIO_SET_STA_CLCT_PARAM      3
 | |
| #define GW_APP_PRIO_DEFAULT                 2
 | |
| 
 | |
| #define GW_APP_PRIO_PRIV_ACK                2
 | |
| 
 | |
| /* the max meter reading message length supported by Guowang concurrent
 | |
|  * meter reading, only for non-645 protocols.
 | |
|  */
 | |
| #define GW_APP_CON_MR_MAX_MSG_LEN           2000
 | |
| /* the max number of meter reading messages supported by Guowang concurrent
 | |
|  * meter reading, only for 645 protocols.
 | |
|  */
 | |
| #define GW_APP_CON_MR_MAX_MSG_CNT           13
 | |
| 
 | |
| /* guo wang upgrade block size definition */
 | |
| #define GW_APP_UPGRADE_BLOCK_1              100
 | |
| #define GW_APP_UPGRADE_BLOCK_2              200
 | |
| #define GW_APP_UPGRADE_BLOCK_3              300
 | |
| #define GW_APP_UPGRADE_BLOCK_4              400
 | |
| #define GW_APP_UPGRADE_BLOCK_MAX            GW_APP_UPGRADE_BLOCK_4
 | |
| 
 | |
| /* guo wang upgrade state */
 | |
| #define GW_APP_UPGRADE_ST_IDLE              0
 | |
| #define GW_APP_UPGRADE_ST_RECVING           1
 | |
| #define GW_APP_UPGRADE_ST_RECV_DONE         2
 | |
| #define GW_APP_UPGRADE_ST_EXECUTING         3
 | |
| #define GW_APP_UPGRADE_ST_TRAIL_RUN         4
 | |
| 
 | |
| /* OK to upgrade */
 | |
| #define GW_APP_UPGRADE_OK                   0
 | |
| /* receive request in invalid state */
 | |
| #define GW_APP_UPGRADE_STATE_ERR            1
 | |
| /* same version. don't upgrade */
 | |
| #define GW_APP_UPGRADE_ERR_SAME_VERSION     2
 | |
| /* flash operation error */
 | |
| #define GW_APP_UPGRADE_FLASH_ERROR          3
 | |
| /* don't upgrade in trail run state*/
 | |
| #define GW_APP_UPGRADE_TRAIL_RUN_REJ        4
 | |
| /* upgrade err because no memory */
 | |
| #define GW_APP_UPGRADE_ERR_NO_MEM           5
 | |
| /* block size error */
 | |
| #define GW_APP_UPGRADE_ERR_BLOCK_SIZE       6
 | |
| /* unknown error */
 | |
| #define GW_APP_UPGRADE_OTHER_ERR            7
 | |
| 
 | |
| /* guo wang upgrade block query definition */
 | |
| #define GW_APP_UPGRADE_QUERY_ALL_BLOCK          0xFFFF
 | |
| #define GW_APP_UPGRADE_QUERY_TRANSFER_ONGOING   0
 | |
| #define GW_APP_UPGRADE_QUERY_TRANSFER_DONE      1
 | |
| 
 | |
| /* station info element ID definition */
 | |
| #define GW_APP_STA_INFO_ID_VENDOR_ID        0
 | |
| #define GW_APP_STA_INFO_ID_VERSION          1
 | |
| #define GW_APP_STA_INFO_ID_BOOTLOADER       2
 | |
| #define GW_APP_STA_INFO_ID_CRC              3
 | |
| #define GW_APP_STA_INFO_ID_FILE_LEN         4
 | |
| #define GW_APP_STA_INFO_ID_DEV_TYPE         5
 | |
| #define GW_APP_STA_INFO_ID_MAX              5
 | |
| 
 | |
| #define GW_APP_STA_INFO_VENDOR_ID_LEN       2
 | |
| #define GW_APP_STA_INFO_VERSION_LEN         2
 | |
| #define GW_APP_STA_INFO_BOOTLOADER_LEN      1
 | |
| #define GW_APP_STA_INFO_CRC_LEN             4
 | |
| #define GW_APP_STA_INFO_FILE_SIZE_LEN       4
 | |
| #define GW_APP_STA_INFO_DEV_TYPE_LEN        1
 | |
| /* max element length */
 | |
| #define GW_APP_STA_INFO_MAX_LEN             4
 | |
| 
 | |
| /* guo wang power off bitmap TEI definitions */
 | |
| #define GW_APP_EVENT_TEI_FIRST              (1)
 | |
| #define GW_APP_EVENT_TEI_LAST               (PLC_NETWORK_SCALE)
 | |
| 
 | |
| #define GW_APP_EVENT_TEI_IS_VALID(__tei) \
 | |
|     ((__tei) >= GW_APP_EVENT_TEI_FIRST && (__tei) <= GW_APP_EVENT_TEI_LAST)
 | |
| 
 | |
| /* guo wang tei to bitmap index conversion */
 | |
| #define GW_APP_TEI_TO_BM(tei) (tei + 1)
 | |
| 
 | |
| /* guo wang bitmap index to tei conversion */
 | |
| #define GW_APP_BM_TO_TEI(bm)  ((uint16_t)((bm) - 1))
 | |
| 
 | |
| /* guo wang controller sub protocol Q/GDW 1376.2 */
 | |
| #define GW_APP_CTRL_PROTO_3762              (0)
 | |
| 
 | |
| /* guo wang controller sub protocol passthrough */
 | |
| #define GW_APP_CTRL_PROTO_PASSTHROUGH       (0)
 | |
| 
 | |
| /* guo wang controller primary request message flag */
 | |
| #define GW_APP_CTRL_PRM_MASTER              (1)
 | |
| #define GW_APP_CTRL_PRM_SLAVE               (0)
 | |
| 
 | |
| /* transformer detection feature type */
 | |
| #define GW_APP_TSFM_FEATURE_INVALID         (0)
 | |
| #define GW_APP_TSFM_FEATURE_VOLTAGE         (1)
 | |
| #define GW_APP_TSFM_FEATURE_FREQUENCY       (2)
 | |
| #define GW_APP_TSFM_FEATURE_PERIOD          (3)
 | |
| #define GW_APP_TSFM_FEATURE_POWER_FACTOR    (4)
 | |
| #define GW_APP_TSFM_FEATURE_CURRENT         (5)
 | |
| #define GW_APP_TSFM_FEATURE_SNR             (6)
 | |
| 
 | |
| /* transformer detection feature collection type */
 | |
| #define GW_APP_TSFM_COLLECT_START           (1)
 | |
| #define GW_APP_TSFM_COLLECT_COLLECT         (2)
 | |
| #define GW_APP_TSFM_COLLECT_REPORT          (3)
 | |
| #define GW_APP_TSFM_COLLECT_QUERY           (4)
 | |
| #define GW_APP_TSFM_COLLECT_RESULT          (5)
 | |
| /* set transformer address */
 | |
| #define GW_APP_TSFM_COLLECT_SET_TSFM_ADDR   (10)
 | |
| /* delete transformer address */
 | |
| #define GW_APP_TSFM_COLLECT_DEL_TSFM_ADDR   (11)
 | |
| 
 | |
| #define GW_APP_TSFM_COLLECT_QUERY_PW        (180)
 | |
| #define GW_APP_TSFM_COLLECT_RESULT_PW       (181)
 | |
| 
 | |
| /* transformer detect result */
 | |
| #define GW_APP_TSFM_DETECT_RET_UNKNOWN      (0)
 | |
| #define GW_APP_TSFM_DETECT_RET_SAME         (1)
 | |
| #define GW_APP_TSFM_DETECT_RET_DIFFERENT    (2)
 | |
| 
 | |
| /* collect type */
 | |
| #define GW_APP_TSFM_COLLECT_TYPE_DEFAULT    (0)
 | |
| #define GW_APP_TSFM_COLLECT_TYPE_FALLING    (1)
 | |
| #define GW_APP_TSFM_COLLECT_TYPE_RISING     (2)
 | |
| #define GW_APP_TSFM_COLLECT_TYPE_EDGE       (3)
 | |
| 
 | |
| /* guo wang protocol phase definition */
 | |
| #define GW_APP_DATA_PHASE_DEFAULT           (0)
 | |
| #define GW_APP_DATA_PHASE_A                 (1)
 | |
| #define GW_APP_DATA_PHASE_B                 (2)
 | |
| #define GW_APP_DATA_PHASE_C                 (3)
 | |
| 
 | |
| /* module id information length */
 | |
| #define GW_APP_MODULE_ID_INFO_LEN           (11)
 | |
| 
 | |
| /* chip id information length */
 | |
| #define GW_APP_CHIP_ID_INFO_LEN             (24)
 | |
| 
 | |
| /* id information type definition */
 | |
| #define GW_APP_ID_INFO_TYPE_MOD             (0)
 | |
| #define GW_APP_ID_INFO_TYPE_CHIP            (1)
 | |
| #define GW_APP_ID_INFO_TYPE_MOD_EXT         (2)
 | |
| 
 | |
| /* vendor information type definition */
 | |
| #define GW_APP_VENDOR_INFO_TYPE_VERSION     (0)
 | |
| 
 | |
| /* device type definition */
 | |
| #define GW_APP_ID_INFO_DEV_TYPE_METER_CONTROLLER    (1)
 | |
| #define GW_APP_ID_INFO_DEV_TYPE_CONCENTRATOR        (2)
 | |
| #define GW_APP_ID_INFO_DEV_TYPE_POWER_METER         (3)
 | |
| #define GW_APP_ID_INFO_DEV_TYPE_REPEAT              (4)
 | |
| #define GW_APP_ID_INFO_DEV_TYPE_COLLECTOR_2         (5)
 | |
| #define GW_APP_ID_INFO_DEV_TYPE_COLLECTOR_1         (6)
 | |
| #define GW_APP_ID_INFO_DEV_TYPE_THREE_PHASE_METER   (7)
 | |
| 
 | |
| #define GW_APP_BCAST_TO_1STA_ENABLE                 (0)
 | |
| 
 | |
| /* convert ntb to ms. in HW, the ntb clock freq is 25 mhz. */
 | |
| #define GW_APP_NTB_TO_MS(ntb)               ((ntb) / (25 * 1000))
 | |
| /* convert ms to ntb. in HW, the ntb clock freq is 25 mhz. */
 | |
| #define GW_APP_MS_TO_NTB(ms)                ((ms) * (25 * 1000))
 | |
| 
 | |
| /* phase sequence status is normal */
 | |
| #define GW_APP_PHASE_SEQ_STAUS_NORMAL         0
 | |
| /* phase sequence status is abnormal */
 | |
| #define GW_APP_PHASE_SEQ_STAUS_ABNORMAL       1
 | |
| 
 | |
| /* power meter type */
 | |
| #define GW_APP_PM_TYPE_SINGLE_PHASE        (0)
 | |
| #define GW_APP_PM_TYPE_THREE_PHASE         (1)
 | |
| 
 | |
| /* zc type */
 | |
| #define GW_APP_ZC_TYPE_FALLING_EDGE        (0)
 | |
| #define GW_APP_ZC_TYPE_RISING_EDGE         (1)
 | |
| 
 | |
| /* curve collect period, unit is 1min */
 | |
| #define GW_APP_CURVE_COLLECT_PERIOD_1MIN   (1)
 | |
| #define GW_APP_CURVE_COLLECT_PERIOD_5MIN   (5)
 | |
| #define GW_APP_CURVE_COLLECT_PERIOD_15MIN  (15)
 | |
| #define GW_APP_CURVE_COLLECT_PERIOD_30MIN  (30)
 | |
| #define GW_APP_CURVE_COLLECT_PERIOD_60MIN  (60)
 | |
| 
 | |
| /* lock time function code for zhejiang protocol */
 | |
| #define GW_APP_LOCK_TIME_FN_INVALID        (0)
 | |
| #define GW_APP_LOCK_TIME_FN_SET            (1)
 | |
| #define GW_APP_LOCK_TIME_FN_QUERY          (2)
 | |
| 
 | |
| /* secondary node network lock cmd control type */
 | |
| #define GW_APP_SEC_NODE_NW_LOCK_CMD_TYPE_UNLOCK     (0x00)
 | |
| 
 | |
| /* clock manager cmd type */
 | |
| #define GW_APP_CLOCK_MANAGER_AUTO_CORR     (1)
 | |
| #define GW_APP_CLOCK_MANAGER_THRESHOLD     (3)
 | |
| #define GW_APP_CLOCK_MANAGER_CORR_TIME     (4)
 | |
| 
 | |
| /* electric current length */
 | |
| #define GW_APP_ELECTRIC_CURRENT_LEN        (3)
 | |
| 
 | |
| /* abnormal electric current report time length for neutralwire and livewire */
 | |
| #define GW_APP_ABNORMAL_TIME_DATA_LEN      (6)
 | |
| 
 | |
| /* abnormal electric current command type for neutralwire and livewire */
 | |
| #define GW_APP_ABNORMAL_NLI_CMD_READ       (0)
 | |
| #define GW_APP_ABNORMAL_NLI_CMD_READ_REPLY (1)
 | |
| #define GW_APP_ABNORMAL_NLI_CMD_CFG        (2)
 | |
| #define GW_APP_ABNORMAL_NLI_CMD_CFG_REPLY  (3)
 | |
| 
 | |
| /* query module collect data respond result */
 | |
| #define GW_APP_QUERY_CLCT_RESULT_SUCCESS       (0)
 | |
| #define GW_APP_QUERY_CLCT_RESULT_TASK_NOT_EXIT (1)
 | |
| #define GW_APP_QUERY_CLCT_RESULT_NO_DATA       (2)
 | |
| #define GW_APP_QUERY_CLCT_RESULT_OTHER         (3)
 | |
| 
 | |
| /* module collect parameter task number for gw v2.8 protocol */
 | |
| #define GW_APP_V28_CLCT_PARAM_TASK_NUM_MAX     (7)
 | |
| #define GW_APP_V28_CLCT_PARAM_TASK_NUM_ALL     (0xFF)
 | |
| 
 | |
| /* module collect parameter config result for gw v2.8 protocol */
 | |
| #define GW_APP_V28_CLCT_PARAM_CFG_SUCCESS      (0)
 | |
| #define GW_APP_V28_CLCT_PARAM_CFG_FAIL         (1)
 | |
| 
 | |
| /* sta report minute collection function code for v2.8 */
 | |
| #define GW_APP_MIN_CLCT_RPT_FN_CFG_SET_REQ     (1)
 | |
| #define GW_APP_MIN_CLCT_RPT_FN_CFG_QUERY_REQ   (2)
 | |
| #define GW_APP_MIN_CLCT_RPT_FN_CFG_QUERY_RESP  (3)
 | |
| #define GW_APP_MIN_CLCT_RPT_FN_DATA_REPORT     (4)
 | |
| #define GW_APP_MIN_CLCT_RPT_FN_DATA_QUERY_REQ  (5)
 | |
| #define GW_APP_MIN_CLCT_RPT_FN_DATA_QUERY_RESP (6)
 | |
| 
 | |
| /* flag of sta report minute collection cfg for v2.8 */
 | |
| #define GW_APP_MIN_CLCT_RPT_CFG_FLAG_INVALID   (0)
 | |
| #define GW_APP_MIN_CLCT_RPT_CFG_FLAG_VALID     (1)
 | |
| 
 | |
| /* respond flag of minute collection cfg */
 | |
| #define GW_APP_MIN_CLCT_RPT_CFG_NO_NEED_RSP    (0)
 | |
| #define GW_APP_MIN_CLCT_RPT_CFG_NEED_RSP       (1)
 | |
| 
 | |
| /* production test cmd function code */
 | |
| #define GW_APP_PRODUCT_TEST_FN_SET_MAC         (0x04)
 | |
| #define GW_APP_PRODUCT_TEST_FN_QUERY_MAC       (0x05)
 | |
| #define GW_APP_PRODUCT_TEST_FN_QUERY_CHIP_ID   (0x16)
 | |
| #define GW_APP_PRODUCT_TEST_FN_QUERY_MOD_ID    (0x2a)
 | |
| #define GW_APP_PRODUCT_TEST_FN_QUERY_VER       (0x2f)
 | |
| #define GW_APP_PRODUCT_TEST_FN_QUERY_INTER     (0x3b)
 | |
| 
 | |
| /* chip info data length for production test cmd */
 | |
| #define GW_APP_PRODUCT_TEST_CHIP_LEN           24
 | |
| #define GW_APP_PRODUCT_TEST_MODE_LEN           11
 | |
| #define GW_APP_PRODUCT_TEST_VER_LEN            2
 | |
| 
 | |
| /* low power meter reading extend data field */
 | |
| typedef struct _gw_app_meter_r_lp_meter {
 | |
|     /* low power meter type, see GW_APP_LP_METER_TYPE_XXX */
 | |
|     uint8_t     lp_meter_type;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_meter_r_lp_meter_t;
 | |
| 
 | |
| /* meter reading payload from cco to sta */
 | |
| typedef struct _gw_app_meter_r_dl {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver             :6,
 | |
|     /* header length */
 | |
|                 header_len      :6,
 | |
|     /* timout retry */
 | |
|                 timeout_retry   :1,
 | |
|     /* nack retry */
 | |
|                 nack_retry      :1,
 | |
|     /* max retry count */
 | |
|                 max_retry       :2,
 | |
|     /* data type. see GW_APP_DATA_TYPE_XXX */
 | |
|                 data_type       :4,
 | |
|     /* data length */
 | |
|                 data_len        :12;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* communication time out used by sta while communicating with power meter
 | |
|      * and collector. unit is 100 ms.
 | |
|      */
 | |
|     uint8_t     timeout;
 | |
|     /* options */
 | |
|     uint8_t     option;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_meter_r_dl_t;
 | |
| 
 | |
| /* meter reading payload from sta to cco */
 | |
| typedef struct _gw_app_meter_r_ul {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* ack status */
 | |
|                 ack_status  :4,
 | |
|     /* data type. see GW_APP_DATA_TYPE_XXX */
 | |
|                 data_type   :4,
 | |
|     /* data length */
 | |
|                 data_len    :12;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* options */
 | |
|     uint16_t    option;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_meter_r_ul_t;
 | |
| 
 | |
| /* start secondary node register payload from cco to sta */
 | |
| typedef struct _gw_app_start_sec_node_reg {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* force ack flag */
 | |
|                 force_ack   :1,
 | |
|     /* register parameter */
 | |
|                 reg_param   :3,
 | |
|     /* reserved for future */
 | |
|                 reserved    :16;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
| } gw_app_start_sec_node_reg_t;
 | |
| 
 | |
| /* query secondary node register payload from cco to sta */
 | |
| typedef struct _gw_app_query_sec_node_reg_dl {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* force ack flag */
 | |
|                 force_ack   :1,
 | |
|     /* register parameter. see GW_APP_REG_PARAM_XXX */
 | |
|                 reg_param   :3,
 | |
|     /* reserved for future */
 | |
|                 reserved    :16;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* source mac address, big-endian */
 | |
|     uint8_t     source_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* destination mac address, big-endian */
 | |
|     uint8_t     dest_addr[IOT_MAC_ADDR_LEN];
 | |
| } gw_app_query_sec_node_reg_dl_t;
 | |
| 
 | |
| /* query whether sec node supports minute collection for jiangsu */
 | |
| typedef struct _gw_app_qr_storage_dev_type {
 | |
|     /* flag to mark if sec node support minute collection */
 | |
|     uint8_t     minute_clct :1,
 | |
|     /* reserved for future */
 | |
|                 reserved    :7;
 | |
| } gw_app_qr_storage_dev_type_t;
 | |
| 
 | |
| /* query secondary node register payload from cco to sta */
 | |
| typedef struct _gw_app_power_meter_info {
 | |
|     /* power meter mac address */
 | |
|     uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* power meter data type. see GW_APP_DATA_TYPE_XXX */
 | |
|     uint8_t     data_type;
 | |
|     /* module type. see GW_APP_DEV_TYPE_XXX */
 | |
|     uint8_t     module_type :4,
 | |
|     /* reserved for future */
 | |
|                 reserved    :4;
 | |
| } gw_app_power_meter_info_t;
 | |
| 
 | |
| /* query secondary node parameters */
 | |
| typedef struct _gw_app_sec_node_param {
 | |
|     /* physical phase of the device, bit0-2 means phaseA/B/C, set "1" to
 | |
|      * indicate which phase the device belongs to.
 | |
|      */
 | |
|     uint16_t    phase           :3,
 | |
|     /* power meter type 0 is single phase meter 1 is three phase meter,
 | |
|      * this bit replaces the reserved bit.
 | |
|      */
 | |
|                 meter_type      :1,
 | |
|     /* flag to mark if L/N reversed in Single-phase power meter or phase
 | |
|      * sequence reversed in Three-phase power meter.
 | |
|      */
 | |
|                 opposite_phase  :1,
 | |
|     /* flag to mark if physical phase identification done */
 | |
|                 detect_state    :1,
 | |
|     /* reserved for further */
 | |
|                 rsvd1           :10;
 | |
|     /* reserved for further */
 | |
|     uint8_t     rsvd2;
 | |
| } gw_app_sec_node_param_t;
 | |
| 
 | |
| /* secondary node network unlock cmd contol data for beijing */
 | |
| typedef struct _gw_app_sec_node_net_unlock_data {
 | |
|     /* delay time, unit is 1min */
 | |
|     uint8_t     delay;
 | |
|     /* reserved for further */
 | |
|     uint8_t     rsvd[3];
 | |
| } gw_app_sec_node_net_unlock_data_t;
 | |
| 
 | |
| /* secondary node network lock dl cmd for beijing */
 | |
| typedef struct _gw_app_sec_node_net_lock_cmd_dl {
 | |
|     /* control type, see GW_APP_SEC_NODE_NW_LOCK_CMD_TYPE_XXX */
 | |
|     uint8_t     control_type;
 | |
|     /* control data len */
 | |
|     uint8_t     control_data_len;
 | |
|     /* reserved for further */
 | |
|     uint16_t    rsvd;
 | |
|     /* contol data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_sec_node_net_lock_cmd_dl_t;
 | |
| 
 | |
| /* secondary node network lock ul cmd for beijing */
 | |
| typedef struct _gw_app_sec_node_net_lock_cmd_ul {
 | |
|     /* control type, see GW_APP_SEC_NODE_NW_LOCK_CMD_TYPE_XXX */
 | |
|     uint8_t     control_type;
 | |
|     /* control data len */
 | |
|     uint8_t     control_data_len;
 | |
|     /* reserved for further */
 | |
|     uint16_t    rsvd;
 | |
| } gw_app_sec_node_net_lock_cmd_ul_t;
 | |
| 
 | |
| /* query secondary node register payload from sta to cco */
 | |
| typedef struct _gw_app_query_sec_node_reg_ul {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver             :6,
 | |
|     /* header length */
 | |
|                 header_len      :6,
 | |
|     /* status */
 | |
|                 status          :1,
 | |
|     /* register parameter */
 | |
|                 reg_param       :3,
 | |
|     /* power meter count */
 | |
|                 pm_cnt          :8,
 | |
|     /* product type. see GW_APP_DEV_TYPE_XXX */
 | |
|                 product_type    :8;
 | |
|     /* device mac address */
 | |
|     uint8_t     dev_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* device ID */
 | |
|     uint8_t     dev_id[IOT_MAC_ADDR_LEN];
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* if support minutes collect */
 | |
|     uint32_t    clct_min        :1,
 | |
|     /* reserved for future */
 | |
|                 reserved        :31;
 | |
|     /* source mac address, big-endian */
 | |
|     uint8_t     source_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* destination mac address, big-endian */
 | |
|     uint8_t     dest_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* data */
 | |
|     gw_app_power_meter_info_t   pm[0];
 | |
| } gw_app_query_sec_node_reg_ul_t;
 | |
| 
 | |
| /* stop secondary node register payload from cco to sta */
 | |
| typedef struct _gw_app_stop_sec_node_reg {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :20;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
| } gw_app_stop_sec_node_reg_t;
 | |
| 
 | |
| /* correcting time payload from cco to sta */
 | |
| typedef struct _gw_app_correcting_time {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :8,
 | |
|     /* data length */
 | |
|                 data_len    :12;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_correcting_time_t;
 | |
| 
 | |
| /* correcting time extend payload from cco to sta */
 | |
| typedef struct _gw_app_correcting_time_ext {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :8,
 | |
|     /* data length */
 | |
|                 data_len    :12;
 | |
|     /* corresponding cco ntb of the correct time */
 | |
|     uint32_t    cco_ntb;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_correcting_time_ext_t;
 | |
| 
 | |
| /* accurate correcting time payload from cco to sta */
 | |
| typedef struct _gw_app_accurate_correct_time {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* data length */
 | |
|                 data_len    :12,
 | |
|     /* sequence */
 | |
|                 seq         :8;
 | |
|     /* corresponding cco ntb of the correct time */
 | |
|     uint32_t    cco_ntb;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_accurate_correct_time_t;
 | |
| 
 | |
| /* time of the clock manager */
 | |
| typedef struct _gw_app_clock_manager_corr_time {
 | |
|     /* corresponding cco ntb of the correct time */
 | |
|     uint32_t    cco_ntb;
 | |
|     /* time stamp, BCD code to represent */
 | |
|     uint8_t     sec;
 | |
|     uint8_t     min;
 | |
|     uint8_t     hour;
 | |
|     uint8_t     day;
 | |
|     uint8_t     month;
 | |
|     uint8_t     year_low_byte;
 | |
|     uint8_t     year_high_byte;
 | |
| } gw_app_clock_manager_corr_time_t;
 | |
| 
 | |
| /* clock manager payload from cco to sta */
 | |
| typedef struct _gw_app_clock_manager {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 reserved    :4;
 | |
|     /* meter addr, little endian */
 | |
|     uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* cmd type see GW_APP_CLOCK_MANAGER_XXX */
 | |
|     uint8_t     cmd_type;
 | |
|     /* data len */
 | |
|     uint8_t     data_len;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_clock_manager_t;
 | |
| 
 | |
| /* clock query payload from cco to sta */
 | |
| typedef struct _gw_app_clock_query_dl {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 reserved1   :4;
 | |
|     /* meter addr, little endian */
 | |
|     uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* reserved */
 | |
|     uint8_t     reserved2;
 | |
| } gw_app_clock_query_dl_t;
 | |
| 
 | |
| /* clock query payload from sta to cco */
 | |
| typedef struct _gw_app_clock_query_ul {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 reserved1   :4;
 | |
|     /* meter addr, little endian */
 | |
|     uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* switch of auto correct time */
 | |
|     uint8_t     auto_corr_switch;
 | |
|     /* reserved */
 | |
|     uint8_t     reserved2;
 | |
|     /* correct time threshold */
 | |
|     uint8_t     corr_threshold;
 | |
| } gw_app_clock_query_ul_t;
 | |
| 
 | |
| /* abnormal electric current enable reply for neutralwire and livewire */
 | |
| typedef struct _gw_app_nli_abnormal_enable_cmd_read_reply {
 | |
|     /* enable flag, 0 - disabled, 1 - enable */
 | |
|     uint8_t     enable;
 | |
| } gw_app_nli_abnormal_enable_cmd_read_reply_t;
 | |
| 
 | |
| /* abnormal electric current configuration for neutralwire and livewire */
 | |
| typedef struct _gw_app_nli_abnormal_cfg_cmd {
 | |
|     /* configuration enable flag , 0 - disabled, 1 - enable */
 | |
|     uint8_t     enable;
 | |
| } gw_app_nli_abnormal_cfg_cmd_t;
 | |
| 
 | |
| /* abnormal electric current configuration reply for neutralwire and livewire */
 | |
| typedef struct _gw_app_nli_abnormal_cfg_cmd_reply {
 | |
|     /* configuration result , 0 - success, 1 - fail */
 | |
|     uint8_t     result;
 | |
| } gw_app_nli_abnormal_cfg_cmd_reply_t;
 | |
| 
 | |
| /* abnormal electric current enable command for neutralwire and livewire */
 | |
| typedef struct _gw_app_nli_abnormal_enable_cmd {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag */
 | |
|                 dir         :1,
 | |
|     /* start flag */
 | |
|                 start       :1,
 | |
|     /* reserved */
 | |
|                 rsvd        :2;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* source mac address, it's cco addr in down link,
 | |
|      * it's sta addr in up link, little endian.
 | |
|      */
 | |
|     uint8_t     src_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* command type, see GW_APP_ABNORMAL_NLI_CMD_XXX */
 | |
|     uint8_t     cmd_type;
 | |
|     /* data length */
 | |
|     uint8_t     data_len;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_nli_abnormal_enable_cmd_t;
 | |
| 
 | |
| /* event report payload between cco and sta */
 | |
| typedef struct _gw_app_event_report {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag */
 | |
|                 dir         :1,
 | |
|     /* start flag */
 | |
|                 start       :1,
 | |
|     /* function code. see GW_APP_EVENT_FN_XXX */
 | |
|                 fn          :6,
 | |
|     /* data length */
 | |
|                 data_len    :12;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* power meter mac address */
 | |
|     uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_event_report_t;
 | |
| 
 | |
| /* abnormal electric current data for neutralwire and livewire */
 | |
| typedef struct _gw_app_nli_abnormal_data {
 | |
|     /* power meter address, little endian */
 | |
|     uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* phase electric current */
 | |
|     uint8_t     phase_electric[GW_APP_ELECTRIC_CURRENT_LEN];
 | |
|     /* neutralwire electric current */
 | |
|     uint8_t     neutralwire_electric[GW_APP_ELECTRIC_CURRENT_LEN];
 | |
|     /* electric current for neutralwire and livewire */
 | |
|     uint8_t     nl_electric[GW_APP_ELECTRIC_CURRENT_LEN];
 | |
|     /* abnormal time, bcd format */
 | |
|     uint8_t     time[GW_APP_ABNORMAL_TIME_DATA_LEN];
 | |
| } gw_app_nli_abnormal_data_t;
 | |
| 
 | |
| /* event report abnormal electric current data for neutralwire and livewire */
 | |
| typedef struct _gw_app_event_nli_abnormal_data {
 | |
|     /* report cnt */
 | |
|     uint16_t    rpt_cnt;
 | |
|     /* abnormal data for neutralwire and livewire */
 | |
|     gw_app_nli_abnormal_data_t   nl_data[0];
 | |
| } gw_app_event_nli_abnormal_data_t;
 | |
| 
 | |
| /* event data field */
 | |
| typedef struct _gw_app_evt_data_field {
 | |
|     /* event type, see GW_APP_EVENT_TYPE_XXX */
 | |
|     uint8_t     evt_type;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_evt_data_field_t;
 | |
| 
 | |
| /* bitmap type for event data field */
 | |
| typedef struct _gw_app_evt_data_bitmap {
 | |
|     /* the tei of the start bit in the bitmap */
 | |
|     uint16_t    tei;
 | |
|     /* tei map */
 | |
|     uint8_t     map[0];
 | |
| } gw_app_evt_data_bitmap_t;
 | |
| 
 | |
| /* power meter info for power event report */
 | |
| typedef struct _gw_app_power_evt_pm_info {
 | |
|     /* power meter mac address */
 | |
|     uint8_t     mac[IOT_MAC_ADDR_LEN];
 | |
|     /* 0 - power off, 1- power on */
 | |
|     uint8_t     power_state;
 | |
| } gw_app_power_evt_pm_info_t;
 | |
| 
 | |
| /* addr type for event data field */
 | |
| typedef struct _gw_app_evt_data_addr {
 | |
|     /* power meter count */
 | |
|     uint16_t                   pm_count;
 | |
|     /* power meter info */
 | |
|     gw_app_power_evt_pm_info_t pm_info[0];
 | |
| } gw_app_evt_data_addr_t;
 | |
| 
 | |
| /* phase sequence type for event data field */
 | |
| typedef struct _gw_app_phase_seq_info {
 | |
|     /* three phase meter addr */
 | |
|     uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* phase sequence status, see GW_APP_PHASE_SEQUENCE_STAUS_XXX */
 | |
|     uint8_t     phase_seq_status;
 | |
| } gw_app_phase_seq_info_t;
 | |
| 
 | |
| /* meter info for search pm result event report */
 | |
| typedef struct _gw_app_search_pm_info {
 | |
|     /* meter mac address, little-endian */
 | |
|     uint8_t     mac[IOT_MAC_ADDR_LEN];
 | |
|     /* pm protocol type, see PROTO_TYPE_XXX */
 | |
|     uint8_t     proto_type;
 | |
| } gw_app_search_pm_info_t;
 | |
| 
 | |
| /* search pm result for event data field */
 | |
| typedef struct _gw_app_evt_search_data {
 | |
|     /* collector or pm moudle mac, little-endian */
 | |
|     uint8_t     dev_mac[IOT_MAC_ADDR_LEN];
 | |
|     /* power meter count */
 | |
|     uint8_t     pm_count;
 | |
|     /* search meter result info */
 | |
|     gw_app_search_pm_info_t pm_info[0];
 | |
| } gw_app_evt_search_data_t;
 | |
| 
 | |
| /* ping test payload from cco to sta */
 | |
| typedef struct _gw_app_comm_test {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :4,
 | |
|     /* data type. see see GW_APP_DATA_TYPE_XXX */
 | |
|                 data_type   :4,
 | |
|     /* data length */
 | |
|                 data_len    :12;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_comm_test_t;
 | |
| 
 | |
| /* ctrl proto payload */
 | |
| typedef struct _gw_app_ctrl_proto {
 | |
|     /* protocol type, see GW_APP_CTRL_PROTO_XXX */
 | |
|     uint8_t     proto_type;
 | |
|     /* data length */
 | |
|     uint16_t    data_len;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_ctrl_proto_t;
 | |
| 
 | |
| /* ctrl passthrough proto payload */
 | |
| typedef struct _gw_app_ctrl_proto_passthrough {
 | |
|     /* passthrough data protocol type, see GW_APP_CTRL_PROTO_XXX */
 | |
|     uint8_t     proto_type;
 | |
|     /* primary request message flag, see GW_APP_CTRL_PRM_XXX */
 | |
|     uint8_t     prm  : 1,
 | |
|     /* reserve1 for future */
 | |
|                 rsvd1: 7;
 | |
|     /* baudrate: small endian */
 | |
|     uint8_t     baud[4];
 | |
|     /* reserve2 for future */
 | |
|     uint32_t    rsvd2;
 | |
|     /* data length */
 | |
|     uint16_t    data_len;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_ctrl_proto_passthrough_t;
 | |
| 
 | |
| /* ack and nack payload between cco and sta */
 | |
| typedef struct _gw_app_ack_nack {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag */
 | |
|                 dir         :1,
 | |
|     /* ack flag */
 | |
|                 ack         :1,
 | |
|     /* reserved for future */
 | |
|                 reserved    :2;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* options */
 | |
|     uint16_t    option;
 | |
| } gw_app_ack_nack_t;
 | |
| 
 | |
| /* start upgrade payload from cco to sta */
 | |
| typedef struct _gw_app_start_upgrade_dl {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :20;
 | |
|     /* upgrade id */
 | |
|     uint32_t    id;
 | |
|     /* upgrade time window. uint is 1 minute */
 | |
|     uint16_t    window;
 | |
|     /* upgrade block size. see GW_APP_UPGRADE_BLOCK_XXX */
 | |
|     uint16_t    block_size;
 | |
|     /* upgrade file size */
 | |
|     uint32_t    file_size;
 | |
|     /* file crc */
 | |
|     uint32_t    file_crc;
 | |
| } gw_app_start_upgrade_dl_t;
 | |
| 
 | |
| /* start upgrade payload from sta to cco */
 | |
| typedef struct _gw_app_start_upgrade_ul {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :12,
 | |
|     /* start upgrade result code. 0 for success, non zero for failure case */
 | |
|                 result      :8;
 | |
|     /* upgrade id */
 | |
|     uint32_t    id;
 | |
| } gw_app_start_upgrade_ul_t;
 | |
| 
 | |
| /* stop upgrade payload from cco to sta */
 | |
| typedef struct _gw_app_stop_upgrade {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :20;
 | |
|     /* upgrade id */
 | |
|     uint32_t    id;
 | |
| } gw_app_stop_upgrade_t;
 | |
| 
 | |
| /* transfer file payload from cco to sta */
 | |
| typedef struct _gw_app_transfer_file {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :4;
 | |
|     /* block size */
 | |
|     uint16_t    size;
 | |
|     /* upgrade id */
 | |
|     uint32_t    id;
 | |
|     /* block sequence */
 | |
|     uint32_t    seq;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_transfer_file_t;
 | |
| 
 | |
| /* query upgrade payload from cco to sta */
 | |
| typedef struct _gw_app_query_upgrade_status_dl {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :4;
 | |
|     /* number of consecutive blocks to be queried. 0xFFFF means all blocks.
 | |
|      * see GW_APP_UPGRADE_QUERY_ALL_BLOCK.
 | |
|      */
 | |
|     uint16_t    cnt;
 | |
|     /* sequence of first block to be queried */
 | |
|     uint32_t    start_seq;
 | |
|     /* upgrade id */
 | |
|     uint32_t    id;
 | |
| } gw_app_query_upgrade_status_dl_t;
 | |
| 
 | |
| /* query upgrade payload from sta to cco */
 | |
| typedef struct _gw_app_query_upgrade_status_ul {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* upgrade status. See GW_APP_UPGRADE_QUERY_TRANSFER_XXX  */
 | |
|                 status      :4;
 | |
|     /* number of available blocks */
 | |
|     uint16_t    cnt;
 | |
|     /* sequence of first block to be queried */
 | |
|     uint32_t    start_seq;
 | |
|     /* upgrade id */
 | |
|     uint32_t    id;
 | |
|     /* bitmap to show blocks received */
 | |
|     uint8_t     bm[0];
 | |
| } gw_app_query_upgrade_status_ul_t;
 | |
| 
 | |
| /* execute upgrade payload from cco to sta */
 | |
| typedef struct _gw_app_execute_upgrade {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :4;
 | |
|     /* wait for reset duration */
 | |
|     uint16_t    reset_dur;
 | |
|     /* upgrade id */
 | |
|     uint32_t    id;
 | |
|     /* trial run duration */
 | |
|     uint32_t    trial_run_dur;
 | |
| } gw_app_execute_upgrade_t;
 | |
| 
 | |
| /* query station payload from cco to sta */
 | |
| typedef struct _gw_app_query_station_dl {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :12,
 | |
|     /* number of id in the info element id list */
 | |
|                 cnt         :8;
 | |
|     /* info element id list. see GW_APP_STA_INFO_ID_XXX */
 | |
|     uint8_t     id[0];
 | |
| } gw_app_query_station_dl_t;
 | |
| 
 | |
| /* station information element */
 | |
| typedef struct _gw_app_sta_info_element {
 | |
|     /* info element id. see GW_APP_STA_INFO_ID_XXX */
 | |
|     uint8_t     id;
 | |
|     /* data length */
 | |
|     uint8_t     len;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_sta_info_element_t;
 | |
| 
 | |
| /* query station payload from sta to cco */
 | |
| typedef struct _gw_app_query_station_ul {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :12,
 | |
|     /* number of element in the info element list */
 | |
|                 cnt         :8;
 | |
|     /* upgrade id */
 | |
|     uint32_t    id;
 | |
|     /* info element list. see gw_app_sta_info_element_t. */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_query_station_ul_t;
 | |
| 
 | |
| /* transformer detect package */
 | |
| typedef struct _gw_app_tsfm_detect {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         :1,
 | |
|     /* start flag, 0 - from slave, 1 - from master */
 | |
|                 start       :1,
 | |
|     /* collect phase, see GW_APP_DATA_PHASE_XXX. */
 | |
|                 phase       :2;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* cco mac address or sta mac address, big-endian */
 | |
|     uint8_t     addr[IOT_MAC_ADDR_LEN];
 | |
|     /* transformer feature type, see GW_APP_TSFM_FEATURE_XXX */
 | |
|     uint8_t     feature_type;
 | |
|     /* transformer feature collection type, see GW_APP_TSFM_COLLECT_XXX */
 | |
|     uint8_t     collect_type;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_tsfm_detect_t;
 | |
| 
 | |
| /* transformer feature collection snr request */
 | |
| typedef struct _gw_app_tsfm_collect_snr_req {
 | |
|     /* start index */
 | |
|     uint16_t    index;
 | |
|     /* count */
 | |
|     uint8_t     cnt;
 | |
| } gw_app_tsfm_collect_snr_req_t;
 | |
| 
 | |
| /* sta neighbor node info uint structure */
 | |
| typedef struct _gw_app_neighbor_node_info {
 | |
|     /* neighbor node tei */
 | |
|     uint16_t    tei;
 | |
|     /* neighbor node mac address, big-endian */
 | |
|     uint8_t     mac[IOT_MAC_ADDR_LEN];
 | |
|     /* snr between neighbor node and local node */
 | |
|     int8_t      snr;
 | |
| } gw_app_neighbor_node_info_t;
 | |
| 
 | |
| /* transformer feature collection snr resp */
 | |
| typedef struct _gw_app_tsfm_collect_snr_resp {
 | |
|     /* NTB at the start of the first collection */
 | |
|     uint32_t    start_ntb;
 | |
|     /* neighbor node total cnt */
 | |
|     uint16_t    total_cnt;
 | |
|     /* start index */
 | |
|     uint16_t    index;
 | |
|     /* resp count */
 | |
|     uint8_t     resp_cnt;
 | |
|     /* neighbor node info */
 | |
|     gw_app_neighbor_node_info_t node_info[0];
 | |
| } gw_app_tsfm_collect_snr_resp_t;
 | |
| 
 | |
| /* transformer feature collection type package.
 | |
|  * GW_APP_TSFM_COLLECT_START package
 | |
|  */
 | |
| typedef struct _gw_app_tsfm_collect_start {
 | |
|     /* NTB at the start of the whole network collection */
 | |
|     uint32_t   start_ntb;
 | |
|     /* collection interval, uint is 1s. when transformer
 | |
|      * feature type is GW_APP_TSFM_FEATURE_PERIOD, interval
 | |
|      * is invalid.
 | |
|      */
 | |
|     uint8_t    interval;
 | |
|     /* collection cnt */
 | |
|     uint8_t    cnt;
 | |
|     /* collection sequence, the sequence is generated by CCO
 | |
|      * the value range of sequence is 1-255.
 | |
|      */
 | |
|     uint8_t    seq;
 | |
|     /* reserve for future */
 | |
|     uint8_t    rsvd;
 | |
| } gw_app_tsfm_collect_start_t;
 | |
| 
 | |
| /* transformer feature collection type package.
 | |
|  * GW_APP_TSFM_COLLECT_REPORT package
 | |
|  */
 | |
| typedef struct _gw_app_tsfm_collect_report {
 | |
|     /* tei of cco or sta */
 | |
|     uint16_t   tei          :12,
 | |
|     /* collect type, see GW_APP_TSFM_COLLECT_TYPE_XXX.
 | |
|      * valid only in the GW_APP_TSFM_FEATURE_PERIOD.
 | |
|      */
 | |
|                clct_type    :2,
 | |
|     /* reserved for future */
 | |
|                rsvd         :2;
 | |
|     /* collection sequence, the sequence is generated by CCO
 | |
|      * the value range of sequence is 1-255.
 | |
|      */
 | |
|     uint8_t    seq;
 | |
|     /* report feature total cnt */
 | |
|     uint8_t    cnt;
 | |
|     /* transformer feature collection data */
 | |
|     uint8_t    data[0];
 | |
| } gw_app_tsfm_collect_report_t;
 | |
| 
 | |
| /* transformer feature collection data */
 | |
| typedef struct _gw_app_tsfm_collect_data {
 | |
|     /* NTB at the start of the first collection */
 | |
|     uint32_t   start_ntb;
 | |
|     /* reserved for future */
 | |
|     uint8_t    rsvd;
 | |
|     /* phase a report count */
 | |
|     uint8_t    phase1_cnt;
 | |
|     /* phase b report count */
 | |
|     uint8_t    phase2_cnt;
 | |
|     /* phase c report count */
 | |
|     uint8_t    phase3_cnt;
 | |
|     /* feature data */
 | |
|     int16_t    data[0];
 | |
| } gw_app_tsfm_collect_data_t;
 | |
| 
 | |
| /* transformer detection feature type package.
 | |
|  * GW_APP_TSFM_FEATURE_VOLTAGE package
 | |
|  */
 | |
| typedef struct _gw_app_tsfm_collect_v {
 | |
|     /* A phase voltage. use 2 bytes of BCD code to represent the voltage.
 | |
|      * for example, 220.0V uses 2 bytes of BCD code to represent
 | |
|      * the following 0x22, 0x00.
 | |
|      */
 | |
|     uint8_t    bcd[PROTO_645_V_LEN];
 | |
| } gw_app_tsfm_collect_v_t;
 | |
| 
 | |
| /* transformer detection feature type package.
 | |
|  * GW_APP_TSFM_FEATURE_FREQUENCY package
 | |
|  */
 | |
| typedef struct _gw_app_tsfm_collect_freq {
 | |
|     /* frequency. use 2 bytes of BCD code to represent the frequency.
 | |
|      * for example, 50.00V uses 2 bytes of BCD code to represent
 | |
|      * the following 0x50, 0x00.
 | |
|      */
 | |
|     uint8_t    bcd[PROTO_645_FREQ_LEN];
 | |
| } gw_app_tsfm_collect_freq_t;
 | |
| 
 | |
| /* transformer detection feature type package.
 | |
|  * GW_APP_TSFM_FEATURE_PERIOD package
 | |
|  */
 | |
| typedef struct _gw_app_tsfm_collect_period {
 | |
|     /* Each period value represents the difference
 | |
|      * between a zero-crossing period and 20ms.
 | |
|      * unit is 1/3125000S (the 8-minute frequency
 | |
|      * of the counting frequency is 25MHz, that is
 | |
|      * 3.125 MHz).
 | |
|      */
 | |
|     int16_t     period;
 | |
| } gw_app_tsfm_collect_period_t;
 | |
| 
 | |
| /* transformer detection feature type package.
 | |
|  * GW_APP_TSFM_FEATURE_POWER_FACTOR package
 | |
|  */
 | |
| typedef struct _gw_app_tsfm_collect_pf {
 | |
|     /* A phase power factor.use 2 bytes of BCD code to represent the power
 | |
|      * factor. for example, 0.999 uses 2 bytes of BCD code to represent
 | |
|      * the following 0x09, 0x99. */
 | |
|     uint8_t    bcd[PROTO_645_07_PF_LEN];
 | |
| } gw_app_tsfm_collect_pf_t;
 | |
| 
 | |
| /* transformer detection feature type package.
 | |
|  * GW_APP_TSFM_FEATURE_CURRENT package
 | |
|  */
 | |
| typedef struct _gw_app_tsfm_collect_a {
 | |
|     /* A phase current.use 3 bytes of BCD code to represent the current.
 | |
|      * for example, 123.456A uses 3 bytes of BCD code to represent
 | |
|      * the following 0x12, 0x34, 0x56. */
 | |
|     uint8_t    bcd[PROTO_645_07_A_LEN];
 | |
| } gw_app_tsfm_collect_a_t;
 | |
| 
 | |
| /* transformer detect result */
 | |
| typedef struct _gw_app_tsfm_detect_result {
 | |
|     /* node tei */
 | |
|     uint16_t    tei;
 | |
|     /* 0 - transformer detect in progress, 1 - transformer detect done */
 | |
|     uint8_t     done;
 | |
|     /* see GW_APP_TSFM_DETECT_RET_XXX */
 | |
|     uint8_t     result;
 | |
|     /* real transformer mac address, big-endian */
 | |
|     uint8_t     tsfm_addr[IOT_MAC_ADDR_LEN];
 | |
| } gw_app_tsfm_detect_result_t;
 | |
| 
 | |
| /* private protocol transformer detect result down-link */
 | |
| typedef struct _gw_app_tsfm_detect_result_pw_dl {
 | |
|     /* sn required to be reported, range of sn is 1-31 */
 | |
|     uint8_t     sn;
 | |
| } gw_app_tsfm_detect_result_pw_dl_t;
 | |
| 
 | |
| /* private protocol node info data */
 | |
| typedef struct _gw_app_tsfm_node_info_pw {
 | |
|     /* node address, little-endian */
 | |
|     uint8_t  addr[IOT_MAC_ADDR_LEN];
 | |
|     /* reserve for future */
 | |
|     uint8_t  reserve1;
 | |
|     /* node protocol type, see GW_APP_DATA_TYPE_XXX */
 | |
|     uint8_t  pro_type : 4,
 | |
|     /* node device type, see GW_APP_ID_INFO_DEV_TYPE_XXX */
 | |
|              dev_type : 4;
 | |
|     /* reserve for future */
 | |
|     uint8_t  reserve2;
 | |
| } gw_app_tsfm_node_info_pw_t;
 | |
| 
 | |
| /* private protocol transformer detect result up-link */
 | |
| typedef struct _gw_app_tsfm_detect_result_pw_ul {
 | |
|     /* node tei */
 | |
|     uint16_t    tei;
 | |
|     /* 0 - transformer detect in progress, 1 - transformer detect done */
 | |
|     uint8_t     done     : 2,
 | |
|     /* follow data of flag. 1 - there is follow-up data.
 | |
|      * 0 - there is no follow-up data.
 | |
|      */
 | |
|                 flw_flag : 1,
 | |
|     /* rpt sn, range of sn is 1-31 */
 | |
|                 sn       : 5;
 | |
|     /* see GW_APP_TSFM_DETECT_RET_XXX */
 | |
|     uint8_t     result   : 2,
 | |
|     /* number of nodes of same tsfm found by the device */
 | |
|                 node_cnt : 6;
 | |
|     /* real transformer mac address, big-endian */
 | |
|     uint8_t     tsfm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* hardware transformer mac address, big-endian */
 | |
|     uint8_t     hw_tsfm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* node info data */
 | |
|     gw_app_tsfm_node_info_pw_t node[0];
 | |
| } gw_app_tsfm_detect_result_pw_ul_t;
 | |
| 
 | |
| typedef struct _gw_app_tsfm_detect_set_tsfm_addr {
 | |
|     /* transformer address, big endian */
 | |
|     uint8_t     tsfm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* reserved */
 | |
|     uint16_t    rsvd;
 | |
| } gw_app_tsfm_detect_set_tsfm_addr_t;
 | |
| 
 | |
| /* query module id information from sta */
 | |
| typedef struct _gw_app_query_module_id_dl {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         :1,
 | |
|     /* id type, see GW_APP_ID_INFO_TYPE_xxx */
 | |
|                 id_type     :3;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
| } gw_app_query_module_id_dl_t;
 | |
| 
 | |
| /* report module id information to cco, hunan province extend protocol */
 | |
| typedef struct _gw_app_query_module_id_ul_hn {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         :1,
 | |
|     /* reserved for future. */
 | |
|                 rsvd        :3;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* module id length */
 | |
|     uint8_t     module_id_len;
 | |
|     /* module id information */
 | |
|     uint8_t     module_info[GW_APP_MODULE_ID_INFO_LEN];
 | |
| } gw_app_query_module_id_ul_hn_t;
 | |
| 
 | |
| /* report module id information to cco */
 | |
| typedef struct _gw_app_query_module_id_ul {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         :1,
 | |
|     /* id type, see GW_APP_ID_INFO_TYPE_xxx */
 | |
|                 id_type     :3;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* module id length */
 | |
|     uint8_t     module_id_len;
 | |
|     /* module id information */
 | |
|     uint8_t     module_info[GW_APP_MODULE_ID_INFO_LEN];
 | |
|     /* device type, see GW_APP_ID_INFO_DEV_TYPE_xxx */
 | |
|     uint8_t     dev_type;
 | |
| } gw_app_query_module_id_ul_t;
 | |
| 
 | |
| /* report chip id information to cco */
 | |
| typedef struct _gw_app_query_chip_id_ul {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         :1,
 | |
|     /* id type, see GW_APP_ID_INFO_TYPE_xxx */
 | |
|                 id_type     :3;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* chip id length */
 | |
|     uint8_t     chip_id_len;
 | |
|     /* chip id information */
 | |
|     uint8_t     chip_info[GW_APP_CHIP_ID_INFO_LEN];
 | |
|     /* device type, see GW_APP_ID_INFO_DEV_TYPE_xxx */
 | |
|     uint8_t     dev_type;
 | |
| } gw_app_query_chip_id_ul_t;
 | |
| 
 | |
| /* query vendor specific information from sta */
 | |
| typedef struct _gw_app_query_vendor_info_dl {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         : 6,
 | |
|     /* header length */
 | |
|                 header_len  : 6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         : 1,
 | |
|     /* reserved */
 | |
|                 rsvd        : 3;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* info type, see GW_APP_VENDOR_INFO_TYPE_XXX */
 | |
|     uint8_t     info_type;
 | |
|     /* length of data */
 | |
|     uint16_t    data_len;
 | |
|     /* data specific info to be queried. it's optional. */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_query_vendor_info_dl_t;
 | |
| 
 | |
| /* report queried vendor specific information to CCo. */
 | |
| typedef struct _gw_app_query_vendor_info_ul {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         : 6,
 | |
|     /* header length */
 | |
|                 header_len  : 6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         : 1,
 | |
|     /* reserved */
 | |
|                 rsvd        : 3;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* info type, see GW_APP_VENDOR_INFO_TYPE_XXX */
 | |
|     uint8_t     info_type;
 | |
|     /* length of data */
 | |
|     uint16_t    data_len;
 | |
|     /* data with queried information */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_query_vendor_info_ul_t;
 | |
| 
 | |
| /* sta correct time */
 | |
| typedef struct _gw_app_sta_correct_time {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 rsvd        :4;
 | |
|     /* packet sequence */
 | |
|     uint16_t    rsvd1       :4,
 | |
|     /* data len */
 | |
|                 data_len    :12;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_sta_correct_time_t;
 | |
| 
 | |
| /* query meter parameter from sta */
 | |
| typedef struct _gw_app_query_meter_param_dl {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 rsvd        :4;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* source mac address, big-endian */
 | |
|     uint8_t     src_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* destination mac address, big-endian */
 | |
|     uint8_t     dest_addr[IOT_MAC_ADDR_LEN];
 | |
| } gw_app_query_meter_param_dl_t;
 | |
| 
 | |
| /* report meter parameter to cco */
 | |
| typedef struct _gw_app_query_meter_param_ul {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 rsvd        :4;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* source mac address, big-endian */
 | |
|     uint8_t     src_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* destination mac address, big-endian */
 | |
|     uint8_t     dest_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* power meter type, see GW_APP_PM_TYPE_XXX */
 | |
|     uint8_t     pm_type     :4,
 | |
|     /* zc type, see GW_APP_ZC_TYPE_XXX */
 | |
|                 zc_type     :4;
 | |
|     /* reserved */
 | |
|     uint8_t     rsvd1[4];
 | |
| } gw_app_query_meter_param_ul_t;
 | |
| 
 | |
| /* set module collect parameter */
 | |
| typedef struct _gw_app_set_module_clct_param_dl {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 rsvd        :4;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* source mac address, big-endian */
 | |
|     uint8_t     src_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* destination mac address, big-endian */
 | |
|     uint8_t     dest_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* reserved */
 | |
|     uint16_t    rsvd1       :4,
 | |
|     /* data len */
 | |
|                 data_len    :12;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_set_module_clct_param_dl_t;
 | |
| 
 | |
| /* di and result length */
 | |
| typedef struct _gw_app_di_info {
 | |
|     /* di */
 | |
|     uint32_t            di;
 | |
|     /* meter reading result length */
 | |
|     uint8_t             di_result_len;
 | |
| } gw_app_di_info_t;
 | |
| 
 | |
| /* set module collect parameter for v2.8 */
 | |
| typedef struct _gw_app_set_module_clct_param_dl_v28 {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver :        6,
 | |
|     /* header length */
 | |
|                 header_len : 6,
 | |
|     /* reserved */
 | |
|                 rsvd :       4;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* destination mac address, big-endian */
 | |
|     uint8_t     dest_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* task number 0 ~ 7, 0xFF is all tasks.
 | |
|      * see GW_APP_V28_CLCT_PARAM_TASK_NUM_XXX
 | |
|      */
 | |
|     uint8_t     task_num;
 | |
|     /* 0 - disabled, 1 - enabled */
 | |
|     uint8_t     enabled :    1,
 | |
|     /* 2 - DL/T645-2007, 3 - DL/T 698.45, otherwise - reserved */
 | |
|                 proto_type : 3,
 | |
|     /* 0 - single phase meter, 1 - three phase meter */
 | |
|                 pm_type :    2,
 | |
|     /* reserved */
 | |
|                 rsvd1 :      2;
 | |
|     /* unit is 1min, see GW_APP_CURVE_COLLECT_PERIOD_XXX */
 | |
|     uint8_t     clct_period;
 | |
|     /* di count */
 | |
|     uint8_t     di_cnt;
 | |
|     /* di information */
 | |
|     gw_app_di_info_t di_info[0];
 | |
| } gw_app_set_module_clct_param_dl_v28_t;
 | |
| 
 | |
| typedef struct _gw_app_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 */
 | |
|     gw_app_di_info_t    di_info[0];
 | |
| } gw_app_meter_clct_param_t;
 | |
| 
 | |
| /* sta collect parameter */
 | |
| typedef struct _gw_app_module_clct_param {
 | |
|     /* 0 - disabled, 1 - enabled */
 | |
|     uint8_t             enabled;
 | |
|     /* unit is 1min, see GW_APP_CURVE_COLLECT_PERIOD_XXX */
 | |
|     uint8_t             clct_period;
 | |
|     /* 2 - DL/T645-2007, otherwise - reserved */
 | |
|     uint8_t             proto_type;
 | |
|     /* collect parameter */
 | |
|     //gw_app_meter_clct_param_t clct_param[0];
 | |
| } gw_app_module_clct_param_t;
 | |
| 
 | |
| /* report module collect parameter config */
 | |
| typedef struct _gw_app_set_module_clct_param_ul {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 rsvd        :4;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* source mac address, big-endian */
 | |
|     uint8_t     src_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* destination mac address, big-endian */
 | |
|     uint8_t     dest_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* 0 - success, 1 - fail */
 | |
|     uint8_t     result;
 | |
|     /* reserved */
 | |
|     uint16_t    rsvd1;
 | |
| } gw_app_set_module_clct_param_ul_t;
 | |
| 
 | |
| /* report module collect parameter config for v2.8 */
 | |
| typedef struct _gw_app_set_module_clct_param_ul_v28 {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 rsvd        :4;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* source mac address, big-endian */
 | |
|     uint8_t     src_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* task number 0 ~ 7, 0xFF is all tasks,
 | |
|      * see GW_APP_V28_CLCT_PARAM_TASK_NUM_XXX.
 | |
|      */
 | |
|     uint8_t     task_num;
 | |
|     /* 0 - disabled, 1 - enabled */
 | |
|     uint8_t     enabled     :1,
 | |
|     /* configuration result , 0 - success, 1 - fail,
 | |
|      * see GW_APP_V28_CLCT_PARAM_CFG_XXX.
 | |
|      */
 | |
|                 result      :1,
 | |
|     /* reserved */
 | |
|                 rsvd1       :6;
 | |
| } gw_app_set_module_clct_param_ul_v28_t;
 | |
| 
 | |
| /* query module collect data dl for v2.8 */
 | |
| typedef struct _gw_app_query_module_clct_data_dl_v28 {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         :1,
 | |
|     /* reserved */
 | |
|                 rsvd        :3;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* 2 - DL/T645-2007, 3 - DL/T 698.45, otherwise - reserved */
 | |
|     uint8_t     proto_type  :4,
 | |
|     /* 0 - single phase meter, 1 - three phase meter */
 | |
|                 pm_type     :1,
 | |
|     /* reserved */
 | |
|                 rsvd1       :3;
 | |
|     /* destination mac address, big-endian */
 | |
|     uint8_t     dest_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* task number 0 ~ 7, 0xFF is all tasks,
 | |
|      * see GW_APP_V28_CLCT_PARAM_TASK_NUM_XXX.
 | |
|      */
 | |
|     uint8_t     task_num;
 | |
|     /* time stamp, BCD code to represent */
 | |
|     uint8_t     year;
 | |
|     uint8_t     month;
 | |
|     uint8_t     day;
 | |
|     uint8_t     hour;
 | |
|     uint8_t     min;
 | |
|     uint8_t     sec;
 | |
| } gw_app_query_module_clct_data_dl_v28_t;
 | |
| 
 | |
| /* query module collect data ul for v2.8 */
 | |
| typedef struct _gw_app_query_module_clct_data_ul_v28 {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         :1,
 | |
|     /* reserved */
 | |
|                 rsvd        :3;
 | |
|     /* packet sequence */
 | |
|     uint32_t    seq;
 | |
|     /* 2 - DL/T645-2007, 3 - DL/T 698.45, otherwise - reserved */
 | |
|     uint8_t     proto_type  :4,
 | |
|     /* 0 - single phase meter, 1 - three phase meter */
 | |
|                 pm_type     :1,
 | |
|     /* query result, see GW_APP_QUERY_CLCT_RESULT_xxx */
 | |
|                 result      :3;
 | |
|     /* source mac address, big-endian */
 | |
|     uint8_t     src_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* task number 0 ~ 7, 0xFF is all tasks,
 | |
|      * see GW_APP_V28_CLCT_PARAM_TASK_NUM_XXX.
 | |
|      */
 | |
|     uint8_t     task_num;
 | |
|     /* time stamp, BCD code to represent */
 | |
|     uint8_t     year;
 | |
|     uint8_t     month;
 | |
|     uint8_t     day;
 | |
|     uint8_t     hour;
 | |
|     uint8_t     min;
 | |
|     uint8_t     sec;
 | |
|     /* respond di count */
 | |
|     uint8_t     di_cnt_rsp;
 | |
|     /* respond di data len */
 | |
|     uint16_t    di_data_len;
 | |
|     /* respond di data */
 | |
|     uint8_t     di_data[0];
 | |
| } gw_app_query_module_clct_data_ul_v28_t;
 | |
| 
 | |
| /* query ID information request message layout */
 | |
| typedef struct _gw_app_query_id_info_dl {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* direction flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         :1,
 | |
|     /* id type, see GW_APP_ID_INFO_TYPE_xxx */
 | |
|                 id_type     :3;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
| } gw_app_query_id_info_dl_t;
 | |
| 
 | |
| /* report id information message header layout */
 | |
| typedef struct _gw_app_query_id_info_ul_hdr {
 | |
|     /* version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* dir flag, 0 - downlink, 1 - uplink */
 | |
|                 dir         :1,
 | |
|     /* id type, see GW_APP_ID_INFO_TYPE_xxx */
 | |
|                 id_type     :3;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* id info length */
 | |
|     uint8_t     id_len;
 | |
|     /* id info payload */
 | |
|     uint8_t     id[0];
 | |
| } gw_app_query_id_info_ul_hdr_t;
 | |
| 
 | |
| /* report id information message tail layout */
 | |
| typedef struct _gw_app_query_id_info_ul_tail {
 | |
|     /* device type, see PLC_DEV_TYPE_XXX */
 | |
|     uint8_t     dev_type;
 | |
| } gw_app_query_id_info_ul_tail_t;
 | |
| 
 | |
| /* query low power secondary node register dev type data field */
 | |
| typedef struct _gw_app_lp_meter_query_dev_type {
 | |
|     /* low power dev type, see GW_APP_LP_DEV_TYPE_XXX */
 | |
|     uint8_t     dev_type    :4,
 | |
|     /* reserved */
 | |
|                 reserved    :4;
 | |
| } gw_app_lp_meter_query_dev_type_t;
 | |
| 
 | |
| /* low power meter rssi data */
 | |
| typedef struct _gw_app_lp_meter_rssi_info {
 | |
|     /* low power meter mac address, little-endian */
 | |
|     uint8_t     pm_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* low power meter mac address high byte */
 | |
|     uint8_t     high_addr;
 | |
|     /* rssi data */
 | |
|     uint8_t     rssi;
 | |
| } gw_app_lp_meter_rssi_info_t;
 | |
| 
 | |
| /* query low power meter rssi info up link */
 | |
| typedef struct _gw_app_lp_meter_query_rssi_ul {
 | |
|     /* total count of low power meter */
 | |
|     uint16_t    total_node_cnt;
 | |
|     /* current reported count of low power meter */
 | |
|     uint8_t     ack_count;
 | |
|     /* low power meter rssi information */
 | |
|     gw_app_lp_meter_rssi_info_t rssi_info[0];
 | |
| } gw_app_lp_meter_query_rssi_ul_t;
 | |
| 
 | |
| /* query low power meter rssi info down link */
 | |
| typedef struct _gw_app_lp_meter_query_rssi_dl {
 | |
|     /* query start index */
 | |
|     uint16_t    start_index;
 | |
|     /* query count */
 | |
|     uint8_t     cnt;
 | |
| } gw_app_lp_meter_query_rssi_dl_t;
 | |
| 
 | |
| /* query low power meter data */
 | |
| typedef struct _gw_app_lp_meter_data {
 | |
|     /* query lp meter cmd type, see GW_APP_LP_METER_CMD_XXX */
 | |
|     uint8_t     cmd_type    :4,
 | |
|     /* reserved */
 | |
|                 reserved    :4;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_lp_meter_data_t;
 | |
| 
 | |
| /* bcast query low power meter */
 | |
| typedef struct _gw_app_lp_meter_bcast_qr {
 | |
|     /* bcast sn */
 | |
|     uint8_t     bcast_sn;
 | |
|     /* sta count */
 | |
|     uint16_t    sta_cnt;
 | |
|     /* low power meter count */
 | |
|     uint16_t    lp_meter_cnt;
 | |
|     /* rssi threshold value */
 | |
|     uint8_t     rssi;
 | |
|     /* bitmap size */
 | |
|     uint16_t    bm_size;
 | |
|     /* sec node bitmap */
 | |
|     uint8_t     bm[0];
 | |
| } gw_app_lp_meter_bcast_qr_t;
 | |
| 
 | |
| /* query low power meter info from cco to sta */
 | |
| typedef struct _gw_app_lp_meter_query_data_dl {
 | |
|     /* start sequence */
 | |
|     uint16_t    start_seq;
 | |
|     /* query low power meter count */
 | |
|     uint8_t     count;
 | |
| } gw_app_lp_meter_query_data_dl_t;
 | |
| 
 | |
| /* low power meter report 188 proto data */
 | |
| typedef struct _gw_app_lp_meter_mr_data {
 | |
|     /* low power meter mac addr, little endian */
 | |
|     uint8_t     mac_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* CJ-T_188-2004 proto data length */
 | |
|     uint16_t    data_len;
 | |
|     /* CJ-T_188-2004 proto data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_lp_meter_mr_data_t;
 | |
| 
 | |
| typedef struct _gw_app_lp_meter_info_rpt {
 | |
|     /* low power meter total count */
 | |
|     uint16_t    total_cnt;
 | |
|     /* report low power meter count */
 | |
|     uint8_t     rpt_cnt;
 | |
|     /* gw_app_lp_meter_mr_data_t */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_lp_meter_info_rpt_t;
 | |
| 
 | |
| typedef struct _gw_app_lock_time_data {
 | |
|     /* 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;
 | |
| } gw_app_lock_time_data_t;
 | |
| 
 | |
| typedef struct _gw_app_lock_time_hdr {
 | |
|     /* version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length, except length of fn */
 | |
|                 header_len  :6,
 | |
|     /* packet sequence */
 | |
|                 seq         :8,
 | |
|     /* data lenght, include length of fn */
 | |
|                 data_len    :12;
 | |
|     /* fn, see GW_APP_LOCK_TIME_FN_XXX */
 | |
|     uint8_t     fn;
 | |
|     /* payload data. only fn is GW_APP_LOCK_TIME_FN_SET, data is valid */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_lock_time_hdr_t;
 | |
| 
 | |
| /* rtc time struct */
 | |
| typedef struct _gw_app_rtc_time {
 | |
|     /* time stamp, BCD code to represent */
 | |
|     uint8_t     sec;
 | |
|     uint8_t     min;
 | |
|     uint8_t     hour;
 | |
|     uint8_t     day;
 | |
|     uint8_t     month;
 | |
|     uint8_t     year;
 | |
| } gw_app_rtc_time_t;
 | |
| 
 | |
| typedef struct _gw_app_rtc_timer_sync_dl {
 | |
|     /* version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 rsvd        :4;
 | |
|     /* rtc time, little endian */
 | |
|     gw_app_rtc_time_t rtc_time;
 | |
|     /* NTB time, unit is 1NTB */
 | |
|     uint32_t    ntb_time;
 | |
| } gw_app_rtc_timer_sync_dl_t;
 | |
| 
 | |
| typedef struct _gw_app_sta_join_check_data {
 | |
|     /* sta join certification state, 0 - disabled, 1 - enable */
 | |
|     uint8_t    check_enable;
 | |
| } gw_app_sta_join_check_data_t;
 | |
| 
 | |
| typedef struct _gw_app_sta_join_check_hdr {
 | |
|     /* version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved */
 | |
|                 rsvd        :4;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* certification data */
 | |
|    uint8_t      data[0];
 | |
| } gw_app_sta_join_check_hdr_t;
 | |
| 
 | |
| /* minute collect report function header */
 | |
| typedef struct _gw_app_min_clct_rpt_hdr {
 | |
|     /* protocol version */
 | |
|     uint32_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* flag of response, 0 mean no ack, 1 mean ack/nack */
 | |
|                 flag_resp   :4,
 | |
|     /* data type. see GW_APP_DATA_TYPE_XXX */
 | |
|                 data_type   :4,
 | |
|     /* data length */
 | |
|                 data_len    :12;
 | |
|     /* packet sequence */
 | |
|     uint16_t    seq;
 | |
|     /* funtion code, see GW_APP_MIN_CLCT_RPT_FN_XXX */
 | |
|     uint16_t    fn;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_min_clct_rpt_hdr;
 | |
| 
 | |
| /* minute collect report function set configuration */
 | |
| typedef struct _gw_app_min_clct_rpt_cfg_info {
 | |
|     /* dst address, little-endian */
 | |
|     uint8_t     addr[IOT_MAC_ADDR_LEN];
 | |
|     /* collection interval, unit is 1 minute */
 | |
|     uint8_t     interval;
 | |
|     /* flag of cfg, see GW_APP_MIN_CLCT_RPT_CFG_FLAG_XXX */
 | |
|     uint8_t     flag;
 | |
|     /* proto data type. see GW_APP_DATA_TYPE_XXX */
 | |
|     uint8_t     data_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];
 | |
| } gw_app_min_clct_rpt_cfg_info;
 | |
| 
 | |
| /* minute collect report function report data structure */
 | |
| typedef struct _gw_app_min_clct_rpt_data {
 | |
|     /* proto data type. GW_APP_DATA_TYPE_69845 */
 | |
|     uint8_t     data_type;
 | |
|     /* reserved */
 | |
|     uint8_t     rsvd;
 | |
|     /* length from cnt to data */
 | |
|     uint16_t    len;
 | |
|     /* report msg cnt */
 | |
|     uint8_t     cnt;
 | |
|     /* report data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_min_clct_rpt_data;
 | |
| 
 | |
| /* minute collect report function query data req/resp structure */
 | |
| typedef struct _gw_app_min_clct_rpt_query_req_resp {
 | |
|     /* proto data type. GW_APP_DATA_TYPE_69845 */
 | |
|     uint8_t     data_type;
 | |
|     /* reserved */
 | |
|     uint8_t     rsvd;
 | |
|     /* data length */
 | |
|     uint16_t    len;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_min_clct_rpt_query_req_resp;
 | |
| 
 | |
| /* production test cmd structure, for GW_APP_ID_PRODUCTION_TEST */
 | |
| typedef struct _gw_app_production_test {
 | |
|     /* protocol version */
 | |
|     uint16_t    ver         :6,
 | |
|     /* header length */
 | |
|                 header_len  :6,
 | |
|     /* reserved for future */
 | |
|                 reserved    :4;
 | |
|     /* function code */
 | |
|     uint8_t     fn;
 | |
|     /* data length */
 | |
|     uint16_t    data_len;
 | |
|     /* sequence */
 | |
|     uint16_t    seq;
 | |
|     /* data */
 | |
|     uint8_t     data[0];
 | |
| } gw_app_production_test_t;
 | |
| 
 | |
| /* node address and mac address structure for production test cmd */
 | |
| typedef struct _gw_app_product_test_mac_addr {
 | |
|     /* node address, little-endian */
 | |
|     uint8_t node_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* mac address, big-endian */
 | |
|     uint8_t mac_addr[IOT_MAC_ADDR_LEN];
 | |
| } gw_app_product_test_mac_addr_t;
 | |
| 
 | |
| /* chip id info structure for production test cmd */
 | |
| typedef struct _gw_app_product_test_chip_info {
 | |
|     /* node address, little-endian */
 | |
|     uint8_t node_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* device type, see IOT_PLC_DEV_TYPE_XXX */
 | |
|     uint8_t dev_type;
 | |
|     /* chip info */
 | |
|     uint8_t info[GW_APP_PRODUCT_TEST_CHIP_LEN];
 | |
|     /* chip version */
 | |
|     uint8_t chip_ver[GW_APP_PRODUCT_TEST_VER_LEN];
 | |
| } gw_app_product_test_chip_info_t;
 | |
| 
 | |
| /* module id info structure for production test cmd */
 | |
| typedef struct _gw_app_product_test_mod_info {
 | |
|     /* node address, little-endian */
 | |
|     uint8_t node_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* module info length */
 | |
|     uint8_t len;
 | |
|     /* mode info */
 | |
|     uint8_t info[GW_APP_PRODUCT_TEST_MODE_LEN];
 | |
| } gw_app_product_test_mod_info_t;
 | |
| 
 | |
| /* version info structure for production test cmd */
 | |
| typedef struct _gw_app_product_test_ver_info {
 | |
|     /* node address, little-endian */
 | |
|     uint8_t node_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* version */
 | |
|     uint8_t ver[GW_APP_PRODUCT_TEST_VER_LEN];
 | |
|     /* version date, BCD format */
 | |
|     uint8_t module_ver_day;
 | |
|     uint8_t module_ver_month;
 | |
|     uint8_t module_ver_year;
 | |
|     /* vendor id. BCD format. */
 | |
|     uint16_t vendor_id;
 | |
|     /* chip code. BCD format. */
 | |
|     uint16_t chip_code;
 | |
| } gw_app_product_test_ver_info_t;
 | |
| 
 | |
| /* internal version info structure for production test cmd */
 | |
| typedef struct _gw_app_product_test_inter_ver {
 | |
|     /* node address, little-endian */
 | |
|     uint8_t node_addr[IOT_MAC_ADDR_LEN];
 | |
|     /* day of version, BCD, eg. 27 */
 | |
|     uint8_t day;
 | |
|     /* mon of version, BCD, eg. 07 */
 | |
|     uint8_t mon;
 | |
|     /* year of version, BCD, eg. 23 */
 | |
|     uint8_t year;
 | |
|     /* version, BCD, little-endian, eg. 0102 -> 02 01 */
 | |
|     uint16_t ver;
 | |
| } gw_app_product_test_inter_ver_t;
 | |
| 
 | |
| #pragma pack(pop)/* restore the pack status */
 | |
| 
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* PROTO_GW_APP_H */
 |