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