212 lines
8.3 KiB
C
Executable File
212 lines
8.3 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 _INCLUDE_IOT_BRM_ADP_H_
|
|
#define _INCLUDE_IOT_BRM_ADP_H_
|
|
|
|
#define IOT_EM_REPORT_EVENT_RECORD_MAX (5) /* Report 5 event records at a time. */
|
|
#define IOT_EM_REPORT_LOAD_RECORD_MAX (5) /* Report 5 load records at a time. */
|
|
|
|
#define IOT_BRM_RECORD_PHASE (3) /* record three phase data. */
|
|
#define IOT_BRM_RECORD_PHASE_MAX (4) /* record three phase and total data. */
|
|
|
|
#define IOT_BRM_FSM_REQ_CFM_CNT (3)
|
|
|
|
/* Event of plug-in device and our brm. */
|
|
typedef enum _iot_dm_event_e {
|
|
/* Customer event start. Customer care about those events. */
|
|
DM_EVENT_DEV_POWER_ON = 0x0,/* Device power on. I > I(standby). */
|
|
DM_EVENT_DEV_POWER_OFF = 0x1,/* Device power off. I <= I(standby). */
|
|
DM_EVENT_DEV_WORK_START = 0x2,/* Device start working. I > I(work). */
|
|
DM_EVENT_DEV_WORK_STOP = 0x3,/* Device stop working. I <= I(work). */
|
|
DM_EVENT_DEV_TRAP_START = 0x4,/* Device work in trap. P > P(trap). */
|
|
DM_EVENT_DEV_TRAP_STOP = 0x5,/* Device restore from trap. P <= P(trap). */
|
|
/* Customer event end. */
|
|
|
|
DM_EVENT_INVALID
|
|
} iot_dm_event_e;
|
|
|
|
/* State of plug-in device. */
|
|
typedef enum _iot_dm_dev_state_e {
|
|
/* No device plug into our brm. */
|
|
DM_STATE_DEV_OFFLINE = 0x00,
|
|
/* Device plug into our brm, staying in standby. */
|
|
DM_STATE_DEV_STANDBY = 0x01,
|
|
/* Device plug into our brm, working right. */
|
|
DM_STATE_DEV_WORKING = 0x02,
|
|
/* Device plug into our brm, running in trouble. */
|
|
DM_STATE_DEV_TRAPING = 0x03,
|
|
|
|
DM_STATE_DEV_MAX = 0x0F
|
|
} iot_dm_dev_state_e;
|
|
|
|
/* Seconds have passed since 1970, Reference Unix time.*/
|
|
typedef uint32_t iot_brm_time_t;
|
|
|
|
/* Item of each reported load record. */
|
|
typedef struct _iot_brm_load_record_item_t {
|
|
uint16_t event; /* Event type. see iot_dm_event_e. */
|
|
uint16_t v[IOT_BRM_RECORD_PHASE]; /* Voltage, uint is 0.1V. */
|
|
int32_t i[IOT_BRM_RECORD_PHASE]; /* Electrical current, uint is 0.001A. */
|
|
int32_t p[IOT_BRM_RECORD_PHASE_MAX]; /* Active power, uint is 0.0001 KW. */
|
|
uint16_t f[IOT_BRM_RECORD_PHASE_MAX]; /* Power factor, uint is 0.001. */
|
|
uint32_t w; /* Work(meter bottom value), uint is 0.0001 KWH. */
|
|
} iot_brm_load_record_t;
|
|
|
|
/* Item of each reported event record. */
|
|
typedef struct _iot_brm_event_record_item_t {
|
|
uint32_t state; /* State type. see iot_dm_dev_state_e*/
|
|
iot_brm_time_t time; /* Load record timestamp.*/
|
|
iot_brm_load_record_t rcd_data; /* load record. */
|
|
} iot_brm_event_record_t;
|
|
|
|
/* The device state of energy meter adapter. Reference to iot_dm_dev_state_e. */
|
|
typedef uint8_t brm_adp_dev_state_e;
|
|
|
|
/* The device finite state machine handle. */
|
|
typedef brm_adp_dev_state_e(*brm_adp_dev_fsm_handle_t)(uint32_t event,
|
|
iot_brm_event_record_t *p_event_record);
|
|
|
|
/* Threshold data. */
|
|
typedef struct _iot_brm_threshold_t {
|
|
int32_t i_standby; /* Current threshold for standby.*/
|
|
int32_t i_work; /* Current threshold for working.*/
|
|
int32_t p_trap; /* Power threshold for runing in trap.*/
|
|
} iot_brm_threshold_t;
|
|
|
|
/* The table of device finite state machine handle. */
|
|
typedef struct _brm_adp_dev_fsm_table_t {
|
|
brm_adp_dev_fsm_handle_t *handle;
|
|
} brm_adp_dev_fsm_table_t;
|
|
|
|
/* Energy meter adapter device finite state machine. */
|
|
typedef struct _brm_adp_dev_fsm_t {
|
|
/* Previous state */
|
|
brm_adp_dev_state_e prev_state;
|
|
/* Current state */
|
|
brm_adp_dev_state_e cur_state;
|
|
/* The table of device finite state machine handle */
|
|
brm_adp_dev_fsm_table_t table;
|
|
/* counter of request to change state */
|
|
uint16_t chg_req_cnt;
|
|
/* bitmap of request to change state */
|
|
uint16_t chg_req_bitmp;
|
|
} brm_adp_dev_fsm_t;
|
|
|
|
/* The energy meter adapter context. */
|
|
typedef struct _brm_adp_context_t {
|
|
/* Device finite state machine. */
|
|
brm_adp_dev_fsm_t dev_fsm;
|
|
/* Threshold saved in local. */
|
|
iot_brm_threshold_t threshold;
|
|
/* Meter bottom value saved in local, WH. */
|
|
uint32_t meter_bottom_val;
|
|
/* PLC network status: 0--not joined, 1--joined*/
|
|
uint16_t link_ready;
|
|
/* flag to indicate whether already send event report once joining nw*/
|
|
uint16_t evt_on_join;
|
|
} brm_adp_context_t;
|
|
|
|
/* Event record command, used by response operation.
|
|
* Response query event record of the day on timestamp.
|
|
*/
|
|
typedef struct _iot_brm_adp_cmd_event_record_resp_t {
|
|
uint32_t start_idx; /* Record start index. */
|
|
uint32_t record_num; /* Number of records reported. */
|
|
iot_brm_event_record_t record_buf[0]; /* Buffer that stores records. */
|
|
} iot_brm_adp_cmd_event_record_resp_t;
|
|
|
|
/* Process corresponding event for device finite state machine.
|
|
* Compare ADC data with threshold, trigger event,
|
|
* call process state function.
|
|
*/
|
|
void iot_brm_adp_fsm_event_process(void);
|
|
|
|
/* load the energy meter adapter threshold value. */
|
|
uint8_t iot_brm_adp_threshold_load(void);
|
|
|
|
/**
|
|
* @brief iot_brm_adp_get_threshold() - get threshold.
|
|
* @retval : return the threshold.
|
|
*/
|
|
iot_brm_threshold_t *iot_brm_adp_get_threshold(void);
|
|
|
|
/**
|
|
* @brief iot_brm_adp_save_threshold() - save the energy meter adapter
|
|
* threshold value..
|
|
* @param threshold : the threshold to save.
|
|
*/
|
|
void iot_brm_adp_threshold_save(iot_brm_threshold_t *threshold);
|
|
|
|
/* load the energy meter adapter bottom value. */
|
|
uint8_t iot_brm_adp_bottom_val_load(void);
|
|
|
|
/* @brief iot_brm_adp_bottom_val_save() - save the energy meter adapter
|
|
* bottom value.
|
|
* @param bottom_val: the bottom value to save.
|
|
*/
|
|
void iot_brm_adp_bottom_val_save(uint32_t bottom_val);
|
|
|
|
/**
|
|
* @brief iot_brm_get_adp_evt_entry_size() - get event record entry size.
|
|
* @retval : return event record entry size.
|
|
*/
|
|
uint8_t iot_brm_get_adp_evt_entry_size(void);
|
|
|
|
/**
|
|
* @brief iot_brm_adp_evt_save() - record adp eventing data.
|
|
* @param p_evt_rec: adp eventing record data.
|
|
*/
|
|
void iot_brm_adp_evt_save(iot_brm_event_record_t *p_evt_rec);
|
|
|
|
/**
|
|
* @brief iot_brm_read_adp_evt_daily_cnt() - get event record count by time.
|
|
* @param ts : find record event time
|
|
* @retval : return event record count.
|
|
*/
|
|
uint8_t iot_brm_read_adp_evt_daily_cnt(uint32_t ts);
|
|
|
|
/**
|
|
* @brief iot_brm_adp_evt_load() - load record adp eventing data.
|
|
* @param ts : find record event time
|
|
* @param start_inx : find record event time start index
|
|
* @param cnt : find record event time count from start index
|
|
* @param pkt : adp event record data.
|
|
* @retval : response event data count.
|
|
*/
|
|
uint8_t iot_brm_adp_evt_load(uint32_t ts, uint8_t start_inx, uint8_t cnt,
|
|
iot_pkt_t **pkt);
|
|
|
|
/**
|
|
* @brief iot_brm_adp_evt_load() - load the latest event record from flash.
|
|
* @param pkt : adp event record data.
|
|
* @retval : 0--no err, 1--err.
|
|
*/
|
|
uint8_t iot_brm_adp_latest_evt_load(iot_pkt_t **pkt);
|
|
|
|
/**
|
|
* @brief iot_brm_adp_load_data() - load record adp load data.
|
|
* @param ts : find record load start time
|
|
* @param cnt : find record load count from ts
|
|
* @param pkt : adp load record data.
|
|
* @retval : response load data count.
|
|
*/
|
|
uint8_t iot_brm_adp_load_data(uint32_t ts, uint8_t cnt, iot_pkt_t **pkt);
|
|
|
|
/* Initialize the energy meter adapter module. */
|
|
uint32_t iot_brm_adp_init(void);
|
|
|
|
#endif /* _INCLUDE_IOT_BRM_ADP_H_ */
|