130 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/****************************************************************************
 | 
						|
 | 
						|
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_CHANNEL_H
 | 
						|
#define MAC_CHANNEL_H
 | 
						|
#include "iot_config.h"
 | 
						|
#include "os_types.h"
 | 
						|
#include "os_timer_api.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* max rx count for stop channel scan */
 | 
						|
#define MAX_BCN_RX_CNT        30
 | 
						|
 | 
						|
#define INV_SNR               -15
 | 
						|
 | 
						|
/* if cur channel rx bcn snr big than it, stop scan */
 | 
						|
#define MIN_SNR_STOP_SCAN     25
 | 
						|
 | 
						|
/* mac channel define */
 | 
						|
#define MAC_CHANNEL_L_PE         0
 | 
						|
#define MAC_CHANNEL_L_N          1
 | 
						|
#define MAC_CHANNEL_N_PE         2
 | 
						|
#define MAC_CHANNEL_MAX_NUM      3
 | 
						|
 | 
						|
#define CHANNL_CAL_AVG_SNR(AVG_SNR, CUR_SNR) ((AVG_SNR) - ((AVG_SNR) >> 2) + ((CUR_SNR) >> 2))
 | 
						|
#define GET_BEST_CHANNEL(A_SNR, B_SNR, C_SNR) (((A_SNR) > (B_SNR)) ? \
 | 
						|
    (((A_SNR) > (C_SNR)) ? MAC_CHANNEL_L_PE : MAC_CHANNEL_N_PE) : \
 | 
						|
    (((B_SNR) > (C_SNR)) ? MAC_CHANNEL_L_N : MAC_CHANNEL_N_PE))
 | 
						|
 | 
						|
 | 
						|
/* k48 channel select */
 | 
						|
typedef struct _mac_channel_scan_ctxt {
 | 
						|
    /* cur rx channel */
 | 
						|
    uint8_t  k48_cur_channel    :    2,
 | 
						|
    /* all channel rx bcn cnt */
 | 
						|
             k48_channel_rx_count  : 5,
 | 
						|
    /* channel is selected */
 | 
						|
             k48_channel_is_sel :    1;
 | 
						|
    /* 3 channel avg snr */
 | 
						|
    int8_t   k48_channel_snr[MAC_CHANNEL_MAX_NUM];
 | 
						|
    /* channel scan timer */
 | 
						|
    timer_id_t scan_timer;
 | 
						|
    /* dwell time, unit second */
 | 
						|
    uint8_t dwell_time_s;
 | 
						|
}mac_channel_scan_ctxt_t;
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief iot_mac_k48sta_init_channelgpio
 | 
						|
 */
 | 
						|
void iot_mac_k48sta_init_channelgpio(void);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief iot_mac_k48cco_init_channelgpio
 | 
						|
 */
 | 
						|
void iot_mac_k48cco_init_channelgpio(void);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief iot_mac_k48sta_setchannel_gpio
 | 
						|
 */
 | 
						|
void iot_mac_k48sta_setchannel_gpio(uint8_t ch);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief iot_mac_chan_select
 | 
						|
 *
 | 
						|
 * @param phase:         phase number.
 | 
						|
 */
 | 
						|
void iot_mac_chan_select(uint8_t phase);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief iot_mac_k48sta_switch_next_channel
 | 
						|
 *
 | 
						|
 * @param pdev:         mac pdev pointer.
 | 
						|
 */
 | 
						|
void iot_mac_k48sta_switch_next_channel(void *pdev);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief iot_mac_k48sta_scan_channel_init
 | 
						|
 *
 | 
						|
 * @param pdev:         mac pdev pointer.
 | 
						|
 */
 | 
						|
void iot_mac_k48sta_scan_channel_init(void *pdev);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief iot_mac_k48sta_scan_channel_start
 | 
						|
 *
 | 
						|
 * @param pdev:         mac pdev pointer.
 | 
						|
 * @return              0:success, 1:fail
 | 
						|
 */
 | 
						|
uint32_t iot_mac_k48sta_scan_channel_start(void *pdev);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief iot_mac_k48sta_scan_channel_stop
 | 
						|
 *
 | 
						|
 * @param pdev:         mac pdev pointer.
 | 
						|
 * @return              0:success, 1:fail
 | 
						|
 */
 | 
						|
uint32_t iot_mac_k48sta_scan_channel_stop(void *pdev);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief iot_mac_k48sta_channel_snr_cal
 | 
						|
 *
 | 
						|
 * @param pdev:         mac pdev pointer.
 | 
						|
 * @param snr           cur rx bcn snr
 | 
						|
 * @param ppm           cur rx bcn ppm
 | 
						|
 * @return              0:success, 1:fail
 | 
						|
 */
 | 
						|
uint32_t iot_mac_k48sta_channel_snr_cal(void *pdev, int8_t snr, int8_t ppm);
 | 
						|
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 | 
						|
 |