/**************************************************************************** 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 */