Files
kunlun/plc/halmac/inc/mac_channel.h
2024-09-28 14:24:04 +08:00

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