inwudriver-weibo/app/mrs/common/mrs_common_power_failure.h

83 lines
3.8 KiB
C

/*
* Copyright (c) CompanyNameMagicTag 2019-2020. All rights reserved.
* Description: MRS COMMON POWER FAILURE handle.
*/
#ifndef __MRS_COMMON_POWER_FAILURE_H__
#define __MRS_COMMON_POWER_FAILURE_H__
#include "mrs_common_plc.h"
#include "soc_mdm_mac.h"
/************************************************************
macro definition
************************************************************/
#define BIT_SIZE 8
#define POWER_FAILURE 1 /* Indicates the event type reported by the STA. The value 1 indicates a power
outage event. */
#define DATA_FIX_SIZE 3
#define DATA_START_TEI_POSITION 1
#define DATA_END_TEI_POSITION 2
#define MRS_US_TO_S_MASK 1000
#define MIN_START_TEI 2
#define RANDOM_MAX_VALUE 200
#define RANDOM_MIN_VALUE 0
#define SEND_INTERVAL 2000
#define CONVERGE_TIME 30
#define SEND_TIMES 10
#define POWER_FAILURE_REPORT_ENABLE 1
#define bit_set(x, i) ((x) = (td_u8)(((1 << (i)) | (x))))
#define bit_get(x, i) (((1 << (i)) & (x)) ? 1 : 0)
/************************************************************
structs
************************************************************/
typedef struct {
td_u8 *power_failure_bitmap; /* Power failure collection bitmap */
td_u16 random_min_value; /* Minimum time when a site is powered off. The unit is millisecond. Default value is 0. */
td_u16 random_max_value; /* Indicates the maximum random reporting time of a power outage site, in milliseconds.
The default value is 200. */
td_u16 send_interval; /* Interval for sending power outage sites, in milliseconds. The default value is 2000. */
td_u8 send_times; /* Indicates the number of power outage packets sent by a power outage site. The default value
is 10. */
td_u8 converge_time; /* Collection wait time, in seconds. The default value is 30. */
td_u16 ack_seq; /* Indicates the sequence number of the ACK message. */
td_bool wait_ack_flag;
td_u8 wait_ack_type;
td_u8 send_report_times; /* Number of times that a power failure occurs. */
td_u8 start_send_time; /* Indicates the number of times that a power failure message is sent when a power failure
occurs. */
td_u8 power_failure_report_enable;
td_bool is_ready_to_send_power_failure;
#if defined(PRODUCT_CFG_PRODUCT_TYPE_CCO)
td_u8 *cco_diff_bitmap; /* The newly reported bitmap is required. */
td_u8 *cco_last_send_bitmap; /* cco Content of the bitmap last reported by the concentrator */
td_u8 cco_wait_erase; /* cco Number of times that data is to be erased */
td_bool cco_erease_bitmap_flag; /* cco Erase the bitmap flag bit. */
td_u8 pad[2]; /* reserved 2 */
#endif
} mrs_power_failure_ctrl_st;
/************************************************************
functions
************************************************************/
td_void mrs_common_power_failure_init(td_void);
mrs_power_failure_ctrl_st *mrs_get_power_failure_ctrl(td_void);
td_void mrs_power_failure_get_others_frame_data(const mrs_meter_event_info *evt_frm);
td_void mrs_power_failure_bit_set(td_u8 *map, td_u16 pos);
td_bool mrs_power_failure_bit_check(const td_u8 *map, td_u16 pos);
td_u16 mrs_calc_min_tei(const td_u8 *bitmap);
td_u16 mrs_calc_max_tei(const td_u8 *bitmap);
td_bool mrs_data_is_all_zero(const td_u8 *map, td_u32 len, td_u8 ch);
#if defined(PRODUCT_CFG_PRODUCT_TYPE_STA) || defined(PRODUCT_CFG_PRODUCT_TYPE_CCO)
td_u32 mrs_handle_power_failure_rejoin_event(td_u8 rejoin_reason);
#endif
#endif