174 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			174 lines
		
	
	
		
			6.8 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 CVG_NWM_STA_ZC_H
 | ||
|  | #define CVG_NWM_STA_ZC_H
 | ||
|  | 
 | ||
|  | /* public includes */ | ||
|  | #include "plc_mme_zero_cross.h"
 | ||
|  | #include "plc_cert_test.h"
 | ||
|  | #include "mac_zc_api.h"
 | ||
|  | 
 | ||
|  | /* cvg module internal includes */ | ||
|  | #include "cvg_nwm_sta_common.h"
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | /* zc ntb data */ | ||
|  | typedef struct cvg_nwm_sta_zc_data { | ||
|  |     uint32_t ntb[PLC_PHASE_CNT]; | ||
|  |     float period[PLC_PHASE_CNT]; | ||
|  |     uint8_t phase_cnt; | ||
|  | } cvg_nwm_sta_zc_data_t; | ||
|  | 
 | ||
|  | #if (PLC_SUPPORT_STA_ROLE && PLC_SUPPORT_PHY_PHASE_IDENT)
 | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief cvg_nwm_sta_get_zc_ntb() - get sta local zc ntb data. | ||
|  |  * @param nwm:         pointer to nwm | ||
|  |  * @param zc_data:     zc ntb data | ||
|  |  */ | ||
|  | uint32_t cvg_nwm_sta_get_zc_ntb(cvg_nwm_vdev_t *nwm, | ||
|  |     cvg_nwm_sta_zc_data_t *zc_data); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief cvg_nwm_sta_zc_3p_check() - local 3p device zc check. | ||
|  |  * @param nwm:         pointer to nwm | ||
|  |  */ | ||
|  | void cvg_nwm_sta_zc_3p_check(cvg_nwm_vdev_t *nwm); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief cvg_nwm_sta_fill_ntb_diff_val() - fill ntb diff value from mac report. | ||
|  |  * @param nwm:           pointer to nwm | ||
|  |  * @param std_ntb:       returns the standard NTB of the zero-crossing | ||
|  |  *                       difference sequence, uint is 256 NTB. | ||
|  |  * @param ntb_diff_val:  pointer to the buffer to fill in ntb diff value | ||
|  |  * @param mac_rpt:       point to the mac report zero-cross ntb values | ||
|  |  * @param phase_cnt      if needed, get every phase zero-cross ntb value count | ||
|  |  * @param real_ntb_size  calculated real zero-cross ntb size | ||
|  |  * @param max_phase      how many phase ntb values need to fill to ntb_diff_val | ||
|  |  * @param ntb_diff_cnt   point to the ntb diff value count, it will be the | ||
|  |  *                       output param and return the ntb diff value count | ||
|  |  * @param phase_mask:    phase to be masked off, bit 0~2 corresponds to | ||
|  |  *                       phase 1/2/3 of device. | ||
|  |  */ | ||
|  | uint32_t cvg_nwm_sta_fill_ntb_diff_val(cvg_nwm_vdev_t *nwm, uint32_t *std_ntb, | ||
|  |     ntb_diff_value_t *ntb_diff_val, mac_zc_ntb_rpt_t *mac_rpt, | ||
|  |     uint8_t *phase_cnt, uint16_t *real_ntb_size, | ||
|  |     uint8_t max_phase, uint8_t *ntb_diff_cnt, uint8_t phase_mask); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief cvg_nwm_sta_fill_ntb_diff_val_gd() - fill ntb diff value, apply to | ||
|  |  *                                             guangdong protocol | ||
|  |  * @param nwm:           pointer to nwm | ||
|  |  * @param std_ntb:       returns the standard NTB of the zero-crossing | ||
|  |  *                       difference sequence, uint is 1 NTB. | ||
|  |  * @param ntb_diff_val:  pointer to the buffer to fill in ntb diff value | ||
|  |  * @param mac_rpt:       point to the mac report zero-cross ntb values | ||
|  |  * @param phase_cnt      if needed, get every phase zero-cross ntb value count | ||
|  |  * @param real_ntb_size  calculated real zero-cross ntb size | ||
|  |  * @param max_phase      how many phase ntb values need to fill to ntb_diff_val | ||
|  |  * @param ntb_diff_cnt   point to the ntb diff value count, it will be the | ||
|  |  *                       output param and return the ntb diff value count | ||
|  |  * @param phase_mask:    phase to be masked off, bit 0~2 corresponds to | ||
|  |  *                       phase 1/2/3 of device. | ||
|  |  */ | ||
|  | uint32_t cvg_nwm_sta_fill_ntb_diff_val_gd(cvg_nwm_vdev_t *nwm, uint32_t *std_ntb, | ||
|  |     uint16_t *ntb_diff_val, mac_zc_ntb_rpt_t *mac_rpt, | ||
|  |     uint8_t *phase_cnt, uint16_t *real_ntb_size, | ||
|  |     uint8_t max_phase, uint8_t *ntb_diff_cnt, uint8_t phase_mask); | ||
|  | 
 | ||
|  | #if PLC_SUPPORT_TSFM_ZC_NTB
 | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief cvg_nwm_sta_area_notify_ntb_rpt_calc() - calculate the local device | ||
|  |  * physical phase and zc ntb info by the area notify zc ntb report of the CCO | ||
|  |  * sent. | ||
|  |  * @param nwm:         pointer to nwm | ||
|  |  * @param nw_info:     pointer to network info | ||
|  |  * @param zc_ntb_rpt:  area notify zc ntb report | ||
|  |  */ | ||
|  | void cvg_nwm_sta_area_notify_ntb_rpt_calc(cvg_nwm_vdev_t *nwm, | ||
|  |     cvg_nwm_sta_nw_info_t *nw_info, | ||
|  |     mme_area_notify_zc_ntb_report_header_t *zc_ntb_rpt); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief cvg_nwm_sta_calc_nw_zc_ntb() - calculate zc ntb info in the current | ||
|  |  * statistics period. | ||
|  |  * @param nw_info:         pointer to network info | ||
|  |  */ | ||
|  | void cvg_nwm_sta_calc_nw_zc_ntb(cvg_nwm_sta_nw_info_t *nw_info); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief cvg_nwm_sta_calc_all_nw_zc_ntb() - calculate all network zc ntb info | ||
|  |  * in the current statistics period. | ||
|  |  * @param nwm:             pointer to nwm | ||
|  |  */ | ||
|  | void cvg_nwm_sta_calc_all_nw_zc_ntb(cvg_nwm_vdev_t *nwm); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief cvg_nwm_sta_clear_zc_ntb() - clear zc ntb info. | ||
|  |  * @param nw_info:         pointer to network info | ||
|  |  */ | ||
|  | void cvg_nwm_sta_clear_zc_ntb(cvg_nwm_sta_nw_info_t *nw_info); | ||
|  | 
 | ||
|  | /*
 | ||
|  |  * @brief cvg_nwm_sta_zc_check_sn_rec() - check if this is a duplicate zc ntb | ||
|  |  * tsfm report frame. | ||
|  |  * @param nw_info:         pointer to network info | ||
|  |  * @param sn:              zc ntb collection sn | ||
|  |  * @param edge:            zc edge type | ||
|  |  * @param from_app:        from app call | ||
|  |  * | ||
|  |  * @retval:                return non-zero if it is a duplicate frame. | ||
|  |  */ | ||
|  | uint8_t cvg_nwm_sta_zc_check_sn_rec(cvg_nwm_sta_nw_info_t *nw_info, uint8_t sn, | ||
|  |     uint8_t edge, uint8_t from_app); | ||
|  | 
 | ||
|  | #else /* PLC_SUPPORT_TSFM_ZC_NTB */
 | ||
|  | 
 | ||
|  | #define cvg_nwm_sta_area_notify_ntb_rpt_calc(nwm, nw_info, zc_ntb_rpt)
 | ||
|  | #define cvg_nwm_sta_calc_nw_zc_ntb(nw_info)
 | ||
|  | #define cvg_nwm_sta_calc_all_nw_zc_ntb(nwm)
 | ||
|  | #define cvg_nwm_sta_clear_zc_ntb(nw_info)
 | ||
|  | #define cvg_nwm_sta_zc_check_sn_rec(nw_info, sn, edge, from_app) (0)
 | ||
|  | 
 | ||
|  | #endif /* PLC_SUPPORT_TSFM_ZC_NTB */
 | ||
|  | 
 | ||
|  | #else /* PLC_SUPPORT_STA_ROLE && PLC_SUPPORT_PHY_PHASE_IDENT */
 | ||
|  | 
 | ||
|  | #define cvg_nwm_sta_get_zc_ntb(nwm, zc_data) (ERR_NOSUPP)
 | ||
|  | #define cvg_nwm_sta_fill_ntb_diff_val(nwm, std_ntb, ntb_diff_val, mac_rpt, \
 | ||
|  |     phase_cnt, real_ntb_size, max_phase, ntb_diff_cnt, phase_mask) (ERR_NOSUPP) | ||
|  | #define cvg_nwm_sta_fill_ntb_diff_val_gd(nwm, std_ntb, ntb_diff_val, mac_rpt, \
 | ||
|  |     phase_cnt, real_ntb_size, max_phase, ntb_diff_cnt, phase_mask) (ERR_NOSUPP) | ||
|  | #define cvg_nwm_sta_area_notify_ntb_rpt_calc(nwm, nw_info, zc_ntb_rpt)
 | ||
|  | #define cvg_nwm_sta_calc_nw_zc_ntb(nw_info)
 | ||
|  | #define cvg_nwm_sta_calc_all_nw_zc_ntb(nwm)
 | ||
|  | #define cvg_nwm_sta_clear_zc_ntb(nw_info)
 | ||
|  | #define cvg_nwm_sta_zc_3p_check(nwm)
 | ||
|  | #define cvg_nwm_sta_zc_check_sn_rec(nw_info, sn, edge, from_app) (0)
 | ||
|  | 
 | ||
|  | #endif /* PLC_SUPPORT_STA_ROLE && PLC_SUPPORT_PHY_PHASE_IDENT */
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif /* CVG_NWM_STA_ZC_H */
 |