Files
kunlun/export/inc/sg_lib/proto_69845.h

3893 lines
138 KiB
C
Raw Normal View History

2024-09-28 14:24:04 +08:00
/****************************************************************************
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_69845_H
#define PROTO_69845_H
#include "os_types_api.h"
#include "iot_utils_api.h"
#include "iot_pkt_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 */
/* default baud rate for DL/T 698.45-201X */
#define PROTO_69845_DEFAULT_BAUD 9600
/* default predict 69845 apdu max len */
#define PROTO_69845_PREDICT_APDU_MAX_LEN (350)
#define PROTO_69845_LENGTH_SIZE (2)
#define PROTO_69845_CHECKSUM_LEN (2)
#define PROTO_69845_SA_MAX_LEN (16)
#define PROTO_69845_SA_LEN (6)
#define PROTO_69845_CA_LEN (1)
#define PROTO_69845_START_END_LEN (2)
#define PROTO_69845_START_LEN (1)
#define PROTO_69845_PREAMBLE_LEN (4)
#define PROTO_69845_DAR_LEN (1)
#define PROTO_69845_NO_TIME_TAG_LEN (1)
#define PROTO_69845_NO_FLW_DATA_LEN (1)
#define PROTO_69845_EVENT_DATA_LEN (18)
#define PROTO_69845_SECURITY_RN_LEN (16)
#define PROTO_69845_SECURITY_SEQUEN_LEN (4)
#define PROTO_69845_FW_EVT_WORD_LEN (4)
#define PROTO_69845_FW_EVT_WORD_CNT (PROTO_69845_FW_EVT_WORD_LEN * 8)
#define PROTO_69845_RS_WORDS_NUM (7)
/* define proto 69845 sn max number */
#define PROTO_69845_SN_MAX (63)
/* define security req data type */
#define PROTO_69845_SEC_DATA_TYPE_PLAINTEXT (0)
#define PROTO_69845_SEC_DATA_TYPE_CIPHERTEXT (1)
/* define security req data validation type */
#define PROTO_69845_SEC_REQ_VALI_TYPE_MAC (0)
#define PROTO_69845_SEC_REQ_VALI_TYPE_RN (1)
#define PROTO_69845_SEC_REQ_VALI_TYPE_MAC_RN (2)
/* define security resp data validation type */
#define PROTO_69845_SEC_RESP_VALI_TYPE_MAC (0)
#define PROTO_69845_SEC_RESP_VALI_TYPE_MAC_RN (1)
/* GET-Request and GET-Response data type length */
#define PROTO_69845_GET_R_TYPE_LEN (1)
/* Start of 698.45 protocol link layer frame */
#define PROTO_69845_START_BYTE (0x68)
/* End of 698.45 protocol link layer frame */
#define PROTO_69845_END_BYTE (0x16)
/* Function code of 698.45 protocol link layer frame */
#define PROTO_69845_FN_LINK_MANAGE (1)
#define PROTO_69845_FN_USER_DATA (3)
/* That app data of this frame is a whole APDU. */
#define PROTO_69845_APDU_WHOLE (0)
/* That app data of this frame is a part of APDU. */
#define PROTO_69845_APDU_PART (1)
/* Primary Request Message and Direction combination to represent meaning.
* PROTO_69845_D_P_CLIENT_RESPONSE :
* the response of the client to the server report.
* PROTO_69845_D_P_CLIENT_REQUEST :
* client initiated request.
* PROTO_69845_D_P_SERVER_REPORT:
* server initiated report.
* PROTO_69845_D_P_SERVER_RESPONSE:
* the response of the server to the client request.
*/
#define PROTO_69845_D_P_CLIENT_RESPONSE (0)
#define PROTO_69845_D_P_CLIENT_REQUEST (1)
#define PROTO_69845_D_P_SERVER_REPORT (2)
#define PROTO_69845_D_P_SERVER_RESPONSE (3)
/* type of the server address. */
#define PROTO_69845_SA_TYPE_SIG (0)
#define PROTO_69845_SA_TYPE_WILDCARD (1)
#define PROTO_69845_SA_TYPE_GROUP (2)
#define PROTO_69845_SA_TYPE_BROADCAST (3)
/* description parameter of the server address. */
#define PROTO_69845_SA_BROADCAST_ADD (0xaa)
#define PROTO_69845_SA_BIT_WILDCARD_ADD (0x0a)
#define PROTO_69845_SA_BIT_MAX_ADD (0x09)
#define PROTO_69845_SA_BIT_INVAILD_ADD (0x0f)
/* description parameter of the client address. */
#define PROTO_69845_CA_INVAILD_ADD (0x00)
/* description parameter of the logical address. */
#define PROTO_69845_EXT_LOGICAL_ADD_MIN (0x02)
#define PROTO_69845_EXT_LOGICAL_ADD_LEN (0x01)
/* Client Application Service, see standard DL/T 698.45 */
#define PROTO_69845_C_APP_LINK_RESP (0x01)
#define PROTO_69845_C_APP_CONNECT_REQ (0x02)
#define PROTO_69845_C_APP_RELEASE_REQ (0x03)
#define PROTO_69845_C_APP_GET_REQ (0x05)
#define PROTO_69845_C_APP_SET_REQ (0x06)
#define PROTO_69845_C_APP_ACTION_REQ (0x07)
#define PROTO_69845_C_APP_REPORT_RESP (0x08)
#define PROTO_69845_C_APP_PROXY_REQ (0x09)
#define PROTO_69845_C_APP_SECURITY_REQ (0x10)
/* Server Application Service, see standard DL/T 698.45 */
#define PROTO_69845_S_APP_LINK_REQ (0x81)
#define PROTO_69845_S_APP_CONNECT_RESP (0x82)
#define PROTO_69845_S_APP_RELEASE_RESP (0x83)
#define PROTO_69845_S_APP_RELEASE_NOTI (0x84)
#define PROTO_69845_S_APP_GET_RESP (0x85)
#define PROTO_69845_S_APP_SET_RESP (0x86)
#define PROTO_69845_S_APP_ACTION_RESP (0x87)
#define PROTO_69845_S_APP_REPORT_NOTI (0x88)
#define PROTO_69845_S_APP_PROXY_RESP (0x89)
#define PROTO_69845_S_APP_SECURITY_RESP (0x90)
/* GET-Request and GET-Response data type definition,
* see standard DL/T 698.45
*/
#define PROTO_69845_APP_GET_NORMAL (1)
#define PROTO_69845_APP_GET_NORMALLIST (2)
#define PROTO_69845_APP_GET_RECORD (3)
#define PROTO_69845_APP_GET_RECORDLIST (4)
#define PROTO_69845_APP_GET_NEXT (5)
/* Jiangsu provincial protocol expansion */
#define PROTO_69845_APP_GET_SIMPRECORD (23)
/* SET-Request and SET-Response data type definition,
* see standard DL/T 698.45
*/
#define PROTO_69845_APP_SET_NORMAL (1)
#define PROTO_69845_APP_SET_NORMALLIST (2)
#define PROTO_69845_APP_SET_AND_GET_NORMALLIST (3)
/* ACTION-Request and ACTION-Response data type definition,
* see standard DL/T 698.45
*/
#define PROTO_69845_APP_ACTION_NORMAL (1)
#define PROTO_69845_APP_ACTION_NORMALLIST (2)
#define PROTO_69845_APP_ACTION_AND_GET_NORMALLIST (3)
/* report-request and report-response data type definition,
* see standard DL/T 698.45
*/
#define PROTO_69845_APP_REPRORT_NORMALLIST (1)
#define PROTO_69845_APP_REPRORT_RECORDLIST (2)
#define PROTO_69845_APP_REPRORT_TRANS (3)
/* Jiangsu provincial protocol expansion */
#define PROTO_69845_APP_REPRORT_SIMPRECORD (6)
/* Client proxy_request, see standard DL/T 698.45 */
#define PROTO_69845_PROXY_GET_REQUESTLIST (0x01)
#define PROTO_69845_PROXY_GET_REQUESTRECORD (0x02)
#define PROTO_69845_PROXY_SET_REQUESTLIST (0x03)
#define PROTO_69845_PROXY_SET_GET_REQUESTLIST (0x04)
#define PROTO_69845_PROXY_ACTION_REQUESTLIST (0x05)
#define PROTO_69845_PROXY_ACTION_GET_REQUESTLIST (0x06)
#define PROTO_69845_PROXY_TRANS_COMMAND_REQUEST (0x07)
/* PIID priority data type definition,
* see standard DL/T 698.45
*/
#define PROTO_69845_APP_PIID_PRIORITY_GENERAL (0)
#define PROTO_69845_APP_PIID_PRIORITY_HIGH (1)
/* get result data type definition, see standard DL/T 698.45 */
#define PROTO_69845_APP_GET_RESULT_DAR (0)
#define PROTO_69845_APP_GET_RESULT_DATA (1)
/* report result data type definition, see standard DL/T 698.45 */
#define PROTO_69845_APP_RPT_RESULT_DAR (0)
#define PROTO_69845_APP_RPT_RESULT_DATA (1)
/* optional data type definition, see standard DL/T 698.45 */
#define PROTO_69845_APP_OPTIONAL_NO_DATA (0)
#define PROTO_69845_APP_OPTIONAL_DATA (1)
/* data type definition, see standard DL/T 698.45 */
#define PROTO_69845_APP_DATA_NULL (0)
#define PROTO_69845_APP_DATA_ARRAY (1)
#define PROTO_69845_APP_DATA_STRUCTURE (2)
#define PROTO_69845_APP_DATA_BOOL (3)
#define PROTO_69845_APP_DATA_BIT_STRING (4)
#define PROTO_69845_APP_DATA_DOUBLE_LONG (5)
#define PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED (6)
#define PROTO_69845_APP_DATA_OCTET_STRING (9)
#define PROTO_69845_APP_DATA_VISIBLE_STRING (10)
#define PROTO_69845_APP_DATA_UTF8_SRTING (12)
#define PROTO_69845_APP_DATA_INTEGER (15)
#define PROTO_69845_APP_DATA_LONG (16)
#define PROTO_69845_APP_DATA_UNSIGNED (17)
#define PROTO_69845_APP_DATA_LONG_UNSIGNED (18)
#define PROTO_69845_APP_DATA_LONG64 (20)
#define PROTO_69845_APP_DATA_LONG64_UNSIGNED (21)
#define PROTO_69845_APP_DATA_ENUM (22)
#define PROTO_69845_APP_DATA_FLOAT32 (23)
#define PROTO_69845_APP_DATA_FLOAT64 (24)
#define PROTO_69845_APP_DATA_DATE_TIME (25)
#define PROTO_69845_APP_DATA_DATE (26)
#define PROTO_69845_APP_DATA_TIME (27)
#define PROTO_69845_APP_DATA_TIME_S (28)
#define PROTO_69845_APP_DATA_OI (80)
#define PROTO_69845_APP_DATA_OAD (81)
#define PROTO_69845_APP_DATA_ROAD (82)
#define PROTO_69845_APP_DATA_OMD (83)
#define PROTO_69845_APP_DATA_TI (84)
#define PROTO_69845_APP_DATA_TSA (85)
#define PROTO_69845_APP_DATA_MAC (86)
#define PROTO_69845_APP_DATA_RN (87)
#define PROTO_69845_APP_DATA_REGION (88)
#define PROTO_69845_APP_DATA_SCALER_UNIT (89)
#define PROTO_69845_APP_DATA_RSD (90)
#define PROTO_69845_APP_DATA_CSD (91)
#define PROTO_69845_APP_DATA_MS (92)
#define PROTO_69845_APP_DATA_SID (93)
#define PROTO_69845_APP_DATA_SID_MAC (94)
#define PROTO_69845_APP_DATA_COMDCB (95)
#define PROTO_69845_APP_DATA_RCSD (96)
/* dar type definition, see standard DL/T 698.45 */
#define PROTO_69845_APP_DAR_SUCCESS (0)
#define PROTO_69845_APP_DAR_HW_FAILURE (1)
#define PROTO_69845_APP_DAR_TEMP_FAILURE (2)
#define PROTO_69845_APP_DAR_REJECT_W_R (3)
#define PROTO_69845_APP_DAR_OI_UNDEFINED (4)
#define PROTO_69845_APP_DAR_OI_CLASS_ERR (5)
#define PROTO_69845_APP_DAR_OI_NO_EXIST (6)
#define PROTO_69845_APP_DAR_TYPE_MISMATCH (7)
#define PROTO_69845_APP_DAR_OVERFLOW (8)
#define PROTO_69845_APP_DAR_DATA_BLOCK_DAMAGE (9)
#define PROTO_69845_APP_DAR_FRAMING_CANCEL (10)
#define PROTO_69845_APP_DAR_NO_FRAMING_STATE (11)
#define PROTO_69845_APP_DAR_BLOCK_W_CANCEL (12)
#define PROTO_69845_APP_DAR_NO_BLACK_W_STATE (13)
#define PROTO_69845_APP_DAR_BLOCK_SEQ_INVALID (14)
#define PROTO_69845_APP_DAR_PASSWORD_ERR (15)
#define PROTO_69845_APP_DAR_BAUD_NOT_CHANGE (16)
#define PROTO_69845_APP_DAR_Y_ZONE_NUM_OVER (17)
#define PROTO_69845_APP_DAR_D_SLOT_NUM_OVER (18)
#define PROTO_69845_APP_DAR_RATE_NUM_OVER (19)
#define PROTO_69845_APP_DAR_SEC_MISMATCH (20)
#define PROTO_69845_APP_DAR_REPEAT_RECHARGE (21)
#define PROTO_69845_APP_DAR_ESAM_VERIFY_FAIL (22)
#define PROTO_69845_APP_DAR_SEC_FAIL (23)
#define PROTO_69845_APP_DAR_CUSTOMERID_MISMATCH (24)
#define PROTO_69845_APP_DAR_RECHARGE_CNT_ERR (25)
#define PROTO_69845_APP_DAR_POWER_PURCHASE_OVER (26)
#define PROTO_69845_APP_DAR_ADDR_ERR (27)
#define PROTO_69845_APP_DAR_SYM_DEC_ERR (28)
#define PROTO_69845_APP_DAR_ASY_DEC_ERR (29)
#define PROTO_69845_APP_DAR_SIGNATURE_ERR (30)
#define PROTO_69845_APP_DAR_METER_SUSPEND (31)
#define PROTO_69845_APP_DAR_TS_INVALID (32)
#define PROTO_69845_APP_DAR_REQ_TIMEOUT (33)
#define PROTO_69845_APP_DAR_ESAM_P1P2_ERR (34)
#define PROTO_69845_APP_DAR_ESAM_LC_ERR (35)
#define PROTO_69845_APP_DAR_RESULT_LAST (200)
#define PROTO_69845_APP_DAR_OTHER (255)
/* Object identifies the data type definition,
* see standard DL/T 698.45
*/
#define PROTO_69845_APP_OI_EPT_COMP (0x0000)
#define PROTO_69845_APP_OI_EPT_POS (0x0010)
#define PROTO_69845_APP_OI_EPT_NEG (0x0020)
#define PROTO_69845_APP_OI_EQT_POS (0x0030)
#define PROTO_69845_APP_OI_EQT_NEG (0x0040)
#define PROTO_69845_APP_OI_EQT_QRT1 (0x0050)
#define PROTO_69845_APP_OI_EQT_QRT2 (0x0060)
#define PROTO_69845_APP_OI_EQT_QRT3 (0x0070)
#define PROTO_69845_APP_OI_EQT_QRT4 (0x0080)
#define PROTO_69845_APP_OI_EPT_POS_DEMAND (0x1010)
#define PROTO_69845_APP_OI_EPT_NEG_DEMAND (0x1020)
#define PROTO_69845_APP_OI_VOLTAGE (0x2000)
#define PROTO_69845_APP_OI_CURRENT (0x2001)
#define PROTO_69845_APP_OI_P (0x2004)
#define PROTO_69845_APP_OI_Q (0x2005)
#define PROTO_69845_APP_OI_PF (0x200A)
#define PROTO_69845_APP_OI_FREQ (0x200F)
#define PROTO_69845_APP_OI_RUN_WORD (0x2014)
#define PROTO_69845_APP_OI_FLW_EVT_WORD (0x2015)
#define PROTO_69845_APP_OI_EPT_DEMAND (0x2017)
#define PROTO_69845_APP_OI_EQT_DEMAND (0x2018)
#define PROTO_69845_APP_OI_EVENT_START_TM (0x201E)
#define PROTO_69845_APP_OI_EVENT_END_TM (0x2020)
#define PROTO_69845_APP_OI_EVENT_REC_SEQ (0x2022)
#define PROTO_69845_APP_OI_EVENT_OCCUR_SOURCE (0x2024)
#define PROTO_69845_APP_OI_COVER_OPEN_N (0x301B)
#define PROTO_69845_APP_OI_DEV_FAULT_REC (0x310A)
#define PROTO_69845_APP_OI_EVENT_RPT_STA (0x3300)
#define PROTO_69845_APP_OI_NEW_EVT_LIST (0x3320)
#define PROTO_69845_APP_OI_TIME (0x4000)
#define PROTO_69845_APP_OI_ADDR (0x4001)
#define PROTO_69845_APP_OI_METER_ID (0x4002)
/* extend object identifies the data type definition,
* see standard DL/T 698.45 extend for measurement switch
*/
#define PROTO_69845_APP_OI_EXT_BR2_LAUNCH (0x4208)
#define PROTO_69845_APP_OI_EXT_BR2_INFO (0x4209)
#define PROTO_69845_APP_OI_ELE_ID (0x4300)
#define PROTO_69845_APP_OI_GET_VERSION (0x4400)
/* extend object identifies the data type definition,
* see standard DL/T 698.45 zhejiang
*/
#define PROTO_69845_APP_OI_BR2_LAUNCH_RECORD (0x4E01)
/* extend object identifies the data type definition,
* see standard DL/T 698.45 zhejiang
*/
#define PROTO_69845_APP_OI_BR2_LAUNCH (0x4E06)
#define PROTO_69845_APP_OI_BR2_INFO (0x4E07)
#define PROTO_69845_APP_OI_MIN_FROZEN (0x5002)
#define PROTO_69845_APP_OI_DAY_FROZEN (0x5004)
#define PROTO_69845_APP_OI_MON_FROZEN (0x5006)
#define PROTO_69845_APP_OI_TASK_CFG_LIST (0x6012)
#define PROTO_69845_APP_OI_TASK_CFG_UNIT (0x6013)
#define PROTO_69845_APP_OI_CLCT_LIST (0x6014)
#define PROTO_69845_APP_OI_CLCT_UNIT (0x6015)
#define PROTO_69845_APP_OI_CLCT_STATE_LIST (0x6032)
#define PROTO_69845_APP_OI_CLCT_STATE_UNIT (0x6033)
#define PROTO_69845_APP_OI_CLCT_MONITOR_LIST (0x6034)
#define PROTO_69845_APP_OI_CLCT_MONITOR_UNIT (0x6035)
#define PROTO_69845_APP_OI_CLCT_SAVE_TIME (0x6042)
#define PROTO_69845_APP_OI_FILETRANS_BLOCK (0xF001)
#define PROTO_69845_APP_OI_PLC_WIRELESS_INTERFACE (0xF209)
/* oad value data type definition,
* see standard DL/T 698.45
*/
#define PROTO_69845_APP_OAD_EPT_COMP (0x00000200u)
#define PROTO_69845_APP_OAD_EPT_COMP_SUM (0x00000201u)
#define PROTO_69845_APP_OAD_EPT_POS (0x00100200u)
#define PROTO_69845_APP_OAD_EPT_POS_SIG (0x00100201u)
#define PROTO_69845_APP_OAD_EPT_POS_A_SIG (0x00110201u)
#define PROTO_69845_APP_OAD_EPT_POS_B_SIG (0x00120201u)
#define PROTO_69845_APP_OAD_EPT_POS_C_SIG (0x00130201u)
#define PROTO_69845_APP_OAD_EPT_NEG (0x00200200u)
#define PROTO_69845_APP_OAD_EPT_NEG_SIG (0x00200201u)
#define PROTO_69845_APP_OAD_EPT_NEG_A_SIG (0x00210201u)
#define PROTO_69845_APP_OAD_EPT_NEG_B_SIG (0x00220201u)
#define PROTO_69845_APP_OAD_EPT_NEG_C_SIG (0x00230201u)
#define PROTO_69845_APP_OAD_EQT_POS (0x00300200u)
#define PROTO_69845_APP_OAD_EQT_POS_SUM (0x00300201u)
#define PROTO_69845_APP_OAD_EQT_NEG (0x00400200u)
#define PROTO_69845_APP_OAD_EQT_NEG_SUM (0x00400201u)
#define PROTO_69845_APP_OAD_EQT_QRT1 (0x00500200u)
#define PROTO_69845_APP_OAD_EQT_QRT1_SUM (0x00500201u)
#define PROTO_69845_APP_OAD_EQT_QRT2 (0x00600200u)
#define PROTO_69845_APP_OAD_EQT_QRT2_SUM (0x00600201u)
#define PROTO_69845_APP_OAD_EQT_QRT3 (0x00700200u)
#define PROTO_69845_APP_OAD_EQT_QRT3_SUM (0x00700201u)
#define PROTO_69845_APP_OAD_EQT_QRT4 (0x00800200u)
#define PROTO_69845_APP_OAD_EQT_QRT4_SUM (0x00800201u)
#define PROTO_69845_APP_OAD_EPT_POS_DEMAND (0x10100200u)
#define PROTO_69845_APP_OAD_EPT_NEG_DEMAND (0x10200200u)
#define PROTO_69845_APP_OAD_EQT_POS_DEMAND (0x10300200u)
#define PROTO_69845_APP_OAD_EQT_NEG_DEMAND (0x10400200u)
#define PROTO_69845_APP_OAD_VOLTAGE (0x20000200u)
#define PROTO_69845_APP_OAD_VOLTAGE_A (0x20000201u)
#define PROTO_69845_APP_OAD_CURRENT (0x20010200u)
#define PROTO_69845_APP_OAD_CURRENT_A (0x20010201u)
#define PROTO_69845_APP_OAD_GND_CURRENT (0x20010400u)
#define PROTO_69845_APP_OAD_P (0x20040200u)
#define PROTO_69845_APP_OAD_P_T (0x20040201u)
#define PROTO_69845_APP_OAD_P_A (0x20040202u)
#define PROTO_69845_APP_OAD_Q (0x20050200u)
#define PROTO_69845_APP_OAD_Q_T (0x20050201u)
#define PROTO_69845_APP_OAD_Q_A (0x20050202u)
#define PROTO_69845_APP_OAD_PF (0x200A0200u)
#define PROTO_69845_APP_OAD_PF_T (0x200A0201u)
#define PROTO_69845_APP_OAD_PF_A (0x200A0202u)
#define PROTO_69845_APP_OAD_RUN_WORD (0x20140200u)
#define PROTO_69845_APP_OAD_EPT_DEMAND (0x20170200u)
#define PROTO_69845_APP_OAD_EQT_DEMAND (0x20180200u)
#define PROTO_69845_APP_OAD_FROZEN_T (0x20210200u)
/* only for hlj protocol */
#define PROTO_69845_APP_OAD_CURRENT_OVER_HLJ (0x30050700u)
#define PROTO_69845_APP_OAD_COVER_OPEN_N (0x301B0700u)
#define PROTO_69845_APP_OAD_TIME (0x40000200u)
#define PROTO_69845_APP_OAD_VERSION (0x43000300u)
#define PROTO_69845_APP_OAD_MINF (0x50020200u)
#define PROTO_69845_APP_OAD_HF (0x50030200u)
#define PROTO_69845_APP_OAD_DF (0x50040200u)
#define PROTO_69845_APP_OAD_SDF (0x50050200u)
#define PROTO_69845_APP_OAD_MF (0x50060200u)
#define PROTO_69845_APP_OAD_YF (0x50070200u)
#define PROTO_69845_APP_OAD_TTSF (0x50080200u)
#define PROTO_69845_APP_OAD_DTSF (0x50090200u)
#define PROTO_69845_APP_OAD_PSF (0x500A0200u)
#define PROTO_69845_APP_OAD_LSF (0x500B0200u)
#define PROTO_69845_APP_OAD_LSSF (0x50110200u)
#define PROTO_69845_APP_OAD_REPORT (0x60120300u)
#define PROTO_69845_APP_OAD_TRANSFILE_INFO (0xF0010300u)
#define PROTO_69845_APP_OAD_TRANSFILE_STATUS (0xF0010400u)
#define PROTO_69845_APP_OAD_TRANSFILE_DATA (0xF0010800u)
#define PROTO_69845_APP_OAD_TRANSFILE_EXE (0xF0010d00u)
#define PROTO_69845_APP_OAD_TRANSFILE_START (0xF0010e00u)
#define PROTO_69845_APP_OAD_PORT_RS485I (0xF2010201u)
#define PROTO_69845_APP_OAD_PORT_RS485II (0xF2010202u)
#define PROTO_69845_APP_OAD_INVALID (0xFFFFFFFFu)
/* event occur source type definition,
* see standard DL/T 698.45
*/
#define PROTO_69845_APP_EVT_SOC_485_FALT (3)
/* extend object identifies the data type definition,
* see standard DL/T 698.45 jiangsu
*/
#define PROTO_69845_APP_OI_COLLECTOR (0x6043)
/* define attribute id of oi PROTO_69845_APP_OI_TASK_CFG_LIST */
#define PROTO_OI_TASK_CFG_LIST_ATT_CFG_LIST (2)
#define PROTO_OI_TASK_CFG_LIST_ATT_RECORD_LIST (3)
/* define method id of oi PROTO_69845_APP_OI_TASK_CFG_LIST */
#define PROTO_OI_TASK_CFG_LIST_MET_ADD (127)
#define PROTO_OI_TASK_CFG_LIST_MET_DELETE (128)
#define PROTO_OI_TASK_CFG_LIST_MET_CLEAR (129)
#define PROTO_OI_TASK_CFG_LIST_MET_UPDATE1 (130)
#define PROTO_OI_TASK_CFG_LIST_MET_UPDATE2 (131)
/* define attribute id of oi PROTO_69845_APP_OI_TAST_CFG_UNIT */
#define PROTO_OI_TASK_CFG_UNIT_ATT_CFG_UNIT (2)
/* define attribute id of oi PROTO_69845_APP_OI_DEV_FAULT_REC */
#define PROTO_OI_DEV_FAULT_REC_ATT_EVT_REC_TAB (2)
/* define attribute id of oi PROTO_69845_APP_OI_MIN_FROZEN */
#define PROTO_OI_DEV_MIN_FROZEN_ATT_FROZEN_TAB (2)
/* define attribute id of oi PROTO_69845_APP_OI_CLCT_LIST */
#define PROTO_OI_CLCT_LIST_ATT_ClCT_LIST (2)
#define PROTO_OI_CLCT_LIST_ATT_ClCT_LIST_CNT (3)
#define PROTO_OI_CLCT_LIST_ATT_ClCT_LIST_MAX_CNT (4)
/* define method id of oi PROTO_69845_APP_OI_CLCT_LIST */
#define PROTO_OI_CLCT_LIST_MET_ADD (127)
#define PROTO_OI_CLCT_LIST_MET_DELETE (128)
#define PROTO_OI_CLCT_LIST_MET_CLEAR (129)
#define PROTO_OI_CLCT_LIST_MET_SET_CSD (130)
/* define attribute id of oi PROTO_69845_APP_OI_CLCT_UNIT */
#define PROTO_OI_CLCT_UNIT_ATT_CFG_UNIT (2)
/* define attribute id of oi PROTO_69845_APP_OI_CLCT_STATE_LIST */
#define PROTO_OI_CLCT_STATE_LIST_ATT_ClCT_LIST (2)
#define PROTO_OI_CLCT_STATE_LIST_ATT_ClCT_LIST_CNT (3)
#define PROTO_OI_CLCT_STATE_LIST_ATT_ClCT_LIST_MAX_CNT (4)
/* define attribute id of oi PROTO_69845_APP_OI_CLCT_STATE_UNIT */
#define PROTO_OI_CLCT_STATE_UNIT_ATT_CFG_UNIT (2)
/* define attribute id of oi PROTO_69845_APP_OI_CLCT_MONITOR_LIST */
#define PROTO_OI_CLCT_MONITOR_LIST_ATT_ClCT_LIST (2)
#define PROTO_OI_CLCT_MONITOR_LIST_ATT_ClCT_LIST_CNT (3)
#define PROTO_OI_CLCT_MONITOR_LIST_ATT_ClCT_LIST_MAX_CNT (4)
/* define attribute id of oi PROTO_69845_APP_OI_CLCT_MONITOR_UNIT */
#define PROTO_OI_CLCT_MONITOR_UNIT_ATT_CFG_UNIT (2)
/* define attribute id of oi PROTO_69845_APP_OI_COLLECTOR */
#define PROTO_OI_COLLECTOR_ATT_MIN_DATA_RPT_CNT (16)
#define PROTO_OI_COLLECTOR_ATT_CURVE_DATA_RPT_CNT (17)
#define PROTO_OI_COLLECTOR_ATT_METER_CNT (18)
#define PROTO_OI_COLLECTOR_ATT_METER_LIST (19)
#define PROTO_OI_COLLECTOR_ATT_MIN_DATA_MAX_CNT (20)
#define PROTO_OI_COLLECTOR_ATT_CURVE_DATA_MAX_CNT (21)
#define PROTO_OI_COLLECTOR_ATT_RPT_DATA (127)
/* define method id of oi PROTO_69845_APP_OI_BR2_LAUNCH */
#define PROTO_OI_BR2_LAUNCH_METHOD_LAUNCH (127)
#define PROTO_OI_BR2_LAUNCH_METHOD_TIME_LAUNCH (128)
/* define method id of oi PROTO_69845_APP_OI_BR2_INFO */
#define PROTO_OI_BR2_REC_METHOD_CLEAR (129)
/* define attribute id of oi PROTO_69845_APP_OI_BR2_LAUNCH_RECORD */
#define PROTO_OI_BR2_LAUNCH_RECORD_ATT_RECORD (6)
/* define oi PROTO_69845_APP_DATA_TI interval uint type */
#define PROTO_OI_TI_INTERVAL_UNIT_TYPE_SEC (0)
#define PROTO_OI_TI_INTERVAL_UNIT_TYPE_MIN (1)
#define PROTO_OI_TI_INTERVAL_UNIT_TYPE_HOUR (2)
#define PROTO_OI_TI_INTERVAL_UNIT_TYPE_DAY (3)
#define PROTO_OI_TI_INTERVAL_UNIT_TYPE_MON (4)
#define PROTO_OI_TI_INTERVAL_UNIT_TYPE_YEAR (5)
/* define oi PROTO_69845_APP_DATA_TI interval uint */
#define PROTO_OI_TI_INTERVAL_UNIT_SEC (1)
#define PROTO_OI_TI_INTERVAL_UNIT_MIN (60)
#define PROTO_OI_TI_INTERVAL_UNIT_HOUR (60 * 60)
#define PROTO_OI_TI_INTERVAL_UNIT_DAY (60 * 60 * 24)
#define PROTO_OI_TI_INTERVAL_UNIT_MON (60 * 60 * 24 * 31)
#define PROTO_OI_TI_INTERVAL_UNIT_YEAR (60 * 60 * 24 * 365)
/* define oi PROTO_69845_APP_DATA_MS type */
#define PROTO_OI_MS_TYPE_NO_PM (0)
#define PROTO_OI_MS_TYPE_ALL_PM (1)
#define PROTO_OI_MS_TYPE_GROUP_PM_TYPE (2)
#define PROTO_OI_MS_TYPE_GROUP_PM_ADDR (3)
#define PROTO_OI_MS_TYPE_GROUP_PM_NUM (4)
#define PROTO_OI_MS_TYPE_PM_TYPE_INTERVAL (5)
#define PROTO_OI_MS_TYPE_PM_ADDR_INTERVAL (6)
#define PROTO_OI_MS_TYPE_PM_NUM_INTERVAL (7)
/* define oi PROTO_69845_APP_DATA_RSD type */
#define PROTO_OI_RSD_TYPE_NO (0)
#define PROTO_OI_RSD_TYPE_1 (1)
#define PROTO_OI_RSD_TYPE_2 (2)
#define PROTO_OI_RSD_TYPE_3 (3)
#define PROTO_OI_RSD_TYPE_4 (4)
#define PROTO_OI_RSD_TYPE_5 (5)
#define PROTO_OI_RSD_TYPE_6 (6)
#define PROTO_OI_RSD_TYPE_7 (7)
#define PROTO_OI_RSD_TYPE_8 (8)
#define PROTO_OI_RSD_TYPE_9 (9)
#define PROTO_OI_RSD_TYPE_10 (10)
/* define oi PROTO_OI_RSD_TYPE_2 data cnt */
#define PROTO_OI_RSD_TYPE_2_DATA_CNT (3)
/* define oi PROTO_69845_APP_DATA_CSD type */
#define PROTO_OI_CSD_TYPE_OAD (0)
#define PROTO_OI_CSD_TYPE_ROAD (1)
/* define transfile data method id */
#define PROTO_OMD_TRANSFILE_DATA_METHOD_ID (8)
/* define exe transfile method id */
#define PROTO_OMD_TRANSFILE_INFO_EXE_METHOD_ID (13)
/* define start transfile method id */
#define PROTO_OMD_TRANSFILE_INFO_START_METHOD_ID (14)
/* define correct time method id */
#define PROTO_OMD_CORRECT_TIME_METHOD_ID (127)
/* proto 698.45 data structure lenght type */
#define PROTO_69845_DATA_LEN_TYPE_NORMAL (0)
#define PROTO_69845_DATA_LEN_TYPE_MULTI_BTYE (1)
#define PROTO_69845_DATA_LEN_TYPE_ELEMENT (2)
#define PROTO_69845_DATA_LEN_TYPE_DIV8 (3)
#define PROTO_69845_DATA_LEN_TYPE_ROAD (4)
#define PROTO_69845_DATA_LEN_TYPE_TSA (5)
#define PROTO_69845_DATA_LEN_TYPE_RSD (6)
#define PROTO_69845_DATA_LEN_TYPE_CSD (7)
#define PROTO_69845_DATA_LEN_TYPE_MS (8)
#define PROTO_69845_DATA_LEN_TYPE_RCSD (9)
#define PROTO_69845_DATA_LEN_TYPE_UNKNOW (10)
/* preamble char definition */
#define PROTO_69845_PREAMBLE_CHAR 0xFE
/* define logical_addr for jiangsu */
#define PROTO_69845_JS_LOGICAL_ADDR (1)
/* define logical_addr for zhejiang */
#define PROTO_69845_ZJ_LOGICAL_ADDR (0x63)
/* define task plan type in PROTO_69845_APP_OI_TASK_CFG_UNIT data structure */
#define PROTO_69845_DATA_TASK_PLAN_TYPE_NORMAL_CLCT (1)
#define PROTO_69845_DATA_TASK_PLAN_TYPE_EVT_CLCT (2)
#define PROTO_69845_DATA_TASK_PLAN_TYPE_TRANS (3)
#define PROTO_69845_DATA_TASK_PLAN_TYPE_RPT (4)
#define PROTO_69845_DATA_TASK_PLAN_TYPE_SCRIPT (5)
/* define task state in PROTO_69845_APP_OI_TASK_CFG_UNIT data structure */
#define PROTO_69845_DATA_TASK_STATE_NORMAL (1)
#define PROTO_69845_DATA_TASK_STATE_STOP (2)
/* define runtime range type in
* PROTO_69845_APP_OI_TASK_CFG_UNIT data structure
*/
/* front close and back open */
#define PROTO_69845_DATA_RUNTIME_RANGE_TYPE_FCBO (0)
/* front open and back close */
#define PROTO_69845_DATA_RUNTIME_RANGE_TYPE_FOBC (1)
/* front close and back close */
#define PROTO_69845_DATA_RUNTIME_RANGE_TYPE_FCBC (2)
/* front open and back open */
#define PROTO_69845_DATA_RUNTIME_RANGE_TYPE_FOBO (3)
/* define clct type in PROTO_69845_APP_OI_CLCT_UNIT data structure */
#define PROTO_69845_DATA_CLCT_UNIT_TYPE_CURR (0)
#define PROTO_69845_DATA_CLCT_UNIT_TYPE_LASTN (1)
#define PROTO_69845_DATA_CLCT_UNIT_TYPE_FROZEN (2)
#define PROTO_69845_DATA_CLCT_UNIT_TYPE_INTERVAL (3)
#define PROTO_69845_DATA_CLCT_UNIT_TYPE_RETRY (4)
/* define clct storage timescale selection */
#define PROTO_69845_DATA_CLCT_UNIT_STS_TYPE0 (0)
#define PROTO_69845_DATA_CLCT_UNIT_STS_TYPE1 (1)
#define PROTO_69845_DATA_CLCT_UNIT_STS_TYPE2 (2)
#define PROTO_69845_DATA_CLCT_UNIT_STS_TYPE3 (3)
#define PROTO_69845_DATA_CLCT_UNIT_STS_TYPE4 (4)
#define PROTO_69845_DATA_CLCT_UNIT_STS_TYPE5 (5)
#define PROTO_69845_DATA_CLCT_UNIT_STS_TYPE6 (6)
#define PROTO_69845_DATA_CLCT_UNIT_STS_TYPE7 (7)
/* define double long data length */
#define PROTO_69845_METER_DATA_DOUBLE_LONG_LEN (4)
#define PROTO_69845_METER_DATA_LONG_LEN (2)
/* define report max sn */
#define PROTO_69845_RPT_MAX_SN (63)
/* define max number of power data */
#define PROTO_69845_POWER_MAX_ELE_NUM (4)
/* define max number of energy element data */
#define PROTO_69845_ENERGY_MAX_ELE_NUM (5)
/* define max number of demand element data */
#define PROTO_69845_DEMAND_MAX_ELE_NUM (1)
/* define max number of split phase element data */
#define PROTO_69845_SPLIT_PHASE_MAX_ELE_NUM (3)
/* define max number of run state word data */
#define PROTO_69845_RS_WORD_MAX_ELE_NUM (7)
/* define data collection default id num */
#define PROTO_69845_DC_3P_1M_CUR_DEF_ID_NUM (1)
#define PROTO_69845_DC_3P_DF_DEF_ID_NUM (2)
#define PROTO_69845_DC_3P_MF_DEF_ID_NUM (3)
#define PROTO_69845_DC_3P_15M_CUR_DEF_ID_NUM (4)
#define PROTO_69845_DC_1M_CUR_DEF_ID_NUM (5)
#define PROTO_69845_DC_DF_DEF_ID_NUM (6)
#define PROTO_69845_DC_MF_DEF_ID_NUM (7)
#define PROTO_69845_DC_15M_CUR_DEF_ID_NUM (8)
#define PROTO_69845_DC_3P_DC_DEF_ID_NUM (9)
#define PROTO_69845_DC_DC_DEF_ID_NUM (10)
/* define meter prepayment type */
#define PROTO_69845_METER_NO_PREPAY (0)
#define PROTO_69845_METER_ELECTRIC_PREPAY (1)
#define PROTO_69845_METER_ELECTRICITY_PREPAY (2)
/* parity configuration */
#define PROTO_69845_PARITY_NONE (0)
#define PROTO_69845_PARITY_ODD (1)
#define PROTO_69845_PARITY_EVEN (2)
/** length of data. see PROTO_69845_DLEN_X_BITS */
#define PROTO_69845_DLEN_5_BITS (5)
#define PROTO_69845_DLEN_6_BITS (6)
#define PROTO_69845_DLEN_7_BITS (7)
#define PROTO_69845_DLEN_8_BITS (8)
/** stop bit. see PROTO_69845_STOP_XX_BITS */
#define PROTO_69845_STOP_1_BITS (1)
#define PROTO_69845_STOP_2_BITS (2)
/** running status word 1 - 7 unit length */
#define PROTO_69845_RS_WORD_UNIT_LEN (2)
/* server get response next data type */
#define PROTO_69845_GET_RESP_NEXT_ERR (0)
#define PROTO_69845_GET_RESP_NEXT_NORMAL (1)
#define PROTO_69845_GET_RESP_NEXT_RECORD_NORMAL (2)
/* define get response version unit data cnt */
#define PROTO_69845_GET_VERSION_CNT (6)
/* action request common length */
#define PROTO_69845_ACTION_REQUEST_COMMON_LEN (128)
/* PROTO_69845_APP_DATA_TIME_S data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_time_s {
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
} proto_69845_app_data_time_s_t;
/* PROTO_69845_APP_DATA comdcb data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_comdcb {
/* transmit use buad, 300bit/s(0), 600bit/s(1), 1200bit/s(2), 2400bit/s(3)
* 4800bit/s(4), 7200bit/s(5), 9600bit/s(6), 19200bit/s(7), 38400bit/s(8),
* 57600bit/s(9), 115200bit/s(10), self_adaption(255).
* see standard DL/T 698.45
*/
uint8_t buad;
/* parity. see PROTO_69845_PARITY_XXX */
uint8_t parity;
/* length of data. see PROTO_69845_DLEN_X_BITS */
uint8_t data_bit;
/* stop bit. see PROTO_69845_STOP_XX_BITS */
uint8_t stop;
/* stands flow mode, 0: no flow, 1: hardware flow, 2: software. */
uint8_t flow_mode;
} proto_69845_app_data_comdcb_t;
/* PROTO_69845_APP_DATA_TI data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_ti {
/* interval time unit, see PROTO_OI_TI_INTERVAL_UNIT_TYPE_XXX */
uint8_t uint;
/* interval value */
uint16_t value;
} proto_69845_app_data_ti_t;
/* Priority and Invoke ID data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_piid {
/* sn of request APDU */
uint8_t sn :6,
reserved :1,
/* priority of APDU, see PROTO_69845_APP_PIID_PRIORITY_XXX */
priority :1;
} proto_69845_app_piid_t;
/* Priority and Invoke ID with ACD data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_piid_acd {
/* sn of response APDU */
uint8_t sn :6,
/* ask call demand */
acd :1,
/* priority of APDU, see PROTO_69845_APP_PIID_PRIORITY_XXX */
priority :1;
} proto_69845_app_piid_acd_t;
/* PROTO_69845_APP_DATA_OAD data structure,
* use to describe object Attribute.
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_oad {
/* Object identifies */
uint16_t oi;
/* attribute identifies */
uint8_t attribute_id :5,
/* attribute character */
attribute_char :3;
/* element index of object attribute */
uint8_t element_index;
} proto_69845_app_oad_t;
/* PROTO_69845_APP_DATA_OMD data structure,
* use to describe object method.
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_omd {
/* Object identifies */
uint16_t oi;
/* method identifies */
uint8_t method_id;
/* operation mode, value defaults to 1 */
uint8_t operation_mode;
} proto_69845_app_omd_t;
/* PROTO_69845_APP_DATA_ROAD data structure,
* used to describe one or more associated
* object properties in a recordable objec.
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_road {
/* record object */
proto_69845_app_oad_t rec_oad;
/* associated object cnt */
uint8_t cnt;
/* associated object */
proto_69845_app_oad_t ass_oad[0];
} proto_69845_app_road_t;
/* PROTO_69845_APP_DATA_CSD data structure,
* used to describe the column association
* object properties of records in a record type object.
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_csd {
/* csd type, see PROTO_OI_CSD_TYPE_XXX
* 0 mean csd_data is PROTO_69845_APP_DATA_OAD
* 1 mean csd_data is PROTO_69845_APP_DATA_ROAD
*/
uint8_t type;
/* data */
uint8_t csd_data[0];
} proto_69845_app_data_csd_t;
/* PROTO_69845_APP_DATA_MS data structure,
* used to describe a meter set.
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_ms_group_addr {
/* address cnt */
uint8_t cnt;
/* tsa data */
uint8_t tsa_data[0];
} proto_69845_app_data_ms_group_addr_t;
/* PROTO_69845_APP_DATA_MS data structure,
* used to describe a meter set.
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_ms {
/* ms type, see PROTO_OI_MS_TYPE_XXX */
uint8_t type;
/* ms data.
* if type is PROTO_OI_MS_TYPE_NO_PM or
* PROTO_OI_MS_TYPE_NO_PM, ms_data is invalid
*/
uint8_t ms_data[0];
} proto_69845_app_data_ms_t;
/* PROTO_69845_APP_DATA_RSD data structure,
* used to describe the range of selected record objects.
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_rsd {
/* rsd type, see PROTO_OI_RSD_TYPE_XXX */
uint8_t type;
/* data */
uint8_t rsd_data[0];
} proto_69845_app_data_rsd_t;
/* PROTO_OI_RSD_TYPE_2 data structure,
* see standard DL/T 698.45
* selector2::=SEQUENCE
* {
* object property descriptor OAD,
* start value Data,
* end value Data,
* data interval Data
* }
*/
typedef struct _proto_69845_app_data_rsd_type2 {
/* oad */
proto_69845_app_oad_t oad;
/* data */
uint8_t data[0];
} proto_69845_app_data_rsd_type2_t;
/* PROTO_69845_APP_DATA proxytranscommandrequest data structure,
* see standard DL/T 698.45
*/
typedef struct proto_69845_app_data_proxy_tans_req {
/* piid */
proto_69845_app_piid_t piid;
/* oad */
proto_69845_app_oad_t oad;
/* PROTO_69845_APP_DATA comdcb data structure */
proto_69845_app_data_comdcb_t comdcb;
/* timeout waiting for message, uint is 1s */
uint16_t timeout1;
/* timeout per byte interval, uint is 1ms */
uint16_t timeout2;
/* data len */
uint8_t data_len;
/* data */
uint8_t data[0];
} proto_69845_app_data_proxy_tans_req_t;
/* PROTO_69845_APP_DATA proxy trans command response data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_proxy_tans_resp {
/* piid */
proto_69845_app_piid_t piid;
/* oad */
proto_69845_app_oad_t oad;
/* data type, see PROTO_69845_APP_DATA_XXX */
uint8_t data_type;
/* data len */
uint8_t data_len;
/* data */
uint8_t data[0];
} proto_69845_app_data_proxy_tans_resp_t;
/* PROTO_69845_APP_DATA proxy data structure,
* see standard DL/T 698.45
*/
typedef struct proto_69845_app_data_proxy_req {
/* proxy_type, see PROTO_69845_C_PROXY_XXX */
uint8_t proxy_type;
/* data */
uint8_t data[0];
}proto_69845_app_data_proxy_req_t;
/* PROTO_OI_RSD_TYPE_6/7/8 data structure,
* see standard DL/T 698.45
* selector6/7/8::=SEQUENCE
* {
* data_time_s,
* data_time_s,
* TI,
* MS
* }
*/
typedef struct _proto_69845_app_data_rsd_type678 {
/* start time */
proto_69845_app_data_time_s_t start_time;
/* end time */
proto_69845_app_data_time_s_t end_time;
/* time interval */
proto_69845_app_data_ti_t ti;
/* meter set */
proto_69845_app_data_ms_t meter_set;
} proto_69845_app_data_rsd_type678_t;
/* PROTO_OI_RSD_TYPE_9 data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_rsd_type9 {
/* times */
uint8_t times;
} proto_69845_app_data_rsd_type9_t;
/* PROTO_OI_RSD_TYPE_10 data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_rsd_type10 {
/* record number */
uint8_t record_num;
/* meter set */
proto_69845_app_data_ms_t meter_set;
} proto_69845_app_data_rsd_type10_t;
/* PROTO_69845_APP_DATA_RCSD data structure,
* used to describe object properties associated with recordable objects.
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_rcsd {
/* csd cnt */
uint8_t cnt;
/* csd list, csd see proto_69845_app_data_csd_t */
uint8_t csd_list[0];
} proto_69845_app_data_rcsd_t;
/* PROTO_OI_RSD_TYPE_2 data structure,
* see standard DL/T 698.45
* selector2::=SEQUENCE
* {
* start type
* start value Data,
* end type
* end value Data,
* ti type
* data interval Data
* }
*/
typedef struct _proto_69845_app_data_rsd_type2_data {
/* start time type */
uint8_t start_time_type;
/* start time */
proto_69845_app_data_time_s_t start_time;
/* end time type */
uint8_t end_time_type;
/* end time */
proto_69845_app_data_time_s_t end_time;
/* ti type */
uint8_t ti_type;
/* time interval */
proto_69845_app_data_ti_t ti;
/* RCSD data structure */
proto_69845_app_data_rcsd_t rcsd;
} proto_69845_app_data_rsd_type2_data_t;
/* PROTO_69845_APP_DATA_TSA data sequence structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_tsa_seq {
/* tsa cnt */
uint8_t cnt;
/* tsa list */
uint8_t tsa_list[0];
} proto_69845_app_data_tsa_seq_t;
/* PROTO_OI_MS_TYPE_GROUP_PM_TYPE data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_ms_type {
/* type cnt */
uint8_t cnt;
/* type list */
uint8_t type_list[0];
} proto_69845_app_data_ms_type_t;
/* normal event unit data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_norm_evt_unit {
/* data type, it's always PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED */
uint8_t data0_type;
/* it's always 1 */
uint32_t evt_seq;
/* data type, it's always PROTO_69845_APP_DATA_TIME_S */
uint8_t data1_type;
/* start time */
proto_69845_app_data_time_s_t evt_start_time;
/* data type, it's always PROTO_69845_APP_DATA_TIME_S */
uint8_t data2_type;
/* end time */
proto_69845_app_data_time_s_t evt_end_time;
/* data type, it's always PROTO_69845_APP_DATA_ENUM */
uint8_t data3_type;
/* it's always PROTO_69845_APP_EVT_SOC_485_FALT */
uint8_t evt_soc;
/* data type, it's always PROTO_69845_APP_DATA_ARRAY */
uint8_t data4_type;
/* it's always 1 */
uint8_t channel_cnt;
/* data type, it's always PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data5_type;
/* it's always 2 */
uint8_t member_cnt;
/* data type, it's always PROTO_69845_APP_DATA_OAD */
uint8_t data6_type;
/* channel oad */
proto_69845_app_oad_t channel_oad;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data7_type;
/* flag to mark if the meter power off has been reported */
uint8_t pf_rpt :1,
/* flag to mark if the meter received ack after power off reported */
pf_rpt_ok :1,
/* flag to mark if the meter power on has been reported */
po_rpt :1,
/* flag to mark if the meter received ack after power on reported */
po_rpt_ok :1,
/* reserved for further use */
rsvd :4;
} proto_69845_app_norm_evt_unit_t;
/* abnormal event unit data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_abnorm_evt_unit {
/* it's always 0 */
uint8_t evt_seq;
/* it's always 0 */
uint8_t evt_start_time;
/* it's always 0 */
uint8_t evt_end_time;
/* it's always 0 */
uint8_t evt_soc;
/* it's always 0 */
uint8_t evt_rpt_sta;
} proto_69845_app_abnorm_evt_unit_t;
/* event unit data structure. this event has occured, and not recovered
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_unrecover_evt_unit {
/* data type, it's always PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED */
uint8_t data0_type;
/* it's always 1 */
uint32_t evt_seq;
/* data type, it's always PROTO_69845_APP_DATA_TIME_S */
uint8_t data1_type;
/* start time */
proto_69845_app_data_time_s_t evt_start_time;
/* data type, it's always 0 */
uint8_t data2_type;
/* data type, it's always PROTO_69845_APP_DATA_ENUM */
uint8_t data3_type;
/* it's always PROTO_69845_APP_EVT_SOC_485_FALT */
uint8_t evt_soc;
/* data type, it's always PROTO_69845_APP_DATA_ARRAY */
uint8_t data4_type;
/* it's always 1 */
uint8_t channel_cnt;
/* data type, it's always PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data5_type;
/* it's always 2 */
uint8_t member_cnt;
/* data type, it's always PROTO_69845_APP_DATA_OAD */
uint8_t data6_type;
/* channel oad */
proto_69845_app_oad_t channel_oad;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data7_type;
/* flag to mark if the meter power off has been reported */
uint8_t pf_rpt :1,
/* flag to mark if the meter received ack after power off reported */
pf_rpt_ok :1,
/* flag to mark if the meter power on has been reported */
po_rpt :1,
/* flag to mark if the meter received ack after power on reported */
po_rpt_ok :1,
/* reserved for further use */
rsvd :4;
} proto_69845_app_unrecover_evt_unit_t;
/* runtime range unit data structure in
* proto_69845_app_data_task_cfg_unit_t structure.
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_runtime_range_unit {
/* data type, it's always PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data0_type;
/* element cnt in structure,
* it's always 4.
*/
uint8_t cnt;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data1_type;
/* start hour time */
uint8_t start_hour;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data2_type;
/* start minute time*/
uint8_t start_min;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data3_type;
/* end hour time */
uint8_t end_hour;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data4_type;
/* end minute time */
uint8_t end_min;
} proto_69845_app_runtime_range_unit_t;
/* PROTO_69845_APP_OI_TASK_CFG_UNIT data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_task_cfg_unit {
/* data type, it's always PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data0_type;
/* element cnt in structure,
* it's always 12.
*/
uint8_t task_cfg_ele_cnt;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data1_type;
/* task id */
uint8_t task_id;
/* data type, it's always PROTO_69845_APP_DATA_TI */
uint8_t data2_type;
/* task execution frequency */
proto_69845_app_data_ti_t freq_time;
/* data type, it's always PROTO_69845_APP_DATA_ENUM */
uint8_t data3_type;
/* task plan type, see PROTO_69845_DATA_TASK_PLAN_TYPE_XXX */
uint8_t plan_type;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data4_type;
/* task plan num */
uint8_t plan_num;
/* data type, it's always PROTO_69845_APP_DATA_TIME_S */
uint8_t data5_type;
/* task start time */
proto_69845_app_data_time_s_t start_time;
/* data type, it's always PROTO_69845_APP_DATA_TIME_S */
uint8_t data6_type;
/* task end time */
proto_69845_app_data_time_s_t end_time;
/* data type, it's always PROTO_69845_APP_DATA_TI */
uint8_t data7_type;
/* task time-delay */
proto_69845_app_data_ti_t delay_time;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data8_type;
/* operation priority */
uint8_t priority;
/* data type, it's always PROTO_69845_APP_DATA_ENUM */
uint8_t data9_type;
/* task state, see PROTO_69845_DATA_TASK_STATE_XXX */
uint8_t state;
/* data type, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED */
uint8_t data10_type;
/* script ID before task start */
uint16_t pre_script_id;
/* data type, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED */
uint8_t data11_type;
/* script ID after task end */
uint16_t post_script_id;
/* task runtime description */
/* data type, it's always PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data12_type;
/* element cnt in task runtime description structure,
* it's always 2.
*/
uint8_t runtime_desc_ele_cnt;
/* data type, it's always PROTO_69845_APP_DATA_ENUM */
uint8_t data12_1_type;
/* runtime range type, see PROTO_69845_DATA_RUNTIME_RANGE_TYPE_XXX */
uint8_t range_type;
/* runtime range table */
/* data type, it's always PROTO_69845_APP_DATA_ARRAY */
uint8_t data12_2_type;
/* cnt in task runtime range table */
uint8_t runtime_range_cnt;
proto_69845_app_runtime_range_unit_t runtime_range_table[0];
} proto_69845_app_data_task_cfg_unit_t;
/* PROTO_69845_APP_OI_CLCT_UNIT data structure
* ::= structure:
* {
* unsigned clct_id,
* long-unsigned clct_cnt,
* structure:
* {
* unsigned clct_type,
* data clct_type_desc,
* },
* array CSD clct_data_list,
* MS meter_list,
* enum clct_sts_type,
* }
*/
/* PROTO_69845_APP_OI_CLCT_UNIT data header structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_clct_cfg_unit_hdr {
/* data type, it's always PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data0_type;
/* element cnt in structure,
* it's always 6.
*/
uint8_t clct_cfg_ele_cnt;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data1_type;
/* clct id */
uint8_t clct_id;
/* data type, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED */
uint8_t data2_type;
/* acquisition and storage cnt */
uint16_t clct_cnt;
} proto_69845_app_data_clct_cfg_unit_hdr_t;
/* clct type description in proto_69845_app_data_clct_type_t data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_clct_type_desc {
/* data type, it's always PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data0_type;
/* element cnt in structure,
* it's always 2.
*/
uint8_t ele_cnt;
/* data type, it's always PROTO_69845_APP_DATA_TI */
uint8_t data1_type;
/* time scale interval */
proto_69845_app_data_ti_t ts_interval;
/* data type, see PROTO_69845_APP_DATA_LONG_UNSIGNED */
uint8_t data2_type;
/* supplementary recording cycle cnt */
uint16_t cycle_cnt;
} proto_69845_app_data_clct_type_desc_t;
/* clct type in PROTO_69845_APP_OI_CLCT_UNIT data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_clct_type {
/* data type, it's always PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data0_type;
/* element cnt in structure,
* it's always 2.
*/
uint8_t ele_cnt;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED */
uint8_t data1_type;
/* clct type, see PROTO_69845_DATA_CLCT_UNIT_TYPE_XXX */
uint8_t type;
/* data type, see PROTO_69845_APP_DATA_XXX */
uint8_t data2_type;
/* clct type desc data, base on data2_type */
uint8_t data[0];
} proto_69845_app_data_clct_type_t;
/* CSD unit in data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_clct_csd {
/* data type, it's always PROTO_69845_APP_DATA_ARRAY */
uint8_t data0_type;
/* csd cnt, it's always 1 */
uint8_t csd_cnt;
/* data type, it's always PROTO_69845_APP_DATA_CSD */
uint8_t data1_type;
/* csd type, see PROTO_OI_CSD_TYPE_XXX
* 0 mean csd_data is PROTO_69845_APP_DATA_OAD
* 1 mean csd_data is PROTO_69845_APP_DATA_ROAD
*/
uint8_t type;
/* data */
uint8_t csd_data[0];
} proto_69845_app_data_clct_csd_t;
/* MS in PROTO_69845_APP_OI_CLCT_UNIT data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_clct_ms {
/* data type, it's always PROTO_69845_APP_DATA_MS */
uint8_t data_type;
/* ms type, see PROTO_OI_MS_TYPE_XXX */
uint8_t type;
/* ms data.
* if type is PROTO_OI_MS_TYPE_NO_PM or
* PROTO_OI_MS_TYPE_ALL_PM, ms_data is invalid
*/
uint8_t ms_data[0];
} proto_69845_app_data_clct_ms_t;
/* PROTO_69845_APP_OI_CLCT_UNIT data header structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_clct_cfg_unit_tail {
/* data type, it's always PROTO_69845_APP_DATA_ENUM */
uint8_t data_type;
/* storage timescale type, see PROTO_69845_DATA_CLCT_UNIT_STS_XXX */
uint8_t clct_sts_type;
} proto_69845_app_data_clct_cfg_unit_tail_t;
/* notification and response data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_noti_resp {
/* notification or response data type,
* see PROTO_69845_C_APP_XXX or PROTO_69845_S_APP_XXX
*/
uint8_t type;
/* notification or response data */
uint8_t data[0];
} proto_69845_app_noti_resp_t;
/* server report notify data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_rpt_noti {
/* report notify data type, see PROTO_69845_APP_REPRORT_XX*/
uint8_t data_type;
/* report notify data */
uint8_t data[0];
} proto_69845_app_rpt_noti_t;
/* report normal list data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_rpt_nor_list {
/* priority and invoke id with acd data */
proto_69845_app_piid_acd_t piid_acd;
/* attribute count */
uint8_t att_cnt;
/* attribute data */
uint8_t data[0];
} proto_69845_app_rpt_nor_list_t;
/* report record list data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_rpt_record_list {
/* priority and invoke id with acd data */
proto_69845_app_piid_acd_t piid_acd;
/* attribute count */
uint8_t att_cnt;
/* attribute data */
uint8_t data[0];
} proto_69845_app_rpt_record_list_t;
/* report result record data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_rpt_result_record {
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
/* record column selection descriptor, include csd list,
* followed proto_69845_app_rpt_noti_result_t in the behind
*/
proto_69845_app_data_rcsd_t rcsd;
} proto_69845_app_rpt_result_record_t;
/* report notify result data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_rpt_noti_result {
/* result type, see PROTO_69845_APP_RPT_RESULT_XX */
uint8_t type;
/* result data*/
uint8_t data[0];
} proto_69845_app_rpt_noti_result_t;
/* report notify result data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_rpt_array_result {
/* result array len */
uint8_t array_len;
/* result data*/
uint8_t data[0];
} proto_69845_app_rpt_array_result_t;
/* report record row data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_rpt_record_row {
/* record number */
uint8_t record_num;
/* record row data*/
uint8_t data[0];
} proto_69845_app_rpt_record_row_t;
/* element data structure in data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_ele_data {
/* data type, see PROTO_69845_APP_DATA_XXX */
uint8_t data_type;
/* the number of this type of data in the data domain */
uint8_t num_of_data;
/* This type of data */
uint8_t data[0];
} proto_69845_app_ele_data_t;
/* data structure in apdu,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data {
/* data type, see PROTO_69845_APP_DATA_XXX */
uint8_t data_type;
/* This type of data */
uint8_t data[0];
} proto_69845_app_data_t;
/* get result data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_result {
/* type of result, see PROTO_69845_APP_GET_RESULT_XXX */
uint8_t result_type;
/* the data of the result */
uint8_t result[0];
} proto_69845_app_get_result_t;
/* A Result Normal data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_result_normal {
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
/* get a result normal data */
proto_69845_app_get_result_t get_result;
} proto_69845_app_result_normal_t;
/* Client Get Request Normal data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_req_normal {
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
} proto_69845_app_get_req_normal_t;
/* Client Get Request Normal data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_req_normal_list {
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* oad cnt */
uint8_t oad_cnt;
/* object attribute descriptor data */
proto_69845_app_oad_t oad[0];
} proto_69845_app_get_req_normal_list_t;
/* Client Get Request record data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_req_record {
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
/* rsd and rcsd */
uint8_t rsd_and_rcsd[0];
} proto_69845_app_get_req_record_t;
/* Client Get Request Next data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_req_next{
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* last sequence number */
uint16_t last_seq;
} proto_69845_app_get_req_next_t;
/* Client Get Request simplify record data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_simp_record_resp {
/* priority and invoke id data */
proto_69845_app_piid_acd_t piid_acd;
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
/* rsd and road */
uint8_t rsd_and_road[0];
} proto_69845_app_get_simp_record_resp_t;
/* Client Get Request record data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_record_resp {
/* priority and invoke id data */
proto_69845_app_piid_acd_t piid_acd;
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
/* record column selection descriptor */
uint8_t rcsd[0];
} proto_69845_app_get_record_resp_t;
/* Server Get Response Normal data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_resp_normal {
/* priority and invoke id with acd data */
proto_69845_app_piid_acd_t piid_acd;
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
/* type of result, see PROTO_69845_APP_GET_RESULT_XXX */
uint8_t result_type;
/* the data of the result */
uint8_t result[0];
} proto_69845_app_get_resp_normal_t;
/* Server Get Response Next data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_resp_next {
/* priority and invoke id with acd data */
proto_69845_app_piid_acd_t piid_acd;
/* end flag, 1 is end */
uint8_t end_flag;
/* sequence number */
uint16_t seq;
/* data type, see PROTO_69845_GET_RESP_NEXT_XXX */
uint8_t data_type;
/* the number of this type of data in the data domain */
uint8_t num_of_data;
/* data */
uint8_t data[0];
} proto_69845_app_get_resp_next_t;
/* Server Get Response Next fail data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_resp_next_fail {
/* priority and invoke id with acd data */
proto_69845_app_piid_acd_t piid_acd;
/* end flag, 1 is end */
uint8_t end_flag;
/* sequence number */
uint16_t seq;
/* data type is PROTO_69845_GET_RESP_NEXT_ERR */
uint8_t data_type;
/* err code */
uint8_t err_code;
} proto_69845_app_get_resp_next_fail_t;
typedef struct _proto_69845_app_oad_resp_hdr {
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
/* type of result, see PROTO_69845_APP_GET_RESULT_XXX */
uint8_t result_type;
/* the data of the result */
uint8_t result[0];
} proto_69845_app_oad_resp_hdr_t;
/* Server Get Response Normal list data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_resp_normal_list {
/* priority and invoke id with acd data */
proto_69845_app_piid_acd_t piid_acd;
/* oad cnt */
uint8_t oad_cnt;
/* oad data */
uint8_t oad_data[0];
} proto_69845_app_get_resp_normal_list_t;
/* Client Get Request data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_req {
/* get request data type, see PROTO_69845_APP_GET_XXX*/
uint8_t data_type;
/* get requests data information */
uint8_t data[0];
} proto_69845_app_get_req_t;
/* Server Get Response data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_resp {
/* get response data type, see PROTO_69845_APP_GET_XXX*/
uint8_t data_type;
/* get response data */
uint8_t data[0];
} proto_69845_app_get_resp_t;
/* Client Set Request Normal data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_set_req_normal {
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
/* data */
proto_69845_app_data_t data;
} proto_69845_app_set_req_normal_t;
typedef struct _proto_69845_app_oad_with_data {
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
/* data */
proto_69845_app_data_t data;
} proto_69845_app_oad_with_data_t;
typedef struct _proto_69845_app_set_req_normal_list {
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* oad cnt */
uint8_t oad_cnt;
/* object attribute descriptor with data,
* see proto_69845_app_oad_with_data_t
*/
uint8_t oad_and_dar_list[0];
} proto_69845_app_set_req_normal_list_t;
typedef struct _proto_69845_app_oad_with_dar {
/* object method descriptor data */
proto_69845_app_oad_t oad;
/* see PROTO_69845_APP_DAR_XXX */
uint8_t dar;
} proto_69845_app_oad_with_dar_t;
/* Server Set response normal data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_set_resp_normal {
/* priority and invoke id data */
proto_69845_app_piid_acd_t piid_acd;
/* object method descriptor with data */
proto_69845_app_oad_with_dar_t result;
} proto_69845_app_set_resp_normal_t;
typedef struct _proto_69845_app_set_resp_normal_list {
/* priority and invoke id data */
proto_69845_app_piid_acd_t piid_acd;
/* oad cnt */
uint8_t oad_cnt;
/* object method descriptor with data */
proto_69845_app_oad_with_dar_t result[0];
} proto_69845_app_set_resp_normal_list_t;
/* Client Set Request data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_set_req {
/* set request data type, see PROTO_69845_APP_SET_XXX*/
uint8_t data_type;
/* set requests data information */
uint8_t data[0];
} proto_69845_app_set_req_t;
/* Server Set Response data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_set_resp {
/* set response data type, see PROTO_69845_APP_SET_XXX*/
uint8_t data_type;
/* set response data */
uint8_t data[0];
} proto_69845_app_set_resp_t;
/* Client action Request data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_action_req {
/* action request data type, see PROTO_69845_APP_ACTION_XXX*/
uint8_t data_type;
/* action requests data information */
uint8_t data[0];
} proto_69845_app_action_req_t;
/* Client action request data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_action_req_single {
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* Object method descriptor data */
proto_69845_app_omd_t omd;
/* data */
proto_69845_app_data_t data;
} proto_69845_app_action_req_single_t;
typedef struct _proto_69845_app_omd_with_data {
/* object method descriptor data */
proto_69845_app_omd_t omd;
/* data */
proto_69845_app_data_t data;
} proto_69845_app_omd_with_data_t;
/* Client action request normal list data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_action_req_list {
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* omd cnt */
uint8_t omd_cnt;
/* object method descriptor with data,
* see proto_69845_app_omd_with_data_t
*/
uint8_t omd_and_data_list[0];
} proto_69845_app_action_req_list_t;
/* Server action response data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_action_resp {
/* action response data type, see PROTO_69845_APP_ACTION_XXX*/
uint8_t data_type;
/* action response data information */
uint8_t data[0];
} proto_69845_app_action_resp_t;
typedef struct _proto_69845_app_omd_with_dar {
/* object method descriptor data */
proto_69845_app_omd_t omd;
/* see PROTO_69845_APP_DAR_XXX */
uint8_t dar;
/* see PROTO_69845_APP_OPTIONAL_XXX */
uint8_t optional;
/* optional is PROTO_69845_APP_OPTIONAL_NO_DATA: no data.
* optional is PROTO_69845_APP_OPTIONAL_DATA: the data structure is
* proto_69845_app_data_t.
*/
uint8_t data[0];
} proto_69845_app_omd_with_dar_t;
/* Server action response normal data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_action_resp_normal {
/* priority and invoke id data */
proto_69845_app_piid_acd_t piid_acd;
/* object method descriptor with data */
proto_69845_app_omd_with_dar_t result;
} proto_69845_app_action_resp_normal_t;
/* Server action response normal list data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_action_resp_normal_list {
/* priority and invoke id data */
proto_69845_app_piid_acd_t piid_acd;
/* omd cnt */
uint8_t omd_cnt;
/* object method descriptor with data,
* see proto_69845_app_omd_with_dar_t
*/
uint8_t omd_and_dar_list[0];
} proto_69845_app_action_resp_normal_list_t;
/* Client report response data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_report_resp {
/* action request data type, see PROTO_69845_APP_REPRORT_XXX*/
uint8_t data_type;
/* action requests data information */
uint8_t data[0];
} proto_69845_app_report_resp_t;
/* Client report response data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_report_req {
/* action request data type, see PROTO_69845_APP_REPRORT_XXX*/
uint8_t data_type;
/* action requests data information */
uint8_t data[0];
} proto_69845_app_report_req_t;
/* ReportNotificationSimplifyRecord::= SEQUENCE:
* {
* PIID-ACD,
* OAD,
* RSD,
* ROAD,
* record data CHOICE
* {
* [0] DAR
* [1] A-SimplifyRecord
* }
* }
*/
/* simplify record report data structure,
* see standard DL/T 698.45, for jangsu
*/
typedef struct _proto_69845_app_rpt_simp_rec_req_hdr {
/* priority and invoke id with acd data */
proto_69845_app_piid_acd_t piid_acd;
/* oad */
proto_69845_app_oad_t oad;
/* rsd, road, record */
uint8_t rsd_road_record[0];
} proto_69845_app_rpt_simp_rec_req_hdr_t;
/* Request and Response data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_req_resp {
/* request or response data type,
* see PROTO_69845_C_APP_XXX or PROTO_69845_S_APP_XXX
*/
uint8_t type;
/* request or response data */
uint8_t data[0];
} proto_69845_app_req_resp_t;
/* application layer payload data unit */
typedef struct _proto_69845_apdu {
/* apdu type, see PROTO_69845_C_APP_XXX or PROTO_69845_S_APP_XXX */
uint8_t type;
/* apdu payload */
uint8_t data[0];
} proto_69845_apdu_t;
/* apdt get reso,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_apdu_get_rsp {
/* get response type, see PROTO_69845_APP_GET_XXX. */
uint8_t type;
/* priority and invoke id data */
proto_69845_app_piid_acd_t piid_acd;
/* request or response data */
uint8_t data[0];
} proto_69845_apdu_get_rsp_t;
/* Get Request data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_req_info {
/* get data type, see PROTO_69845_GET_XXX */
uint8_t type;
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
} proto_69845_app_get_req_info_t;
/* Get normal list request data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_get_list_req_info {
/* get data type, see PROTO_69845_APP_GET_NORMALLIST */
uint8_t type;
/* oad cnt */
uint8_t oad_cnt;
/* priority and invoke id data */
proto_69845_app_piid_t piid;
/* object attribute descriptor data */
proto_69845_app_oad_t oad[0];
} proto_69845_app_get_list_req_info_t;
/* PROTO_69845_APP_LEN_DESCRIPT data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_len_descript {
/* len byte number */
uint8_t byte_num: 7,
/* multibyte flag */
mub_flag: 1;
} proto_69845_app_len_descript_t;
/* security request and response data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_sec_req_resp_info {
/* security data type, see PROTO_69845_SEC_DATA_TYPE_XXX */
uint8_t type;
/* data length */
uint8_t len;
/* data */
uint8_t data[0];
} proto_69845_app_sec_req_resp_info_t;
/* security req and resp data validation structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_sec_req_resp_vali_info {
/* security validation type,
* req see PROTO_69845_SEC_REQ_VALI_TYPE_XXX.
* resp see PROTO_69845_SEC_RESP_VALI_TYPE_XXX.
*/
uint8_t type;
/* data */
uint8_t data[0];
} proto_69845_app_sec_req_resp_vali_info_t;
/* security validation random number structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_sec_rn_info {
/* rn length */
uint8_t len;
/* rn */
uint8_t data[0];
} proto_69845_app_sec_rn_info_t;
/* security validation optional data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_sec_optinon_info {
/* security validation type,
* req see PROTO_69845_SEC_REQ_VALI_TYPE_XXX.
* resp see PROTO_69845_SEC_RESP_VALI_TYPE_XXX.
*/
uint8_t type;
/* choice */
uint8_t choice;
/* data */
uint8_t data[0];
} proto_69845_app_sec_optinon_info_t;
/* security validation mac data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_sec_mac_info {
/* mac length */
uint8_t len;
/* mac */
uint8_t data[0];
} proto_69845_app_sec_mac_info_t;
typedef struct _proto_69845_ctrl {
/* function code. see PROTO_69845_FN_XXX */
uint8_t fn :3,
/* flag of scrambling code identification
* if flag_scramble is 1, it mean that the link user data is scrambled.
* if flag_scramble is 0, it mean that the link user data isn't scrambled.
* scrambling code is 0x33.
*/
flag_scramble :1,
/* reserve */
reserve :1,
/* flag to mark if the data is a fragment of the APDU,
* see PROTO_69845_APDU_XXX.
*/
fragment :1,
/* prm : flag of primary request message.
* dir : flag of direction.
* The two flags unite to represent meaning, as follow:
* dir prm
* 0 0 the response of the client to the server report
* 0 1 client initiated request
* 1 0 server initiated report
* 1 1 the response of the server to the client request
* see PROTO_69845_D_P_XXX.
*/
dir_prm :2;
} proto_69845_ctrl_t;
typedef struct _proto_69845_addr_flag {
/* length of the server address.
* the length include 1 byte client address
* and (sa_len - 1) byte server address.
*/
uint8_t sa_len :4,
/* logical address */
logical_addr :1,
/* flag of extended logical address */
flg_ext :1,
/* type of the server address, see PROTO_69845_SA_TYPE_XXX. */
sa_type :2;
} proto_69845_addr_flag_t;
/* PROTO_69845_APP_DATA_TSA data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_data_tsa {
/* include flag len and address len */
uint8_t len;
/* flag of address field */
proto_69845_addr_flag_t flag;
/* server address and client address */
uint8_t sa_and_ca[0];
} proto_69845_app_data_tsa_t;
typedef struct _proto_69845_addr {
/* flag of address field */
proto_69845_addr_flag_t flag;
/* server address and client address */
uint8_t sa_and_ca[0];
} proto_69845_addr_t;
/* frame head info of 698.45 protocol link layer frame */
typedef struct proto_69845_frame_head_info {
/* start char, see PROTO_69845_START_BYTE */
uint8_t start_char;
/* frame data length */
uint16_t len;
/* control code */
proto_69845_ctrl_t ctrl;
/* address field */
proto_69845_addr_t addr;
} proto_69845_frame_head_info_t;
/* frame tail info of 698.45 protocol link layer frame */
typedef struct _proto_69845_tailer {
/* check sum */
uint8_t fcs[PROTO_69845_CHECKSUM_LEN];
/* end char. see 645_END_CHAR */
uint8_t end_char;
} proto_69845_tailer_t;
/* structure of 698.45 link layer frame
-------------
|----68H----| start of frame, 0x68
|----Len----| 2 byte. length of frame except start of frame and end of frame
|----Ctrl---| 1 byte of control
|----Addr---| address field. length is variable
|----HCS----| 2 byte of frame header check
|----Data---| APDU. length is variable
|----FCS----| 2 byte of frame
|----16H----| end of frame, 0x16
-------------
*/
typedef struct _proto_69845_rpt_meter_energy_data {
/* type is PROTO_69845_APP_DATA_ARRAY */
uint8_t type;
/* cnt is 5 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG or
* PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED
*/
uint8_t type0;
/* total energy value. big endian, uint is 0.01kWh.
* value is double long data or double long unsigned data
* base on type0.
*/
uint8_t total[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG or
* PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED
*/
uint8_t type1;
/* the rate 1 energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data
* base on type1.
*/
uint8_t rate_1[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG or
* PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED
*/
uint8_t type2;
/* the rate 2 energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data
* base on type2.
*/
uint8_t rate_2[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG or
* PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED
*/
uint8_t type3;
/* the rate 3 energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data
* base on type3.
*/
uint8_t rate_3[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG or
* PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED
*/
uint8_t type4;
/* the rate 3 energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data
* base on type3.
*/
uint8_t rate_4[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_meter_energy_data_t;
typedef struct _proto_69845_rpt_meter_energy_data_simp {
/* total energy value. big endian, uint is 0.01kWh.
* value is double long data or double long unsigned data
* base on type0.
*/
uint8_t total[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* the rate 1 energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data
* base on type1.
*/
uint8_t rate_1[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* the rate 2 energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data
* base on type2.
*/
uint8_t rate_2[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* the rate 3 energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data
* base on type3.
*/
uint8_t rate_3[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* the rate 3 energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data
* base on type3.
*/
uint8_t rate_4[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_meter_energy_data_simp_t;
typedef struct _proto_69845_rpt_meter_energy_sum_data {
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG or
* PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED
*/
uint8_t type;
/* total energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data.
*/
uint8_t total[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_meter_energy_sum_data_t;
typedef struct _proto_69845_rpt_meter_energy_sum_data_simp {
/* total energy value. big endian, uint is 0.01kWh
* value is double long data or double long unsigned data.
*/
uint8_t total[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_meter_energy_sum_data_simp_t;
typedef struct _proto_69845_rpt_demand_with_time {
/* type is PROTO_69845_APP_DATA_STRUCTURE */
uint8_t type;
/* cnt is 2 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG or
* PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED
*/
uint8_t type0;
/* max demand value. big endian, unit is 0.0001kW.
* value is double long data or double long unsigned data
* base on type0.
*/
uint8_t demand[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_TIME_S */
uint8_t type1;
/* occurrence time */
proto_69845_app_data_time_s_t time;
} proto_69845_rpt_demand_with_time_t;
typedef struct _proto_69845_rpt_v_3p {
/* type is PROTO_69845_APP_DATA_ARRAY */
uint8_t type;
/* cnt is 3 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_LONG_UNSIGNED */
uint8_t type0;
/* a phase voltage. big endian, unit is 0.1V.
* value is long unsigned data
*/
uint8_t a[PROTO_69845_METER_DATA_LONG_LEN];
/* type is PROTO_69845_APP_DATA_LONG_UNSIGNED */
uint8_t type1;
/* b phase voltage. big endian, unit is 0.1V.
* value is long unsigned data
*/
uint8_t b[PROTO_69845_METER_DATA_LONG_LEN];
/* type is PROTO_69845_APP_DATA_LONG_UNSIGNED */
uint8_t type2;
/* c phase voltage. big endian, unit is 0.1V.
* value is long unsigned data
*/
uint8_t c[PROTO_69845_METER_DATA_LONG_LEN];
} proto_69845_rpt_v_3p_t;
typedef struct _proto_69845_rpt_v_3p_simp {
/* a phase voltage. big endian, unit is 0.1V.
* value is long unsigned data
*/
uint8_t a[PROTO_69845_METER_DATA_LONG_LEN];
/* b phase voltage. big endian, unit is 0.1V.
* value is long unsigned data
*/
uint8_t b[PROTO_69845_METER_DATA_LONG_LEN];
/* c phase voltage. big endian, unit is 0.1V.
* value is long unsigned data
*/
uint8_t c[PROTO_69845_METER_DATA_LONG_LEN];
} proto_69845_rpt_v_3p_simp_t;
typedef struct _proto_69845_rpt_v_single {
/* type is PROTO_69845_APP_DATA_LONG_UNSIGNED */
uint8_t type;
/* a phase voltage. big endian, unit is 0.1V.
* value is long unsigned data
*/
uint8_t a[PROTO_69845_METER_DATA_LONG_LEN];
} proto_69845_rpt_v_single_t;
typedef struct _proto_69845_rpt_v_single_simp {
/* a phase voltage. big endian, unit is 0.1V.
* value is long unsigned data
*/
uint8_t a[PROTO_69845_METER_DATA_LONG_LEN];
} proto_69845_rpt_v_single_simp_t;
typedef struct _proto_69845_rpt_i_3p {
/* type is PROTO_69845_APP_DATA_ARRAY */
uint8_t type;
/* cnt is 3 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type0;
/* a phase current. big endian, uint is 0.001A.
* value is double long data.
*/
uint8_t a[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type1;
/* b phase current. big endian, uint is 0.001A.
* value is double long data.
*/
uint8_t b[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type2;
/* c phase current. big endian, uint is 0.001A.
* value is double long data.
*/
uint8_t c[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_i_3p_t;
typedef struct _proto_69845_rpt_i_3p_simp {
/* a phase current. big endian, uint is 0.001A.
* value is double long data.
*/
uint8_t a[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* b phase current. big endian, uint is 0.001A.
* value is double long data.
*/
uint8_t b[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* c phase current. big endian, uint is 0.001A.
* value is double long data.
*/
uint8_t c[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_i_3p_simp_t;
typedef struct _proto_69845_rpt_i_single {
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type;
/* a phase current. big endian, uint is 0.001A.
* value is double long data.
*/
uint8_t a[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_i_single_t;
typedef struct _proto_69845_rpt_i_single_simp {
/* a phase current. big endian, uint is 0.001A.
* value is double long data.
*/
uint8_t a[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_i_single_simp_t;
typedef struct _proto_69845_rpt_power_3p {
/* type is PROTO_69845_APP_DATA_ARRAY */
uint8_t type;
/* cnt is 4 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type0;
/* total power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t total[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type1;
/* a phase power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t a[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type2;
/* b phase power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t b[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type3;
/* c phase power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t c[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_power_3p_t;
typedef struct _proto_69845_rpt_power_3p_simp {
/* total power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t total[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* a phase power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t a[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* b phase power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t b[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* c phase power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t c[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_power_3p_simp_t;
typedef struct _proto_69845_rpt_power_single {
/* type is PROTO_69845_APP_DATA_ARRAY */
uint8_t type;
/* cnt is 2 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type0;
/* total power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t total[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG */
uint8_t type1;
/* a phase power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t a[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_power_single_t;
typedef struct _proto_69845_rpt_power_single_simp {
/* total power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t total[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* a phase power data. big endian, uint is 0.1W
* value is double long data.
*/
uint8_t a[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
} proto_69845_rpt_power_single_simp_t;
typedef struct _proto_69845_rpt_pf_3p {
/* type is PROTO_69845_APP_DATA_ARRAY */
uint8_t type;
/* cnt is 4 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type0;
/* total power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t total[PROTO_69845_METER_DATA_LONG_LEN];
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type1;
/* a phase power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t a[PROTO_69845_METER_DATA_LONG_LEN];
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type2;
/* b phase power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t b[PROTO_69845_METER_DATA_LONG_LEN];
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type3;
/* c phase power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t c[PROTO_69845_METER_DATA_LONG_LEN];
} proto_69845_rpt_pf_3p_t;
typedef struct _proto_69845_rpt_pf_3p_simp {
/* total power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t total[PROTO_69845_METER_DATA_LONG_LEN];
/* a phase power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t a[PROTO_69845_METER_DATA_LONG_LEN];
/* b phase power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t b[PROTO_69845_METER_DATA_LONG_LEN];
/* c phase power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t c[PROTO_69845_METER_DATA_LONG_LEN];
} proto_69845_rpt_pf_3p_simp_t;
typedef struct _proto_69845_rpt_pf_single {
/* type is PROTO_69845_APP_DATA_ARRAY */
uint8_t type;
/* cnt is 2 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type0;
/* total power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t total[PROTO_69845_METER_DATA_LONG_LEN];
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type1;
/* a phase power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t a[PROTO_69845_METER_DATA_LONG_LEN];
} proto_69845_rpt_pf_single_t;
typedef struct _proto_69845_rpt_pf_single_simp {
/* total power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t total[PROTO_69845_METER_DATA_LONG_LEN];
/* a phase power factor data. big endian, unit is 0.001.
* value is long data.
*/
uint8_t a[PROTO_69845_METER_DATA_LONG_LEN];
} proto_69845_rpt_pf_single_simp_t;
/* PROTO_69845_APP_DATA_TIME_S data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_rpt_data_time_s {
/* type is PROTO_69845_APP_DATA_TIME_S */
uint8_t type;
/* time */
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
} proto_69845_rpt_data_time_s_t;
/* PROTO_69845_APP_DATA_TIME_S simple data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_rpt_data_time_s_simp {
/* time */
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
} proto_69845_rpt_data_time_s_simp_t;
/* PROTO_69845_MAX_DEMAND_DATA_T data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_demand_with_time {
/* data type, see PROTO_69845_APP_DATA_XXX
* it's always PROTO_69845_APP_DATA_STRUCTURE.
*/
uint8_t type;
/* element cnt in structure,
* it's always 2.
*/
uint8_t cnt;
/* demand data type, see PROTO_69845_APP_DATA_XXX
* it's always PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED.
*/
uint8_t demand_data_type;
/* demand data */
uint8_t demand[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* time tpye, see PROTO_69845_APP_DATA_XXX
* it's always PROTO_69845_APP_DATA_TIME_S.
*/
uint8_t time_type;
/* time */
proto_69845_app_data_time_s_t time;
} proto_69845_demand_with_time_t;
typedef struct _proto_69845_app_clct_state_tsa {
/* include flag len and address len */
uint8_t len;
/* flag of address field */
proto_69845_addr_flag_t flag;
/* server address and client address */
uint8_t addr[IOT_MAC_ADDR_LEN];
} proto_69845_app_clct_state_tsa_t;
/* PROTO_69845_APP_OI_CLCT_STATE_LIST data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_clct_state {
/* data type, see PROTO_69845_APP_DATA_XXX
* it's always PROTO_69845_APP_DATA_STRUCTURE.
*/
uint8_t type;
/* element cnt in structure,
* it's always 8.
*/
uint8_t cnt;
/* data type, it's always PROTO_69845_APP_DATA_TSA. */
uint8_t data0_type;
/* mac address */
proto_69845_app_clct_state_tsa_t mac_addr;
/* data tpye, it's always PROTO_69845_APP_DATA_UNSIGNED. */
uint8_t data1_type;
/* relay level */
uint8_t level;
/* data tpye, it's always PROTO_69845_APP_DATA_TSA. */
uint8_t data2_type;
/* relay address */
proto_69845_app_clct_state_tsa_t relay_addr;
/* data tpye, it's always PROTO_69845_APP_DATA_OAD. */
uint8_t data3_type;
/* port description */
proto_69845_app_oad_t oad;
/* data tpye, it's always PROTO_69845_APP_DATA_TIME_S. */
uint8_t data4_type;
/* port description */
proto_69845_app_data_time_s_t last_time;
/* data tpye, it's always PROTO_69845_APP_DATA_UNSIGNED. */
uint8_t data5_type;
/* collection failure times */
uint8_t fail_cnt;
/* data tpye, it's always PROTO_69845_APP_DATA_ENUM. */
uint8_t data6_type;
/* phase description, it's always 0.
* 0 means that phase is unknown.
*/
uint8_t phase_desc;
/* data tpye, it's always PROTO_69845_APP_DATA_ENUM. */
uint8_t data7_type;
/* abnormal description, it's always 0.
* 0 means that phase is normal.
*/
uint8_t abnormal_desc;
} proto_69845_clct_state_t;
/* PROTO_69845_APP_OI_CLCT_MONITOR_LIST data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_clct_monitor {
/* data type, see PROTO_69845_APP_DATA_XXX
* it's always PROTO_69845_APP_DATA_STRUCTURE.
*/
uint8_t type;
/* element cnt in structure,
* it's always 8.
*/
uint8_t cnt;
/* data type, it's always PROTO_69845_APP_DATA_UNSIGNED. */
uint8_t data0_type;
/* task id */
uint8_t task_id;
/* data tpye, it's always PROTO_69845_APP_DATA_ENUM. */
uint8_t data1_type;
/* task run state, it's always 1.
* 1 mean that task is running.
*/
uint8_t task_state;
/* data tpye, it's always PROTO_69845_APP_DATA_TIME_S. */
uint8_t data2_type;
/* task start time */
proto_69845_app_data_time_s_t start_time;
/* data tpye, it's always PROTO_69845_APP_DATA_TIME_S. */
uint8_t data3_type;
/* task end time */
proto_69845_app_data_time_s_t end_time;
/* data tpye, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED. */
uint8_t data4_type;
/* collect meter cnt */
uint16_t collect_meter_cnt;
/* data tpye, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED. */
uint8_t data5_type;
/* collection success cnt */
uint16_t success_cnt;
/* data tpye, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED. */
uint8_t data6_type;
/* send cnt */
uint16_t send_cnt;
/* data tpye, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED. */
uint8_t data7_type;
/* receive cnt */
uint16_t rec_cnt;
} proto_69845_clct_monitor_t;
typedef struct _proto_698_flw_status {
/* reserve for future */
uint8_t reserve0_bit0 : 1,
/* flag of event that esam is error */
esam_error : 1,
/* reserve for future */
reserve0_bit2 : 1,
/* flag of event that battery of clock chip is low voltage. */
clock_battery_low : 1,
/* reserve for future */
reserve0_bit4 : 1,
/* flag of event that flash fault. */
flash_error : 1,
/* reserve for future */
reserve0_bit6_7 : 2;
/* flag of event that battery for meter reading in case of power
* failure is low voltage.
*/
uint8_t battery_low_for_pd : 1,
/* flag of overdraft status */
overdraft_status : 1,
/* reserve for future */
reserve1_bit2_5 : 4,
/* switch trip successful */
switch_trip : 1,
/* switch on successful */
switch_on : 1;
/* reserve for future */
uint8_t reserve2;
/* reserve for future */
uint8_t reserve3;
} proto_698_flw_status_t;
typedef struct _proto_69845_rs_word_1 {
/* reserve1 for future */
uint16_t reserve1 :1,
/* accumulation mode of demand */
demand_mode :1,
/* clock battery */
clock_battery :1,
/* power down meter reading battery */
pd_mr_battery :1,
/* active power direction */
act_power_dir :1,
/* reactive power direction */
react_power_dir :1,
/* reserve2 for future */
reserve2 :2,
/* control loop error */
ctrl_loop :1,
/* ESAM error */
esam :1,
/* reserve3 for future */
reserve3 :2,
/* internal program error */
inter_program :1,
/* memory failure or damage */
memory :1,
/* overdraft state */
overdraft :1,
/* clock failure */
clock_fail :1;
} proto_69845_rs_word_1_t;
typedef struct _proto_69845_rs_word_2 {
/* A active power direction */
uint16_t a_act_power_dir :1,
/* B active power direction */
b_act_power_dir :1,
/* C active power direction */
c_act_power_dir :1,
/* reserve for future */
reserve :1,
/* A reactive active power direction */
a_rea_power_dir :1,
/* B reactive active power direction */
b_rea_power_dir :1,
/* C reactive active power direction */
c_rea_power_dir :1,
/* reserve for future */
reserve1 :9;
} proto_69845_rs_word_2_t;
typedef struct _proto_69845_rs_word_3 {
/* reserve for future */
uint16_t reserve :1,
/* The power supply mode */
power_mode :2,
/* programming operation permit */
oper_pro :1,
/* relay status */
relay_state :1,
/* reserve for future */
reserve1 :1,
/* relay command */
relay_cmd :1,
/* pre-trip alarm */
trip_ararm :1,
/* meter prepayment type, see proto_69845_METER_XXX*/
perpay_type :2,
/* reserve for future */
reserve2 :2,
/* electrical state */
electrical_state :1,
/* status of identity authentication */
ide_aut_state :1,
/* local account opening status */
local_acc_ope_state :1,
/* remote account opening status */
remote_acc_ope_state :1;
} proto_69845_rs_word_3_t;
typedef struct _proto_69845_rs_word_456 {
/* loss voltage */
uint16_t v_loss1 :1,
/* loss voltage */
v_loss2 :1,
/* over voltage */
v_over :1,
/* no current */
a_loss :1,
/* auxiliary power loss */
a_over :1,
/* over load */
load_over :1,
/* power reverse */
power_reverse :1,
/* broken phase */
broken_phase :1,
/* total power factor over lower limit */
broken_current :1,
/* reserve for future */
reserve :7;
} proto_69845_rs_word_456_t;
typedef struct _proto_69845_rs_word_7 {
/* voltage reverse phase sequence */
uint16_t v_rps :1,
/* current reverse phase sequence */
a_rp_seq :1,
/* voltage unbalance */
v_unbalance :1,
/* current unbalance */
a_unbalance :1,
/* auxiliary power loss */
aux_power_loss :1,
/* power failure */
power_fail :1,
/* excess requirement */
req_excess :1,
/* total power factor over lower limit */
tpf_over_lower :1,
/* serious current imbalance */
a_ser_imbalance :1,
/* reserve for future */
reserve :7;
} proto_69845_rs_word_7_t;
/* The running status word for the electricity meter
* running status word 1 - 7 unit length see PROTO_69845_RS_WORD_UNIT_LEN
*/
typedef struct _proto_69845_rs_word {
/* The running status word 1 for the electricity meter */
proto_69845_rs_word_1_t rs_word_1;
/* The running status word 2 for the electricity meter */
proto_69845_rs_word_2_t rs_word_2;
/* The running status word 3 for the electricity meter */
proto_69845_rs_word_3_t rs_word_3;
/* The running status word 456 for the electricity meter */
proto_69845_rs_word_456_t rs_word_456[3];
/* The running status word 7 for the electricity meter */
proto_69845_rs_word_7_t rs_word_7;
} proto_69845_rs_word_t;
/* The report running status word for the electricity meter */
typedef struct _proto_69845_rpt_rs_word {
/* type is PROTO_69845_APP_DATA_ARRAY */
uint8_t type;
/* cnt is 7 */
uint8_t cnt;
/* data type is PROTO_69845_APP_DATA_BIT_STRING */
uint8_t data_type1;
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type1;
/* The running status word 1 for the electricity meter */
proto_69845_rs_word_1_t rs_word_1;
/* data type is PROTO_69845_APP_DATA_BIT_STRING */
uint8_t data_type2;
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type2;
/* The running status word 2 for the electricity meter */
proto_69845_rs_word_2_t rs_word_2;
/* data type is PROTO_69845_APP_DATA_BIT_STRING */
uint8_t data_type3;
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type3;
/* The running status word 3 for the electricity meter */
proto_69845_rs_word_3_t rs_word_3;
/* data type is PROTO_69845_APP_DATA_BIT_STRING */
uint8_t data_type4;
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type4;
/* The running status word 4 for the electricity meter */
proto_69845_rs_word_456_t rs_word_4;
/* data type is PROTO_69845_APP_DATA_BIT_STRING */
uint8_t data_type5;
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type5;
/* The running status word 5 for the electricity meter */
proto_69845_rs_word_456_t rs_word_5;
/* data type is PROTO_69845_APP_DATA_BIT_STRING */
uint8_t data_type6;
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type6;
/* The running status word 6 for the electricity meter */
proto_69845_rs_word_456_t rs_word_6;
/* data type is PROTO_69845_APP_DATA_BIT_STRING */
uint8_t data_type7;
/* type is PROTO_69845_APP_DATA_LONG */
uint8_t type7;
/* The running status word 7 for the electricity meter */
proto_69845_rs_word_7_t rs_word_7;
} proto_69845_rpt_rs_word_t;
/* the br2 launch parameters structure */
typedef struct _proto_69845_br2_launch_para {
/* type is PROTO_69845_APP_DATA_STRUCTURE */
uint8_t type;
/* cnt is 6 */
uint8_t cnt;
/* data tpye, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED. */
uint8_t data0_type;
/* characteristics data per bit duration time, unit: 1ms */
uint16_t chara_bit_dur;
/* data tpye, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED. */
uint8_t data1_type;
/* modulate pulse signal high duration time, unit: 1us */
uint16_t pulse_high_dur;
/* data tpye, it's always PROTO_69845_APP_DATA_LONG_UNSIGNED. */
uint8_t data2_type;
/* modulate pulse signal low duration time, unit: 1us */
uint16_t pulse_low_dur;
/* data tpye, it's always PROTO_69845_APP_DATA_BIT_STRING. */
uint8_t data3_type;
/* task start time */
proto_69845_app_len_descript_t bit_len;
/* br2 code */
uint8_t code[0];
} proto_69845_br2_launch_para_t;
/* the br2 launch parameters structure */
typedef struct _proto_69845_br2_launch_time_para {
/* type is PROTO_69845_APP_DATA_STRUCTURE */
uint8_t type;
/* cnt is 2 */
uint8_t cnt;
/* the br2 launch parameters */
proto_69845_br2_launch_para_t launch_para;
/* the br2 launch time, data type is PROTO_69845_APP_DATA_TIME_S */
} proto_69845_br2_launch_time_para_t;
/* the br2 launch parameters structure */
typedef struct _proto_69845_br2_launch_record_uint {
/* type is PROTO_69845_APP_DATA_STRUCTURE */
uint8_t type;
/* cnt is 2 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_TIME_S */
uint8_t data0_type;
/* start time */
proto_69845_app_data_time_s_t start;
/* type is PROTO_69845_APP_DATA_TIME_S */
uint8_t data1_type;
/* switching frequency of characteristic signal */
proto_69845_app_data_time_s_t end;
} proto_69845_br2_launch_record_uint_t;
/* the br2 record identification code structure */
typedef struct _proto_69845_br2_code_id {
/* type is PROTO_69845_APP_DATA_BIT_STRING */
uint8_t data_type;
/* bit len */
uint8_t bit_len;
/* data */
uint8_t data[0];
} proto_69845_br2_code_id_t;
/* the br2 record extend infomation structure */
typedef struct _proto_69845_br2_ext_info {
/* type is PROTO_69845_APP_DATA_OCTET_STRING */
uint8_t data_type;
/* byte len */
uint8_t byte_len;
/* data */
uint8_t data[0];
} proto_69845_br2_ext_info_t;
/* the br2 record info structure */
typedef struct _proto_69845_br2_record_info_uint {
/* type is PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data0_type;
/* cnt is 7 */
uint8_t cnt;
/* type is PROTO_69845_APP_DATA_TIME_S */
uint8_t data1_type;
/* time of success */
proto_69845_app_data_time_s_t suc_time;
/* type is PROTO_69845_APP_DATA_ENUM */
uint8_t data2_type;
/* phase see, IOT_BSRM_BR2_PHASE_XXX */
uint8_t phase;
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED */
uint8_t data3_type;
/* signal intensity 1 */
uint8_t signal1_rssi[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED */
uint8_t data4_type;
/* signal intensity 2 */
uint8_t signal2_rssi[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* type is PROTO_69845_APP_DATA_DOUBLE_LONG_UNSIGNED */
uint8_t data5_type;
/* background noise */
uint8_t noise[PROTO_69845_METER_DATA_DOUBLE_LONG_LEN];
/* proto_69845_br2_code_id_t */
/* proto_69845_br2_ext_info_t */
} proto_69845_br2_record_info_uint_t;
typedef struct _proto_69845_visible_string_uint_hdr {
/* type is PROTO_69845_APP_DATA_VISIBLE_STRING */
uint8_t data_type;
/* string data length */
uint8_t len;
} proto_69845_visible_string_uint_hdr_t;
typedef struct _proto_69845_visible_string_uint {
proto_69845_visible_string_uint_hdr_t hdr;
/* string data */
uint8_t data[0];
} proto_69845_visible_string_uint_t;
typedef struct _proto_69845_octet_string_uint {
/* type is PROTO_69845_APP_DATA_VISIBLE_STRING */
uint8_t data_type;
/* string data length */
proto_69845_app_len_descript_t len_info;
/* len and data */
uint8_t len_and_data[0];
} proto_69845_octet_string_uint_t;
/* version info structure */
typedef struct _proto_69845_ver_info_uint {
/* type is PROTO_69845_APP_DATA_STRUCTURE */
uint8_t data0_type;
/* cnt is 6 */
uint8_t cnt;
/* visible string vendor id */
proto_69845_visible_string_uint_hdr_t data1;
/* vendor id */
uint8_t vendor_id[4];
/* visible string software version */
proto_69845_visible_string_uint_hdr_t data2;
/* software version */
uint8_t soft_ver[4];
/* visible string software version date */
proto_69845_visible_string_uint_hdr_t data3;
/* software version date */
uint8_t soft_date[6];
/* visible string hardware version */
proto_69845_visible_string_uint_hdr_t data4;
/* hardware version */
uint8_t hw_ver[4];
/* visible string hardware version date */
proto_69845_visible_string_uint_hdr_t data5;
/* hardware version date */
uint8_t hw_date[6];
/* visible string rsvd */
proto_69845_visible_string_uint_hdr_t data6;
/* rsvd msg */
uint8_t rsvd[8];
} proto_69845_ver_info_uint_t;
#pragma pack(pop) /* restore the pack status */
/* report notify information data structure,
* see standard DL/T 698.45
*/
typedef struct _proto_69845_app_rpt_noti_info {
/* report notify data type, see PROTO_69845_APP_REPRORT_XXX*/
uint8_t type;
/* priority and invoke id with acd data */
proto_69845_app_piid_acd_t piid_acd;
/* object attribute descriptor data */
proto_69845_app_oad_t oad;
} proto_69845_app_rpt_noti_info_t;
typedef struct _server_addr_info {
/* length of server address field */
uint8_t len;
/* type of server address field */
uint8_t type;
/* server address field */
uint8_t addr[PROTO_69845_SA_MAX_LEN];
/* logical address */
uint8_t logical_addr;
} server_addr_info_t;
typedef struct _addr_info {
/* server address info */
server_addr_info_t ser_info;
/* client address info */
uint8_t cli_addr;
} addr_info_t;
typedef struct _apdu_info {
/* cache pointer to APDU header */
uint8_t *ptr;
/* APDU length */
uint32_t len;
} apdu_info_t;
/* suspected event report status data structure */
typedef struct _rpt_status {
/* flag to mark if the meter power off has been reported */
uint8_t pf_rpt :1,
/* flag to mark if the meter received ack after power off reported */
pf_rpt_ok :1,
/* flag to mark if the meter power on has been reported */
po_rpt :1,
/* flag to mark if the meter received ack after power on reported */
po_rpt_ok :1,
/* reserve for future */
revd :4;
} rpt_status_t;
typedef struct _proto_69845_app_data_desc {
/* data type, see PROTO_69845_APP_DATA_XXX */
uint8_t type;
/* data lenght type, see PROTO_69845_DATA_LEN_TYPE_XXX */
uint8_t len_type;
/* length */
uint8_t len;
} proto_69845_app_data_desc_t;
typedef struct _proto_69845_action_list_unit_desc {
/* omd */
proto_69845_app_omd_t omd;
/* omd with data */
uint8_t *omd_data;
/* data length */
uint16_t len;
} proto_69845_action_list_unit_desc_t;
typedef struct _proto_69845_action_list_desc {
/* action request piid */
proto_69845_app_piid_t piid;
/* action request cnt */
uint8_t cnt;
/* action request list */
proto_69845_action_list_unit_desc_t list[0];
} proto_69845_action_list_desc_t;
typedef struct _proto_69845_get_normal_unit_desc {
/* oad */
proto_69845_app_oad_t oad;
} proto_69845_get_normal_unit_desc_t;
typedef struct _proto_69845_get_normal_list_desc {
/* get request piid */
proto_69845_app_piid_t piid;
/* get request cnt */
uint8_t cnt;
/* get request list */
proto_69845_get_normal_unit_desc_t list[0];
} proto_69845_get_normal_list_desc_t;
typedef struct _proto_69845_data_cache_desc {
/* pointer to the data */
uint8_t *data;
/* length of length */
uint32_t len;
} proto_69845_data_cache_desc_t;
/* preamble code */
extern const uint8_t proto_69845_preamble[PROTO_69845_PREAMBLE_LEN];
/* any mac address */
extern const server_addr_info_t proto_69845_any_server_addr;
/* The data field in response of event reporting status word
* according to DL/T645-2007 protocol frame.
*/
extern const uint8_t proto_69845_event_report_data[PROTO_69845_EVENT_DATA_LEN];
#define proto_69845_oi_to_byte(oi, ptr) iot_uint16_to_bytes(oi, ptr, 1)
#define proto_69845_byte_to_oi(ptr) iot_bytes_to_uint16(ptr, 1)
/**
* @brief check the pkt if security cmd.
* @param data: 645 pkt data.
* @param len: 645 pkt data length.
* @return: 0 - is not security cmd.
* @return: 1 - is security cmd.
*/
uint8_t proto_698_is_security_cmd(uint8_t *data, uint32_t len);
/**
* @brief check the pkt1 and pkt2 if interactive cmd.
* @param data1: 698 pkt1 data.
* @param len1: 698 pkt1 data length.
* @param data2: 698 pkt2 data.
* @param len2: 698 pkt2 data length.
* @return: 0 - is not interactive cmd.
* @return: 1 - is interactive cmd.
*/
uint8_t proto_698_interactive_cmd_check(uint8_t *data1, uint32_t len1,
uint8_t *data2, uint32_t len2);
/**
* @brief proto_645_di_to_698_oad - 645 di to 698 oad
* @param di: 645 proto di, see PROTO_645_2007_XXX.
* @retval 698 proto oad, see PROTO_69845_APP_OAD_XXX.
*/
uint32_t proto_645_di_to_698_oad(uint32_t di);
/**
* @brief: proto_698_oad_to_645_di - 698 di to 645 oad
* @param oad_698: 698 proto oad, see PROTO_69845_APP_OAD_XXX.
* @retval 645 proto di, see PROTO_645_2007_XXX.
*/
uint32_t proto_698_oad_to_645_di(uint32_t oad_698);
/**
* @brief proto_69845_sanity_check - check if a 698.45 packet is a valid.
* @param data: packet data
* @param len: length of the packet data
* @retval: NULL -- Incorrect protocol format.
* @retval: otherwise -- pointer to the 698.45 protocol header
*/
proto_69845_frame_head_info_t* proto_69845_sanity_check(uint8_t* data,
uint16_t len);
/**
* @brief proto_69845_get_addr_info - get address info.
* @param head: pointer to head of 698.45 protocol
* @param addr_info: pointer to cache address info buffer
* @return length of address info in header.
*/
uint8_t proto_69845_get_addr_info(proto_69845_frame_head_info_t* head,
addr_info_t *addr_info);
/**
* @brief check if any server mac addr
* @param server_addr: server addr, len is IOT_MAC_ADDR_LEN
* @return 0 - is not any server addr, 1 - is any server addr
*/
uint32_t proto_69845_is_any_server_addr(uint8_t *server_addr);
/**
* @brief proto_69845_build_get_req_msg - create a get request message for the
* 698.45 protocol
* @param req_info: get request information
* @param server_info: server information
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_get_req_msg(
proto_69845_app_get_req_info_t* req_info,
const server_addr_info_t* server_info);
/**
* @brief proto_69845_build_action_req_single_msg - create action request single
* object for the 698.45 protocol
* @param req_info: action request single object info
* @app_data_len: action request single object app data length
* @param server_info: server information
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_action_req_single_msg(
const proto_69845_app_action_req_single_t *req_info, uint16_t app_data_len,
const server_addr_info_t* server_info);
/* @brief proto_69845_build_event_msg - create a DL/T 645-2007 event for the
* 698.45 protocol
* @param addr: address of meter, little edition.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_event_msg(uint8_t *addr);
/**
* @brief proto_69845_build_get_req_msg - create a get normal list request
* message with rn for the 698.45 protocol.
* @param req_info: get request information
* @param server_info: server information
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_get_req_msg_with_rn(
proto_69845_app_get_list_req_info_t* req_info,
const server_addr_info_t* server_info);
/**
* @brief proto_69845_build_apdu_data_with_rn_msgs - create a apdu data with rn
* for the 698.45 protocol.
* @param apdu_data: apdu data.
* @param data_len: apdu data len.
* @param server_info: server information
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_apdu_data_with_rn_msg(uint8_t *apdu_data,
uint32_t data_len, const server_addr_info_t* server_info);
/**
* @brief proto_69845_build_apdu_data_msg - data with create a apdu
* for the 698.45 protocol.
* @param apdu_data: apdu data.
* @param data_len: apdu data len.
* @param addr_info: address information
* @param dir_and_prm: see PROTO_69845_D_P_XXX.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_apdu_data_msg(uint8_t *apdu_data,
uint32_t data_len, addr_info_t* addr_info, uint8_t dir_and_prm);
/**
* @brief proto_69845_build_apdu_data_with_security_resp_msg - data with create
* a apdu resp for the 698.45 protocol.
* @param apdu_data: apdu data.
* @param data_len: apdu data len.
* @param addr_info: address information
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_apdu_data_with_security_resp_msg(uint8_t *apdu_data,
uint32_t data_len, addr_info_t* addr_info);
/**
* @brief proto_69845_build_proxy_trans_data_msg - create a apdu data with
* resp for the 698.45 protocol.
* @param data: pointer to data to be transparently forwarded.
* @param data_len: data len to be transparently forwarded.
* @param buud: baud for transparent forwarding.
* @param port: port number of transparent forwarding RS485I and RS485II, see
* PROTO_PORT_RS485_X.
* @param parity: uart frame format - parity bit type, see
* PROTO_69845_PARITY_XXX.
* @param timeout: timeout for transparent forwarding to wait for response, uint
* is 1s.
* @param server_info: server information.
* @paran sn: message serial number.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_proxy_trans_data_msg(uint8_t *data,
uint32_t data_len, uint32_t baud, uint8_t port, uint8_t parity,
uint16_t timeout, const server_addr_info_t* server_info, uint8_t sn);
/**
* @brief proto_69845_build_comdcb_msg - create a apdu data with resp for the
* 698.45 protocol.
*
* @param baud: baud for transparent forwarding.
* @param server_info: server information.
* @param sn: message serial number.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_comdcb_msg(uint32_t baud,
const server_addr_info_t *server_info, uint8_t sn);
/**
* @brief proto_69845_build_get_version_msg_with_rn - create a apdu data with
* 698.45 protocol.
*
* @param server_info : server information.
* @param sn: message serial number.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_get_version_msg_with_rn(
const server_addr_info_t *server_info, uint8_t sn);
/**
* @brief create a report notification message of 698.45 protocol
* for suspect power on or power off
* @param noti_info: report notification information
* @param server_info: server information
* @param evt_start_tm: event start time
* @param evt_end_tm: event end time
* @param rpt_status: suspected event report status
* @retval: NULL - for failure case,
* pkt - the iot pkt buffer for 698.45 protocol
*/
iot_pkt_t *proto_69845_build_rpt_noti_sus_pof_msg(
proto_69845_app_rpt_noti_info_t* noti_info,
const server_addr_info_t* server_info,
proto_69845_app_data_time_s_t *evt_start_tm,
proto_69845_app_data_time_s_t *evt_end_tm, rpt_status_t *rpt_status);
/**
* @brief proto_69845_get_apdu - get apdu in a whole 698.45 message.
* @param hdr: pointer to the 698.45 protocol header
* @param len: length 698.45 message
* @param apdu: pointer to the cache apdu data
* @retval: ERR_OK -- get apdu.
* @retval: otherwise -- get apdu fail, see ERR_XXX.
*/
uint32_t proto_69845_get_apdu(proto_69845_frame_head_info_t *hdr,
uint32_t len, apdu_info_t *apdu);
/**
* @brief proto_69845_parse - get apdu in a whole 698.45 message.
* @param data: pointer to pointer the data buffer to be parsed. if the parsing
* is successful, it is used to return the APDU (without the
* security header and tail) pointer.
* @param len: pointer to len the data buffer to be parsed. f the parsing
* is successful, it is used to return the APDU (without the
* security header and tail) len.
* @param hdr: if the parsing is successful, it is used to return the frame
* header pointer of 69845
* @param apdu_desc: returns the original APDU information.
* @retval: ERR_OK -- pasre success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_parse(uint8_t **data, uint32_t *len,
proto_69845_frame_head_info_t **hdr, apdu_info_t *apdu_desc);
/**
* @brief proto_69845_proxy_trans_resp_parse - get proxy trans data in a whole
* 698.45 message.
* @param data: pointer to input data buffer.
* @param len: length data message.
* @param sn: return message seq number
* @retval: ERR_OK -- get trans data, data: pointer to the cache trans data,
* in_len: pointer to trans data length.
* @retval: otherwise -- get trans data fail, see ERR_XXX.
*/
uint32_t proto_69845_proxy_trans_resp_parse(uint8_t **data,
uint16_t *len, uint8_t *sn);
/**
* @brief proto_698_add33_handle() - add 33 for each of the specified memory
* @param ds: pointer to data buffer
* @param size: size of buffer
*/
void proto_69845_add33_handle(uint8_t *ds, uint32_t size);
/**
* @brief proto_645_sub33_handle() - sub 33 for each of the specified memory
* @param ds: pointer to data buffer
* @param size: size of buffer
*/
void proto_69845_sub33_handle(uint8_t *ds, uint32_t size);
/**
* @brief proto_69845_get_oad - get oad in get request.
* @param data: pointer to getting request.
* @param data_len: length of getting request.
* @param oad: pointer to the cache oad data
* @retval: ERR_OK -- get oad.
* @retval: otherwise -- get oad fail, see ERR_XXX.
*/
uint32_t proto_69845_get_oad(uint8_t *data,
uint32_t data_len, proto_69845_app_oad_t *oad);
/**
* @brief proto_69845_get_omd - get oad in action request.
* @param data: pointer to action request.
* @param data_len: length of action request.
* @param oad: pointer to the cache omd data
* @retval: ERR_OK -- get omd.
* @retval: otherwise -- get omd fail, see ERR_XXX.
*/
uint32_t proto_69845_get_omd(uint8_t *data,
uint32_t data_len, proto_69845_app_omd_t *omd);
/**
* @brief proto_69845_set_normal_ack - create a set ack response.
* @param addr_info: address info.
* @param piid_acd: piid_acd of set response.
* @param oad: oad of set response.
* @param dar: dar of set response, see PROTO_69845_APP_DAR_XXX.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_set_normal_ack(addr_info_t *addr_info,
proto_69845_app_piid_t *piid, proto_69845_app_oad_t *oad, uint8_t dar);
/**
* @brief proto_69845_action_single_ack - create a action ack response.
* @param addr_info: address info.
* @param piid_acd: piid_acd of action response.
* @param omd: omd of action response.
* @param dar: dar of action response, see PROTO_69845_APP_DAR_XXX.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_action_single_ack(addr_info_t *addr_info,
proto_69845_app_piid_t *piid, proto_69845_app_omd_t *omd,
uint8_t dar);
/**
* @brief proto_69845_build_corr_msg - create a action corr object.
* @param server_addr: address info, if set NULL, use broadcast address.
* @param tm: correct time.
* @param piid: piid of action response.
* @param with_rn: 0 - corr msg with no random numbers.
* 1 - corr msg with random numbers.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for 698.45 protocol.
*/
iot_pkt_t *proto_69845_build_corr_msg(server_addr_info_t *server_addr,
iot_time_tm_t *tm, proto_69845_app_piid_t *piid, uint8_t with_rn);
/**
* @brief proto_69845_oad_cmp - check if the two oads match.
* @param oad_1: PROTO_69845_APP_DATA_OAD data structure.
* @param oad_2: PROTO_69845_APP_DATA_OAD data structure,
* @retval: 1 - oad match, 0 - oad not match.
*/
uint8_t proto_69845_oad_cmp(proto_69845_app_oad_t *oad_1,
proto_69845_app_oad_t *oad_2);
/**
* @brief proto_69845_get_data_len - get data length.
* @param data: pointer to data header.
* @param rec_data_len: length of receive data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- get omd.
* @retval: otherwise -- get omd fail, see ERR_XXX.
*/
uint32_t proto_69845_get_data_len(proto_69845_app_data_t *data,
uint32_t rec_data_len, uint32_t *data_len);
/**
* @brief proto_69845_get_rsd_data_len - get rsd data length.
* @param data: pointer to data header.
* @param rec_data_len: length of receive data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- get omd.
* @retval: otherwise -- get omd fail, see ERR_XXX.
*/
uint32_t proto_69845_get_rsd_data_len(uint8_t *data,
uint32_t rec_data_len, uint32_t *data_len);
/**
* @brief proto_69845_get_rcsd_data_len - get rcsd data length.
* @param data: pointer to data header.
* @param rec_data_len: length of receive data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- get omd.
* @retval: otherwise -- get omd fail, see ERR_XXX.
*/
uint32_t proto_69845_get_rcsd_data_len(uint8_t *data,
uint32_t rec_data_len, uint32_t *data_len);
/**
* @brief proto_69845_get_csd_data_len - get csd data length.
* @param data: pointer to data header.
* @param rec_data_len: length of receive data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- get omd.
* @retval: otherwise -- get omd fail, see ERR_XXX.
*/
uint32_t proto_69845_get_csd_data_len(uint8_t *data,
uint32_t rec_data_len, uint32_t *data_len);
/**
* @brief proto_69845_head_fill - fill frame head data of protocol message.
* @param head: pointer to header data filled.
* @param head_len: length of header data.
* @param total_len: length of message.
* @param addr_info: pointer to address info.
* @param fn: fn of message, see PROTO_69845_FN_XXX.
* @param fragment: flag to mark if the data is a fragment of the APDU.
* see PROTO_69845_APDU_XXX
* @param dir_prm: flag of primary request message and direction.
* see PROTO_69845_D_P_XXX
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_head_fill(
proto_69845_frame_head_info_t *head, uint16_t head_len,
uint16_t total_len, addr_info_t *addr_info, uint8_t fn,
uint8_t fragment, uint8_t dir_prm);
/**
* @brief proto_69845_tail_fill_without_ts_fl - fill frame tail data of protocol
* message.
* @param head: pointer to frame header .
* @param tail_data: pointer to tail data filled.
* @param len: length of tail data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_tail_fill(proto_69845_frame_head_info_t *head,
uint8_t *tail_data, uint16_t len);
/**
* @brief proto_69845_tail_fill_without_ts_fl - fill frame tail data of protocol
* message without ts and flw_rpt.
* @param head: pointer to frame header .
* @param tail_data: pointer to tail data filled.
* @param len: length of tail data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_tail_fill_without_ts_fl(
proto_69845_frame_head_info_t *head,
uint8_t *tail_data, uint16_t len);
/**
* @brief proto_69845_get_road_data_len - get road data length.
* @param data: pointer to data header.
* @param rec_data_len: length of receive data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- get road length.
* @retval: otherwise -- get fail, see ERR_XXX.
*/
uint32_t proto_69845_get_road_data_len(uint8_t *data,
uint32_t rec_data_len, uint32_t *data_len);
/**
* @brief proto_69845_get_road_data_len - get road data length.
* @param data_type: type of data, see PROTO_69845_APP_DATA_XXX.
* @retval: length of type data.
*/
uint32_t proto_69845_get_normal_data_len(uint8_t data_type);
/**
* @brief proto_69845_dlong_unsign_data_to_meter_bcd_data - dlong unsigned data
* to meter bcd data.
* @param dlong_data: pointer to 69845 dlong data, big-endian, and length have
to PROTO_69845_METER_DATA_DOUBLE_LONG_LEN.
* @param dlong_data_len: pointer to 69845 dlong data length.
* @param meter_bcd_data: pointer to get meter bcd data, little-endian.
* @param bcd_len: length of bcd data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_dlong_unsign_data_to_meter_bcd_data(
uint8_t *dlong_data, uint8_t dlong_data_len, uint8_t *meter_bcd_data,
uint8_t bcd_len);
/**
* @brief proto_69845_long_unsign_to_meter_bcd_data - long unsigned data to
* meter bcd data.
* @param long_data: pointer to 69845 long data, big-endian, and length have to
PROTO_69845_METER_DATA_LONG_LEN.
* @param long_data_len pointer to 69845 long data length.
* @param meter_bcd_data: pointer to get meter bcd data, little-endian.
* @param bcd_len: length of bcd data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_long_unsign_to_meter_bcd_data(uint8_t *long_data,
uint8_t long_data_len, uint8_t *meter_bcd_data, uint8_t bcd_len);
/**
* @brief proto_69845_dlong_data_to_meter_bcd_data - dlong data
* to meter bcd data.
* @param dlong_data: pointer to 69845 dlong data, big-endian, and length have
to PROTO_69845_METER_DATA_DOUBLE_LONG_LEN.
* @param dlong_data_len: pointer to 69845 dlong data length.
* @param meter_bcd_data: pointer to get meter bcd data, little-endian.
* @param bcd_len: length of bcd data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_dlong_data_to_meter_bcd_data(
uint8_t *dlong_data, uint8_t dlong_data_len, uint8_t *meter_bcd_data,
uint8_t bcd_len);
/**
* @brief proto_69845_long_data_to_meter_bcd_data - long data to
* meter bcd data.
* @param long_data: pointer to 69845 long data, big-endian, and length have to
PROTO_69845_METER_DATA_LONG_LEN.
* @param long_data_len pointer to 69845 long data length.
* @param meter_bcd_data: pointer to get meter bcd data, little-endian.
* @param bcd_len: length of bcd data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_long_data_to_meter_bcd_data(uint8_t *long_data,
uint8_t long_data_len, uint8_t *meter_bcd_data, uint8_t bcd_len);
/**
* @brief proto_69845_pf_ele_data_handle - handle 69845 power factor data.
* @param meter_pf: pointer to need get meter power factor data.
* @param ele_data: pointer to 69845 power factor data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_pf_ele_data_handle(proto_645_07_pf_t *meter_pf,
proto_69845_app_ele_data_t *ele_data, uint32_t data_len);
/**
* @brief proto_69845_v_data_handle - handle 69845 voltage data.
* @param meter_v: pointer to need get meter voltage data.
* @param ele_data: pointer to 69845 voltage data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_v_data_handle(proto_645_v_t *meter_v,
proto_69845_app_ele_data_t *ele_data, uint32_t data_len);
/**
* @brief proto_69845_a_data_handle - handle 69845 current data.
* @param meter_a: pointer to need get meter current data.
* @param ele_data: pointer to 69845 current data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_a_data_handle(proto_645_07_a_t *meter_a,
proto_69845_app_ele_data_t *ele_data, uint32_t data_len);
/**
* @brief proto_69845_power_data_handle - handle 69845 meter power data.
* @param power: pointer to need get power data.
* @param data: point to pointer to data buffer.
* @param:len: pointer to len of the data buffer.
* @retval: ERR_OK -- success. otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_power_data_handle(int32_t power[], uint8_t **data,
uint32_t *len);
/**
* @brief proto_69845_gnd_a_data_handle - handle 69845 gnd current data.
* @param meter_gnd_a: pointer to need get meter gnd current BCD data,
* little-endian.
* @param gnd_a_len: get meter gnd current data length.
* @param data: pointer to proto_69845_app_data_t gnd current struct data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_gnd_a_data_handle(uint8_t *meter_gnd_a, uint8_t gnd_a_len,
uint8_t *data, uint32_t data_len);
/**
* @brief proto_69845_gnd_a_data_handle - handle 69845 gnd current data.
* @param meter_time: pointer to need get meter time.
* @param data: point to pointer to data buffer.
* @param:len: pointer to len of the data buffer.
* @retval: ERR_OK -- success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_time_data_handle(iot_time_tm_t *meter_time,
uint8_t **data, uint32_t *len);
/**
* @brief proto_69845_run_state_data_handle - handle 69845 meter run state data.
* @param word: pointer to need get meter run state.
* @param data: point to pointer to data buffer.
* @param:len: pointer to len of the data buffer.
* @retval: ERR_OK -- success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_run_state_data_handle(proto_69845_rs_word_t *rs_word,
uint8_t **data, uint32_t *len);
/**
* @brief proto_69845_evt_rec_cur_info_parse - parse 69845 event current
* information.
* @param occur_n: pointer to number of occurrences for return.
* @param acc_time: pointer to cumulative time for return.
* @param data: point to pointer to data buffer.
* @param:len: pointer to len of the data buffer.
* @retval: ERR_OK -- success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_evt_cur_info_parse(uint32_t *occur_n,
uint32_t *acc_time, uint8_t **data, uint32_t *len);
/**
* @brief proto_69845_check_frame_handler - check whether the frame
* is legitimate.
* @param buffer: the buffer containing data.
* @param buffer_len: len of the buffer.
* @param is_frame: false: the frame isn't legitimate.
* true: the frame is legitimate.
*/
void proto_69845_check_frame_handler(uint8_t* buffer, uint32_t buffer_len,
bool_t* is_frame);
/**
* @brief proto_69845_time_rsp_msg_handle - 69845 get time response msg handle.
* @param data: point to pointer to data buffer.
* @param:len: pointer to len of the data buffer.
* @retval: NULL -- for failure case.
* @retval: time -- meter response time.
*/
proto_69845_app_data_time_s_t *proto_69845_get_time_rsp_msg_handle(uint8_t *ds,
uint16_t len);
/**
* @brief proto_69845_ti_data_to_sec - 69845 time interval to seconds time.
* @param ti: time interval.
* @retval: seconds time.
*/
uint64_t proto_69845_ti_data_to_sec(proto_69845_app_data_ti_t *ti);
/**
* @brief proto_69845_energy_data_handle() - parse of 69845 electric energy data.
* @param energy: place the buffer of the electric energy data.
* @param data: point to pointer to raw data buffer.
* @param:in_len: pointer to len of the raw data buffer.
* @retval: ERR_OK -- success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_energy_data_handle(uint32_t *energy,
uint8_t **data, uint32_t *in_len);
/**
* @brief proto_69845_energy_data_handle() - parse of 69845 electric energy sum
* data.
* @param energy_sum: place the buffer of the electric energy sum data.
* @param data: point to pointer to raw data buffer.
* @param:in_len: pointer to len of the raw data buffer.
* @retval: ERR_OK -- success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_energy_sum_data_handle(uint8_t *energy_sum,
uint8_t *data, uint32_t data_len);
/**
* @brief proto_69845_pf_data_handle() - parse of 69845 power factor data.
* @param pf: place the buffer of the power factor data.
* @param data: point to pointer to raw data buffer.
* @param:in_len: pointer to len of the draw ata buffer.
* @retval: ERR_OK -- success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_pf_data_handle(int16_t *pf,
uint8_t **data, uint32_t *in_len);
/**
* @brief proto_69845_a_data_handle - handle 69845 power data.
* @param meter_p: pointer to need get meter power data.
* @param ele_data: pointer to 69845 current data.
* @param data_len: pointer to the cache length of data.
* @retval: ERR_OK -- fill success.
* @retval: otherwise -- for failure case, see ERR_XXX.
*/
uint32_t proto_69845_p_data_handle(proto_645_07_p_t *meter_p,
proto_69845_app_ele_data_t *ele_data, uint32_t data_len);
/**
* @brief proto_69845_corr_msg_check() - 69845 protocol correct
* time format check.
* @param data: data.
* @param len: data len.
* @param addr: 69845 header server address, little-endian.
* @retval: ERR_OK -- check success.
* @retval: otherwise -- check false, see ERR_XXX.
*/
uint32_t proto_69845_corr_msg_check(uint8_t *data, uint32_t len, uint8_t *addr);
/**
* @brief proto_69845_get_ser_addr() - get the pointer to address of the server
* in 69845 header.
* @param head: pointer to header data.
* @retval: server address: get server address.
* @retval: NULL -- for failure case.
*/
uint8_t *proto_69845_get_ser_addr(proto_69845_frame_head_info_t* head);
/**
* @brief proto_69845_apdu_sec_ciphertext_check() - apdu ciphertext check.
* @param apdu: pointer to apdu data.
* @param len: length of apdu data.
* @retval: ERR_OK -- check success.
* @retval: otherwise -- check false, see ERR_XXX.
*/
uint32_t proto_69845_apdu_sec_ciphertext_check(uint8_t *apdu,
uint32_t len);
/**
* @brief proto_69845_format_check_ext() - 698.45 protocol format check extended
* version, search the whole buffer to try to find one 698.45 format data.
* @param data: pointer to protocol data buffer
* @param len: data length
* @retval: NULL -- 698.45 format data not found.
* @retval: otherwise -- pointer to the 698.45 protocol header
*/
proto_69845_frame_head_info_t *proto_69845_sanity_check_ext(uint8_t* data,
uint16_t len);
/**
* @brief proto_69845_build_rpt_noti_list_msg - create a normal list report
* message.
* @param result_list: pointer to normal list data.
* @param list_len: length of normal list data.
* @param list_cnt: normal cnt in result_list.
* @param server_addr: address info, if set NULL, use broadcast address.
* @param sn: sequence number of report message.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for report message.
*/
iot_pkt_t *proto_69845_build_rpt_noti_list_msg(
uint8_t* result_list, uint16_t list_len, uint8_t list_cnt,
const server_addr_info_t* server_info, uint8_t sn);
/**
* @brief proto_69845_build_file_info_msg - create file info massage.
* @param file_size: file size.
* @param file_crc: file crc check.
* @param block_size: transfer block size.
* @param hw_ver: hardware version.
* @param sw_ver: software version.
* @param loader_id: downloader identity.
* @param server_addr: server address.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for message.
*/
iot_pkt_t *proto_69845_build_file_info_msg(uint32_t file_size,
uint16_t file_crc, uint16_t block_size, uint32_t hw_ver, uint32_t sw_ver,
uint32_t loader_id, uint8_t *server_addr);
/**
* @brief proto_69845_handle_fileinfo_rsp - response file info.
* @param data: response data.
* @param data_len: response data length.
* @retval: ERR_OK - success, other - fail.
*/
uint32_t proto_69845_handle_file_info_rsp(uint8_t *data, uint32_t data_len);
/**
* @brief proto_69845_build_file_data_msg - create file data massage.
* @param data: transfer data.
* @param data_len: transfer block len.
* @param block_index: transfer block index.
* @param server_addr: server address.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for message.
*/
iot_pkt_t *proto_69845_build_file_data_msg(uint8_t *data,
uint16_t data_len, uint16_t block_index, uint8_t *server_addr);
/**
* @brief proto_69845_handle_transfile_data_rsp - response file data.
* @param data: response data.
* @param data_len: response data length.
* @retval: ERR_OK - success, other - fail.
*/
uint32_t proto_69845_handle_file_data_rsp(uint8_t *data, uint32_t data_len);
/**
* @brief proto_69845_build_file_exe_msg - create file execute massage.
* @param time: execution time.
* @param server_addr: server address.
* @retval: NULL -- for failure case.
* @retval: pkt -- the iot pkt buffer for message.
*/
iot_pkt_t *proto_69845_build_file_exe_msg(iot_time_tm_t *time,
uint8_t *server_addr);
/**
* @brief proto_69845_handle_file_exe_rsp - response file exe.
* @param data: response data.
* @param data_len: response data length.
* @retval: ERR_OK - success, other - fail.
*/
uint32_t proto_69845_handle_file_exe_rsp(uint8_t *data, uint32_t data_len);
#ifdef __cplusplus
}
#endif
#endif /* PROTO_69845_H */