/**************************************************************************** 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_EVT_H #define __IOT_BRM_EVT_H #include "iot_brm_config.h" #ifdef __cplusplus extern "C" { #endif /* define the maximum threshold data length for events */ #define IOT_BRM_EVT_THR_DATA_MAX_LEN 32 /* define voltage threshold range for under voltage check, unit is 0.1V, * see DL/T645-2007-14 */ #define IOT_BRM_EVT_UV_THR_V_MIM 1540 /* 220V * 70% */ #define IOT_BRM_EVT_UV_THR_V_MAX 1980 /* 220V * 90% */ /* define check delay time range for under voltage, unit is 1s, * see DL/T645-2007-14. */ #define IOT_BRM_EVT_UV_THR_TIME_MIN 10 #define IOT_BRM_EVT_UV_THR_TIME_MAX 99 /* define voltage threshold range for over voltage check, unit is 0.1V, * see DL/T645-2007-14 */ #define IOT_BRM_EVT_OV_THR_V_MIM 2420 /* 220V * 110% */ #define IOT_BRM_EVT_OV_THR_V_MAX 2860 /* 220V * 130% */ /* define check delay time range for over voltage, unit is 1s, * see DL/T645-2007-14. */ #define IOT_BRM_EVT_OV_THR_TIME_MIN 10 #define IOT_BRM_EVT_OV_THR_TIME_MAX 99 /* define voltage threshold range for phase failure check, unit is 0.1V, * see DL/T645-2007-14 */ #define IOT_BRM_EVT_PF_THR_V_MIM 1200 /* 220V * 50% */ #define IOT_BRM_EVT_PF_THR_V_MAX 1540 /* 220V * 70% */ /* define voltage threshold range for phase failure check, unit is 0.0001A, * see DL/T645-2007-14 */ #define IOT_BRM_EVT_PF_THR_I_MIM 8000 /* 160A * 0.5% */ #define IOT_BRM_EVT_PF_THR_I_MAX 32000 /* 160A * 2% */ /* define check delay time range for phase failure, unit is 1s, * see DL/T645-2007-14. */ #define IOT_BRM_EVT_PF_THR_TIME_MIN 10 #define IOT_BRM_EVT_PF_THR_TIME_MAX 99 /* define current threshold range for over current check, unit is 0.1A, * see DL/T645-2007-14 */ #define IOT_BRM_EVT_OI_THR_I_MIN 656 /* 125A * 1.05 * 0.5 */ #define IOT_BRM_EVT_OI_THR_I_MAX 12600 /* 800A * 1.05 * 1.5 */ /* define check delay time range for over current, unit is 1s, * see DL/T645-2007-14. */ #define IOT_BRM_EVT_OI_THR_TIME_MIN 10 #define IOT_BRM_EVT_OI_THR_TIME_MAX 99 /* define rate threshold range for voltage unbalance check, unit is 0.01%, * see DL/T645-2007-14 */ #define IOT_BRM_EVT_UBV_THR_RATE_MIN 1000 /* 10.00% */ #define IOT_BRM_EVT_UBV_THR_RATE_MAX 9000 /* 90.00% */ /* define check delay time range for voltage unbalance, unit is 1s, * see DL/T645-2007-14. */ #define IOT_BRM_EVT_UBV_THR_TIME_MIN 10 #define IOT_BRM_EVT_UBV_THR_TIME_MAX 99 #if (IOT_BRM_ENABLE) /* define event id */ typedef enum { iot_brm_evt_id_switch_trip = 14, /* breaker switching trip */ iot_brm_evt_id_switch_on = 15, /* breaker switching on */ iot_brm_evt_id_uv_a = 17, /* A phase under voltage */ iot_brm_evt_id_ov_a = 18, /* A phase over voltage */ iot_brm_evt_id_oi_a = 20, /* A phase over current */ iot_brm_evt_id_pf_a = 23, /* A phase phase failure */ iot_brm_evt_id_uv_b = 33, /* B phase under voltage */ iot_brm_evt_id_ov_b = 34, /* B phase over voltage */ iot_brm_evt_id_oi_b = 36, /* B phase over current */ iot_brm_evt_id_pf_b = 39, /* B phase phase failure */ iot_brm_evt_id_uv_c = 49, /* C phase under voltage */ iot_brm_evt_id_ov_c = 50, /* C phase over voltage */ iot_brm_evt_id_oi_c = 52, /* C phase over current */ iot_brm_evt_id_pf_c = 55, /* C phase phase failure */ iot_brm_evt_id_meter_chge = 62, /* meter add and delete event */ iot_brm_evt_id_qd = 63, /* qiedian event */ iot_brm_evt_id_unbalance_v = 66, /* unbalance of voltage */ iot_brm_evt_id_unbalance_i = 67, /* unbalance of current */ iot_brm_evt_id_pd = 69, /* power down event */ iot_brm_evt_adp_id = 76, /* brm_adp status change event */ iot_brm_evt_id_max = 100, } iot_brm_evt_id_t; #pragma pack(push) /* save the pack status */ #pragma pack(1) /* 1 byte align */ /* define event common thresholds */ typedef struct _iot_brm_evt_common_thr { /* The stability threshold is event occurrence */ uint8_t stable_thr_enter; /* stability threshold for event exit */ uint8_t stable_thr_exit; } iot_brm_evt_common_thr_t; /* threshold parameters data */ typedef struct _iot_brm_evt_thr { /* event common threshold structure */ iot_brm_evt_common_thr_t comm_thr; /* save event private threshold data */ uint8_t thr_data[IOT_BRM_EVT_THR_DATA_MAX_LEN]; } iot_brm_evt_thr_t; /* qiedian event private thresholds */ typedef struct _iot_brm_evt_qd_pri_thr { /* current threshold for qiedian event occurrence, uint is 0.001A */ int32_t enter_i_thr; /* current threshold for qiedian event exit, uint is 0.001A */ int32_t exit_i_thr; } iot_brm_evt_qd_pri_thr_t; /* threshold parameters of qiedian event */ typedef struct _iot_brm_evt_qd_thr { /* common thresholds */ iot_brm_evt_common_thr_t comm_thr; /* qiedian event private thresholds */ iot_brm_evt_qd_pri_thr_t pri_thr; } iot_brm_evt_qd_thr_t; /* under voltage event private thresholds */ typedef struct _iot_brm_evt_under_voltage_pri_thr { /* voltage threshold for under voltage event, uint is 0.1V */ uint16_t v_thr; } iot_brm_evt_uv_pri_thr_t; /* threshold parameters of under voltage event */ typedef struct _iot_brm_evt_under_voltage_thr { /* common thresholds */ iot_brm_evt_common_thr_t comm_thr; /* under voltage event private thresholds */ iot_brm_evt_uv_pri_thr_t pri_thr; } iot_brm_evt_uv_thr_t; /* over voltage event private thresholds */ typedef struct _iot_brm_evt_over_voltage_pri_thr { /* voltage threshold for over voltage event, uint is 0.1V */ uint16_t v_thr; } iot_brm_evt_ov_pri_thr_t; /* threshold parameters of over voltage event */ typedef struct _iot_brm_evt_ov_thr { /* common thresholds */ iot_brm_evt_common_thr_t comm_thr; /* over voltage event private thresholds */ iot_brm_evt_ov_pri_thr_t pri_thr; } iot_brm_evt_ov_thr_t; /* over current event private thresholds */ typedef struct _iot_brm_evt_over_current_pri_thr { /* current threshold for over current event, uint is 0.1A */ uint16_t i_thr; } iot_brm_evt_oi_pri_thr_t; /* threshold parameters of over current event */ typedef struct _iot_brm_evt_over_current_thr { /* common thresholds */ iot_brm_evt_common_thr_t comm_thr; /* over current event private thresholds */ iot_brm_evt_oi_pri_thr_t pri_thr; } iot_brm_evt_oi_thr_t; /* phase failure event private thresholds */ typedef struct _iot_brm_evt_phase_failure_pri_thr { /* voltage threshold for phase failure event, uint is 0.1V */ uint16_t v_thr; /* current threshold for phase failure event, uint is 0.0001A */ int32_t i_thr; } iot_brm_evt_pf_pri_thr_t; /* threshold parameters of phase failure event */ typedef struct _iot_brm_evt_pf_thr { /* common thresholds */ iot_brm_evt_common_thr_t comm_thr; /* phase failure event private thresholds */ iot_brm_evt_pf_pri_thr_t pri_thr; } iot_brm_evt_pf_thr_t; /* voltage or current unbalance event private thresholds */ typedef struct _iot_brm_evt_unbalance_pri_thr { /* voltage or current unbalance rate threshold for current unbalance event, * uint is 0.01%. */ uint16_t rate_thr; } iot_brm_evt_unbalance_pri_thr_t; /* threshold parameters of current unbalance event */ typedef struct _iot_brm_evt_unbalance_thr { /* common thresholds */ iot_brm_evt_common_thr_t comm_thr; /* voltage or current unbalance event private thresholds */ iot_brm_evt_unbalance_pri_thr_t pri_thr; } iot_brm_evt_unbalance_thr_t; #pragma pack(pop) /* event information descriptor */ typedef struct { /* flag to mark if the event happens, but it hasn't been handled yet */ uint8_t pend; /* event occurrence count */ uint32_t cnt; /* event add counter */ uint8_t add_cnt; } iot_brm_evt_info_t; /** * @brief iot_brm_evt_init() - event initialization * @param id: event id, see iot_brm_evt_id_t. * @param thr: pointer to threshold data, if is NULL, default threshold * parameters are used. * @param rpt_en: 1 - enable report, 0 - not. * @retval ERR_OK -- for success case. * @retval othersie -- error code. */ uint8_t iot_brm_evt_init(iot_brm_evt_id_t id, void *thr, uint8_t rpt_en); /** * @brief iot_brm_evt_status_load() - event status load according to the last * record * @param id: event id, see iot_brm_evt_id_t. */ void iot_brm_evt_status_load(iot_brm_evt_id_t id); /** * @brief iot_brm_evt_set() - set event to prepare reporting * @param id: event id, see iot_brm_evt_id_t. */ void iot_brm_evt_set(iot_brm_evt_id_t id); /** * @brief iot_brm_evt_timeout() - event periodic hadnling function */ void iot_brm_evt_timeout(void); /** * @brief iot_brm_evt_get_info() - get events info. * @param id: event id, see iot_brm_evt_id_t. * @param info: return events info. * @retval ERR_OK -- for success case. * @retval othersie -- error code. */ uint8_t iot_brm_evt_get_info(iot_brm_evt_id_t id, iot_brm_evt_info_t *info); /** * @brief iot_brm_evt_set_thr() - setting threshold parameters for events * @param id: event id, see iot_brm_evt_id_t. * @param thr: pointer to threshold data. * @retval ERR_OK -- for success case. * @retval othersie -- error code. */ uint8_t iot_brm_evt_set_thr(iot_brm_evt_id_t id, void *thr); /** * @brief iot_brm_evt_clear_pend() - clear pending event status if it is set. * @param id: event id, see iot_brm_evt_id_t. */ void iot_brm_evt_clear_pend(iot_brm_evt_id_t id); /** * @brief iot_brm_evt_get_thr() - get threshold data for events * @param id: event id, see iot_brm_evt_id_t. * @param thr: pointer to threshold data. * @retval: pointer to threshold data. */ uint8_t *iot_brm_evt_get_thr(iot_brm_evt_id_t id); /** * @brief iot_brm_evt_get_comm_thr() - get comm threshold data for events * @param id: event id, see iot_brm_evt_id_t. * @retval: pointer to event common thresholds. */ iot_brm_evt_common_thr_t *iot_brm_evt_get_comm_thr(iot_brm_evt_id_t id); /** * @brief iot_brm_evt_cmd() - enable or disable event check * @param id: event id, see iot_brm_evt_id_t. * @param en: 1 - enable, 0 - disable. */ void iot_brm_evt_cmd(iot_brm_evt_id_t id, uint8_t en); /** * @brief iot_brm_evt_get_is_en() - judge event enable or disable * @param id: event id, see iot_brm_evt_id_t. * @retval: 1 - enable, 0 - disable. */ uint8_t iot_brm_evt_get_is_en(iot_brm_evt_id_t id); /** * @brief: iot_brm_evt_qd_check() - check for qiedian event. */ void iot_brm_evt_qd_check(void); #if IOT_BRM_METER_RUN_EVT_CHECK_EN /** * @brief: iot_brm_evt_switch_change_check() - check for switch trip / on event. */ void iot_brm_evt_switch_change_check(void); /** * @brief: iot_brm_evt_meter_run_evt_check() - check for meter run event, * please call it once every second . */ void iot_brm_evt_meter_run_evt_check(void); #else /* IOT_BRM_METER_RUN_EVT_CHECK_EN */ #define iot_brm_evt_switch_change_check() #define iot_brm_evt_meter_run_evt_check() #endif /* IOT_BRM_METER_RUN_EVT_CHECK_EN */ /** * @brief: iot_brm_evt_node_chge_check() - check for meter node change event. */ void iot_brm_evt_node_chge_check(void); /** * @brief: iot_brm_evt_pd_check() - check for power down event. * @param is_down: 1 - power down, 0 - power on. */ void iot_brm_evt_pd_check(uint8_t is_down); #endif /* IOT_BRM_ENABLE */ #ifdef __cplusplus } #endif #endif /* __IOT_BRM_EVT_H */