130 lines
4.6 KiB
C
130 lines
4.6 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 _MAC_ZC_API_H_
|
||
|
#define _MAC_ZC_API_H_
|
||
|
|
||
|
#include "os_types.h"
|
||
|
#include "iot_pkt.h"
|
||
|
#include "plc_protocol.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* mac zc PLC rise edge */
|
||
|
#define MAC_ZC_PLC_EDGE_RISE 0
|
||
|
/* mac zc PLC fall edge */
|
||
|
#define MAC_ZC_PLC_EDGE_FALL 1
|
||
|
/* mac zc hw default capture PLC rise edge */
|
||
|
#define MAC_ZC_PLC_EDGE_DFT MAC_ZC_PLC_EDGE_RISE
|
||
|
/* mac zc default id */
|
||
|
#define MAC_ZC_DEFAULT_ID 0
|
||
|
|
||
|
/* mac zc phase event id */
|
||
|
typedef enum _mac_zc_collect_event {
|
||
|
/* indicate the phase status not changed */
|
||
|
MAC_ZC_EVENT_NONE = 0,
|
||
|
/* indicate the phase status from power active to power stop */
|
||
|
MAC_ZC_EVENT_PHASE_LOSS,
|
||
|
/* indicate the phase status from power stop to power active */
|
||
|
MAC_ZC_EVENT_PHASE_RESTORE,
|
||
|
/* mac zc collect max event id */
|
||
|
MAC_ZC_EVENT_MAX,
|
||
|
} mac_zc_collect_event_t;
|
||
|
|
||
|
/* zero-cross ntb report format. as we are not using packed struct, so we need
|
||
|
* to make sure all members in this struct are 4 bytes aligned.
|
||
|
*/
|
||
|
typedef struct _mac_zc_ntb_rpt {
|
||
|
/* number of phases zero cross NTB collected */
|
||
|
uint32_t phase_cnt :2,
|
||
|
/* ntb array total count */
|
||
|
ntb_cnt :16,
|
||
|
/* indicate phase a/b/c is valid */
|
||
|
phase_a_valid :1,
|
||
|
phase_b_valid :1,
|
||
|
phase_c_valid :1,
|
||
|
/* indicate ntb array full period or half period
|
||
|
* 1: full period; 0: half period
|
||
|
* TODO: may be expand into data alignment mode
|
||
|
*/
|
||
|
is_full_period :1,
|
||
|
/* indicate repeat phase connect */
|
||
|
is_repeat_phase :1,
|
||
|
/* phase A repeat with which phase, refer to PLC_PHASE_XXX */
|
||
|
phase_a_repeat :2,
|
||
|
/* phase B repeat with which phase, refer to PLC_PHASE_XXX */
|
||
|
phase_b_repeat :2,
|
||
|
/* phase C repeat with which phase, refer to PLC_PHASE_XXX */
|
||
|
phase_c_repeat :2,
|
||
|
/* reserved */
|
||
|
rsvd0 :3;
|
||
|
/* current system ac average period, unit: ntb */
|
||
|
uint32_t avg_period[PLC_PHASE_CNT];
|
||
|
/* ntb array */
|
||
|
uint32_t ntb[0];
|
||
|
} mac_zc_ntb_rpt_t;
|
||
|
|
||
|
#if MAC_ZC_ENABLE
|
||
|
/*
|
||
|
* @brief mac_zc_is_power_collapsed() - get zc power collapsed
|
||
|
* @param pdev_id : whick pdev to get power status
|
||
|
* @return 0: power not collapsed, 1: power collapsed.
|
||
|
*/
|
||
|
uint8_t mac_zc_is_power_collapsed(uint8_t pdev_id);
|
||
|
|
||
|
/*
|
||
|
* @brief start mac layer zero-cross ntb collection. the result will
|
||
|
* be delivered back to cvg layer
|
||
|
* @param pdev_id: which pdev to be collected
|
||
|
* @param vdev_id: which vdev to be collected
|
||
|
* @param pkt: pointer to an iot_pkt_t pointer that holds zc ntb raw data
|
||
|
* @param cnt: number of consecutive zero-cross ntb to be collected.
|
||
|
* @param is_full_period: flag to mark if it is collecting full period.
|
||
|
* @param nid: target network id, 0: means local network id
|
||
|
* @param ntb_ptr: pointer to target historical zc ntb that needs to be
|
||
|
* collected, NULL: means collecting real-time zc ntb.
|
||
|
*
|
||
|
* @retval: 0 - for success case
|
||
|
* othersie - error code
|
||
|
*/
|
||
|
uint32_t mac_start_zc_ntb_collect(uint8_t pdev_id, uint8_t vdev_id,
|
||
|
iot_pkt_t **pkt, uint16_t cnt, uint8_t is_full_period, uint32_t nid,
|
||
|
uint32_t *ntb_ptr);
|
||
|
#else
|
||
|
#define mac_zc_is_power_collapsed(pdev_id) (0); \
|
||
|
do {\
|
||
|
(void)pdev_id; \
|
||
|
} while(0)
|
||
|
|
||
|
#define mac_start_zc_ntb_collect(pdev_id, vdev_id, pkt, cnt, is_full_period, \
|
||
|
nid, ntb_ptr) (ERR_NOSUPP); \
|
||
|
do {\
|
||
|
(void)pdev_id; \
|
||
|
(void)vdev_id; \
|
||
|
(void)pkt; \
|
||
|
(void)cnt; \
|
||
|
(void)is_full_period; \
|
||
|
(void)nid; \
|
||
|
(void)ntb_ptr;\
|
||
|
} while(0)
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif //_MAC_ZC_API_H_
|