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_
							 |