Files
kunlun/plc/cvg/nwm/inc/cvg_nwm_cco_rf.h
2024-09-28 14:24:04 +08:00

229 lines
7.6 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_NWM_CCO_RF_H
#define CVG_NWM_CCO_RF_H
/* cvg module internal includes */
#include "cvg_nwm_cco_common.h"
#ifdef __cplusplus
extern "C" {
#endif
#if (HPLC_RF_SUPPORT) && (PLC_SUPPORT_CCO_ROLE)
/*
* @brief cvg_nwm_cco_add_nn_rf() - add a neighbor network rf info into rf list
* @param nwm: pointer of nwm
* @param rf_channel: rf channel
* @param rf_option: rf option
*/
void cvg_nwm_cco_add_nn_rf(cvg_nwm_vdev_t *nwm, uint8_t rf_channel,
uint8_t rf_option);
/*
* @brief cvg_nwm_cco_remove_nn_rf() - remove a neighbor network rf info from
* rf list
* @param nwm: pointer of nwm
* @param rf_channel: rf channel
* @param rf_option: rf option
*/
void cvg_nwm_cco_remove_nn_rf(cvg_nwm_vdev_t *nwm, uint8_t rf_channel,
uint8_t rf_option);
/*
* @brief cvg_nwm_cco_clear_nn_rf() - clear all neighbor network rf list
* @param nwm: pointer of nwm
*/
void cvg_nwm_cco_clear_nn_rf(cvg_nwm_vdev_t *nwm);
/*
* @brief cvg_nwm_cco_rf_coordination() - coordinate remote conflicting
* rf channels.
* @param nwm: pointer of nwm
* @param cco_addr: if valid, pointer to the CCO addr of the conflicting
* network
* @param nid: if valid, pointer to the NID of the conflicting network
* @retval: 1 - local rf channel needs to be changed.
* @retval: 0 - local rf channel does not need to be changedd.
*/
uint32_t cvg_nwm_cco_rf_coordination(cvg_nwm_vdev_t *nwm,
uint8_t *cco_addr, uint32_t *nid);
/*
* @brief cvg_nwm_cco_stop_rf_coordination() - stop rf coordinate remote.
* @param nwm: pointer of nwm
*/
void cvg_nwm_cco_stop_rf_coordination(cvg_nwm_vdev_t *nwm);
/*
* @brief cvg_nwm_cco_rf_rpt_check - check rf list report from mac layer
* against local rf.
* @param nwm: pointer of nwm
* @param rpt: nid list report from mac layer
* @param is_mac_compare: whether CCO MAC address comparison is required, 1 -
* yes, 0 - ignored.
* @retval: 1 - rf conflict detected, local RF channel needs to be changed.
* @retval: 0 - other case.
*/
uint32_t cvg_nwm_cco_rf_rpt_check(cvg_nwm_vdev_t *nwm, mac_nid_list_rpt_t *rpt,
uint8_t is_mac_compare);
/*
* @brief cvg_nwm_cco_sel_rf_channel - select rf channel from free rf channel
* @param nwm: pointer of nwm
* @param rf_option: selected rf option
* @retval: selected rf channel
*/
uint8_t cvg_nwm_cco_sel_rf_channel(cvg_nwm_vdev_t *nwm, uint8_t *rf_option);
/*
* @brief cvg_nwm_cco_rf_check() - check if any neighbor rf info expired
* @param nwm: pointer of nwm
*/
void cvg_nwm_cco_rf_list_age_check(cvg_nwm_vdev_t *nwm);
/*
* @brief cvg_nwm_cco_compare_proxy_rf() - compare which rf proxy is better,
* both proxys should be rf link
* @param nwm: pointer to nwm
* @param pco1: pointer of rf pco 1, whose link type is rf link
* @param pco2: pointer of rf pco 2, whose link type is rf link
*
* @retval better pco
*/
pco_link_info_t *cvg_nwm_cco_compare_proxy_rf(cvg_nwm_vdev_t *nwm,
pco_link_info_t *pco1, pco_link_info_t *pco2);
/*
* @brief cvg_nwm_cco_compare_proxy_mix() - compare which proxy is better,
* the two proxys have different link type
* @param nwm: pointer to nwm
* @param hplc_pco: pointer of hplc pco, whose link type is hplc link
* @param rf_pco: pointer of rf pco, whose link type is rf link
*
* @retval better pco
*/
pco_link_info_t *cvg_nwm_cco_compare_proxy_mix(cvg_nwm_vdev_t *nwm,
pco_link_info_t *hplc_pco, pco_link_info_t *rf_pco);
/**
* @brief set rf tx power cap for whole network
* @param vdev: pointer to vdev
* @param power: rf tx power cap. unit is 1dbm
*
* @return:
* 0 -- for success case
* otherwise -- error code
*/
uint32_t cvg_nwm_cco_set_rf_tx_power_cap(cvg_vdev_t *vdev, int8_t power);
/**
* @brief get rf tx power cap for whole network
* @param vdev: pointer to vdev
*
* @return:
* rf tx power cap. unit is 1dmb.
*/
int8_t cvg_nwm_cco_get_rf_tx_power_cap(cvg_vdev_t *vdev);
#if HPLC_RF_DEV_SUPPORT
/*
* @brief cvg_nwm_cco_rf_hb_check() - rf link heart beat check.
* @param nwm: pointer to nwm
*/
void cvg_nwm_cco_rf_hb_check(cvg_nwm_vdev_t *nwm);
/**
* @brief cvg_nwm_cco_rf_dis_node_list_rx() - rf discover node list mme rx
* handling
* @param nwm: - nwm vdev pointer
* @param rx_info: - rx information
* @param data: - pointer to buffer of discovery node list mme
* @param len: - length of the mme in byte
* @param dis_sta: - TEI of sta sending discovery node list
*/
void cvg_nwm_cco_rf_dis_node_list_rx(cvg_nwm_vdev_t *nwm,
mac_rx_info_t *rx_info, uint8_t *data, uint32_t len, tei_t dis_sta);
/**
* @brief cvg_nwm_cco_single_hop_msdu_rx() - rf single hop frame rx handling
* @param nwm: - nwm vdev pointer
* @param buf: - pointer to rx buffer
* @param s_mac: - pointer to mac header of single hop frame
* @param stei: - source tei come from fc
* @param dtei: - destination tei come from fc
* @param is_bcast: - flag to mark if this packet is broadcast packet
* @param app_id: - application id of the msdu
*/
void cvg_nwm_cco_single_hop_msdu_rx(cvg_nwm_vdev_t *nwm, iot_pkt_t *buf,
void *s_mac, tei_t stei, tei_t dtei, uint8_t is_bcast,
uint8_t app_id);
#else /* HPLC_RF_DEV_SUPPORT */
#define cvg_nwm_cco_rf_hb_check(nwm)
#define cvg_nwm_cco_rf_dis_node_list_rx(nwm, rx_info, data, len, dis_sta)
#define cvg_nwm_cco_single_hop_msdu_rx(nwm, buf, s_mac, stei, dtei, \
is_bcast, app_id)
#endif /* HPLC_RF_DEV_SUPPORT */
#else /* HPLC_RF_SUPPORT && PLC_SUPPORT_CCO_ROLE */
#define cvg_nwm_cco_add_nn_rf(nwm, rf_channel, rf_option)
#define cvg_nwm_cco_remove_nn_rf(nwm, rf_channel, rf_option)
#define cvg_nwm_cco_clear_nn_rf(nwm)
#define cvg_nwm_cco_rf_list_age_check(nwm)
#define cvg_nwm_cco_rf_rpt_check(nwm, rpt, is_mac_compare) (0)
#define cvg_nwm_cco_rf_dis_node_list_rx(nwm, rx_info, data, len, dis_sta)
#define cvg_nwm_cco_single_hop_msdu_rx(nwm, buf, s_mac, stei, dtei, \
is_bcast, app_id)
#define cvg_nwm_cco_sel_rf_channel(nwm, rf_option) (0)
#define cvg_nwm_cco_rf_hb_check(nwm)
#define cvg_nwm_cco_compare_proxy_rf(nwm, pco1, pco2) (pco1)
#define cvg_nwm_cco_compare_proxy_mix(nwm, hplc_pco, rf_pco) (hplc_pco)
#define cvg_nwm_cco_rf_coordination(nwm, cco_addr, nid) (0)
#define cvg_nwm_cco_stop_rf_coordination(nwm)
#define cvg_nwm_cco_set_rf_tx_power_cap(vdev, power) (ERR_NOSUPP)
#define cvg_nwm_cco_get_rf_tx_power_cap(vdev) (RF_TX_PWR_INVALID)
#endif /* HPLC_RF_SUPPORT && PLC_SUPPORT_CCO_ROLE */
#ifdef __cplusplus
}
#endif
#endif /* CVG_NWM_CCO_RF_H */