332 lines
10 KiB
C
332 lines
10 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_RT_RF_H
|
|
#define CVG_RT_RF_H
|
|
|
|
/* public api includes */
|
|
#include "mac_bcm_api.h"
|
|
|
|
/* cvg module internal includes */
|
|
#include "cvg.h"
|
|
#include "cvg_prm.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* define if support sta attribute information */
|
|
#define DIS_LIST_SUPPORT_ATT_INFO 1
|
|
|
|
/* define if support sta route info */
|
|
#define DIS_LIST_SUPPORT_ROUTE_INFO 1
|
|
|
|
/* define if support sta channel information bitmap version */
|
|
#define DIS_LIST_SUPPORT_CHANNEL_BM 1
|
|
|
|
/*
|
|
* cvg_rt_update_rf_route() - trigger route module to update rf route
|
|
* param template
|
|
* @vdev: pointer to vdev
|
|
* @ent: pointer to beacon update descriptor
|
|
* @rf_rt: pointer to rf route entry to be forwarded, it is only valid for
|
|
* single mode sta device
|
|
*
|
|
* return:
|
|
* 0 -- for success case
|
|
* othersie -- error code
|
|
*/
|
|
uint32_t cvg_rt_update_rf_route(cvg_vdev_t *vdev, mac_bc_update_t *ent,
|
|
mac_bc_rf_route_t *rf_rt);
|
|
|
|
#if (HPLC_RF_SUPPORT)
|
|
|
|
/*
|
|
* @brief cvg_rt_update_rf_rp() - update rf route period parameters
|
|
* @vdev: pointer to vdev
|
|
* @rp: route parameters to be updated
|
|
* @tx_req: flag to mark if discovery node list mme tx required or not
|
|
* @retval: ERR_OK - for success case, otherwise -- error code
|
|
*/
|
|
void cvg_rt_update_rf_rp(cvg_vdev_t *vdev, mac_bc_rf_route_t *rp,
|
|
uint8_t tx_req);
|
|
|
|
/*
|
|
* @brief cvg_rt_handle_rf_rp() - handle rf route period parameters
|
|
* @vdev: pointer to vdev
|
|
* @rp: route parameters to be updated
|
|
* @tx_req: flag to mark if discovery node list mme tx required or not
|
|
* @retval: ERR_OK - for success case, otherwise -- error code
|
|
*/
|
|
void cvg_rt_handle_rf_rp(cvg_vdev_t *vdev, mac_bc_rf_route_t *rp,
|
|
uint8_t tx_req);
|
|
|
|
/**
|
|
* @brief cvg_rt_rf_vdev_init() - rf vdev init
|
|
* @vdev: pointer to vdev
|
|
* @return: ERR_OK - success, otherwise - failure
|
|
*/
|
|
uint32_t cvg_rt_rf_vdev_init(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_rt_rf_vdev_deinit() - rf vdev deinit
|
|
* @vdev: pointer to vdev
|
|
*/
|
|
void cvg_rt_rf_vdev_deinit(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_rt_rf_vdev_reset() - rf vdev reset
|
|
* @vdev: pointer to vdev
|
|
*/
|
|
void cvg_rt_rf_vdev_reset(cvg_vdev_t *vdev);
|
|
|
|
/*
|
|
* cvg_rt_rf_get_rf_dis_dur() - get current network rf discover node period
|
|
* duration
|
|
* @vdev: pointer to vdev
|
|
*
|
|
* return
|
|
* the duration of rf discover node period. the unit is 1s.
|
|
*/
|
|
uint16_t cvg_rt_rf_get_rf_dis_dur(cvg_vdev_t *vdev);
|
|
|
|
#if HPLC_RF_DEV_SUPPORT
|
|
|
|
/* @brief cvg_rt_calc_rf_rx_snr_rssi() - calculate accumulated rf rx snr and
|
|
* rx rssi according the history of previous received packets.
|
|
* @param peer: pointer of the peer to be calculated
|
|
* @param rx_snr: rx snr of the new received packets
|
|
* @param rx_rssi: rx rssi of the new received packets
|
|
*/
|
|
void cvg_rt_calc_rf_rx_snr_rssi(cvg_peer_info_t *peer,
|
|
int8_t rx_snr, int8_t rx_rssi);
|
|
|
|
/**
|
|
* @brief cvg_rt_rf_dis_node_timeout() - rf discover node mme send timeout
|
|
* @param vdev: pointer to vdev
|
|
*/
|
|
void cvg_rt_rf_dis_node_timeout(cvg_vdev_t *vdev);
|
|
|
|
/**
|
|
* @brief cvg_rt_vdev_start_rf_rt() - start rf route
|
|
* @param vdev: pointer to vdev
|
|
* @param tx_req: flag to mark if discovery node list mme tx required or not
|
|
*/
|
|
void cvg_rt_vdev_start_rf_rt(cvg_vdev_t *vdev, uint8_t tx_req);
|
|
|
|
/**
|
|
* @brief cvg_rt_vdev_stop_rf_rt() - stop rf route
|
|
* @vdev: pointer to vdev
|
|
* @clear_data: flag to mark if current route period data should be cleared
|
|
*/
|
|
void cvg_rt_vdev_stop_rf_rt(cvg_vdev_t *vdev, uint8_t clear_data);
|
|
|
|
/*
|
|
* @brief cvg_rt_is_peer_rf_reachable() - check if the peer rf link reachable
|
|
* @param vdev: pointer to vdev
|
|
* @param peer: pointer to peer to be checked
|
|
*
|
|
* @retval 0 - peer is not reachable
|
|
* @retval 1 - peer is reachable
|
|
*/
|
|
uint8_t cvg_rt_is_peer_rf_reachable(cvg_vdev_t * vdev, cvg_peer_info_t * peer);
|
|
|
|
/**
|
|
* @brief cvg_rt_parse_ch_bm() - parse discovery node list mme of channel
|
|
* bitmap version
|
|
* @param vdev: pointer to vdev
|
|
* @param data: pointer to buffer of discovery node list channel info
|
|
* @param unit_len: length of channel info unit
|
|
* @param dis_sta: TEI of sta sending discovery node list
|
|
* @retval: ERR_OK - for success case, otherwise - error code
|
|
*/
|
|
uint32_t cvg_rt_parse_ch_bm(cvg_vdev_t *vdev, uint8_t *data,
|
|
uint16_t unit_len, tei_t dis_sta);
|
|
|
|
/**
|
|
* @brief cvg_rt_parse_ch_not_bm() - parse discovery node list mme of channel
|
|
* not bitmap version
|
|
* @param vdev: pointer to vdev
|
|
* @param data: pointer to buffer of discovery node list channel info
|
|
* @param unit_len: length of channel info unit
|
|
* @param dis_sta: TEI of sta sending discovery node list
|
|
* @retval: ERR_OK - for success case, otherwise - error code
|
|
*/
|
|
uint32_t cvg_rt_parse_ch_not_bm(cvg_vdev_t *vdev, uint8_t *data,
|
|
uint16_t unit_len, tei_t dis_sta);
|
|
|
|
/**
|
|
* @brief cvg_rt_stat_rf_dis_bm() - rf receive bitmap statistics
|
|
* according discovery node list packet information
|
|
* @param vdev: pointer to vdev
|
|
* @param peer: pointer to the peer
|
|
* @param seq: sequence of rf discovery list mme
|
|
*/
|
|
void cvg_rt_stat_rf_dis_bm(cvg_vdev_t *vdev, cvg_peer_info_t *peer,
|
|
uint8_t seq);
|
|
|
|
/**
|
|
* @brief cvg_rt_calc_rf_dis_tf_sr() - calculate traffic success ratio
|
|
* according discovery node list packet information
|
|
* @param peer: pointer to peer
|
|
*/
|
|
void cvg_rt_calc_rf_dis_tf_sr(cvg_peer_info_t *peer);
|
|
|
|
/**
|
|
* @brief cvg_rt_rf_tx_sr_is_expired() - check if rf tx_sr is expired
|
|
* @param vdev: pointer to vdev
|
|
* @param peer: pointer to peer
|
|
* @return: 1 - is expired, 0 - not expired
|
|
*/
|
|
uint8_t cvg_rt_rf_tx_sr_is_expired(cvg_vdev_t *vdev, cvg_peer_info_t *peer);
|
|
|
|
/*
|
|
* @brief cvg_rt_fill_att_info() - fill sta attribute information
|
|
* @param vdev: pointer to vdev
|
|
* @param data: pointer to buffer to receive the result
|
|
* @param len: pointer to length of the buffer. In return, this value is set
|
|
* the actually buffer length usage.
|
|
*/
|
|
void cvg_rt_fill_att_info(cvg_vdev_t *vdev, uint8_t *data, uint16_t *len);
|
|
|
|
/*
|
|
* @brief cvg_rt_fill_route_info() - fill sta uplink route information
|
|
* @param vdev: pointer to vdev
|
|
* @param data: pointer to buffer to receive the result
|
|
* @param len: pointer to length of the buffer. In return, this value is set
|
|
* the actually buffer length filled.
|
|
* @return: number of route entry filled in discover node list
|
|
*/
|
|
uint8_t cvg_rt_fill_route_info(cvg_vdev_t *vdev, uint8_t *data, uint16_t *len);
|
|
|
|
/*
|
|
* @brief cvg_rt_fill_ch_bm() - fill sta channel information of bitmap
|
|
* @param vdev: pointer to vdev
|
|
* @param data: pointer to buffer to receive the result
|
|
* @param len: pointer to length of the buffer. In return, this value is set
|
|
* the actually buffer length usage.
|
|
* @param max_len: limit of discover node list mme buffer length.
|
|
* @param ch_group: channel group type.
|
|
* @return: number of sta filled in the channel bitmap
|
|
*/
|
|
uint16_t cvg_rt_fill_ch_bm(cvg_vdev_t *vdev, uint8_t *data, uint16_t *len,
|
|
uint32_t max_len, uint8_t ch_group);
|
|
|
|
/*
|
|
* @brief cvg_rt_get_rf_dis_seq() - get rf discover list sequence number
|
|
* @param vdev: pointer to vdev
|
|
* @return: rf discover list sequence number, value is 0 - 255
|
|
*/
|
|
uint8_t cvg_rt_get_rf_dis_seq(cvg_vdev_t *vdev);
|
|
|
|
#else /* HPLC_RF_DEV_SUPPORT */
|
|
|
|
#define cvg_rt_calc_rf_rx_snr_rssi(peer, rx_snr, rx_rssi)
|
|
|
|
#define cvg_rt_rf_dis_node_timeout(vdev)
|
|
|
|
#define cvg_rt_vdev_start_rf_rt(vdev, tx_req)
|
|
|
|
#define cvg_rt_vdev_stop_rf_rt(vdev, clear_data)
|
|
|
|
#define cvg_rt_is_peer_rf_reachable(vdev, peer) (0)
|
|
|
|
#define cvg_rt_parse_ch_bm(vdev, data, unit_len, dis_sta) \
|
|
ERR_NOSUPP
|
|
|
|
#define cvg_rt_parse_ch_not_bm(vdev, data, unit_len, dis_sta) \
|
|
ERR_NOSUPP
|
|
|
|
#define cvg_rt_stat_rf_dis_bm(vdev, peer, seq)
|
|
|
|
#define cvg_rt_calc_rf_dis_tf_sr(peer)
|
|
|
|
#define cvg_rt_rf_tx_sr_is_expired(vdev, peer) (0)
|
|
|
|
#define cvg_rt_fill_att_info(vdev, data, len)
|
|
|
|
#define cvg_rt_fill_route_info(vdev, data, len) (0)
|
|
|
|
#define cvg_rt_fill_ch_bm(vdev, data, len, max_len, ch_group) (0)
|
|
|
|
#define cvg_rt_get_rf_dis_seq(vdev) (0)
|
|
|
|
#endif /* HPLC_RF_DEV_SUPPORT */
|
|
|
|
#else /* HPLC_RF_SUPPORT */
|
|
|
|
#define cvg_rt_calc_rf_rx_snr_rssi(peer, rx_snr, rx_rssi)
|
|
|
|
#define cvg_rt_rf_dis_node_timeout(vdev)
|
|
|
|
#define cvg_rt_vdev_start_rf_rt(vdev, tx_req)
|
|
|
|
#define cvg_rt_vdev_stop_rf_rt(vdev, clear_data)
|
|
|
|
#define cvg_rt_parse_ch_bm(vdev, data, unit_len, dis_sta) \
|
|
ERR_NOSUPP
|
|
|
|
#define cvg_rt_parse_ch_not_bm(vdev, data, unit_len, dis_sta) \
|
|
ERR_NOSUPP
|
|
|
|
#define cvg_rt_rf_vdev_init(vdev) ERR_NOSUPP
|
|
|
|
#define cvg_rt_rf_vdev_deinit(vdev)
|
|
|
|
#define cvg_rt_rf_vdev_reset(vdev)
|
|
|
|
#define cvg_rt_stat_rf_dis_bm(vdev, peer, seq)
|
|
|
|
#define cvg_rt_calc_rf_dis_tf_sr(peer)
|
|
|
|
#define cvg_rt_rf_tx_sr_is_expired(vdev, peer) (0)
|
|
|
|
#define cvg_rt_is_peer_rf_reachable(vdev, peer) (0)
|
|
|
|
#define cvg_rt_rf_get_rf_dis_dur(vdev) (0)
|
|
|
|
#define cvg_rt_fill_att_info(vdev, data, len)
|
|
|
|
#define cvg_rt_fill_route_info(vdev, data, len) (0)
|
|
|
|
#define cvg_rt_fill_ch_bm(vdev, data, len, max_len, ch_group) (0)
|
|
|
|
#define cvg_rt_get_rf_dis_seq(vdev) (0)
|
|
|
|
static inline void cvg_rt_update_rf_rp(cvg_vdev_t *vdev,
|
|
mac_bc_rf_route_t *rp, uint8_t tx_req)
|
|
{
|
|
(void)vdev;
|
|
(void)rp;
|
|
(void)tx_req;
|
|
}
|
|
|
|
static inline void cvg_rt_handle_rf_rp(cvg_vdev_t *vdev,
|
|
mac_bc_rf_route_t *rp, uint8_t tx_req)
|
|
{
|
|
(void)vdev;
|
|
(void)rp;
|
|
(void)tx_req;
|
|
}
|
|
|
|
#endif /* HPLC_RF_SUPPORT */
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* CVG_RT_RF_H */
|