250 lines
9.3 KiB
C
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 */
|