/**************************************************************************** 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 __PHY_PERF_H #define __PHY_PERF_H #include "os_types.h" #include "iot_config.h" #ifdef __cplusplus extern "C" { #endif /* define the csi buf length */ #define IOT_PHY_CSI_BUF_LEN (2048) /* define the power buf length */ #define IOT_PHY_PWR_BUF_LEN (512) /* define the detect buf length */ #define IOT_PHY_DETECT_BUF_LEN (1024) #define IOT_SPUR_8M_CENTER_TONE (327) #define IOT_SPUR_8M_CMP_THD (10) #define IOT_SPUR_3M_CENTER_TONE (123) #define IOT_SPUR_3M_CMP_THD (10) #define IOT_SPUR_2M_CENTER_TONE (82) #define IOT_SPUR_2M_CMP_THD (10) #define PHY_CHN_EST_AI_CERT_RTY_CNT (20) /* Define the number of PLC channel pre estimation analysis, which occurs during * phy initialization and reinitialization. */ #if (PHY_BBAI_ALGORITHM == PHY_BBAI_SLIDE_WINDOWS) #define PHY_CHN_EST_AI_RTY_CNT (30) #else #define PHY_CHN_EST_AI_RTY_CNT (50) #endif #define PHY_CHN_EST_AI_TIMEOUT (2000) #if PHY_HW_SPIKE_OPTIMIZATION /* the phy_chn_nf_update function takes 118ms to execute twice. */ #define PHY_CHN_EST_NF_UPDATE_PERIOD_MS (118) #else /* near 22ms(if use 192 point nf) for each cycle, and 25ms with enough margin */ #define PHY_CHN_EST_NF_UPDATE_PERIOD_MS (25) #endif #define PHY_SPIKE_FIND_THD (12) #define PHY_FORCE_SPIKE_CHECK (1) #define PHY_BB_AI_WITH_PULSE_CHECK_EN (0) #define PHY_AGC_MIN_GAIN (-24) #define PHY_CHN_HIGH_NOISE_NF_THD (90) #define PHY_CHN_PKT_DET_THD1_DFT (8) #define PHY_CHN_PKT_DET_THD2_DFT (16) #if PHY_BBAI_ALGORITHM == PHY_BBAI_FIX_WINDOWS /* near 7.3ms for each cycle, calibrate with 10ms with enough margin */ #define PHY_CHN_EST_AI_PERIOD_MS (10) #else /* near 15.6ms for each cycle, calibrate with 20ms with enough margin */ #define PHY_CHN_EST_AI_PERIOD_MS (20) #endif /* define the frequece of spike, convert to the number of tones */ #define PHY_SK_DEF_TONE_NUM 0 #define PHY_SK_100K_TONE_NUM 4 #define PHY_SK_150K_TONE_NUM 6 #define PHY_SK_200K_TONE_NUM 8 #define PHY_SK_250K_TONE_NUM 10 #define PHY_SK_300K_TONE_NUM 12 #define PHY_SK_350K_TONE_NUM 14 #define PHY_SK_400K_TONE_NUM 16 #define PHY_SK_450K_TONE_NUM 18 #define PHY_SK_500K_TONE_NUM 20 #define PHY_SK_550K_TONE_NUM 23 //22 #define PHY_SK_600K_TONE_NUM 25 #define PHY_SK_650K_TONE_NUM 27 /** *@brief phy_anti_spur_set. * * special config for spur certification test. * *@param bw_id [band id.] *@exception [none.] *@return [none.] */ void phy_anti_spur_set(int8_t bw_id); /** *@brief phy_anti_spur_set_clr. * * clear special config for spur certification test. * *@param bw_id [band id.] *@exception [none.] *@return [none.] */ void phy_anti_spur_set_clr(); /** *@brief phy_anti_pulse_set. * * special config for pulse certification test. * *@param [none.] *@exception [none.] *@return [none.] */ void phy_anti_pulse_set(); /** *@brief phy_anti_pulse_set_clr. * * clear special config for pulse certification test. * *@param [none.] *@exception [none.] *@return [none.] */ void phy_anti_pulse_set_clr(); /** *@brief phy_perf_common_init. * * gain table and notch filter default config initialize. * *@param bw_id [none.] *@exception [none.] *@return [none.] */ void phy_perf_common_init(void); /** *@brief phy_chn_est_cb. * cert specail detect, delete in the future. *@param band_id [band id] *@param chn_ptr [phy_chn_est_t structue pointer] *@exception [none.] *@return [ERR_OK or ERR_FAIL.] */ uint32_t phy_chn_est_cb(uint32_t band_id, void *chn_ptr); /** *@brief phy_chn_spike_check. * * check if spike detect or not. * *@param bw_id [none.] *@exception [none.] *@return [none.] */ void phy_chn_spike_check(void); /** *@brief phy_chn_nf_update. * * update each point noise floor. * *@param need_fix_gain [wheather need fix gain.] *@exception [none.] *@return [none.] */ void phy_chn_nf_update(uint8_t need_fix_gain); /** *@brief phy_chan_est_flag_clear. * * clear all channel estimate flag for band switch. * *@param [none.] *@exception [none.] *@return [none.] */ void phy_chan_est_flag_clear(void); /** *@brief phy_chn_est_ai_period_ms_get. * * get phy channel bbai each cycle period. * *@param [none.] *@exception [none.] *@return [period counter, unit:ms.] */ uint32_t phy_chn_est_ai_period_ms_get(void); /** *@brief phy_pkt_thd_set. * * set pkt detect threshold depend on scenario. * *@param percent [from 0 to 100.] *@exception [none.] *@return [ERR_OK or ERR_FAIL.] */ uint32_t phy_pkt_thd_set(uint8_t percent); /** *@brief phy_spike_check_set. * * spike check set. * *@param seg_pwr_en [segment power enable.] *@param seg_pwr_mask_en [segment power mask enable.] *@param coeff [coeff.] *@exception [none.] *@return [none.] */ void phy_spike_check_set(uint8_t seg_pwr_en, \ uint8_t seg_pwr_mask_en, uint8_t coeff); /** *@brief phy_acc_seg_pwr_en_set. *@param en [en = 0 to 0xff] *@exception [none.] *@return [none.] */ void phy_acc_seg_pwr_en_set(uint8_t en); /** *@brief phy_acc_normal_coeff_set. *@param coeff [coeff.] *@exception [none.] *@return [none.] */ void phy_acc_normal_coeff_set(uint8_t coeff); /** *@brief phy_acc_seg_pwr_mask_en. *@param en [1: enable, 0: disable.] *@exception [none.] *@return [none.] */ void phy_acc_seg_pwr_mask_en(uint8_t en); /** *@brief phy_acc_seg_pwr_mask_thr. *@param thrd [seg pwr threshhold.] *@exception [none.] *@return [none.] */ void phy_acc_seg_pwr_mask_thr(uint8_t thrd); /** *@brief phy_acc_seg_pwr_mask_sel. *@param sel [seg pwr select.] *@exception [none.] *@return [none.] */ void phy_acc_seg_pwr_mask_sel(uint8_t sel); /** *@brief phy_impuse_cancel_mode_set. *@param mode [impuse cancel mode.] *@exception [none.] *@return [none.] */ void phy_impuse_cancel_mode_set(uint8_t mode); /** *@brief phy_impuse_cancel_clip_ratio_set. *@param ratio [clip ratio.] *@exception [none.] *@return [none.] */ void phy_impuse_cancel_clip_ratio_set(uint8_t ratio); /** *@brief phy_impuse_cancel_blank_ratio_set. *@param ratio [blank ratio.] *@exception [none.] *@return [none.] */ void phy_impuse_cancel_blank_ratio_set(uint8_t ratio); /** *@brief phy_hpf_bypass_set. *@param hpf_bypass [high pass filter bypass or open.] *@exception [none.] *@return [none.] */ void phy_hpf_bypass_set(uint8_t hpf_bypass); /** *@brief phy_hpf_alpha_set. *@param hpf_alpha [alpha for high pass filter.] *@exception [none.] *@return [none.] */ void phy_hpf_alpha_set(uint8_t hpf_alpha); /** *@brief phy_impuse_cancel_set. * * impuse cancel set. * *@param mode [0:bypass,1:manual,2:one shot,3,continuous.] *@param clip_ratio [clip ratio.] *@param blank_ratio [blank ratio.] *@exception [none.] *@return [none.] */ void phy_impuse_cancel_set(\ uint8_t mode, uint8_t clip_ratio, uint8_t blank_ratio); /** *@brief phy_impuse_cancel_set. * * impuse cancel set. * *@param hpf_bypass [0:bypass,1:enable high pass filter.] *@param hpf_alpha [alpha for high pass filter.] *@exception [none.] *@return [none.] */ void phy_hpf_set(uint8_t hpf_bypass, uint8_t hpf_alpha); #ifdef __cplusplus } #endif #endif