Files
kunlun/app/smart_grid/inc/proto_645_vendor.h
2024-09-28 14:24:04 +08:00

2264 lines
82 KiB
C

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef PROTO_645_VENDOR_H
#define PROTO_645_VENDOR_H
#include "iot_utils_api.h"
#include "iot_sg_sta_tsfm.h"
#include "iot_sg_proto.h"
#include "iot_plc_hw_tsfm_api.h"
#include "proto_645.h"
#ifdef __cplusplus
extern "C" {
#endif
/* DI of trigger topology */
#define PROTO_645_EXT_BR2_LAUNCH_START (0x01010004u)
/* DI of bsrm extend cmd */
#define PROTO_645_EXT_BSRM_DI_TANS_CMD (0x0101FF21)
/* DI: read bsrm search table results */
#define PROTO_645_2007_EXT_READ_SMC_RESULT (0x02810000u)
/* DI: cumulative number of Qiedian events */
#define PROTO_645_2007_EXT_BRM_DI_EVT_QD_NUM (0x03810000u)
/* DI: records of qiedian event */
#define PROTO_645_2007_EXT_BRM_DI_EVT_QD_REC_BASE (0x03810001u)
/* DI: cumulative number of meter change events */
#define PROTO_645_2007_EXT_BRM_DI_EVT_PM_CHG_NUM (0x03820000u)
/* DI: records of meter change event */
#define PROTO_645_2007_EXT_BRM_DI_EVT_PM_CHG_REC_BASE (0x03820001u)
/* DI: records of meter A-phase max valtage base */
#define PROTO_645_2007_EXT_BRM_DI_MAX_A_V_REC_BASE (0x03820100u)
/* DI: records of meter B-phase max valtage base */
#define PROTO_645_2007_EXT_BRM_DI_MAX_B_V_REC_BASE (0x03820200u)
/* DI: records of meter C-phase max valtage base */
#define PROTO_645_2007_EXT_BRM_DI_MAX_C_V_REC_BASE (0x03820300u)
/* DI: records of meter A-phase max current base */
#define PROTO_645_2007_EXT_BRM_DI_MAX_A_I_REC_BASE (0x03820400u)
/* DI: records of meter B-phase max current base */
#define PROTO_645_2007_EXT_BRM_DI_MAX_B_I_REC_BASE (0x03820500u)
/* DI: records of meter C-phase max current base */
#define PROTO_645_2007_EXT_BRM_DI_MAX_C_I_REC_BASE (0x03820600u)
/* DI: records of meter A-phase min valtage max */
#define PROTO_645_2007_EXT_BRM_DI_MIN_A_V_REC_BASE (0x03830100u)
/* DI: records of meter B-phase min valtage max */
#define PROTO_645_2007_EXT_BRM_DI_MIN_B_V_REC_BASE (0x03830200u)
/* DI: records of meter C-phase min valtage max */
#define PROTO_645_2007_EXT_BRM_DI_MIN_C_V_REC_BASE (0x03830300u)
/* DI: records of meter A-phase min current base */
#define PROTO_645_2007_EXT_BRM_DI_MIN_A_I_REC_BASE (0x03830400u)
/* DI: records of meter B-phase min current base */
#define PROTO_645_2007_EXT_BRM_DI_MIN_B_I_REC_BASE (0x03830500u)
/* DI: records of meter C-phase min current base */
#define PROTO_645_2007_EXT_BRM_DI_MIN_C_I_REC_BASE (0x03830600u)
/* DI of cco read tsfm info command */
#define PROTO_645_2007_EXT_DI_READ_TSFM_INFO (0x04400001u)
/* DI of cco write tsfm info command */
#define PROTO_645_2007_EXT_DI_WRITE_TSFM_INFO (0x04400014u)
/* DI: extend 645 protocol to read station version for nw protocol. */
#define PROTO_645_2007_READ_NW_VER (0x04810001u)
/* DI: module basic information read for hunan protocol */
#define PROTO_645_2007_EXT_HUNAN_BASIC_INFO_READ (0x04900001u)
/* DI: firmware sha1 check code read for hunan protocol */
#define PROTO_645_2007_EXT_HUNAN_CHECK_CODE_READ (0x04900002u)
/* DI: module basic information read for beijing protocol */
#define PROTO_645_2007_EXT_BJ_BASIC_INFO_READ (0x04900501u)
/* DI: firmware sha1 check code read for beijing protocol */
#define PROTO_645_2007_EXT_BJ_CHECK_CODE_READ (0x04900502u)
/* DI: hourly frozen, sigle-phase total active energy data of phase A/B/C */
#define PROTO_645_2007_EXT_DI_HF_EP_A_B_C_BASE (0x0504FE00u)
/* DI: daily frozen, sigle-phase total active energy data of phase A/B/C */
#define PROTO_645_2007_EXT_DI_DF_EP_A_B_C_BASE (0x0506FE00u)
/* DI: custom data blocks */
#define PROTO_645_2007_EXT_CR_EP_DATA_BLOCKS (0x0610FF00u)
/* DI: A-phase positive active energy */
#define PROTO_645_2007_EXT_CR_EP_POS_A (0x0610FF01u)
/* DI: A-phase negative active energy */
#define PROTO_645_2007_EXT_CR_EP_NEG_A (0x0610FF02u)
/* DI: B-phase positive active energy */
#define PROTO_645_2007_EXT_CR_EP_POS_B (0x0610FF03u)
/* DI: B-phase negative active energy */
#define PROTO_645_2007_EXT_CR_EP_NEG_B (0x0610FF04u)
/* DI: C-phase positive active energy */
#define PROTO_645_2007_EXT_CR_EP_POS_C (0x0610FF05u)
/* DI: C-phase negative active energy */
#define PROTO_645_2007_EXT_CR_EP_NEG_C (0x0610FF06u)
/* DI: temperature */
#define PROTO_645_2007_EXT_CR_TEMPERATURE (0x0610FF07u)
/* DI: humidity */
#define PROTO_645_2007_EXT_CR_HUMIDITY (0x0610FF08u)
/* DI: read curve records current at specified times, time accuracy is 1s */
#define PROTO_645_2007_EXT_CR_I_A (0x0620FF01u)
#define PROTO_645_2007_EXT_CR_I_B (0x0620FF02u)
#define PROTO_645_2007_EXT_CR_I_C (0x0620FF03u)
#define PROTO_645_2007_EXT_CR_I_ALL (0x0620FF04u)
/* DI: extend 645 protocol for tcz read version */
#define PROTO_645_2007_EXT_DI_TCZ_READ_VER (0x075A4354)
/* DI: extend 645 protocol for branch recognition launch for XIONGAN */
#define PROTO_645_2007_EXT_DI_BR2_LAUNCH_XIONGAN (0x08c0c001)
/* DI: extend 645 protocol for branch recognition read record for XIONGAN */
#define PROTO_645_2007_EXT_DI_BR2_RECV_RECORD_XIONGAN (0x08c0c002)
/* DI: extend 645 protocol for branch2 recognition clear record for hunan */
#define PROTO_645_2007_EXT_DI_BR2_CLEAR_HN (0x08c0c000)
/* DI: extend 645 protocol for branch2 recognition read record for hunan */
#define PROTO_645_2007_EXT_DI_BR2_RECV_RECORD_HN (0x08c0c001)
/* DI: extend 645 protocol for branch2 recognition launch */
#define PROTO_645_2007_EXT_DI_BR2_LAUNCH (0x09080106u)
/* DI: extend 645 protocol for branch2 recognition read record */
#define PROTO_645_2007_EXT_DI_BR2_RECV_RECORD (0x09080016u)
/* DI: extend 645 protocol for branch2 recognition read record */
#define PROTO_645_2007_EXT_DI_BR2_RECV_RECORD_ZJ (0x09080018u)
/* DI: extend 645 protocol for branch event read */
#define PROTO_645_2007_EXT_DI_BR2_EVT_RECORD_ZJ (0x09080500u)
/* DI: extend 645 protocol for branch event read for qingdao dingxin */
#define PROTO_645_2007_EXT_DI_BR2_EVT_RECORD_DX (0x09080600u)
/* DI: extend 645 protocol for branch2 recognition launch.
* only for zhejiang protocol
*/
#define PROTO_645_2007_EXT_DI_BR2_LAUNCH_ZJ (0x09080109u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_CNT (0x09080700u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST1 (0x09080701u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST2 (0x09080702u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST3 (0x09080703u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST4 (0x09080704u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST5 (0x09080705u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST6 (0x09080706u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST7 (0x09080707u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST8 (0x09080708u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST9 (0x09080709u)
#define PROTO_645_2007_EXT_DI_BR2_RECORD_LAST10 (0x0908070Au)
/* DI: extend 645 protocol for read station version */
#define PROTO_645_2007_EXT_DI_READ_VER (0xFF000001u)
/* DI: extend 645 protocol for set station id information
* include chip management id and module id.
*/
#define PROTO_645_2007_EXT_DI_SET_ID_INFO (0xFF000002u)
/* DI: extend 645 protocol for read the second station version */
#define PROTO_645_2007_EXT_DI_READ_VER_2 (0xFF000003u)
/* DI: event reporting request */
#define PROTO_645_2007_EXT_DI_EVT_RPT_REQ (0xFF000004u)
/* DI: set tsfm addr */
#define PROTO_645_2007_EXT_SET_TSFM_ADDR (0xFF000005u)
/* DI: extend 645 protocol for read core temperature */
#define PROTO_645_2007_EXT_READ_CORE_TEMPERATURE (0xFF000006u)
/* DI: extend 645 protocol for ftm uart command */
#define PROTO_645_2007_EXT_DI_FTM_UART_COMMMAND (0xFF000007u)
/* DI: extend 645 protocol for node in neighbor state query */
#define PROTO_645_2007_EXT_DI_NODE_IN_NEIG (0xFF000008u)
/* DI: extend 645 protocol for repeater mac addr */
#define PROTO_645_2007_EXT_DI_REPEATER_MAC (0xFF000100u)
/* DI: extend 645 protocol for branch recognition launch */
#define PROTO_645_2007_EXT_DI_BR_LAUNCH (0xFF000200u)
/* DI: extend 645 protocol for branch recognition launch state query */
#define PROTO_645_2007_EXT_DI_BR_LAUNCH_STATE (0xFF000201u)
/* DI: extend 645 protocol for branch recognition information query */
#define PROTO_645_2007_EXT_DI_BR_INFO_QUERY (0xFF000202u)
/* DI: extend 645 protocol for branch recognition information clean */
#define PROTO_645_2007_EXT_DI_BR_INFO_CLEAN (0xFF000203u)
/* DI: extend 645 protocol for branch recognition meter info query */
#define PROTO_645_2007_EXT_DI_BR_METER_QUERY (0xFF000204u)
/* DI: extend 645 protocol for branch test */
#define PROTO_645_2007_EXT_DI_BR_TEST (0xFF000205u)
/* DI: extend 645 protocol for branch test reault query */
#define PROTO_645_2007_EXT_DI_BR_TEST_QUERY (0xFF000206u)
/* DI: extend 645 protocol for transformer detect */
#define PROTO_645_2007_EXT_DI_TSFM_LAUNCH (0xFF000207u)
/* DI: extend 645 protocol for transformer detect clear */
#define PROTO_645_2007_EXT_DI_TSFM_LAUNCH_CLEAR (0xFF000208u)
/* DI: extend 645 protocol for III collection neighbor node info query
*/
#define PROTO_645_2007_EXT_BRM_DI_NEI_NODE_INFO (0xFF00020Au)
/* DI: extend 645 protocol for neighbor node tsfm info query. only for
* III connectionless forward to sta
*/
#define PROTO_645_2007_EXT_BRM_DI_CONN_NODE_TSFM_INFO (0xFF00020Bu)
/* DI: extend 645 protocol for branch recognition init */
#define PROTO_645_2007_EXT_DI_BR_BJ_INIT (0xFF00020Cu)
/* DI: extend 645 protocol for branch recognition launch */
#define PROTO_645_2007_EXT_DI_BR_BJ_LAUNCH (0xFF00020Du)
/* DI: extend 645 protocol for branch recognition information query */
#define PROTO_645_2007_EXT_DI_BR_BJ_INFO_QUERY (0xFF00020Eu)
/* data identification for read mean square of current */
#define PROTO_645_2007_EXT_DI_I_MS (0xFF000301u)
/* data identification for zero cross circuit check */
#define PROTO_645_2007_EXT_DI_CHECK_ZC (0xFF000302u)
/* data identification for event gpio interrupt check */
#define PROTO_645_2007_EXT_DI_CHECK_EVENT_INTERRUPT (0xFE000303u)
/* define III collector extend protocol DI */
/* data identification for read III collector the MAC address request */
#define PROTO_645_2007_EXT_BRM_DI_READ_MAC_ADDR (0xFFA00301u)
/* data identification for read location info request */
#define PROTO_645_2007_EXT_BRM_DI_READ_LOCATION (0xFFA00302u)
/* data identification for read pm table list info request */
#define PROTO_645_2007_EXT_BRM_DI_READ_PM (0xFFA00303u)
/* data identification for read run info request */
#define PROTO_645_2007_EXT_BRM_DI_RUN_INFO (0xFFA00304u)
/* data identification for read humidity request */
#define PROTO_645_2007_EXT_BRM_DI_READ_HUMIDITY (0xFFA00305u)
/* data identification for high-precision current RMS */
#define PROTO_645_2007_EXT_BRM_DI_HP_I (0xFFA00306u)
/* data identification for high-precision active power RMS */
#define PROTO_645_2007_EXT_BRM_DI_HP_P (0xFFA00307u)
/* data identification for high-precision reactive power RMS */
#define PROTO_645_2007_EXT_BRM_DI_HP_Q (0xFFA00308u)
/* data identification for high-precision apparent power RMS */
#define PROTO_645_2007_EXT_BRM_DI_HP_S (0xFFA00309u)
/* data identification for set location info request */
#define PROTO_645_2007_EXT_BRM_DI_SET_LOCATION (0xFFA00401u)
/* data identification for add pm table list info request */
#define PROTO_645_2007_EXT_BRM_DI_ADD_PM (0xFFA00402u)
/* data identification for del pm table list info request */
#define PROTO_645_2007_EXT_BRM_DI_DEL_PM (0xFFA00403u)
/* data identification for initialization command */
#define PROTO_645_2007_EXT_BRM_DI_INIT_HARDWARE (0xFFA00404)
#define PROTO_645_2007_EXT_BRM_DI_INIT_DATA (0xFFA00405)
/* DI: Terminal alarm event enabling flag bit DL/T 645-2007 */
#define PROTO_645_2007_EXT_BRM_EVT_CONFIG_EN (0xFFA00406u)
/* data identification for add pm table list info request from cco */
#define PROTO_645_2007_EXT_BRM_CCO_ADD_PM (0xFFA00408u)
/* data identification for correct time. only for
* III connectionless forward to sta
*/
#define PROTO_645_2007_EXT_BRM_CONN_CORRECT (0xFFA00409u)
/* DI: Terminal qiedian event config information DL/T 645-2007 */
#define PROTO_645_2007_EXT_BRM_QIEDIAN_EVT_CONFIG (0xFFA00501u)
/* data identification for read III collector request basic information */
#define PROTO_645_2007_EXT_BRM_METER_INFO (0xFFA00503u)
/* data identification for get qiedian data request */
#define PROTO_645_2007_EXT_BRM_DI_GET_QD_DATA (0xFFA00502u)
/* one key assembly check request for BRM */
#define PROTO_645_2007_EXT_BRM_DI_ASS_CHK_REQ (0xFFA00601u)
/* query assembly check results */
#define PROTO_645_2007_EXT_BRM_DI_ASS_CHK_QUERY (0xFFA00602u)
/* DI: set module id */
#define PROTO_645_2007_EXT_BRM_SET_MODULE_ID (0xFFA00700u)
/* DI: terminal information */
#define PROTO_645_2007_EXT_BRM_TERMINAL_CFG (0xFFA00800u)
/* DI: calibration id */
/* DI: oneshot calibration request */
#define PROTO_645_2007_EXT_BRM_ONESHOT_CALI_REQ (0xFFA00900u)
/* DI: oneshot calibration status query */
#define PROTO_645_2007_EXT_BRM_ONESHOT_CALI_QUERY (0xFFA00901u)
/* DI: current ratio coefficient */
#define PROTO_645_2007_EXT_BRM_CURRENT_COEFF (0xFEA00902u)
/* DI: forward data to others sta */
#define PROTO_645_2007_EXT_BRM_FWD_DATA (0xFFA0A000u)
/* DI: detect station by different ppm */
#define PROTO_645_2007_EXT_BRM_PPM_PING (0xFFA0A001u)
/* DI: read tsfm info record */
#define PROTO_645_2007_EXT_BRM_DBG_TSFN_INFO (0xFFA0FD01u)
/* DI: redefine cumulative number of Qiedian events */
#define PROTO_645_2007_EXT_BRM_DI_EVT_QD_NUM2 (0xFFA10000u)
/* DI: redefine records of qiedian event */
#define PROTO_645_2007_EXT_BRM_DI_EVT_QD_REC_BASE2 (0xFFA10001u)
/* DI: redefine cumulative number of meter change events */
#define PROTO_645_2007_EXT_BRM_DI_EVT_PM_CHG_NUM2 (0xFFA10100u)
/* DI: redefine records of meter change event */
#define PROTO_645_2007_EXT_BRM_DI_EVT_PM_CHG_REC_BASE2 (0xFFA10101u)
/* DI: bsrm event nodify */
#define PROTO_645_2007_EXT_BSRM_DI_EVT_NODIFY (0xFEA20000u)
/* DI: bsrm event content query */
#define PROTO_645_2007_EXT_BSRM_DI_EVT_QUERY (0xFEA20001u)
/* DI: bsrm inform event report result */
#define PROTO_645_2007_EXT_BSRM_DI_EVT_RESP (0xFEA20002u)
/* DI: network state sync to device command */
#define PROTO_645_2007_EXT_NET_STATE_SYNC_DI (0xFEA20003u)
/* DI: read or write passcode */
#define PROTO_645_2007_EXT_PASSCODE_REQ (0xFFFE0001u)
/* data identification for query snr rssi */
#define PROTO_645_2007_EXT_QUERY_SIGNAL_ID (0xFFFFFF01u)
/* data identification for query production test info */
#define PROTO_645_2007_EXT_QUERY_PT_INFO (0xFFFFFF02u)
/* data identification for write compensation ppm from tool */
#define PROTO_645_2007_EXT_WRITE_TOOL_PPM (0xFFFFFF03u)
/* define 645-2007 extend protocol fn */
/* FN: branch recognition */
#define PROTO_645_2007_EXT_FN_BR (0x0)
/* FN: event report */
#define PROTO_645_2007_EXT_FN_EVT_RPT (0x06)
/* FN: query ID info */
#define PROTO_645_2007_EXT_FN_QUERY_ID (0x1f)
/* FN: set baud for nw 21meter */
#define PROTO_645_2007_EXT_FN_SET_BAUD (0x1f)
/* define 645-2007 extend protocol error code length */
#define PROTO_645_2007_EXT_QUERY_ID_ERR_LEN (1)
/* define 645-2007 extend protocol error code */
#define PROTO_645_2007_EXT_QUERY_ID_ERR (1)
/* define 645-2007 extend protocol ID info type */
/* ID info type is chip id type */
#define PROTO_645_2007_EXT_CHIP_ID (0x01)
/* ID info type is module id type */
#define PROTO_645_2007_EXT_MODULE_ID (0x02)
/* ID info type is zc info type */
#define PROTO_645_2007_EXT_ZC_INFO_ID (0x3A)
/* ID info type is internal software version type */
#define PROTO_645_2007_EXT_INTER_VER_ID (0x3B)
/* ID info type is module id and chip id type */
#define PROTO_645_2007_EXT_MC_ID (0xF0)
/* ID info type is station version id type */
#define PROTO_645_2007_EXT_VER_ID (0xF1)
/* ID info type is station version 2 id type */
#define PROTO_645_2007_EXT_VER2_ID (0xF2)
/* ID info type is station nw version id type */
#define PROTO_645_2007_EXT_NW_VER_ID (0xF3)
/* response version info device id len */
#define PROTO_645_2007_EXT_DEVICE_ID_LEN (11)
/* response version info chip management id len */
#define PROTO_645_2007_EXT_CHIP_MMID_ID_LEN (24)
/* response result code for set id information */
#define ERR_OK_SET_ID_INFO 0
#define ERR_EXIST_SET_ID_INFO 1
#define ERR_INVAL_SET_ID_INFO 2
/* definition hardware transformer detect response result code */
#define PROTO_645_2007_EXT_TSFM_RESULT_OK 0
#define PROTO_645_2007_EXT_TSFM_RESULT_BUSY 1
/* definition branch recognition phase type */
#define PROTO_645_2007_EXT_BRM_PHASE_ALL 0
#define PROTO_645_2007_EXT_BRM_PHASE_A 1
#define PROTO_645_2007_EXT_BRM_PHASE_B 2
#define PROTO_645_2007_EXT_BRM_PHASE_C 3
/* defined max phase number for BRM */
#define PROTO_645_2007_EXT_MAX_PHASE_NUM 3
/* define the port where the node is located */
#define PROTO_645_PORT_RS485 0
#define PROTO_645_PORT_PLC_WEAK 1
#define PROTO_645_PORT_PLC 2
#define PROTO_645_PROT_PLC_WEAK_NOT_SAME_VENDOR 3
/* station transformer detect result */
#define PROTO_645_TSFM_DETECT_RET_UNKNOWN (0)
#define PROTO_645_TSFM_DETECT_RET_SAME (1)
#define PROTO_645_TSFM_DETECT_RET_DIFFERENT (2)
/* define module version length */
#define PROTO_645_EXT_MOD_VER_LEN 2
/* define software version length */
#define PROTO_645_EXT_SW_VER_LEN 4
/* define chip version length */
#define PROTO_645_EXT_CHIP_VER_LEN 4
/* define humidity data length */
#define PROTO_645_EXT_HUM_LEN (2)
/* define high-precision current RMS length -- xxx.xxxxx */
#define PROTO_645_2007_EXT_BRM_HP_I_LEN (4)
/* define high-precision power RMS length -- xx.xxxxxx */
#define PROTO_645_2007_EXT_BRM_HP_P_LEN (4)
/* define branch recognition repeat max cnt */
#define PROTO_645_EXT_BRM_REPEAT_CNT_MAX 5
/* tsfm sign send retry cnt */
#define PROTO_645_EXT_TSFM_SEND_REPEAT_CNT_DEF 2
#define PROTO_645_EXT_TSFM_SEND_REPEAT_CNT_MAX 4
/* tsfm sign send interval time, uint is 1s,
* set to 600 by default if the received value is
* less than 400 or greater than 900.
* */
#define PROTO_645_EXT_TSFM_SEND_INTERVAL_MIN 400
#define PROTO_645_EXT_TSFM_SEND_INTERVAL_DEF 600
#define PROTO_645_EXT_TSFM_SEND_INTERVAL_MAX 900
/* define switch band response data len */
#define PROTO_645_EXT_BADN_SWITCH_DATA_LEN 8
/* event reporting request message marked magic number */
#define PROTO_645_EXT_EVT_RPT_REQ_MARK (0xA2D5B13F)
/* define wiring status */
#define PROTO_645_EXT_BRM_ASS_WIRE_OK 0
/* negative power, two possibilities:
* 1. CT reverse connection
* 2. voltage line sequence and current line sequence is not match
*/
#define PROTO_645_EXT_BRM_ASS_WIRE_ERR1 1
/* current line sequence error or the voltage terminal is not connected */
#define PROTO_645_EXT_BRM_ASS_WIRE_ERR2 2
/* cannot receive branch signal */
#define PROTO_645_EXT_BRM_ASS_WIRE_ERR3 3
/* define the assembly check mode under PLC connection mode */
#define PROTO_645_EXT_BRM_ASS_CHK_PLC_MODE_SAME 0 /* same network */
#define PROTO_645_EXT_BRM_ASS_CHK_PLC_MODE_DIFF 1 /* different networks */
/* define the assembly check band under PLC connection mode */
#define PROTO_645_EXT_BRM_ASS_CHK_PLC_BAND_2 0 /* use PLC_LIB_FREQ_BAND_2 */
#define PROTO_645_EXT_BRM_ASS_CHK_PLC_BAND_1 1 /* use PLC_LIB_FREQ_BAND_1 */
#define PROTO_645_EXT_BRM_ASS_CHK_PLC_BAND_8 2 /* use PLC_LIB_FREQ_BAND_8 */
/* branch2 transmit type:
* 0: module deals with sending signals, not transmitting through,
* 1: module is not processed and is transmitted through to the device,
* 2: Module processing and transmitting to equipment.
*/
#define PROTO_645_EXT_BR2_HANDLE 0
#define PROTO_645_EXT_BR2_TRANS 1
#define PROTO_645_EXT_BR2_HANDLE_AND_TRANS 2
/* define branch2 interval of tsfm topo repeat, uint is 1s. */
#define PROTO_645_EXT_TOPO_REPEAT_INTERVAL 160
/* define oneshot calibration status value. */
#define PROTO_645_ONESHOT_CALIBRATION_IDLE 0
#define PROTO_645_ONESHOT_CALIBRATION_DOING 1
#define PROTO_645_ONESHOT_CALIBRATION_SUCCESS 2
#define PROTO_645_ONESHOT_CALIBRATION_FAIL 3
/* define oneshot calibration fail code. */
#define PROTO_645_ONESHOT_CALIBRATION_FAIL_NONE 0
#define PROTO_645_ONESHOT_CALIBRATION_FAIL_INIT 1
#define PROTO_645_ONESHOT_CALIBRATION_FAIL_REG 2
#define PROTO_645_ONESHOT_CALIBRATION_FAIL_SAVE 3
/* defien firmware check address len */
#define PROTO_645_EXT_CHECK_ADDR_lEN 4
/* define branch recognition invalid energy value */
#define PROTO_645_EXT_BRM_INVALID_ENERGY (0xFFFF)
/* define feature current signal modulate pulse signal frequence data length */
#define PROTO_645_EXT_FC_PULSE_FREQ_LEN 3
/* define ZJ event read reserved length */
#define PROTO_645_EXT_EVT_READ_RESERVE_LEN_ZJ 12
/* define qingdao dingxin branch detect identification code length */
#define PROTO_645_EXT_BRANCH_ID_CODE_DX 4
/* define bsrm extend cmd fn */
/* write current ratio coefficient FN */
#define PROTO_645_EXT_BSRM_TANS_CMD_FN_W_CT_COEFF (0x05)
/* read current ratio coefficient FN */
#define PROTO_645_EXT_BSRM_TANS_CMD_FN_R_CT_COEFF (0x06)
#define PROTO_645_EXT_CHECK_FN_REQ (0)
#define PROTO_645_EXT_CHECK_FN_QUERY (1)
#define PROTO_645_EXT_CHECK_EVENT_SUCCESS (0)
#define PROTO_645_EXT_CHECK_EVENT_RUNNING (1)
#define PROTO_645_EXT_CHECK_EVENT_NOSUPPORT (2)
#define PROTO_645_EXT_CHECK_EVENT_FAIL (4)
#define PROTO_645_EXT_BRANCH_ENERGY_BCD_LEN_HN (3)
#define PROTO_645_EXT_BRANCH_CODE_LEN_HN (2)
#define PROTO_645_EXT_BRM_PPM_PING_RSVD_LEN (247)
/* define load capacity: */
/* constant resistance mode with peak value of 2000 mA */
#define PROTO_645_EXT_BR_LOAD_CAP_2000MA (2)
/* constant current mode with peak value of 400mA */
#define PROTO_645_EXT_BR_LOAD_CAP_400MA (1)
/* define bsrm event report result value */
/* define bsrm event report succeed */
#define PROTO_645_EXT_BSRM_EVT_RPT_SUCCEED (0)
/* define bsrm event report overtime */
#define PROTO_645_EXT_BSRM_EVT_RPT_TIMEOUT (1)
/* define bsrm power meter proto type id. */
#define PROTO_645_EXT_BSRM_PM_DATA_TYPE_64507 (2)
#define PROTO_645_EXT_BSRM_PM_DATA_TYPE_69845 (3)
/* define the maximum supported node number of 645 extension protocol,
* only for Beijing.
*/
#define PROTO_645_EXT_BR_BJ_NODE_ID_MAX (2047)
/* maximum characteristics bit during time for Beijing br protocol,
* uint is 1ms.
*/
#define PROTO_645_EXT_BR_BJ_CHARA_BIT_DUR_MAX (600)
/* default characteristics bit during time for Beijing br protocol,
* uint is 1ms.
*/
#define PROTO_645_EXT_BR_BJ_CHARA_BIT_DUR_DEFAULT (300)
/* define network state sync value */
#define PROTO_645_EXT_NET_STATE_OFFLINE_WITH_POWER_ON (0)
#define PROTO_645_EXT_NET_STATE_ONLINE (1)
#define PROTO_645_EXT_NET_STATE_OFFLINE (2)
/* define network state sync function */
#define PROTO_645_EXT_NET_STATE_SYNC_FN (0x1E)
/* define query id infomation data field len */
#define PROTO_645_EXT_QUERY_ID_DATA_LEN 1
/* define ftm uart command */
#define PROTO_646_EXT_FTM_UART_CMD_FIX_BAUD (0x00)
#define PROTO_646_EXT_FTM_UART_CMD_SWITCH_FTM_MODE (0x01)
/* define factory test function code */
#define PROTO_645_EXT_FT_MODE_GET_CHIP_MMID (0x44)
#define PROTO_645_EXT_FT_MODE_SET_CHIP_MMID (0x43)
#define PROTO_645_EXT_FT_MODE_ZC_CHECK (0x3A)
#define PROTO_645_EXT_FT_MODE_GET_SW_VER (0x3B)
#define PROTO_645_EXT_FT_MODE_SET_COMM_ADDR (0x86)
#define PROTO_645_EXT_FT_MODE_GET_COMM_ADDR (0x87)
/* define factory test zero-crossing detection mode */
#define PROTO_645_EXT_ZC_CLCT_MODE_FALLING (1)
#define PROTO_645_EXT_ZC_CLCT_MODE_RISING (2)
/* define factory test meter phase types */
#define PROTO_645_EXT_ZC_METER_PHASE_SINGLE (1)
#define PROTO_645_EXT_ZC_METER_PHASE_THREE (2)
#define PROTO_645_EXT_ZC_PHASE_COUNT (3)
#pragma pack(push) /* save the pack status */
#pragma pack(1) /* 1 byte align */
/* modular id information and chip management id information */
typedef struct _proto_645_ext_mc_id_info {
/* modular id */
uint8_t mod_id[PROTO_645_2007_EXT_DEVICE_ID_LEN];
/* chip management id */
uint8_t chip_mmid[PROTO_645_2007_EXT_CHIP_MMID_ID_LEN];
} proto_645_ext_mc_id_info_t;
/* request for set sta id information */
typedef struct _proto_645_ext_set_id_info_req {
/* id type, see PROTO_645_2007_EXT_XXX_ID */
uint8_t id_type;
/* id information data len, unit is byte */
uint8_t data_len;
/* data, when id_type is PROTO_645_2007_EXT_MC_ID
* data structure is proto_645_ext_mc_id_info_t.
*/
uint8_t data[0];
} proto_645_ext_set_id_info_req_t;
/* device MAC address */
typedef struct _proto_645_ext_mac_addr {
uint8_t addr[IOT_MAC_ADDR_LEN];
} proto_645_ext_mac_addr_t;
/* response for set sta id information */
typedef struct _proto_645_ext_set_id_info_rsp {
/* set result, see ERR_XXX_SET_ID_INFO */
uint8_t ret;
} proto_645_ext_set_id_info_rsp_t;
/* response tcz version info payload */
typedef struct _proto_645_ext_read_tcz_ver_rsp {
/* vendor id */
uint16_t vendor_id;
/* chip type */
uint8_t chip_type;
/* module type */
uint8_t module_type;
/* build day */
uint8_t day;
/* build month */
uint8_t month;
/* build year */
uint8_t year;
/* external software version. BCD format. range from 0 - 9999 */
uint16_t sw_ver;
} proto_645_ext_read_tcz_ver_rsp_t;
/* response version info payload */
typedef struct _proto_645_ext_read_ver_rsp {
/* Build type: Release/Debug-(0/1) */
uint8_t type_ver;
/* numerically encoded version, like 0x01020304 */
uint32_t firmware_version;
/* external software version. BCD format. range from 0 - 9999 */
uint16_t sw_ver;
/* app software version. bin format. range from 0 - 1023 */
uint16_t app_ver;
/* build year */
uint8_t year;
/* build month */
uint8_t month;
/* build day */
uint8_t day;
/* build hour */
uint8_t hour;
/* build min */
uint8_t min;
/* build sec */
uint8_t sec;
/* vendor id */
uint16_t vendor_id;
/* device id */
uint8_t dev_id[PROTO_645_2007_EXT_DEVICE_ID_LEN];
/* chip management id */
uint8_t chip_mmid[PROTO_645_2007_EXT_CHIP_MMID_ID_LEN];
/* image crc check result, 0 mean succeed, 1 mean fail */
uint8_t img_check_result : 1,
/* flag mark to if the device has branch signal receiving capability */
br_ident : 1,
/* flag mark to if enable rf */
rf : 1,
/* reserve for future */
reserve : 5;
/* hardware version */
uint32_t hw_ver;
/* module mac address */
uint8_t mod_addr[IOT_MAC_ADDR_LEN];
/* user type, see USER_TYPE_XXX */
uint8_t user_type;
} proto_645_ext_read_ver_rsp_t;
/* read tsfm info response */
typedef struct _proto_645_ext_tsfm_info_to_cco {
/* di of tsfm info */
uint8_t di[PROTO_645_2007_DI_LEN];
/* tsfm info */
iot_sg_sta_tsfm_chip_info_t tsfm_info;
/* type of node */
uint8_t type[3];
/* reserve for future */
uint8_t reserve_0[12];
/* parent node address */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* reserve for future */
uint8_t reserve_1[27];
} proto_645_ext_tsfm_info_to_cco_t;
/* read parent node address response */
typedef struct _proto_645_ext_parent_addr_to_cco {
/* di of tsfm info */
uint8_t di[PROTO_645_2007_DI_LEN];
/* parent node address */
uint8_t addr[IOT_MAC_ADDR_LEN];
} proto_645_ext_parent_addr_to_cco_t;
/* response chip id info payload */
typedef struct _proto_645_ext_query_chip_id_rsp {
/* id info type */
uint8_t info_type;
/* id info len */
uint8_t info_len;
/* chip id info */
uint8_t chip_mmid[PROTO_645_2007_EXT_CHIP_MMID_ID_LEN];
} proto_645_ext_query_chip_id_rsp_t;
/* response module id info payload */
typedef struct _proto_645_ext_query_module_id_rsp {
/* id info type */
uint8_t info_type;
/* id info len */
uint8_t info_len;
/* module id info */
uint8_t dev_id[PROTO_645_2007_EXT_DEVICE_ID_LEN];
} proto_645_ext_query_module_id_rsp_t;
/* branch2 recognition launch payload */
typedef struct _proto_645_ext_br2_launch {
/* trans type, see PROTO_645_EXT_BR2_XXX. */
uint8_t trans_type;
/* time - BCD code, if receiving time is full FF, indicating that the
* signal is sent immediately. There is no need to set the time.
*/
proto_645_07_time_ymdhms_t tm;
/* sequence number */
uint16_t sn;
/* code len */
uint8_t code_len;
/* code data */
uint8_t code[0];
} proto_645_ext_br2_launch_t;
/* trigger topology */
typedef struct _proto_645_ext_br2_launch_fn {
/* Send interval(reserve): 00 BIN.*/
uint8_t interval;
/* code len */
uint8_t code_len;
/* code data */
uint8_t code[0];
}proto_645_ext_br2_launch_fn_t;
/* branch2 recognition launch payload */
typedef struct _proto_645_ext_br2_pulse_width {
/* signal high level pulse width, uint is 1us. */
uint16_t high_level;
/* signal low level pulse width, uint is 1us. */
uint16_t low_level;
} proto_645_ext_br2_pulse_width_t;
/* branch2 recognition result */
typedef struct _proto_645_ext_br2_launch_result {
/* sequence number */
uint16_t sn;
/* roll call time - BCD code */
proto_645_07_time_ymdhms_t tm;
} proto_645_ext_br2_launch_result_t;
/* location information */
typedef struct _proto_645_ext_location_unit {
/* location unit seconds : BCD code */
uint16_t sec_0 : 4,
sec_1 : 4,
sec_2 : 4,
sec_3 : 4;
/* location unit min : BCD code */
uint8_t min_0 : 4,
min_1 : 4;
/* location unit degree : BCD code */
uint16_t degree_0 : 4,
degree_1 : 4,
degree_2 : 4,
/* 0:north latitude or east longitude,1:south latitude or west longitude */
symbol_3 : 1,
rsvd : 3;
} proto_645_ext_location_unit_t;
/* meter descriptor version 0 of meter box */
typedef struct _proto_645_ext_br_pm_info_v0 {
/* pm mac address */
uint8_t addr[IOT_MAC_ADDR_LEN];
} proto_645_ext_br_pm_info_v0_t;
/* meter descriptor version 1 of meter box */
typedef struct _proto_645_ext_br_pm_info_v1 {
/* pm mac address */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* CT ratio, uint is x1 */
uint16_t i_ratio;
/* PT ratio, uint is x1 */
uint8_t v_ratio;
/* reserved for further use */
uint8_t rsvd[2];
} proto_645_ext_br_pm_info_v1_t;
/* branch recognition meter information response */
typedef struct _proto_645_ext_br_meter_info_rsp {
/* longitude */
proto_645_ext_location_unit_t longitude;
/* latitude */
proto_645_ext_location_unit_t latitude;
/* branch recognition data block total */
uint8_t data_block_total;
/* response data block sequence */
uint8_t data_block_seq : 6,
/* meter descriptor version, see PROTO_645_EXT_BR_PM_INFO_XXX */
ver : 2;
/* data len */
uint8_t data_len;
/* total meter conut */
uint16_t total_cnt;
/* reprot meter count */
uint8_t rpt_cnt;
/* power meter info */
uint8_t data[0];
} proto_645_ext_br_meter_info_rsp_t;
/* branch recognition clear launch response */
typedef struct _proto_645_ext_br_clear_rsp {
/* flag to mark if the device has branch signal receiving capability */
uint8_t br_ident : 1,
/* reserved for future */
rsvd1 : 7;
/* supported sending modes, see IOT_PLC_HW_TSFM_MODE_XXX */
uint8_t send_supp_mode;
/* reserved for future */
uint8_t rsvd2[6];
} proto_645_ext_br_clear_rsp_t;
/* branch detect send stage rspond data when rsp->formate 1 */
typedef struct _proto_645_ext_br_send_rsp {
/* use send mode see IOT_PLC_HW_TSFM_SEND_MODE_XXX */
uint8_t send_mode;
/* load capacity, see PROTO_645_EXT_BR_LOAD_CAP_XXX*/
uint8_t load_capacity;
/* reserved */
uint8_t rsvd[14];
} proto_645_ext_br_send_rsp_t;
/* branch recognition response cache data */
typedef struct _proto_645_ext_br_rsp_cache {
/* DI */
uint32_t di;
/* response result, see PROTO_645_2007_EXT_BR_RESULT_XXX */
uint8_t result :4,
/* data format. 0 mean data structure is bitmap format,
* see proto_645_ext_br_info_rsp_t. 1 mean data structure is energy list,
* see proto_645_ext_br_energy_rsp_t.
*/
format :1,
/* reserved */
reserved :3;
/* recognition response data len */
uint8_t data_len;
/* target mac address */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* recognition response data */
uint8_t *data;
} proto_645_ext_br_rsp_cache_t;
/* transformer monitor tsfm detect request */
typedef struct _proto_645_ext_tsfm_launch_req {
/* duration of bit data output, uint is 1us
* less than or equal to IOT_PLC_HW_TSFM_OUTPUT_MAX_TIME,
* greater than or equal to IOT_PLC_HW_TSFM_OUTPUT_MIN_TIME.
*/
uint16_t dur_output;
/* ahead interval time of sending data relative to zero-crossing point,
* uint is 1us. less than or equal to IOT_PLC_HW_TSFM_MAX_AHEAD_TIME,
* greater than or equal to IOT_PLC_HW_TSFM_MIN_AHEAD_TIME.
*/
uint16_t ahead;
/* repeat count */
uint8_t repeat_cnt;
/* sending data interval, unit is 1s */
uint16_t send_interval;
/* transformer addr, little endian */
uint8_t tsfm_addr[IOT_MAC_ADDR_LEN];
/* transformer sequence number. */
uint8_t sn;
/* plc rising edge zc send tsfm flag, it's phase negative zc flag. */
uint8_t is_rising : 1,
/* reserved for future */
rsvd1 : 7;
/* reserved for future */
uint8_t rsvd[8];
} proto_645_ext_tsfm_launch_req_t;
/* transformer monitor tsfm detect result */
typedef struct _proto_645_ext_tsfm_launch_rsp {
/* see - PROTO_645_2007_EXT_TSFM_RESULT_XXX */
uint8_t ret;
} proto_645_ext_tsfm_launch_rsp_t;
typedef struct _proto_645_ext_node_in_neig_info {
/* node addr, little-endian */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* node state */
uint8_t is_neighbor : 1,
/* reserved for future */
reserved : 7;
} proto_645_ext_node_in_neig_info_t;
/* node is in neighbor state query response */
typedef struct _proto_645_ext_node_in_neig_resp {
/* node number */
uint8_t node_num;
/* node info list */
proto_645_ext_node_in_neig_info_t node_info[0];
} proto_645_ext_node_in_neig_resp_t;
/* III controler pm info */
typedef struct _proto_645_ext_brm_pm {
/* add pm mac address */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* pm proto, see - PROTO_TYPE_XXX */
uint8_t proto;
/* node port, see PORT_645_PORT_XXX */
uint8_t port : 3,
/* baud id */
baud_id : 3,
/* reserved for further use */
rsvd1 : 2;
/* pm CT ratio, uint is x1 */
uint16_t i_ratio;
/* pm PT ratio, uint is x1 */
uint8_t v_ratio;
/* assembly number */
uint8_t ass_pos : 6,
/* reserved for further use */
rsvd2 : 2;
/* rsvd */
uint8_t rsvd3;
} proto_645_ext_brm_pm_t;
/* add III controler pm info download */
typedef struct _proto_645_ext_brm_add_pm_req {
/* add pm count */
uint8_t cnt;
/* pm info array */
proto_645_ext_brm_pm_t pm[0];
} proto_645_ext_brm_add_pm_req_t;
/* response pm info */
typedef struct _proto_645_ext_brm_get_pm_rsp {
/* rsp pm total count */
uint8_t cnt : 6,
/* version */
ver : 2;
/* pm info array */
proto_645_ext_brm_pm_t data[0];
} proto_645_ext_brm_get_pm_rsp_t;
/* del III controler pm info download */
typedef struct _proto_645_ext_brm_del_pm_req {
/* del pm count */
uint8_t cnt;
/* pm address */
uint8_t data[0][IOT_MAC_ADDR_LEN];
} proto_645_ext_brm_del_pm_req_t;
/* get III controler pm info download */
typedef struct _proto_645_ext_brm_get_pm_req {
/* pm start index */
uint8_t statrt_index;
/* get pm count */
uint8_t cnt;
} proto_645_ext_brm_get_pm_req_t;
/* III or II controler run info. */
typedef struct _proto_645_ext_run_info {
/* reset counter */
uint16_t reset_cnt;
/* online state: 1 - online, 0 - not */
uint8_t is_online :1,
/* message version */
ver :2,
/* reserved for further use */
rsvd :5;
/* network addr */
uint8_t nw_addr[IOT_MAC_ADDR_LEN];
/* number to join the network */
uint16_t join_cnt;
/* total run time, uint is 1s */
uint32_t run_time;
/* 0 - transformer detect in progress, 1 - transformer detect done */
uint8_t hw_tsfm_done;
/* real transformer mac address, little-endian */
uint8_t hw_tsfm_addr[IOT_MAC_ADDR_LEN];
/* tsfm detect result see - - PROTO_645_TSFM_DETECT_RET_XXX */
uint8_t hw_tsfm_result;
/* 0 - transformer detect in progress, 1 - transformer detect done */
uint8_t sw_tsfm_done;
/* real transformer mac address, little-endian */
uint8_t sw_tsfm_addr[IOT_MAC_ADDR_LEN];
/* tsfm detect result see - IOT_SG_STA_TSFM_DETECT_RET_XXX */
uint8_t sw_tsfm_result;
/* RTC time */
proto_645_07_time_ymdhms_t tm;
} proto_645_ext_run_info_t;
/* dev mac address and version info payload */
typedef struct _proto_645_ext_mac_and_ver_info {
/* dev mac address, big endian */
uint8_t mac[IOT_MAC_ADDR_LEN];
/* vendor id. ASCII format. */
uint16_t vendor_id;
/* module version, use BCD code to represent */
uint8_t module_ver[PROTO_645_EXT_MOD_VER_LEN];
/* chip code. ASCII format. */
uint16_t chip_code;
/* module version date, use BCD code to represent */
uint8_t module_ver_day;
uint8_t module_ver_month;
uint8_t module_ver_year;
} proto_645_ext_mac_and_ver_info_t;
/* response core temperature info */
typedef struct _proto_645_ext_core_temperature
{
/* core temperature calibrated, uint is 0.01°C, bin code */
uint32_t temp_cali :31,
/* sign: 0 is +, 1 is - */
temp_cali_sign :1;
/* core temperature not calibrated, uint is 0.01°C, bin code */
uint32_t temp_not_cali :31,
/* sign: 0 is +, 1 is - */
temp_not_cali_sign :1;
} proto_645_ext_core_temperature_t;
/* threshold parameters of qiedian event */
typedef struct _proto_645_ext_brm_qd_thr {
/* current threshold for qiedian event occurrence, uint is 0.001A */
uint32_t enter_i_thr;
/* current threshold for qiedian event exit, uint is 0.001A */
uint32_t exit_i_thr;
/* The stability threshold is event occurrence */
uint8_t stable_thr_enter;
/* stability threshold for event exit */
uint8_t stable_thr_exit;
} proto_645_ext_brm_qd_thr_t;
/* branch recognition test reault response */
typedef struct _proto_645_ext_br_test_rsp {
/* branch recognition phase receive info
* bit0 represent phase A
* bit1 represent phase B
* bit2 represent phase C
*/
uint8_t br_phase_rec;
} proto_645_ext_br_test_rsp_t;
/* response version2 info payload */
typedef struct _proto_645_ext_read_ver_rsp_v2 {
/* vendor id. ASCII format. */
uint16_t vendor_id;
/* chip code. ASCII format. */
uint16_t chip_code;
/* module version, use BCD code to represent */
uint8_t module_ver[PROTO_645_EXT_MOD_VER_LEN];
/* module version date, use BCD code to represent */
uint8_t module_ver_day;
uint8_t module_ver_month;
uint8_t module_ver_year;
/* external software version, use ASCII code to represent */
uint8_t sw_ver[PROTO_645_EXT_SW_VER_LEN];
/* software version date, use BCD code to represent */
uint8_t sw_day;
uint8_t sw_month;
uint8_t sw_year;
/* chip version, use ASCII code to represent */
uint8_t chip_ver[PROTO_645_EXT_CHIP_VER_LEN];
/* chip version date, use BCD code to represent */
uint8_t chip_ver_day;
uint8_t chip_ver_month;
uint8_t chip_ver_year;
/* module mac address, big endian */
uint8_t dev_mac_addr[IOT_MAC_ADDR_LEN];
/* internal software version */
uint32_t build_sw_ver;
} proto_645_ext_read_ver_rsp_v2_t;
/* III controler basic information */
typedef struct _proto_645_ext_brm_basic_info {
/* voltage RMS, uint is 0.1V, BCD */
uint8_t v[PROTO_645_2007_EXT_MAX_PHASE_NUM][PROTO_645_V_LEN];
/* current RMS, uint is 0.001A, BCD */
uint8_t i[PROTO_645_2007_EXT_MAX_PHASE_NUM][PROTO_645_07_A_LEN];
/* active power, uint is 0.0001 KW, BCD */
uint8_t p[PROTO_645_2007_EXT_MAX_PHASE_NUM][PROTO_645_07_P_LEN];
/* three-phase sum active power, uint is 0.0001 KW, BCD */
uint8_t all_p[PROTO_645_07_P_LEN];
/* power factor, uint is 0.001, BCD */
uint8_t pf[PROTO_645_2007_EXT_MAX_PHASE_NUM][PROTO_645_07_PF_LEN];
/* three-phase sum power factor, uint is 0.001, BCD */
uint8_t all_pf[PROTO_645_07_PF_LEN];
/* positive active energy, uint is 1/ec kwh, BCD */
uint8_t ept_pos[PROTO_645_07_ENERGY_DATA_LEN];
/* negative active energy, uint is 1/ec kwh, BCD */
uint8_t ept_neg[PROTO_645_07_ENERGY_DATA_LEN];
/* temperature, uint is 0.1 centigrade, BCD */
uint8_t temperature[PROTO_645_07_TEMP_LEN];
/* humidity, unit is 0.1 %RH, BCD */
uint8_t humidity[PROTO_645_EXT_HUM_LEN];
/* time */
proto_645_07_time_ymdhms_t tm;
} proto_645_ext_brm_basic_info_t;
/* event reporting request message */
typedef struct _proto_645_ext_evt_rpt_req {
/* message marking, used for message legitimacy checking */
uint32_t mark;
} proto_645_ext_evt_rpt_req_t;
/* event enble value. */
typedef struct _proto_645_ext_event_en_t {
uint8_t rsvd0 : 2,
qiedian_evt : 1,
rsvd1 : 5;
}proto_645_ext_event_en_t;
/* get III controler qiedian data download */
typedef struct _proto_645_ext_brm_get_qd_data_req {
/* pm start index */
uint8_t start_index;
/* get pm count */
uint8_t cnt;
} proto_645_ext_brm_get_qd_data_req_t;
/* qiedian data */
typedef struct _proto_645_ext_brm_qd_data {
/* pm address - little endian */
uint8_t mac_addr[IOT_MAC_ADDR_LEN];
/* phase voltage, use 2 bytes of BCD code to represent the voltage.
* for example, 220.0V uses 2 bytes of BCD code to represent
* the following 0x22, 0x00.
*/
uint8_t v_a[PROTO_645_V_LEN];
uint8_t v_b[PROTO_645_V_LEN];
uint8_t v_c[PROTO_645_V_LEN];
/* phase current.use 3 bytes of BCD code to represent the current.
* for example, 123.456A uses 3 bytes of BCD code to represent
* the following 0x12, 0x34, 0x56.
*/
uint8_t i_a[PROTO_645_07_A_LEN];
uint8_t i_b[PROTO_645_07_A_LEN];
uint8_t i_c[PROTO_645_07_A_LEN];
/* N-line current, uint is 0.001A - BCD code */
uint8_t i_n[PROTO_645_07_A_LEN];
/* pm time - BCD code */
proto_645_07_time_ymdhms_t tm;
/* number of opening covers - BCD code */
uint8_t open_cover_n[PROTO_645_NUM_LEN];
/* status words - BIN code */
uint16_t words[PROTO_645_07_MAX_STATUS_WORDS_INDEX];
} proto_645_ext_brm_qd_data_t;
/* response qiedian info */
typedef struct _proto_645_ext_brm_get_qd_data_rsp {
/* pm total count */
uint8_t total_cnt;
/* start pm index */
uint8_t start_index;
/* rsp pm total count */
uint8_t cnt;
/* qiedian data array */
proto_645_ext_brm_qd_data_t data[0];
} proto_645_ext_brm_get_qd_data_rsp_t;
/* assembly check request layout */
typedef struct _proto_645_ext_brm_ass_chk_req {
/* longitude */
proto_645_ext_location_unit_t longitude;
/* latitude */
proto_645_ext_location_unit_t latitude;
/* time - BCD code */
proto_645_07_time_ymdhms_t tm;
/* voltage ratio */
uint8_t v_ratio :4,
/* current ratio */
i_ratio :4;
/* flag mart to the nodes are connected by PLC */
uint8_t is_plc_con :1,
/* enable terminal transparent reading mode check */
check_en_for_3761 :1,
/* PLC connect mode, only bit "is_plc_con"set, these bit fields
* are valid, see PROTO_645_EXT_BRM_ASS_CHK_PLC_MODE_XXX
*/
plc_mode :2,
/* PLC band, only bit "is_plc_con"set, these bit fields are valid,
* see PROTO_645_EXT_BRM_ASS_CHK_PLC_BAND_XXX
*/
band :2,
/* reserved for further use */
rsvd :2;
/* pm cnt */
uint8_t cnt;
/* pm addr's to be checked */
uint8_t addr[0][IOT_MAC_ADDR_LEN];
} proto_645_ext_brm_ass_chk_req_t;
/* assembly check request layout */
typedef struct _proto_645_ext_brm_ass_chk_qr {
/* starting index of query, starting from 0 */
uint8_t start_index;
/* number to query */
uint8_t num;
/* payload length limit of query response message */
uint8_t len_limit;
} proto_645_ext_brm_ass_chk_qr_t;
/* power meter assembly information results */
typedef struct _proto_645_ext_brm_ass_pm_chk_result {
/* pm addr */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* 1 - assembly ok, 0 assembly fail */
uint8_t result : 1,
/* pm proto, see - PROTO_TYPE_XXX */
pid : 3,
/* buad id */
bid : 3,
/* rsvd */
rsvd : 1;
} proto_645_ext_brm_ass_pm_chk_result_t;
/* query assembly check result response */
typedef struct _proto_645_ext_brm_ass_chk_rsp {
/* longitude */
proto_645_ext_location_unit_t longitude;
/* latitude */
proto_645_ext_location_unit_t latitude;
/* time - BCD code */
proto_645_07_time_ymdhms_t tm;
/* check state:
* 0 - never checked.
* 1 - being check.
* 2 - check done.
*/
uint8_t state :2,
/* phase 1 wiring status, see PROTO_645_EXT_BRM_ASS_WIRE_XXX */
phase1_wire_st :2,
/* phase 2 wiring status, see PROTO_645_EXT_BRM_ASS_WIRE_XXX */
phase2_wire_st :2,
/* phase 3 wiring status, see PROTO_645_EXT_BRM_ASS_WIRE_XXX */
phase3_wire_st :2;
/* time consumption of check, uint is 1s */
uint16_t time_cons;
/* voltage ratio */
uint8_t v_ratio :4,
/* current ratio */
i_ratio :4;
/* if set, indicating that there is more node information */
uint8_t more :1,
/* total pm cnt */
total_cnt :7;
/* pm cnt */
uint8_t cnt;
/* assembly check result array */
proto_645_ext_brm_ass_pm_chk_result_t result[0];
} proto_645_ext_brm_ass_chk_rsp_t;
/* report meter add or delete data */
typedef struct _proto_645_ext_brm_meter_chg_evt_data {
/* add or delete meter event, 0: delete meter, 1: add meter */
uint8_t flag;
/* time - BCD code */
proto_645_07_time_ymdhms_t tm;
/* meter number */
uint8_t cnt;
/* add meter information */
struct {
/* add meter addr, little-endian */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* proto type, see - PROTO_TYPE_XXX */
uint16_t port :2,
/* node port, see - PORT_645_PORT_XXX */
proto_type :3,
/* rsvd */
rsvd :11;
} data[0];
}proto_645_ext_brm_meter_chg_evt_data_t;
/* brm custom data blocks response */
typedef struct _proto_645_ext_brm_cus_data_blocks_rsp {
/* version number */
uint8_t version : 3,
/* is valid, 0 : invalid, 1: valid */
is_valid : 1,
/* rsvd */
rsvd1 : 4;
/* A-phase positive active energy, uint is 0.01/ec kwh - BCD code */
uint8_t a_ept_pos[PROTO_645_07_ENERGY_DATA_LEN];
/* A-phase negative active energy, uint is 0.01/ec kwh - BCD code */
uint8_t a_ept_neg[PROTO_645_07_ENERGY_DATA_LEN];
/* B-phase positive active energy, uint is 0.01/ec kwh - BCD code */
uint8_t b_ept_pos[PROTO_645_07_ENERGY_DATA_LEN];
/* B-phase negative active energy, uint is 0.01/ec kwh - BCD code */
uint8_t b_ept_neg[PROTO_645_07_ENERGY_DATA_LEN];
/* C-phase positive active energy, uint is 0.01/ec kwh - BCD code */
uint8_t c_ept_pos[PROTO_645_07_ENERGY_DATA_LEN];
/* C-phase negative active energy, uint is 0.01/ec kwh - BCD code */
uint8_t c_ept_neg[PROTO_645_07_ENERGY_DATA_LEN];
/* temperature, uint is 0.1 centigrade, BCD */
uint8_t temperature[PROTO_645_07_TEMP_LEN];
/* humidity, unit is 0.1 %RH, BCD */
uint8_t humidity[PROTO_645_EXT_HUM_LEN];
/* rsvd */
uint8_t rsvd2[16];
} proto_645_ext_brm_cus_data_blocks_rsp_t;
/* set tsfm info */
typedef struct _proto_645_ext_tsfm_info_set_t {
/* tsfm addr, little-endian */
uint8_t tsfm_addr[IOT_MAC_ADDR_LEN];
/* reserved for further use */
uint8_t rsvd[6];
} proto_645_ext_tsfm_info_set_t;
/* extern curve Read Downlink Information descriptor. */
typedef struct _proto_645_07_ext_curve_dl {
/* curve point num to Read */
uint8_t n;
/* the specified time is seconds, minutes, hours, days and years. */
uint8_t second;
uint8_t min;
uint8_t hour;
uint8_t mday;
uint8_t mon;
uint8_t year;
} proto_645_07_ext_curve_dl_t;
/* extern read signal of current dev response */
typedef struct _proto_645_07_ext_signal_resp {
/* snr of ul */
int8_t ul_snr;
/* rssi of ul */
int8_t ul_rssi;
/* snr of dl */
int8_t dl_snr;
/* rssi of dl */
int8_t dl_rssi;
/* fill data */
uint8_t fill_data[0];
} proto_645_07_ext_signal_resp_t;
/* extern read max min voltage response */
typedef struct _proto_645_07_ext_max_min_v_resp {
/* phase voltage, use 2 bytes of BCD code to represent the voltage.
* for example, 220.0V uses 2 bytes of BCD code to represent
* the following 0x22, 0x00.
*/
uint8_t v[PROTO_645_V_LEN];
/* occur time - BCD code */
proto_645_07_time_ymdhms_t tm;
} proto_645_07_ext_max_min_v_resp_t;
/* extern read max min current response */
typedef struct _proto_645_07_ext_max_min_a_resp {
/* phase current.use 3 bytes of BCD code to represent the current.
* for example, 123.456A uses 3 bytes of BCD code to represent
* the following 0x12, 0x34, 0x56.
*/
uint8_t i[PROTO_645_07_A_LEN];
/* occur time - BCD code */
proto_645_07_time_ymdhms_t tm;
} proto_645_07_ext_max_min_a_resp_t;
/* terminal information */
typedef struct _proto_645_07_ext_brm_terminal_cfg {
/* terminal address configuration */
union {
/* terminal address 698, little-endian */
uint8_t trans_698_addr[IOT_MAC_ADDR_LEN];
struct {
/* administrative region code */
uint16_t area_code;
/* terminal address region */
uint16_t dev_addr;
}trans_3761;
} terminal_addr;
/* reserved for further use */
uint8_t rsvd1;
/* terminal type, if 0: 3761 terminal, 1: 698 terminal */
uint8_t is_698 :1,
/* reserved for further use */
rsvd2 :7;
} proto_645_07_ext_brm_terminal_cfg_t;
/* oneshot calibration request information */
typedef struct _proto_645_07_ext_brm_cali_req {
/* EC constant */
uint32_t ec; /* low 16bit */
/* voltage channel transfer rate */
uint32_t u_rate;
/* current channel sample resistance value. unit: ohm */
uint32_t i_r_sample;
/* current channel transfer rate */
uint32_t i_rate;
/* calibration voltage param unit: 0.1V */
uint16_t u;
/* calibration current param unit: 0.01A */
uint16_t i;
/* input max sample times */
uint16_t max_smpl;
/* reserved for future */
uint8_t rsvd[10];
} proto_645_07_ext_brm_cali_req_t;
/* oneshot calibration status */
typedef struct _proto_645_07_ext_brm_cali_sts {
/* see - PROTO_645_ONESHOT_CALIBRATION_XXX */
uint8_t status;
/* see - PROTO_645_ONESHOT_CALIBRATION_FAIL_XXX */
uint8_t fail_code;
} proto_645_07_ext_brm_cali_sts_t;
/* basic information */
typedef struct _proto_645_07_ext_basic_info {
/* cpu number, bin format */
uint8_t cpu_num;
/* vendor id, ASCII format little-endian */
uint16_t vendor_id;
/* version date, reserved for further use */
uint8_t ver_rsvd1 :3,
/* version date, day */
ver_day :5;
/* version date, month */
uint16_t ver_month :4,
/* version date, year */
ver_year :12;
/* hardware version, bcd format little-endian */
uint16_t hw_ver;
/* software version, bcd format little-endian */
uint16_t sw_ver;
/* mcu name length, bin format */
uint8_t mcu_name_len;
/* mcu name, ASCII format */
uint8_t mcu_name[0];
} proto_645_07_ext_basic_info_t;
/* firmware sha1 check code read request */
typedef struct _proto_645_07_ext_sha1_check_code_req {
/* cpu number, bin format */
uint8_t cpu_num;
/* check start address, little-endian */
uint8_t check_addr[PROTO_645_EXT_CHECK_ADDR_lEN];
/* check length */
uint16_t check_len;
} proto_645_07_ext_sha1_check_code_req_t;
/* node info structure in proto_645_07_ext_brm_nei_node_info_ul_t.
* for PROTO_645_2007_EXT_DI_NEI_NODE_INFO
*/
typedef struct _proto_645_07_ext_brm_nei_data {
/* neighbor network node address, little-endian */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* rx snr of this node */
int8_t snr;
/* flag to mark if node vendor id is the same as CCO */
uint8_t same_vendor :1,
/* reserved for further use */
rsvd :7;
} proto_645_07_ext_brm_nei_data_t;
/* query neighbor network node info up-link.
* for PROTO_645_2007_EXT_DI_NEI_NODE_INFO
*/
typedef struct _proto_645_07_ext_brm_nei_node_info_ul {
/* flag of follow up data */
uint8_t flw_flg : 1,
/* reserved for further use */
rsvd : 7;
/* packet serial number of neighbor network node info */
uint8_t sn;
/* node cnt in node data */
uint8_t cnt;
/* node info */
proto_645_07_ext_brm_nei_data_t node[0];
} proto_645_07_ext_brm_nei_node_info_ul_t;
/* query neighbor network node tsfm info up-link.
* for PROTO_645_2007_EXT_DI_NEI_NODE_TSFM_INFO
*/
typedef struct _proto_645_07_ext_brm_nei_node_tsfm_ul {
/* cco address, little-endian */
uint8_t cco_addr[IOT_MAC_ADDR_LEN];
/* tsfm address, little-endian */
uint8_t tsfm_addr[IOT_MAC_ADDR_LEN];
/* node first physical phase line, see GW_APP_DATA_PHASE_XXX */
uint8_t phase_1 : 2,
/* node second physical phase line, see GW_APP_DATA_PHASE_XXX */
phase_2 : 2,
/* node third physical phase line, see GW_APP_DATA_PHASE_XXX */
phase_3 : 2,
/* reserve for future */
reserve : 2;
} proto_645_07_ext_brm_nei_node_tsfm_ul_t;
/* node info structure in proto_645_07_ext_brm_cco_add_pm_dl_t.
* for PROTO_645_2007_EXT_BRM_CCO_ADD_PM
*/
typedef struct _proto_645_07_ext_brm_pm_from_cco {
/* pm address, little-endian */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* protocol type, see IOT_BRM_PROTO_XXX*/
uint8_t pro_type : 4,
/* port number, see PROTO_645_PORT_XXX. PROTO_645_PORT_RS485 is invalid*/
port_num : 4;
/* reserved for further use */
uint8_t rsvd;
} proto_645_07_ext_brm_pm_from_cco_t;
/* add pm table list info request from cco down-link.
* for PROTO_645_2007_EXT_BRM_CCO_ADD_PM
*/
typedef struct _proto_645_07_ext_brm_cco_add_pm_dl {
/* historical node data clear flag */
uint8_t flg_clear : 1,
/* reserve for future */
reserve : 7;
/* add pm cnt */
uint8_t cnt;
/* pm info */
proto_645_07_ext_brm_pm_from_cco_t pm[0];
} proto_645_07_ext_brm_cco_add_pm_dl_t;
/* debug info record read command message layout */
typedef struct _proto_645_ext_brm_dbg_rec_dl {
/* start index of records to be read */
uint8_t start_index;
/* number of records to be read */
uint8_t cnt;
} proto_645_ext_brm_dbg_rec_dl_t;
/* debug info record report message layout */
typedef struct _proto_645_ext_brm_dbg_rec_ul {
/* record total cnt */
uint8_t total_cnt;
/* record start index of this report */
uint8_t strat_index;
/* reported records counter */
uint8_t rpt_cnt;
/* records data payload */
uint8_t rec_data[0];
} proto_645_ext_brm_dbg_rec_ul_t;
/* report layout of tsfm debug info record */
typedef struct _proto_645_ext_brm_dbg_tsfm_rec {
/* report record format version, the current is 0 */
uint8_t ver : 2,
/* the phase line where the tsfm info is received,
* see PROTO_645_2007_EXT_BRM_PHASE_XXX.
*/
phase : 2,
/* flag to mark if it is reverse zero crossing reception*/
is_reverse_zc : 1,
/* flag to mark if the received tsfm info is valid */
is_valid : 1,
/* reserve for future */
rsvd : 2;
/* energy: average zc delta, uint is 1us */
uint16_t energy;
/* time stamp */
proto_645_07_time_ymdhms_t time;
/* received tsfm address */
uint8_t tsfm_addr[IOT_MAC_ADDR_LEN];
} proto_645_ext_brm_dbg_tsfm_rec_t;
/* write passcode down-link request for PROTO_645_2007_EXT_PASSCODE_REQ */
typedef struct _proto_645_ext_write_passcode_dl {
/* simple pair passcode value, little endian */
uint16_t passcode;
/* reserve for future */
uint8_t rsvd[14];
} proto_645_ext_write_passcode_dl_t;
/* br2 launch payload, only for zhejiang */
typedef struct _proto_645_ext_br2_launch_zj_hdr {
/* trans type, see PROTO_645_EXT_BR2_XXX. */
uint8_t trans_type;
/* start time, if receiving time is full FF, indicating that the
* signal should be sent immediately. There is no need to set the time.
*/
proto_645_07_time_ymdhms_t tm;
/* characteristics data per bit duration time, unit: 1ms */
uint16_t chara_bit_dur;
/* modulate pulse signal frequence, little endian, uint: 0.01Hz */
uint8_t freq[PROTO_645_EXT_FC_PULSE_FREQ_LEN];
/* code len */
uint8_t code_len;
/* code data */
uint8_t code[0];
} proto_645_ext_br2_launch_zj_hdr_t;
/* br2 launch payload, only for zhejiang */
typedef struct _proto_645_ext_br2_launch_zj_tail {
/* modulate pulse signal high duration time, unit: 1us */
uint16_t pulse_high_dur;
/* modulate pulse signal low duration time, unit: 1us */
uint16_t pulse_low_dur;
/* extend data, reserve for future */
uint8_t code[12];
} proto_645_ext_br2_launch_zj_tail_t;
/* branch identification launch message layout, only for Beijing */
typedef struct _proto_645_ext_br_launch_bj {
/* characteristics bit duration time, unit: 1ms */
uint16_t chara_bit_dur;
/* modulate pulse signal high duration time, unit: 1us */
uint16_t pulse_high_dur;
/* modulate pulse signal low duration time, unit: 1us */
uint16_t pulse_low_dur;
/* node sequence number */
uint16_t node_seq;
/* launch sn */
uint16_t launch_sn;
/* reserve for future */
uint8_t rsvd[12];
} proto_645_ext_br_launch_bj_t;
/* branch identification receive init message layout, only for Beijing */
typedef struct _proto_645_ext_br_init_bj {
/* characteristics bit duration time, unit: 1ms */
uint16_t chara_bit_dur;
/* modulate pulse signal frequence, little endian, uint: 0.01Hz */
uint8_t freq[PROTO_645_EXT_FC_PULSE_FREQ_LEN];
/* similarity threshold, uint is 0.1% */
uint16_t similarity_thr;
/* reserve for future */
uint8_t rsvd[14];
} proto_645_ext_br_init_bj_t;
/* br2 launch record cnt response, only for zhejiang */
typedef struct _proto_645_ext_br2_record_cnt_rsp {
/* record cnt */
uint8_t record_cnt;
} proto_645_ext_br2_record_cnt_rsp_t;
/* br2 launch record data response, only for zhejiang */
typedef struct _proto_645_ext_br2_record_resp {
/* send start time - BCD code */
proto_645_07_time_ymdhms_t start_tm;
/* send end time - BCD code */
proto_645_07_time_ymdhms_t end_tm;
} proto_645_ext_br2_record_resp_t;
/* format of reading instruction sent by terminal */
typedef struct _proto_645_ext_br2_recv_rec_dl {
/* read amount */
uint8_t cnt;
/* start order */
uint16_t start_index;
/* read start time */
proto_645_corr_time_t start_time;
} proto_645_ext_br2_recv_rec_dl_t;
/* format of reading instruction sent by terminal */
typedef struct _proto_645_ext_br2_recv_rec_dl_xiongan {
/* read amount */
uint16_t cnt;
/* start order */
uint16_t start_index;
} proto_645_ext_br2_recv_rec_dl_xiongan_t;
/* format of reading instruction sent by terminal */
typedef struct _proto_645_ext_br2_recv_rec_dl_hn {
/* start order [1, 255] */
uint8_t start_index;
/* read amount */
uint8_t cnt;
} proto_645_ext_br2_recv_rec_dl_hn_t;
typedef struct _proto_645_ext_br2_recv_rec_entry_hn {
/* signal start time */
proto_645_corr_time_t signal_time;
/* phase: bit0:A,bit1:B,bit2:C */
uint8_t phase;
/* energy value, BCD xxxx.xx */
uint8_t energy[PROTO_645_EXT_BRANCH_ENERGY_BCD_LEN_HN];
/* branch singnal code data */
uint8_t code[PROTO_645_EXT_BRANCH_CODE_LEN_HN];
} proto_645_ext_br2_recv_rec_entry_hn_t;
/* record read reply format hu nan */
typedef struct _proto_645_ext_br2_recv_rec_ul_hn {
/* reply count */
uint8_t count;
/* reply branch result entry */
proto_645_ext_br2_recv_rec_entry_hn_t data[0];
} proto_645_ext_br2_recv_rec_ul_hn_t;
/* branch detect proto formats */
typedef struct {
/* signal time*/
proto_645_corr_time_t signal_time;
/* success flag */
uint8_t is_vaild;
/* phase see, IOT_PLC_PHASE_XXX */
uint8_t phase;
/* signal intensity 1 */
float signal1_rssi;
/* signal intensity 2 */
float signal2_rssi;
/* base wave intensity */
float base_rssi;
/* background noise */
float noise;
/* reserved */
uint8_t reserved[4];
} proto_645_ext_br2_recv_rec_entry_t;
/* record read reply format */
typedef struct _proto_645_ext_br2_recv_rec_ul {
/* number of branch detact during communication */
uint16_t total_cnt;
/* reply count */
uint8_t count;
/* start order*/
uint16_t start_index;
/* read start time */
proto_645_corr_time_t start_time;
/* read results */
proto_645_ext_br2_recv_rec_entry_t result[0];
} proto_645_ext_br2_recv_rec_ul_t;
/* branch detect record read reply header, respond header + id code + tail */
typedef struct {
/* signal time*/
proto_645_corr_time_t signal_time;
/* phase see, IOT_PLC_PHASE_XXX */
uint8_t phase;
/* signal intensity 1 */
float signal1_rssi;
/* signal intensity 2 */
float signal2_rssi;
/* background noise */
float noise;
} proto_645_ext_br2_recv_rec_entry_zj_head_t;
/* branch detect record read reply header tail */
typedef struct {
/* reserved */
uint8_t reserved[12];
}roto_645_ext_br2_recv_rec_entry_zj_tail_t;
/* record read reply format zj */
typedef struct _proto_645_ext_br2_recv_rec_ul_zj {
/* number of branch detact during communication */
uint16_t total_cnt;
/* reply count */
uint8_t count;
/* start order */
uint16_t start_index;
/* read start time */
proto_645_corr_time_t start_time;
/* length of signature code information */
uint8_t code_len;
/* record entry label */
uint8_t data[0];
} proto_645_ext_br2_recv_rec_ul_zj_t;
/* branch detect record read reply header, respond header + id code + tail */
typedef struct {
/* signal time*/
proto_645_07_time_ymdhms_t signal_time;
/* phase , 0:unknow, 1:phaseA, 2:phaseB, 3:phaseC, 4:phaseALL */
uint8_t phase;
/* signal intensity, BCD code format xxxxx.xxx */
uint8_t signal_rssi[PROTO_645_07_ENERGY_DATA_LEN];
/* base wave intensity, , BCD code format xxxxx.xxx */
uint8_t base_rssi[PROTO_645_07_ENERGY_DATA_LEN];
/* background noise, , BCD code format xxxxx.xxx */
uint8_t noise[PROTO_645_07_ENERGY_DATA_LEN];
/* reserved for further use */
uint8_t rsvd[2];
} proto_645_ext_br2_recv_rec_entry_xiongan_t;
/* record read reply format breaker */
typedef struct _proto_645_ext_br2_recv_rec_ul_xiongan {
/* number of branch detact during communication */
uint16_t total_cnt;
/* reply count */
uint8_t count;
/* record entry label */
uint8_t data[0];
} proto_645_ext_br2_recv_rec_ul_xiongan_t;
/* branch detect event formats */
typedef struct {
/* signal time*/
proto_645_corr_time_t signal_time;
/* success flag */
uint8_t phase;
/* signal intensity 1 */
float signal1_rssi;
/* signal intensity 2 */
float signal2_rssi;
/* background noise */
float noise;
/* identity code */
uint8_t id_code[0];
} proto_645_ext_br2_evt_rec_entry_t;
/* event reply format */
typedef struct _proto_645_ext_br2_evt_rec_ul {
/* number of data actually recorded */
uint8_t signal_cnt;
/* length of identification signal */
uint8_t id_len;
/* data entry */
uint8_t data[0];
} proto_645_ext_br2_evt_rec_ul_t;
/* branch detect event formats for qingdao dingxin */
typedef struct {
/* signal time*/
proto_645_corr_time_t signal_time;
/* result, 0 - failure, 1 - success */
uint8_t result;
/* success flag */
uint8_t phase;
/* signal intensity 1 */
float signal1_rssi;
/* signal intensity 2 */
float signal2_rssi;
/* signal intensity 2 */
float signal_fund_wave;
/* background noise */
float noise;
/* identity code */
uint8_t id_code[PROTO_645_EXT_BRANCH_ID_CODE_DX];
} proto_645_ext_br2_evt_rec_entry_dx_t;
/* event reply format for qingdao dingxin */
typedef struct _proto_645_ext_br2_evt_rec_dx_ul {
/* number of data actually recorded */
uint8_t signal_cnt;
/* data entry */
proto_645_ext_br2_evt_rec_entry_dx_t data[0];
} proto_645_ext_br2_evt_rec_dx_ul_t;
/* event number reply format */
typedef struct _proto_645_ext_br2_evt_cnt_ul {
/* number of events currently logged */
uint8_t evt_cnt[PROTO_645_NUM_LEN];
} proto_645_ext_br2_evt_cnt_ul_t;
/* bsrm extend cmd */
typedef struct _proto_645_ext_bsrm_trans_cmd {
/* fn */
uint8_t fn;
/* fn data content */
uint8_t data[0];
} proto_645_ext_bsrm_trans_cmd_t;
/* extend cmd current ratio coefficient */
typedef struct _proto_645_ext_ct_coeff {
/* base current ratio: 4000 : 1, samp resistance: 4.4 Ohm;
* CT ratio 5000:1, samp resistance 2 Ohm
* Then the coefficient = (5000 / 2) / (4000 / 4.4) * 10000 = 27500
*/
uint32_t coeff;
} proto_645_ext_ct_coeff_t;
/* read mean square of current response format */
typedef struct _proto_645_ext_i_ms_ul {
/* mean square of current for each phase */
uint32_t ms_i[PROTO_645_2007_EXT_MAX_PHASE_NUM];
} proto_645_ext_i_ms_ul_t;
/* zero cross test request format */
typedef struct _proto_645_ext_check_zc_dl {
/* function code, 0 - start test; 1 - read result */
uint8_t fn;
/* zero cross circuit bitmap:
* bit0 - phase A, bit1 - phase B, bit2 - phase C,
* bit3 - phase A ext, bit4 - phase B ext, bit5 - phase C ext
*/
uint8_t zc_bm;
} proto_645_ext_check_zc_dl_t;
/* zero cross circuit check response data format */
typedef struct _proto_645_ext_check_zc_data {
/* zero cross circuit bitmap:
* bit0 - phase A, bit1 - phase B, bit2 - phase C,
* bit3 - phase A ext, bit4 - phase B ext, bit5 - phase C ext
*/
uint8_t zc_bm;
/* zero cross period */
uint32_t period[2 * PROTO_645_2007_EXT_MAX_PHASE_NUM];
} proto_645_ext_check_zc_data_t;
/* zero cross circuit check response head format */
typedef struct _proto_645_ext_check_zc_ul {
/* function code, 0 - start test; 1 - read result */
uint8_t fn;
/* test status: 0 - not start, 1 - busy, 2 - finish */
uint8_t status;
/* extend data filled:
* if fn is 0, not use this filled;
* if fn is 1, see proto_645_ext_check_zc_data_t. */
uint8_t data[0];
} proto_645_ext_check_zc_ul_t;
/* bsrm event notification structure */
typedef struct _proto_645_ext_bsrm_evt_nodify {
/* 1 - occurs, 0 - clears */
uint8_t flag;
/* reserved for further use */
uint8_t rsvd[7];
} proto_645_ext_bsrm_evt_nodify_t;
/* bsrm event gpio interrupt check download struct */
typedef struct _proto_645_ext_bsrm_evt_check_dl {
/* fn: see - PROTO_645_EXT_CHECK_EVENT_FN_XXX */
uint8_t fn;
} proto_645_ext_bsrm_evt_check_dl_t;
/* bsrm event gpio interrupt check upload struct */
typedef struct _proto_645_ext_bsrm_evt_check_ul {
/* fn: see - PROTO_645_EXT_CHECK_EVENT_FN_XXX */
uint8_t fn;
/* event check result: see - PROTO_645_EXT_CHECK_EVENT_XXX */
uint8_t result;
/* event interrupt count */
uint16_t count;
} proto_645_ext_bsrm_evt_check_ul_t;
/* PPM ping struct */
typedef struct _proto_645_ext_brm_ppm_ping {
/* package serial number */
uint32_t seq;
/* empty data to send large packets */
int8_t reserve[PROTO_645_EXT_BRM_PPM_PING_RSVD_LEN];
} proto_645_ext_brm_ppm_ping_t;
/* bsrm event report content query download struct */
typedef struct _proto_645_ext_bsrm_evt_query_dl {
/* reserve for future */
uint8_t reserve[4];
}proto_645_ext_bsrm_evt_query_dl_t;
/* bsrm event report content query upload struct */
typedef struct _proto_645_ext_bsrm_evt_query_ul {
/* event data length */
uint8_t len;
/* event data */
uint8_t data[0];
}proto_645_ext_bsrm_evt_query_ul_t;
/* bsrm event report result download struct */
typedef struct _proto_645_ext_bsrm_evt_rpt_result_dl {
/* event report result, see PROTO_645_EXT_BSRM_EVT_RPT_XXX */
uint8_t rpt_result;
/* reserve for future */
uint8_t reserve[7];
}proto_645_ext_bsrm_evt_rpt_result_dl_t;
/* power meter information which in bsrm, only for shandong and yns */
typedef struct _proto_645_ext_bsrm_pm_info {
/* address of power meter, little-endian */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* protocol type of power meter, see IOT_SG_STA_BSRM_PM_DATA_TYPE_XX */
uint8_t data_type;
}proto_645_ext_bsrm_pm_info_t;
/* result of bsrm power meters query only for shandong and yns */
typedef struct _proto_645_ext_bsrm_smc_result {
/* count of power meter */
uint8_t pm_cnt;
/* power meter info */
proto_645_ext_bsrm_pm_info_t pm[0];
}proto_645_ext_bsrm_smc_result_t;
/* baud word for nw 21meter */
typedef struct _proto_645_ext_baud_word {
/* module mac, little-endian */
uint8_t module_mac[IOT_MAC_ADDR_LEN];
/* baud bitmap, */
uint8_t reserve_1 : 1,
baud_600 : 1,
baud_1200 : 1,
baud_2400 : 1,
baud_4800 : 1,
baud_9600 : 1,
baud_19200 : 1,
reserve_2 : 1;
} proto_645_ext_baud_word_t;
/* write module dev id for nw 21meter */
typedef struct _proto_645_ext_module_dev_id_write {
/* password */
uint8_t password[PROTO_645_2007_PASSWORD_LEN];
/* operator code */
uint8_t operator[PROTO_645_2007_OPERATOR_LEN];
/* dev id, little-endian */
uint8_t data[PROTO_645_2007_EXT_CHIP_MMID_ID_LEN];
} proto_645_ext_module_dev_id_write_t;
/* factory test function code */
typedef struct _proto_645_ext_ft_mode_code {
/* factory test mode code */
uint8_t ft_mode;
/* data */
uint8_t data[0];
} proto_645_ext_ft_mode_code_t;
/* zero-crossing data for every phase */
typedef struct _proto_645_ext_ft_mode_zc_check_data {
/* is there a zero-crossing signal */
uint8_t exist;
/* zero crossing signal period, unit is 40ns */
uint32_t period;
} proto_645_ext_ft_mode_zc_check_data_t;
/* zero-crossing info */
typedef struct _proto_645_ext_ft_mode_zc_check_info {
/* collection method, see PROTO_645_EXT_ZC_CLCT_MODE_XXXX */
uint8_t clct_type;
/* phase of meter, see PROTO_645_EXT_ZC_METER_PHASE_XXXX */
uint8_t meter_type;
/* zero crossing information */
proto_645_ext_ft_mode_zc_check_data_t data[PROTO_645_EXT_ZC_PHASE_COUNT];
} proto_645_ext_ft_mode_zc_check_info_t;
/* version info for module */
typedef struct _proto_645_ext_ft_mode_sw_ver_resp {
/* day of version, BCD, eg. 27 */
uint8_t day;
/* mon of version, BCD, eg. 07 */
uint8_t mon;
/* year of version, BCD, eg. 23 */
uint8_t year;
/* version, BCD, little-endian, eg. 0102 -> 02 01 */
uint16_t ver;
} proto_645_ext_ft_mode_sw_ver_resp_t;
typedef struct _pt_basic_data {
/* the golden mac which used for the pt test */
uint8_t golden_mac[6];
/* year of production test date, bcd format */
uint8_t year;
/* month of production test date, bcd format */
uint8_t month;
/* day of production test date, bcd format */
uint8_t day;
/* hour of production test date, bcd format */
uint8_t hour;
/* minute of production test date, bcd format */
uint8_t min;
/* the golden's firmware version */
uint32_t golden_fw_ver;
/* the production test tool's version */
uint32_t pt_tool_ver;
/* the production test board's version */
uint32_t pt_board_ver;
} pt_basic_data_t;
/* response pt info payload */
typedef struct _proto_645_ext_read_pt_info_rsp {
/* the local pt ppm valid flag, 0-invalid, 1-valid */
uint8_t local_pt_ppm_valid : 1,
/* the local tool ppm valid flag, 0-invalid, 1-valid */
local_tool_ppm_valid : 1,
/* the local fix ppm valid flag, 0-invalid, 1-valid */
local_fix_ppm_valid : 1,
/* the reader's fix ppm valid flag, 0-invalid, 1-valid */
host_pt_ppm_valid : 1,
/* the reader's tool ppm valid flag, 0-invalid, 1-valid */
host_tool_ppm_valid : 1,
/* the reader's fix ppm valid flag, 0-invalid, 1-valid */
host_fix_ppm_valid : 1,
/* basic pt info valid flag, 0-invalid, 1-valid */
basic_data_valid : 1,
/* the dut firmware version valid flag, 0-invalid, 1-valid */
pt_dut_fw_valid : 1;
/* production test ppm value for target dev, stored in the oem field */
int8_t local_pt_ppm;
/* compensation ppm value for target dev, set by the tool */
int8_t local_tool_ppm;
/* fix ppm value for the target device to response the cmd */
int8_t local_fix_ppm;
/* production test ppm value for the reader, stored in the oem field */
int8_t host_pt_ppm;
/* compensation ppm value for the reader, set by the tool */
int8_t host_tool_ppm;
/* fix ppm value for the reader */
int8_t host_fix_ppm;
/* the version of the dut firmware which supported the production test */
uint32_t pt_dut_fw_ver;
/* the production test basic data */
pt_basic_data_t basic_data;
} proto_645_ext_read_pt_info_rsp_t;
#pragma pack(pop) /* restore the pack status */
/*
* @brief proto_645_vendor_build_tcz_ver_info() - build tcz version info.
* @param addr: address of meter.
* return
* NULL -- for failure case.
* pkt -- the iot pkt buffer for 645 protocol.
*/
iot_pkt_t *proto_645_vendor_build_tcz_ver_info(uint8_t *addr);
/**
* @brief proto_645_vendor_build_ver_info_base() - build soft version info.
* @param ver_info: pointer to proto_645_ext_read_ver_rsp_t.
*/
void proto_645_vendor_build_ver_info_base(
proto_645_ext_read_ver_rsp_t *ver_info);
/**
* @brief proto_645_handle_vendor_proto() - handle vendor 645 protocol.
* @param data: pointer to protocol data buffer.
* @param len: data length.
* @param snr: snr of current mpdu.
* @param rssi: rssi of current mpdu.
* @retval: 1 -- handled vendor 645 protocol.
* @retval: 0 -- no vendor 645 protocol.
*/
uint32_t proto_645_handle_vendor_proto(uint8_t *data, uint32_t len,
int8_t snr, int8_t rssi);
/* proto_645_vendor_build_id_info() - create a id information message for the
* 645 protocol
* @addr: address of meter.
* @info_type: ID information type, see PROTO_645_2007_EXT_XXX_ID.
* return
* NULL -- for failure case.
* pkt -- the iot pkt buffer for 645 protocol.
*/
iot_pkt_t *proto_645_vendor_build_id_info(uint8_t *addr, uint8_t info_type);
/**
* @brief proto_645_vendor_build_tsfm_launch_req() - create a tsfm
* recognition launch message for the transformer monitor device.
* @param addr: address of transformer monitor.
* @param tsfm_addr: transformer address, little endian.
* @param dur_output: duration of bit data output, uint is 1us.
* less than or equal to IOT_PLC_HW_TSFM_OUTPUT_MAX_TIME,
* greater than or equal to
* IOT_PLC_HW_TSFM_OUTPUT_MIN_TIME.
* @param ahead: ahead interval time of sending data relative to
* zero-crossing point,uint is 1us.
* less than or equal to IOT_PLC_HW_TSFM_MAX_AHEAD_TIME,
* greater than or equal to
* IOT_PLC_HW_TSFM_MIN_AHEAD_TIME.
* @param repeat_cnt: repeat count.
* @param send_interval: sending data interval, unit is 1s.
* @param sn: transformer sequence number.
* @param is_rising: 1 - rising edge zc send tsfm flag, 0 - not
* @retval: pkt -- the iot pkt buffer for 645 protocol.
*/
iot_pkt_t *proto_645_vendor_build_tsfm_launch_req(uint8_t *addr,
uint8_t *tsfm_addr, uint16_t dur_output, uint16_t ahead,
uint8_t repeat_cnt, uint16_t send_interval, uint8_t sn, uint8_t is_rising);
/** handle tsfm send message.
* @param hdr_645: tsfm lanunch req 645 protocol header.
* @retval: rsp pkt packet -- successful.
* @retval: NULL -- failure.
*/
iot_pkt_t *proto_645_vendor_handle_tsfm_send_req(proto_645_header_t *hdr_645);
/**
* @brief proto_645_handle_vendor_proto_cco() - handle vendor 645 protocol
* in cco.
* @param cco_addr: pointer to cco address, little endian.
* @param data: pointer to protocol data buffer.
* @param len: data length.
* @param snr: snr of current mpdu.
* @param rssi: rssi of current mpdu.
* @retval: rsp pkt packet -- successful.
* @retval: NULL -- failure.
*/
iot_pkt_t *proto_645_handle_vendor_proto_cco(uint8_t *cco_addr,
uint8_t *data, uint32_t len, int8_t snr, int8_t rssi);
/**
* @brief proto_645_vendor_build_basic_info() - create a sta basic information
* msg for the 645 protocol.
* @param addr: address of meter.
* @param di: rsp 645 packet di.
* @retval: rsp pkt packet -- successful.
* @retval: NULL -- failure.
*/
iot_pkt_t *proto_645_vendor_build_basic_info(uint8_t *addr, uint32_t di);
/**
* @brief proto_645_vendor_build_check_code() - create firmware check code
* msg for the 645 protocol.
* @param check_code: pointer to check code value.
* @param check_code_len: check code value len.
* @param addr: address of meter.
* @param di: rsp 645 packet di.
* @retval: rsp pkt packet -- successful.
* @retval: NULL -- failure.
*/
iot_pkt_t *proto_645_vendor_build_check_code(uint8_t *check_code,
uint8_t check_code_len, uint8_t *addr, uint32_t di);
/**
* @brief proto_645_vendor_build_br_correct_time_req() - create br correct
* time msg for the 645 protocol.
* @param addr: address of meter.
* @param tm: pointer time data of message.
* @retval: rsp pkt packet -- successful.
* @retval: NULL -- failure.
*/
iot_pkt_t *proto_645_vendor_build_br_correct_time_req(uint8_t *addr,
iot_time_tm_t *tm);
/**
* @brief proto_645_vendor_build_br_msg() - create br msg for the 645 protocol.
* @param addr: address of meter.
* @param data: pointer to br data.
* @param len: data_len.
* @param di: data identification.
* @param dir: direction, see PROTO_645_DIR_XXX.
* @param ack_v: flag of ack, see PROTO_645_ACK_XXX.
*/
iot_pkt_t *proto_645_vendor_build_br_msg(uint8_t *addr, uint8_t *data,
uint8_t len, uint32_t di, uint8_t dir, uint8_t ack);
/**
* @brief proto_645_vendor_sta_nw_ext_uart_cmd_handle() - response extend uart cmd
* for nw factory test.
* @param header: req 645 protocol header.
* @retval: rsp pkt packet -- successful.
* @retval: NULL -- failure.
*/
iot_pkt_t *proto_645_vendor_sta_nw_ext_uart_cmd_handle(
proto_645_header_t *header);
/**
* @brief proto_645_vendor_set_id_info() - extend 645 set station id information
* @param req: set sta id information.
* @param force: whether to force write, 1: force write.
* 0: write when no id info.
* @retval: ERR_OK -- check success.
* @retval: otherwise -- check false, see ERR_XXX.
*/
uint32_t proto_645_vendor_set_id_info(proto_645_ext_set_id_info_req_t *req,
uint8_t force);
/**
* @brief proto_645_vendor_build_mac_and_ver_info() - create dev mac addr and
* version infomation msg for the 645 protocol.
* @param addr: address of meter.
* @param fn: function code.
* @retval: rsp pkt packet -- successful.
* @retval: NULL -- failure.
*/
iot_pkt_t *proto_645_vendor_build_mac_and_ver_info(uint8_t *addr,
uint8_t fn);
#ifdef __cplusplus
}
#endif
#endif /* PROTO_645_VENDOR_H */