886 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			886 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/****************************************************************************
 | 
						|
 | 
						|
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 IOT_BRM_COMMON_H
 | 
						|
#define IOT_BRM_COMMON_H
 | 
						|
 | 
						|
/* os shim includes */
 | 
						|
#include "os_types_api.h"
 | 
						|
 | 
						|
#include "iot_config_api.h"
 | 
						|
#include "iot_utils_api.h"
 | 
						|
#include "iot_pkt_api.h"
 | 
						|
#include "proto_645.h"
 | 
						|
#include "iot_rtc_api.h"
 | 
						|
#include "iot_sg_ext_sta_api.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
#define iot_brm_printf iot_printf
 | 
						|
 | 
						|
#define IOT_BRM_MOVE_DEV_ENABLE                 0
 | 
						|
 | 
						|
/* enable and disable cache functions  */
 | 
						|
#define IOT_BRM_CACHE_ENABLE                    1
 | 
						|
 | 
						|
/* define the maximum number of nodes supported by branch management devices */
 | 
						|
#define IOT_BRM_SUPPORT_NODE_MAX                32
 | 
						|
 | 
						|
/* define periodic timer interval, uint is 1ms */
 | 
						|
#define IOT_BRM_PERIOND_TIMER_INTERVAL          1000
 | 
						|
 | 
						|
/* define the maximum number of baud rates supported */
 | 
						|
#define IOT_BRM_SUPPORT_BAUD_MAX                5
 | 
						|
 | 
						|
/* brm module protocol type definition */
 | 
						|
#define IOT_BRM_PROTO_TYPE_TRANSPARENT          0
 | 
						|
#define IOT_BRM_PROTO_TYPE_645_1997             1
 | 
						|
#define IOT_BRM_PROTO_TYPE_645_2007             2
 | 
						|
#define IOT_BRM_PROTO_TYPE_69845                3
 | 
						|
/* this is an abstract protocol type, which is used to forward 645-2007
 | 
						|
 * messages through 376.1.
 | 
						|
 */
 | 
						|
#define IOT_BRM_PROTO_TYPE_645_2007_BY_3761     4
 | 
						|
/* this is an abstract protocol type, which is used to forward 645-2007
 | 
						|
 * messages through 698.45.
 | 
						|
 */
 | 
						|
#define IOT_BRM_PROTO_TYPE_645_2007_BY_69845    5
 | 
						|
/* this is an abstract protocol type, which is used to forward 698.45
 | 
						|
 * messages through 698.45.
 | 
						|
 */
 | 
						|
#define IOT_BRM_PROTO_TYPE_69845_BY_3761        6
 | 
						|
/* this is an abstract protocol type, which is used to forward 698.45
 | 
						|
 * messages through 376.1.
 | 
						|
 */
 | 
						|
#define IOT_BRM_PROTO_TYPE_69845_BY_69845       7
 | 
						|
#define IOT_BRM_PROTO_TYPE_MAX \
 | 
						|
    (IOT_BRM_PROTO_TYPE_69845_BY_69845 + 1)
 | 
						|
 | 
						|
/* this define is the receive message timeout time parameter for proxy transfer
 | 
						|
 * command request
 | 
						|
 */
 | 
						|
#define IOT_BRM_PROXY_TRANS_TIMEOUT             3
 | 
						|
 | 
						|
/* define the port where the node is located */
 | 
						|
#define IOT_BRM_PORT_RS485                      0
 | 
						|
#define IOT_BRM_PORT_PLC_WEAK                   1
 | 
						|
#define IOT_BRM_PORT_PLC                        2
 | 
						|
/* the module and BRM are in the same network, but the module is from other
 | 
						|
 * vendor, and cannot be collected by PLC.
 | 
						|
 */
 | 
						|
#define IOT_BRM_PORT_PLC_WEAK_NOT_SAME_VENDOR   3
 | 
						|
#define IOT_BRM_PORT_MAX \
 | 
						|
    (IOT_BRM_PORT_PLC_WEAK_NOT_SAME_VENDOR + 1)
 | 
						|
 | 
						|
/* define operator */
 | 
						|
#define  IOT_BRM_OPERATOR_EXT                   0
 | 
						|
#define  IOT_BRM_OPERATOR_INTERNAL              1
 | 
						|
#define  IOT_BRM_OPERATOR_CCO                   2
 | 
						|
#define  IOT_BRM_OPERATOR_MAX                   (IOT_BRM_OPERATOR_CCO + 1)
 | 
						|
 | 
						|
/* defined phase value for BRM */
 | 
						|
#define IOT_BRM_PHASE_ALL                         0
 | 
						|
#define IOT_BRM_PHASE_A                           1
 | 
						|
#define IOT_BRM_PHASE_B                           2
 | 
						|
#define IOT_BRM_PHASE_C                           3
 | 
						|
#define IOT_BRM_PHASE_MAX                         (IOT_BRM_PHASE_C + 1)
 | 
						|
 | 
						|
/* quadrant1:  active power is positive, reactive power is positive. */
 | 
						|
#define IOT_BRM_METER_QUAD_1                      0
 | 
						|
/* quadrant2:  active power is negative, reactive power is positive. */
 | 
						|
#define IOT_BRM_METER_QUAD_2                      1
 | 
						|
/* quadrant3:  active power is negative, reactive power is negative. */
 | 
						|
#define IOT_BRM_METER_QUAD_3                      2
 | 
						|
/* quadrant3:  active power is positive, reactive power is negative. */
 | 
						|
#define IOT_BRM_METER_QUAD_4                      3
 | 
						|
 | 
						|
/* read meter time state */
 | 
						|
#define IOT_BRM_READ_METER_TIME_STATE_INIT        0
 | 
						|
#define IOT_BRM_READ_METER_TIME_STATE_DATA        1
 | 
						|
 | 
						|
/* define support rates */
 | 
						|
#define IOT_BRM_METER_RATE_MAX                    4
 | 
						|
 | 
						|
/* define minimum effective voltage, unit is 0.1V */
 | 
						|
#define IOT_BRM_VALID_VOLTAGE_MIN                 100
 | 
						|
 | 
						|
/* define support max node info count */
 | 
						|
#define IOT_BRM_PROTO_GET_INFO_CNT                16
 | 
						|
 | 
						|
/* calibration idle status */
 | 
						|
#define IOT_BRM_ONESHOT_CALIBRATE_IDLE            (0)
 | 
						|
/* calibration doing status */
 | 
						|
#define IOT_BRM_ONESHOT_CALIBRATE_DOING           (1)
 | 
						|
/* calibration successful status */
 | 
						|
#define IOT_BRM_ONESHOT_CALIBRATE_SUCCESS         (2)
 | 
						|
/* calibration fail status */
 | 
						|
#define IOT_BRM_ONESHOT_CALIBRATE_FAIL            (3)
 | 
						|
 | 
						|
/* define current transformer ratio number */
 | 
						|
#define IOT_BRM_METER_I_RATIO_DEFAULT             (0)
 | 
						|
#define IOT_BRM_METER_I_RATIO_4000                (1)
 | 
						|
#define IOT_BRM_METER_I_RATIO_8000                (2)
 | 
						|
#define IOT_BRM_METER_I_RATIO_10000               (3)
 | 
						|
#define IOT_BRM_METER_I_RATIO_12000               (4)
 | 
						|
 | 
						|
/* snr calculation factor. this value defined the proportion
 | 
						|
 * of the snr of the new snr while calculate the final snr
 | 
						|
 * based on the snr history. set this value to x means the new
 | 
						|
 * snr only contribute to 1/x to the final snr.
 | 
						|
 */
 | 
						|
#define IOT_BRM_NW_SNR_FACTOR                     (8)
 | 
						|
 | 
						|
/* give smallest number, which is -128 */
 | 
						|
#define IOT_BRM_INVALID_SNR                       (-128)
 | 
						|
/* give largest number, which is 127 */
 | 
						|
#define IOT_BRM_MAX_SNR                           (127)
 | 
						|
/* highest available snr */
 | 
						|
#define IOT_BRM_SNR_HIGHEST                       (90)
 | 
						|
/* lowest available snr */
 | 
						|
#define IOT_BRM_SNR_LOWEST                        (-10)
 | 
						|
/* update snr max threshold value */
 | 
						|
#define IOT_BRM_MAX_FD_SNR                        (35)
 | 
						|
/* update snr min threshold value */
 | 
						|
#define IOT_BRM_MIN_FD_SNR                        (-10)
 | 
						|
 | 
						|
/* demand max slide interval, unit: 1 minute */
 | 
						|
#define IOT_BRM_METER_DEMAND_SLIDE_INTERVAL_MAX   (5)
 | 
						|
/* demand default slide interval, unit: 1 minute */
 | 
						|
#define IOT_BRM_METER_DEMAND_SLIDE_INTERVAL_DEF   (1)
 | 
						|
 | 
						|
/* max demand period, unit: 1 minute */
 | 
						|
#define IOT_BRM_METER_DEMAND_PERIOD_MAX           (60)
 | 
						|
/* default demand period, unit: 1 minute */
 | 
						|
#define IOT_BRM_METER_DEMAND_PERIOD_DEF           (15)
 | 
						|
 | 
						|
/* how many settlement dates can be set each month */
 | 
						|
#define IOT_BRM_SUPPORT_MSD_NUM                   (3)
 | 
						|
 | 
						|
/* come from of the data transfer road */
 | 
						|
typedef enum _iot_brm_data_owner {
 | 
						|
    /* data is come from sg app */
 | 
						|
    iot_brm_data_owner_sg_app = 0,
 | 
						|
    /* data is come from rs485 */
 | 
						|
    iot_brm_data_owner_rs485,
 | 
						|
    /* data is come from multifunction rs485 */
 | 
						|
    iot_brm_data_owner_mf_rs485,
 | 
						|
    /* owner limit */
 | 
						|
    iot_brm_data_owner_max,
 | 
						|
} iot_brm_data_owner_t;
 | 
						|
 | 
						|
/* three-phase energy-type meter data structure */
 | 
						|
typedef struct _iot_brm_meter_energy_triphase {
 | 
						|
    /* combined active energy, total ~ rates 1-4, uint is 1/ec kWh */
 | 
						|
    uint32_t ept_comp[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* positive active energy, total ~ rates 1-4, uint is 1/ec kwh */
 | 
						|
    uint32_t ept_pos[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* negative active energy, total ~ rates 1-4, uint is 1/ec kwh */
 | 
						|
    uint32_t ept_neg[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* positive reactive energy, total ~ rates 1-4, uint is  1/ec kvarh */
 | 
						|
    uint32_t eqt_pos[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* negative reactive energy, total ~ rates 1-4, uint is  1/ec kvarh */
 | 
						|
    uint32_t eqt_neg[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* positive apparent energy, total ~ rates 1-4, uint is  1/ec kVAh */
 | 
						|
    uint32_t est_pos[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* negative apparent energy, total ~ rates 1-4, uint is  1/ec kVAh */
 | 
						|
    uint32_t est_neg[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* quad reactive energy, uint is  1/ec kvarh */
 | 
						|
    uint32_t eqt_quad[IOT_BRM_METER_QUAD_4 + 1][IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
} iot_brm_meter_energy_triphase_t;
 | 
						|
 | 
						|
typedef struct _iot_brm_meter_max_demand {
 | 
						|
    /* max demand */
 | 
						|
    uint32_t max_demand;
 | 
						|
    /* max demand time */
 | 
						|
    uint32_t ts;
 | 
						|
} iot_brm_meter_max_demand_t;
 | 
						|
 | 
						|
/* three-phase energy-type meter demand data structure */
 | 
						|
typedef struct _iot_brm_meter_triphase_max_demand {
 | 
						|
    /* max positive active energy demand, total ~ rates 1-4, uint: kw */
 | 
						|
    iot_brm_meter_max_demand_t ept_pos[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* max negative active energy demand, total ~ rates 1-4, uint: kw */
 | 
						|
    iot_brm_meter_max_demand_t ept_neg[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* max positive reactive energy demand, total ~ rates 1-4, uint: kvar */
 | 
						|
    iot_brm_meter_max_demand_t eqt_pos[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* max negative reactive energy demand, total ~ rates 1-4, uint: kvar */
 | 
						|
    iot_brm_meter_max_demand_t eqt_neg[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* max positive apparent energy demand, total ~ rates 1-4, uint: kVA */
 | 
						|
    iot_brm_meter_max_demand_t est_pos[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* max negative apparent energy demand, total ~ rates 1-4, uint: kVA */
 | 
						|
    iot_brm_meter_max_demand_t est_neg[IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
    /* quad reactive energy demand, uint: kvar */
 | 
						|
    iot_brm_meter_max_demand_t
 | 
						|
        eqt_quad[IOT_BRM_METER_QUAD_4 + 1][IOT_BRM_METER_RATE_MAX + 1];
 | 
						|
} iot_brm_meter_triphase_max_demand_t;
 | 
						|
 | 
						|
/* sig-phase energy-type meter data structure */
 | 
						|
typedef  struct  _iot_brm_meter_sigphase_max_demand {
 | 
						|
    /* positive active energy demand, uint: kW */
 | 
						|
    iot_brm_meter_max_demand_t ept_pos;
 | 
						|
    /* negative active energy demand, uint: kW */
 | 
						|
    iot_brm_meter_max_demand_t ept_neg;
 | 
						|
    /* positive reactive energy demand, uint: kvar */
 | 
						|
    iot_brm_meter_max_demand_t eqt_pos;
 | 
						|
    /* negative reactive energy demand, uint: kvar */
 | 
						|
    iot_brm_meter_max_demand_t eqt_neg;
 | 
						|
    /* positive apparent energy, uint: kVAh */
 | 
						|
    iot_brm_meter_max_demand_t est_pos;
 | 
						|
    /* negative apparent energy, uint: kVAh */
 | 
						|
    iot_brm_meter_max_demand_t est_neg;
 | 
						|
    /* quad reactive energy demand, uint: kvar */
 | 
						|
    iot_brm_meter_max_demand_t eqt_quad[IOT_BRM_METER_QUAD_4 + 1];
 | 
						|
} iot_brm_meter_sigphase_max_demand_t;
 | 
						|
 | 
						|
/* sig-phase energy-type meter data structure */
 | 
						|
typedef  struct  _iot_brm_meter_energy_sigphase {
 | 
						|
    /* positive active energy, uint is  1/ec kwh */
 | 
						|
    uint32_t ept_pos;
 | 
						|
    /* negative active energy, uint is  1/ec kwh */
 | 
						|
    uint32_t ept_neg;
 | 
						|
    /* positive reactive energy, uint is  1/ec kvarh */
 | 
						|
    uint32_t eqt_pos;
 | 
						|
    /* negative reactive energy, uint is  1/ec kvarh*/
 | 
						|
    uint32_t eqt_neg;
 | 
						|
    /* positive apparent energy, uint is 1/ec kVAh */
 | 
						|
    uint32_t est_pos;
 | 
						|
    /* negative apparent energy, uint is 1/ec kVAh */
 | 
						|
    uint32_t est_neg;
 | 
						|
    /* quad reactive energy, uint is  1/ec kvarh */
 | 
						|
    uint32_t eqt_quad[IOT_BRM_METER_QUAD_4 + 1];
 | 
						|
} iot_brm_meter_energy_sigphase_t;
 | 
						|
 | 
						|
/* variable-type meter data structure */
 | 
						|
typedef struct _iot_brm_meter_var {
 | 
						|
     /* EC constant */
 | 
						|
    uint16_t    ec;
 | 
						|
    /* power line frequency, uint is 0.01Hz */
 | 
						|
    uint16_t    freq;
 | 
						|
    /* temperature, uint is 0.1 centigrade */
 | 
						|
    int16_t     temperature;
 | 
						|
    /* humidity, unit is 0.1 %RH */
 | 
						|
    int16_t     humidity;
 | 
						|
    /* voltage angle between phaseA and phaseB. unit: 1degrees */
 | 
						|
    int16_t     angle_ua_ub;
 | 
						|
    /* voltage angle between phaseA and phaseC. unit: 1degrees */
 | 
						|
    int16_t     angle_ua_uc;
 | 
						|
    /* voltage angle between phaseB and phaseC. unit: 1degrees */
 | 
						|
    int16_t     angle_ub_uc;
 | 
						|
    /* voltage RMS, uint is 0.1V */
 | 
						|
    uint16_t    v[IOT_BRM_PHASE_C];
 | 
						|
    /* phase current RMS, uint is 0.001A */
 | 
						|
    int32_t     i[IOT_BRM_PHASE_C];
 | 
						|
    /* N line current RMS, uint is 0.001A */
 | 
						|
    int32_t     i_n;
 | 
						|
    /* high-precision phase current RMS, uint is 0.00001A */
 | 
						|
    int32_t     i_high[IOT_BRM_PHASE_C];
 | 
						|
    /* active power, uint is 0.0001 KW */
 | 
						|
    int32_t     p[IOT_BRM_PHASE_MAX];
 | 
						|
    /* high-precision active power RMS, uint is 0.000001 KW */
 | 
						|
    int32_t     p_high[IOT_BRM_PHASE_MAX];
 | 
						|
    /* reactive power, uint is 0.0001 Kvar */
 | 
						|
    int32_t     q[IOT_BRM_PHASE_MAX];
 | 
						|
    /* high-precision reactive power RMS, uint is 0.000001 Kvar */
 | 
						|
    int32_t     q_high[IOT_BRM_PHASE_MAX];
 | 
						|
    /* apparent power, uint is 0.0001 KVA */
 | 
						|
    int32_t     s[IOT_BRM_PHASE_MAX];
 | 
						|
    /* high-precision apparent power RMS, uint is 0.000001 KVA */
 | 
						|
    int32_t     s_high[IOT_BRM_PHASE_MAX];
 | 
						|
    /* power factor, uint is 0.001 */
 | 
						|
    int16_t     pf[IOT_BRM_PHASE_MAX];
 | 
						|
    /* voltage and current phase angle, uint is 0.1 degrees*/
 | 
						|
    uint16_t    ui_anglep[IOT_BRM_PHASE_C];
 | 
						|
    /* quadrant of current work */
 | 
						|
    uint8_t     quad[IOT_BRM_PHASE_MAX];
 | 
						|
} iot_brm_meter_var_t;
 | 
						|
 | 
						|
/* node sampling data structure */
 | 
						|
typedef struct {
 | 
						|
    /* voltage, uint is 0.1V */
 | 
						|
    uint16_t    v[IOT_BRM_PHASE_C];
 | 
						|
    /* current, uint is 0.001A */
 | 
						|
    int32_t     i[IOT_BRM_PHASE_C];
 | 
						|
    /* active power, uint is 0.1W */
 | 
						|
    int32_t     p[IOT_BRM_PHASE_MAX];
 | 
						|
    /* N-line current, uint is 0.001A  */
 | 
						|
    int32_t     i_n;
 | 
						|
    /* meter time difference uint is 1s */
 | 
						|
    int32_t     tm_diff;
 | 
						|
    /* meter time */
 | 
						|
    iot_time_tm_t tm;
 | 
						|
    /* number of opening covers */
 | 
						|
    uint32_t    open_cover_n;
 | 
						|
    /* meter time difference is valid or not, 0 - invalid, 1 - valid */
 | 
						|
    uint8_t     tm_diff_valid      : 1,
 | 
						|
    /* meter time difference is state,  see IOT_BRM_READ_METER_XXX */
 | 
						|
                tm_state           : 2,
 | 
						|
    /* correct time is start,  see IOT_BRM_CORRECT_TIME_XXX */
 | 
						|
                correct_time_state : 2,
 | 
						|
    /* correct time retry number, only 698.45 meter valid */
 | 
						|
                retry_cnt          : 3;
 | 
						|
    /* status words */
 | 
						|
    uint16_t    words[PROTO_645_07_MAX_STATUS_WORDS_INDEX];
 | 
						|
    /* flag to mark if the power information is updated */
 | 
						|
    uint32_t    p_update           : 1,
 | 
						|
    /* reserved for further use */
 | 
						|
                rsvd               : 31;
 | 
						|
} iot_brm_node_samp_t;
 | 
						|
 | 
						|
/* max min voltage recording formats */
 | 
						|
typedef struct {
 | 
						|
    /* voltage, uint is 0.1v */
 | 
						|
    uint16_t v;
 | 
						|
    /* time of occurrence mix or min */
 | 
						|
    uint32_t ts;
 | 
						|
} iot_brm_max_min_v_t;
 | 
						|
 | 
						|
/* max min current recording formats */
 | 
						|
typedef struct {
 | 
						|
    /* current, uint is 0.001A */
 | 
						|
    int32_t i;
 | 
						|
    /* time of occurrence mix or min */
 | 
						|
    uint32_t ts;
 | 
						|
} iot_brm_max_min_i_t;
 | 
						|
 | 
						|
/* day statistical infomation recording formats */
 | 
						|
typedef struct {
 | 
						|
    /* The state of max voltage */
 | 
						|
    iot_brm_max_min_v_t max_v[IOT_BRM_PHASE_C];
 | 
						|
    /* The state of min voltage */
 | 
						|
    iot_brm_max_min_v_t min_v[IOT_BRM_PHASE_C];
 | 
						|
    /* The state of max current */
 | 
						|
    iot_brm_max_min_i_t max_i[IOT_BRM_PHASE_C];
 | 
						|
    /* The state of min current */
 | 
						|
    iot_brm_max_min_i_t min_i[IOT_BRM_PHASE_C];
 | 
						|
} iot_brm_meter_day_stat_info_t;
 | 
						|
 | 
						|
/* meter info structure */
 | 
						|
typedef struct  _iot_brm_meter_info {
 | 
						|
    /* voltage ratio */
 | 
						|
    uint32_t  v_ratio;
 | 
						|
    /* current ratio */
 | 
						|
    uint32_t  i_ratio;
 | 
						|
    /* current coefficient unit: 0.0001 */
 | 
						|
    uint32_t i_ratio_coeff;
 | 
						|
    /* variable-type meter data */
 | 
						|
    iot_brm_meter_var_t var;
 | 
						|
    /* three-phase total energy data structure*/
 | 
						|
    iot_brm_meter_energy_triphase_t e_t;
 | 
						|
    /* sig-phase energy metering data, A/B/C */
 | 
						|
    iot_brm_meter_energy_sigphase_t e_s[IOT_BRM_PHASE_C];
 | 
						|
    /* meter day statistical infomation recording formats */
 | 
						|
    iot_brm_meter_day_stat_info_t day_stat;
 | 
						|
    /* total three-phase total energy max demand data structure*/
 | 
						|
    iot_brm_meter_triphase_max_demand_t e_t_max_demand;
 | 
						|
    /* sig-phase energy metering max demand data, A/B/C */
 | 
						|
    iot_brm_meter_sigphase_max_demand_t e_s_max_demand[IOT_BRM_PHASE_C];
 | 
						|
} iot_brm_meter_info_t;
 | 
						|
 | 
						|
/* define curve config structure */
 | 
						|
typedef struct _iot_brm_curve_cfg {
 | 
						|
    /* flag to mark if "rec_start" valid */
 | 
						|
    uint16_t rec_start_valid : 1,
 | 
						|
    /* flag to mark if "interval" valid */
 | 
						|
             interval_valid  : 1,
 | 
						|
    /* reserved for further use */
 | 
						|
             rsvd            : 14;
 | 
						|
    /* starting base time of curve record */
 | 
						|
    iot_time_tm_t rec_start;
 | 
						|
    /* interval of curve recording, uint is 1s */
 | 
						|
    uint16_t interval;
 | 
						|
} iot_brm_curve_cfg_t;
 | 
						|
 | 
						|
/* define terminal config structure */
 | 
						|
typedef struct _iot_brm_terminal_cfg {
 | 
						|
    /* terminal communication port number, see PROTO_PORT_RS485_X. */
 | 
						|
    uint8_t  trans_port         :2,
 | 
						|
    /* terminal type, if 0: 3761 terminal, 1: 698 terminal. */
 | 
						|
             is_698             :1,
 | 
						|
    /* reserved for further use. */
 | 
						|
             rsvd               :5;
 | 
						|
    /* 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;
 | 
						|
} iot_brm_terminal_cfg_t;
 | 
						|
 | 
						|
#pragma pack(push)  /* save the pack status */
 | 
						|
#pragma pack(1)     /* 1 byte align */
 | 
						|
 | 
						|
/* node info descriptor */
 | 
						|
typedef struct _iot_brm_node_info {
 | 
						|
    /* node addr */
 | 
						|
    uint8_t  addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* node porto type, see IOT_BRM_PROTO_TYPE_XXX */
 | 
						|
    uint8_t  proto_type : 3,
 | 
						|
    /* node port, see IOT_BRM_PORT_XXX */
 | 
						|
             port       : 3,
 | 
						|
    /* reserved for further use */
 | 
						|
             rsvd       : 2;
 | 
						|
    /* PT ratio, uint is x1 */
 | 
						|
    uint8_t  v_ratio;
 | 
						|
    /* CT ratio, uint is x1 */
 | 
						|
    uint16_t i_ratio;
 | 
						|
    /* assembly number */
 | 
						|
    uint8_t  ass_pos : 6,
 | 
						|
    /* reserved for further use */
 | 
						|
             rsvd2   : 2;
 | 
						|
    /* node baud */
 | 
						|
    uint32_t baud;
 | 
						|
    /* TODO: adding more information */
 | 
						|
} iot_brm_node_info_t;
 | 
						|
 | 
						|
typedef struct _iot_brm_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,
 | 
						|
                degree_4_rsvd : 4;
 | 
						|
} iot_brm_location_unit_t;
 | 
						|
 | 
						|
/* node information entry descriptor */
 | 
						|
typedef struct iot_brm_pm_node_entry {
 | 
						|
    /* node address */
 | 
						|
    uint8_t   addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* protocol type, see IOT_BRM_PROTO_TYPE_XXX */
 | 
						|
    uint16_t  proto_type : 4,
 | 
						|
    /* port type. see IOT_BRM_PORT_XXX */
 | 
						|
              port       : 3,
 | 
						|
    /* baud rate id */
 | 
						|
              bid        : 4,
 | 
						|
    /* creator of node, see IOT_BRM_OPERATOR_XXX */
 | 
						|
              creator    : 2,
 | 
						|
    /* reserved for further use */
 | 
						|
              rsvd       : 3;
 | 
						|
    /* current transformer ratio of node, uint is x1 */
 | 
						|
    uint16_t  i_ratio;
 | 
						|
    /* voltage transformer ratio of node, uint is x1 */
 | 
						|
    uint8_t   v_ratio;
 | 
						|
    /* assembly number */
 | 
						|
    uint8_t  ass_pos : 6,
 | 
						|
    /* reserved for future */
 | 
						|
             rsvd1   : 2;
 | 
						|
    /* reserved for further use */
 | 
						|
    uint8_t   rsvd2[19];
 | 
						|
} iot_brm_nv_node_entry_t;
 | 
						|
 | 
						|
/* convert ntb to ms. in HW, the ntb clock freq is 25 mhz. */
 | 
						|
#define IOT_BRM_NTB_TO_MS(ntb)             ((ntb) / (25 * 1000))
 | 
						|
/* convert ms to ntb. in HW, the ntb clock freq is 25 mhz. */
 | 
						|
#define IOT_BRM_MS_TO_NTB(ms)              ((ms) * (25 * 1000))
 | 
						|
 | 
						|
#pragma pack(pop)
 | 
						|
 | 
						|
#if IOT_BRM_ENABLE
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_data_print() - print data, format is hex.
 | 
						|
 * @param str:    a short string to be printed before data
 | 
						|
 * @param buf:    buffer contain data to be printed
 | 
						|
 * @param len:    length of data in the buffer
 | 
						|
 */
 | 
						|
void iot_brm_data_print(const char* str, uint8_t* buf, uint32_t len);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_post_msg() - post messages to brm app queue
 | 
						|
 * @param msg_type: message type, see IOT_BRM_MSG_TYPE_XXXX.
 | 
						|
 * @param msg_id:   message id, see IOT_BRM_MSG_ID_XXXX.
 | 
						|
 * @param prio:     message prio, see IOT_BRM_MSG_QUEUE_XXXX.
 | 
						|
 * @param data:     data pointer carried by message
 | 
						|
 * @param data2:    integer data carried by messages
 | 
						|
 */
 | 
						|
void iot_brm_post_msg(uint16_t msg_type, uint16_t msg_id,
 | 
						|
    uint8_t prio, void *data, uint32_t data2);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_clean_msg() - clean messages in brm app queue.
 | 
						|
 * @param msg_type: message type, see IOT_BRM_MSG_TYPE_XXXX.
 | 
						|
 * @param msg_id:   message id, see IOT_BRM_MSG_ID_XXXX
 | 
						|
 */
 | 
						|
void iot_brm_clean_msg(uint16_t msg_type, uint16_t msg_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_calc_nw_snr() - calculate new snr
 | 
						|
 * @param orig_snr: orig snr
 | 
						|
 * @param new_snr:  new snr
 | 
						|
 * @retval current snr
 | 
						|
 */
 | 
						|
int8_t iot_brm_calc_nw_snr(int8_t orig_snr, int8_t new_snr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_send_mr_cmd() - send meter reading message to PLC.
 | 
						|
 * @param dest_addr:  destination address.
 | 
						|
 * @param sn:         seq number to be used by message.
 | 
						|
 * @param proto_type: proto type of messages, see IOT_BRM_PROTO_TYPE_XXXX
 | 
						|
 * @param data:       point to the content of meter reading message.
 | 
						|
 * @param len:        length of meter reading message.
 | 
						|
 * @param ppm_fix:    current transmission PPM fix value.
 | 
						|
 */
 | 
						|
void iot_brm_send_mr_cmd(uint8_t *dest_addr, uint16_t sn,
 | 
						|
    uint8_t proto_type, uint8_t *data, uint16_t len, int8_t ppm_fix);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_send_mr_cmd() - load meter info data.
 | 
						|
 * @retval: pointer to meter info.
 | 
						|
 */
 | 
						|
iot_brm_meter_info_t *iot_brm_load_meter_info(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_data_handler() - handle data massage.
 | 
						|
 * @param pkt:       data packet.
 | 
						|
 * @param recv_from: where is the data from, see iot_brm_data_owner_t
 | 
						|
 */
 | 
						|
void iot_brm_data_handler(iot_pkt_t *pkt, iot_brm_data_owner_t recv_from);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_node_add() - adding nodes.
 | 
						|
 * @param addr: node address, little Endian.
 | 
						|
 * @param prot: prot type. see IOT_BRM_PORT_XXX
 | 
						|
 * @param proto_type: node protocol type, see IOT_BRM_PROTO_TYPE_645_XXX.
 | 
						|
 * @param baud: node baud rate.
 | 
						|
 * @param i_ratio: pointer to current ratio.
 | 
						|
 * @param v_ratio: pointer to voltage ratio.
 | 
						|
 * @param pos:     assembly number.
 | 
						|
 * @param operator: operator, see IOT_BRM_OPERATOR_XXX.
 | 
						|
 * @retval ERR_OK - for success case, othersie - error code.
 | 
						|
 */
 | 
						|
uint8_t iot_brm_node_add(uint8_t *addr, uint8_t prot,
 | 
						|
    uint8_t proto_type, uint32_t baud, uint16_t *i_ratio, uint8_t *v_ratio,
 | 
						|
    uint8_t *pos, uint8_t operator);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_node_rm() - delete node.
 | 
						|
 * @param addr: the address of the node to be deleted, little Endian.
 | 
						|
 */
 | 
						|
void iot_brm_node_rm(uint8_t *addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_node_rm_by_creator() - delete all nodes of the specified
 | 
						|
 *        creator.
 | 
						|
 * @param bm_creator: bitmap for creator of node,
 | 
						|
 *                    mean of bit see IOT_BRM_OPERATOR_XXX
 | 
						|
 * @retval: node cnt.
 | 
						|
 */
 | 
						|
void iot_brm_node_rm_by_creator(uint8_t bm_creator);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_data_init() - initialize branch management app data.
 | 
						|
 */
 | 
						|
void iot_brm_data_init(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_dev_addr() - get device address.
 | 
						|
 * @addr: return device address, little Endian.
 | 
						|
 */
 | 
						|
void iot_brm_get_dev_addr(uint8_t *addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_set_dev_addr() - set device address.
 | 
						|
 * @addr: src device address, little Endian.
 | 
						|
 */
 | 
						|
void iot_brm_set_dev_addr(uint8_t *addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_node_cnt() - get node cnt.
 | 
						|
 * @retval: node cnt.
 | 
						|
 */
 | 
						|
uint8_t iot_brm_get_node_cnt();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_node_cnt_by_creator() - get node cnt of the specified
 | 
						|
 *        creator.
 | 
						|
 * @param bm_creator: bitmap for creator of node,
 | 
						|
 *                    mean of bit see IOT_BRM_OPERATOR_XXX
 | 
						|
 * @retval: node cnt.
 | 
						|
 */
 | 
						|
uint8_t iot_brm_get_node_cnt_by_creator(uint8_t bm_creator);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_node_info() - iot_brm_get_node_info.
 | 
						|
 * @param start_seq:  node start seq number to be queried.
 | 
						|
 * @param cnt: number of nodes to be queried.
 | 
						|
 * @param info: buffer from node information.
 | 
						|
 * @param info_cnt: info buffer count.
 | 
						|
 * @param bm_creator: bitmap for creator of node,
 | 
						|
 *                    mean of bit see IOT_BRM_OPERATOR_XXX
 | 
						|
 * @retval: number of nodes actually queried.
 | 
						|
 */
 | 
						|
uint8_t iot_brm_get_node_info(uint8_t start_seq, uint8_t cnt,
 | 
						|
    iot_brm_node_info_t *info, uint8_t info_cnt, uint8_t bm_creator);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_find_nv_node() - get node info from nv region.
 | 
						|
 * @param addr: node addr.
 | 
						|
 * @retval: pointer to nv node information.
 | 
						|
 * @retval: null faill.
 | 
						|
 */
 | 
						|
iot_brm_nv_node_entry_t *iot_brm_find_nv_node(uint8_t *addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_node_samp_info() - get samp info of nodes.
 | 
						|
 * @param idx:  node idx.
 | 
						|
 * @retval: return samp info of nodes.
 | 
						|
 */
 | 
						|
iot_brm_node_samp_t *iot_brm_get_node_samp_info(uint8_t idx);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_send_pkt_to_sg_app() - send pkt to sg app.
 | 
						|
 * @param pkt:  pointer to pkt to be sent.
 | 
						|
 */
 | 
						|
void iot_brm_send_pkt_to_sg_app(iot_pkt_t *pkt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_send_resp_pkt() - send response pkt.
 | 
						|
 * @param pkt    :  pointer to pkt to be sent.
 | 
						|
 * @param send_to:  send the pkt back, see iot_brm_data_owner_t.
 | 
						|
 */
 | 
						|
void iot_brm_send_resp_pkt(iot_pkt_t *pkt, iot_brm_data_owner_t send_to);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_rs485_set_check_state() - set 485 bus to enter check state.
 | 
						|
 *        in this state, 485 will not forward SG app and internal meter reading
 | 
						|
 *        message, which is specially used for assembling check.
 | 
						|
 */
 | 
						|
void iot_brm_rs485_set_check_state(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_rs485_send() - send data to 485 bus.
 | 
						|
 * @param pkt: iot_pkt to be send.
 | 
						|
 */
 | 
						|
 void iot_brm_rs485_send(iot_pkt_t *pkt);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_rs485_config_buad_internal() - configure RS485 baud rate and
 | 
						|
 *        protocol type.
 | 
						|
 * @param buad: baud value.
 | 
						|
 * @param proto_type: protocol type, see IOT_BRM_PROTO_TYPE_XXX.
 | 
						|
 */
 | 
						|
void iot_brm_rs485_config_buad_internal(uint32_t buad,
 | 
						|
    uint8_t proto_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_addr_from_message() - get address from message
 | 
						|
 * @param data: message data.
 | 
						|
 * @param len: message data length.
 | 
						|
 * @param addr[out]: the address.
 | 
						|
 * @param proto_type[out]: protocol type, see IOT_BRM_PROTO_TYPE_XXX.
 | 
						|
 * @retuval: if success return ERR_OK, else return ERR_FAIL.
 | 
						|
 */
 | 
						|
uint32_t iot_brm_get_addr_from_message(uint8_t *data,
 | 
						|
    uint16_t len, uint8_t *addr, uint8_t *proto_type);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_baud_to_bid() - convert baud rate to bid.
 | 
						|
 * @param baud: baud rate to be converted.
 | 
						|
 * @retuval: baud id.
 | 
						|
 */
 | 
						|
uint8_t iot_brm_baud_to_bid(uint32_t baud);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_baud_to_bid() - convert baud id to baud.
 | 
						|
 * @param baud: baud id to be converted.
 | 
						|
 * @retuval: baud value.
 | 
						|
 */
 | 
						|
uint32_t iot_brm_bid_to_baud(uint8_t bid);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_set_gps_info() - setting GPS information, longitude
 | 
						|
 *        and latitude.
 | 
						|
 * @param latitude:  pointer to latitude.
 | 
						|
 * @param longitude: pointer to longitude.
 | 
						|
 */
 | 
						|
void iot_brm_set_gps_info(iot_brm_location_unit_t *latitude,
 | 
						|
    iot_brm_location_unit_t *longitude);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_gps_info() - get GPS information, longitude
 | 
						|
 *        and latitude.
 | 
						|
 * @param latitude:  return latitude.
 | 
						|
 * @param longitude: return longitude.
 | 
						|
 */
 | 
						|
void iot_brm_get_gps_info(iot_brm_location_unit_t *latitude,
 | 
						|
    iot_brm_location_unit_t *longitude);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_set_meter_ratio() - set the meetr transformation ratio
 | 
						|
 * @param v_ratio: voltage ratio.
 | 
						|
 * @param i_ratio: current ratio.
 | 
						|
 */
 | 
						|
void iot_brm_set_meter_ratio(uint32_t v_ratio, uint32_t i_ratio);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_send_config_cmd() - set the meter transformation ratio
 | 
						|
 * @param dest_addr: target address to be configuration.
 | 
						|
 * @param band: target band to be configuration.
 | 
						|
 * @param dur: duration for which the configuration takes effect, uint is 1s.
 | 
						|
 * @param is_sta: if set, the target address to be configured is sta
 | 
						|
 */
 | 
						|
void iot_brm_send_config_cmd(uint8_t *dest_addr, uint8_t band,
 | 
						|
    uint8_t dur, uint8_t is_sta);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_set_whitelist_enable() - enable whitelist
 | 
						|
 */
 | 
						|
void iot_brm_set_whitelist_enable();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_set_fb() - set working frequency band
 | 
						|
 * @param band_id: target band to be set, see PLC_LIB_FREQ_BAND_X.
 | 
						|
 */
 | 
						|
void iot_brm_set_fb(uint8_t band_id);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_e_to_proto_645() - cal  energy data then transfer to 645 format
 | 
						|
 * @param e: energy
 | 
						|
 * @param ec:  EC constant.
 | 
						|
 * @param: pointer of target 645 format data
 | 
						|
 * @retuval: lenth of 645 format data
 | 
						|
 */
 | 
						|
uint8_t iot_brm_e_to_proto_645(uint32_t e, uint16_t ec, uint8_t * out_buf);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_plc_state() - get PLC status
 | 
						|
 * @retuval: 0--not joined, 1--joined
 | 
						|
 */
 | 
						|
uint8_t iot_brm_get_plc_state(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_cco_addr() - get PLC cco address
 | 
						|
 * @param addr[out]     cco address
 | 
						|
 */
 | 
						|
uint8_t *iot_brm_get_cco_addr(void);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_sync_node_list_to_sg_app() - synchronize rs485 node to sg app
 | 
						|
 */
 | 
						|
void iot_brm_sync_node_list_to_sg_app();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_send_resp_data() - brm send response data to recv from.
 | 
						|
 * @param data: response data ptr.
 | 
						|
 * @param len:  response data length.
 | 
						|
 * @param send_to: dealwith data recv from, see iot_brm_data_owner_t.
 | 
						|
 */
 | 
						|
void iot_brm_send_resp_data(uint8_t *data, uint32_t len,
 | 
						|
    iot_brm_data_owner_t send_to);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_port_is_exist() - check whether the corresponding port exists
 | 
						|
 * @param port: port number, see IOT_BRM_PORT_XXX.
 | 
						|
 * @retuval: 1  -- exist, 0 -- not.
 | 
						|
 */
 | 
						|
uint8_t iot_brm_port_is_exist(uint8_t port);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_node_is_exist() - check whether the corresponding node exist
 | 
						|
 * @param addr: node addr.
 | 
						|
 * @retuval: 1  -- exist, 0 -- not.
 | 
						|
 */
 | 
						|
uint8_t iot_brm_node_is_exist(uint8_t *addr);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_485_mode_setting() - set 485 slave/master mode.
 | 
						|
 * @param slave_flag: 1 - set 485 slave mode, 0 - set 485 master mode.
 | 
						|
 * @param baudrate: 485 baudrate slave mode.
 | 
						|
 * @param hold_time: 485 slave mode hold time, unit - 1ms.
 | 
						|
 */
 | 
						|
void iot_brm_485_mode_setting(uint8_t slave_flag, uint32_t baudrate,
 | 
						|
    uint32_t hold_time);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_set_curve_cfg() - curve recording configuration.
 | 
						|
 * @param cfg:  pointer to curve record configuration information.
 | 
						|
 * @retval ERR_OK - for success case, othersie - error code
 | 
						|
 */
 | 
						|
uint32_t iot_brm_set_curve_cfg(iot_brm_curve_cfg_t *cfg);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_curve_cfg() - get curve recording configuration info.
 | 
						|
 * @param cfg: 1 - return curve recording configuration info.
 | 
						|
 */
 | 
						|
void iot_brm_get_curve_cfg(iot_brm_curve_cfg_t *cfg);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief iot_brm_get_terminal_cfg() - get terminal configuration info.
 | 
						|
 * @param cfg: return terminal configuration info.
 | 
						|
 * @retval ERR_OK - for success case, ERR_INVAL - no set case.
 | 
						|
 */
 | 
						|
uint8_t iot_brm_get_terminal_cfg(iot_brm_terminal_cfg_t *cfg);
 | 
						|
 | 
						|
/**
 | 
						|
* @brief iot_brm_set_terminal_cfg() - set terminal configuration info.
 | 
						|
* @param cfg: set terminal configuration info.
 | 
						|
* @retval ERR_OK - for success case, othersie - error code
 | 
						|
*/
 | 
						|
uint32_t iot_brm_set_terminal_cfg(iot_brm_terminal_cfg_t *cfg);
 | 
						|
 | 
						|
/**
 | 
						|
* @brief iot_brm_is_brk() - device is breaker.
 | 
						|
* @retval 1 - is breaker, 0 - is not breaker.
 | 
						|
*/
 | 
						|
uint8_t iot_brm_is_brk();
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
* @brief iot_brm_mr_698_get_apdu_sn() - get and update 698 proto seq number.
 | 
						|
* @retval: 698 proto seq number.
 | 
						|
*/
 | 
						|
uint8_t iot_brm_mr_698_get_apdu_sn();
 | 
						|
 | 
						|
/**
 | 
						|
* @brief iot_brm_oneshot_calibration_req() - req oneshot calibration.
 | 
						|
* @param i: calibration current param unit - 0.01A.
 | 
						|
* @param u: calibration voltage param unit - 0.1V.
 | 
						|
* @param ec: EC constant.
 | 
						|
* @param i_rate: current channel transfer rate.
 | 
						|
* @param i_sample: current channel sample resistance value. unit: ohm.
 | 
						|
* @param u_rate: voltage channel transfer rate.
 | 
						|
* @param max_smpl: max sample times.
 | 
						|
* @retval: ERR_OK - success oneshot calibration, others - fail.
 | 
						|
*/
 | 
						|
uint32_t iot_brm_oneshot_calibration_req(uint16_t i, uint16_t u, uint32_t ec,
 | 
						|
    uint32_t i_rate, uint32_t i_sample, uint32_t u_rate, uint16_t max_smpl);
 | 
						|
 | 
						|
/**
 | 
						|
* @brief iot_brm_oneshot_calibration_query() - query oneshot calibration status.
 | 
						|
* @param fail_code: calibration fail code when calibration fail.
 | 
						|
* @retval: calibration status, see  - IOT_BRM_ONESHOT_CALIBRATE_XXX.
 | 
						|
*/
 | 
						|
uint8_t iot_brm_get_oneshot_calibration_status(uint8_t *fail_code);
 | 
						|
 | 
						|
#endif /* IOT_BRM_ENABLE */
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif  /* IOT_BRM_COMMON_H */
 |