Files
kunlun/app/bsrm/iot_bsrm.h
2024-09-28 14:24:04 +08:00

250 lines
9.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 IOT_BSRM_H
#define IOT_BSRM_H
/* os shim includes */
#include "os_types_api.h"
#include "os_timer_api.h"
#include "iot_rtc_api.h"
#include "proto_645.h"
#include "iot_task_api.h"
#include "iot_uart_api.h"
#include "iot_io_api.h"
#include "iot_ipc_api.h"
#include "iot_plc_msg_api.h"
#include "iot_bsrm_rec.h"
#ifdef __cplusplus
extern "C" {
#endif
#if IOT_BSRM_MODE
/* define branch signal recognition module message queue count and priorities,
* the higer the priority, the lower the queue number.
*/
#define IOT_BSRM_MSG_QUEUE_HP (0)
#define IOT_BSRM_MSG_QUEUE_LP (1)
#define IOT_BSRM_MSG_QUEUE_MAX_PRIO (2)
/* message type definition */
/* messages from branch signal recognition module interface */
#define IOT_BSRM_MSG_TYPE_UART (1)
/* messages from period timer */
#define IOT_BSRM_MSG_TYPE_TIMER (2)
/* messages from bsrm internal */
#define IOT_BSRM_MSG_TYPE_INTERNAL (3)
/* messages from sg app */
#define IOT_BSRM_MSG_TYPE_SG_APP (4)
/* branch signal recognition module type message id definition */
/* message delivered from branch signal recognition module */
#define IOT_BSRM_MSG_ID_UART_DATA (1)
/* message delivered from period timer */
#define IOT_BSRM_MSG_ID_TIMER_PERIOD (1)
/* message check mr from timer on master mode */
#define IOT_BSRM_MSG_ID_TIMER_CHECK_MR (2)
/* SG_APP type message id definition */
/* messages from SG APP */
#define IOT_BSRM_MSG_ID_SG_APP (1)
/* handle branch signal recognition module data state */
/* idle state */
#define IOT_BSRM_MR_STATE_IDLE (0)
/* ready handle breaker data state */
#define IOT_BSRM_MR_STATE_READY (1)
/* report measure data to breaker */
#define IOT_BSRM_MR_GET_ADDR (2)
/* sync tm */
#define IOT_BSRM_MR_STATE_SYNC_TIME (3)
#define IOT_BSRM_MR_STATE_EVT_NODIF (4)
#define IOT_BSRM_MR_STATE_FWD (5)
#define IOT_BSRM_MR_STATE_SYNC_CUR_RATIO_COEFF (6)
#define IOT_BSRM_MR_STATE_PM_UPGRADE (7)
/* sync cur ratio coeff status */
#define IOT_BSRM_SYNC_CUR_COEFF_IDLE (0)
#define IOT_BSRM_SYNC_CUR_COEFF_DOING (1)
#define IOT_BSRM_SYNC_CUR_COEFF_DONE (2)
/* sync cur ration coeff max count */
#define IOT_BSRM_SYNC_CUR_COEFF_MAX_CNT (5)
/* synchro time idle status */
#define IOT_BSRM_SYNC_TIME_STATE_IDLE (0)
/* synchro time ymd status */
#define IOT_BSRM_SYNC_TIME_STATE_YMD (1)
/* synchro time hms status */
#define IOT_BSRM_SYNC_TIME_STATE_HMS (2)
/* recv hw_tsfm info */
#define IOT_BSRM_MSG_ID_INTERNAL_HW_TSFM (1)
/* recv internal event msg */
#define IOT_BSRM_MSG_ID_INTERNAL_EVENT_INTERRUPT (2)
/* recv hw_tsfm record clear msg */
#define IOT_BSRM_MSG_ID_INTERNAL_BR_REC_CLEAR (3)
#define IOT_BSRM_CHECK_ZC_STATUS_IDLE (0)
#define IOT_BSRM_CHECK_ZC_STATUS_GOING (1)
#define IOT_BSRM_CHECK_ZC_STATUS_DONE (2)
#define IOT_BSRM_CHECK_ZC_TIMEOUT (3)
#define IOT_BSRM_CHECK_EVENT_STATUS_IDLE (0)
#define IOT_BSRM_CHECK_EVENT_STATUS_DOING (1)
#define IOT_BSRM_CHECK_EVENT_STATUS_DONE (2)
/* extend branch signal recognition module message */
typedef struct _iot_bsrm_msg {
/* iot task message */
iot_task_msg_t task_msg;
/* pointer to message data */
void *data;
/* another data field */
uint32_t data2;
} iot_bsrm_msg_t;
/* function check status */
typedef struct _iot_bsrm_check_zc_ctrl {
/* zero cross test status, see IOT_BSRM_CHECK_ZC_STATUS_XXX */
uint8_t status;
/* zero cross circuit bitmap:
* bit0 - phase A, bit1 - phase B, bit2 - phase C,
* bit3 - phase A ext, bit4 - phase B ext, bit5 - phase C ext
*/
uint8_t zc_bm;
/* bitmap for zero cross circuit check is started, set to 1 when the gpio
* interrupt is triggered:
* bit0 - phase A, bit1 - phase B, bit2 - phase C,
* bit3 - phase A ext, bit4 - phase B ext, bit5 - phase C ext
*/
uint8_t started_zc_bm;
/* timestamp at start */
uint32_t start_ts;
/* the gpio tick at the last trigger interrupt for each zc circuit */
uint32_t pre_tick[2 * IOT_PLC_PHASE_CNT];
/* total time during check for each zc circuit, unit is 1us */
uint32_t total_time[2 * IOT_PLC_PHASE_CNT];
/* gpio interrupt trigger count during check */
uint32_t trig_cnt[2 * IOT_PLC_PHASE_CNT];
/* period for each zero cross circuit */
uint32_t period[2 * IOT_PLC_PHASE_CNT];
} iot_bsrm_check_zc_ctrl_t;
/* function check event status */
typedef struct _iot_bsrm_check_event_ctrl {
uint8_t status;
/* check times, unit: 1/s */
uint8_t times;
/* event interrupt count */
uint8_t count;
} iot_bsrm_check_event_ctrl_t;
/* function check status */
typedef struct _iot_bsrm_check_ctrl {
iot_bsrm_check_zc_ctrl_t zc_ctrl;
iot_bsrm_check_event_ctrl_t event;
} iot_bsrm_check_ctrl_t;
/* br record fragment response control structure */
typedef struct {
/* flag to mark if fragment response is startup */
uint8_t start_up;
/* oi of fragment response */
uint16_t oi;
/* current sequence numbere */
uint16_t seq;
/* fragment response window countdown, uint is 1s */
uint16_t life_cd;
/* last response recode start tm */
iot_time_tm_t start_tm;
/* last response recode end tm */
iot_time_tm_t end_tm;
} iot_bsrm_br_rec_frag_ctrl_t;
/* extend branch signal recognition module global descriptor */
typedef struct _iot_bsrm_global {
/* extend branch signal recognition module task configuration */
iot_task_config_t task_cfg;
/* extend branch signal recognition module task handle */
iot_task_h task_h;
/* periodic timer */
timer_id_t periodic_timer;
/* handle of registered IPC */
iot_ipc_h ipc_h;
/* timer for check addr and tm */
timer_id_t mr_timer;
/* branch signal recognition module uart handle*/
iot_uart_h handle;
/* address, little endian */
uint8_t addr[IOT_MAC_ADDR_LEN];
/* correct time */
iot_time_tm_t correct_tm;
/* buffer is used to cache protocol data */
uint8_t proto_buff[PROTO_645_MAX_PKT_LEN];
/* read addr pend flag */
uint8_t mr_addr_pend : 1,
/* addr is valid */
addr_valid : 1,
/* sync tm status */
sync_tm_state : 2,
/* sync time done */
sync_tm_done : 1,
/* reserved for further use */
rsvd : 3;
/* mr time interval, unit: 1s */
uint32_t mr_tm_interval;
/* iot_pkt to be forwarded */
iot_pkt_t *fwd_pkt;
/* read meter data status on master mode */
uint8_t mr_status;
/* request tm and address count on master mode */
uint8_t req_cnt;
/* event data count */
uint8_t data_cnt;
/* store event entries */
uint8_t *evt_buf;
/* event trigger record time*/
uint32_t evt_trig_cd;
/* retry current ratio coefficient sync count */
uint8_t coeff_sync_cnt;
/* flag to mark if the event will be notified */
uint8_t evt_nodify_pend : 1,
/* event notification try count */
evt_nodify_try_cnt : 4,
/* current ratio coefficient sync status see: IOT_BSRM_SYNC_CUR_COEFF_XXX */
cur_coeff_sync_sts : 2,
/* reserved for further use */
rsvd1 : 1;
/* bsrm session mode */
uint8_t session_mode;
/* test status */
iot_bsrm_check_ctrl_t check_crtl;
/* br result record buffer */
iot_bsrm_branch_info_entry_t br_rec_buf;
/* br result record countdown */
uint8_t br_rec_cd;
/* br record fragment response control structure */
iot_bsrm_br_rec_frag_ctrl_t br_rec_frag_ctrl;
} iot_bsrm_global_t;
#endif /* IOT_BSRM_MODE */
#ifdef __cplusplus
}
#endif
#endif /* IOT_BSRM_H */