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