212 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			212 lines
		
	
	
		
			8.3 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 _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_ */
 |