573 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			573 lines
		
	
	
		
			18 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 CVG_H
 | 
						|
#define CVG_H
 | 
						|
 | 
						|
/* os shim includes */
 | 
						|
#include "os_types.h"
 | 
						|
#include "os_task.h"
 | 
						|
#include "os_event.h"
 | 
						|
 | 
						|
/* common includes */
 | 
						|
#include "iot_mem_pool.h"
 | 
						|
#include "iot_queue.h"
 | 
						|
#include "iot_utils.h"
 | 
						|
#include "iot_task.h"
 | 
						|
#include "iot_pkt_api.h"
 | 
						|
#include "iot_plc_msg_api.h"
 | 
						|
 | 
						|
/* public api includes */
 | 
						|
#include "cvg_api.h"
 | 
						|
#include "cvg_bitmap.h"
 | 
						|
#include "plc_protocol.h"
 | 
						|
#include "plc_utils.h"
 | 
						|
#include "plc_fr.h"
 | 
						|
#include "mac_data_api.h"
 | 
						|
#include "mac_uni_cfg_api.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* virtual device event definitions */
 | 
						|
typedef enum {
 | 
						|
    cvg_vdev_event_start = 1,
 | 
						|
    cvg_vdev_event_stop,
 | 
						|
 | 
						|
    cvg_vdev_event_timeout,
 | 
						|
    cvg_vdev_event_new_bp,
 | 
						|
 | 
						|
    cvg_vdev_event_bc_rx,
 | 
						|
    cvg_vdev_event_sof_rx,
 | 
						|
    cvg_vdev_event_cco_snr_rx,
 | 
						|
    cvg_vdev_event_bp_end_alert,
 | 
						|
    cvg_vdev_event_nid_rpt,
 | 
						|
    cvg_vdev_event_zc_ntb_rpt,
 | 
						|
    cvg_vdev_event_zc_status_rpt,
 | 
						|
    cvg_vdev_event_wbl_changed,
 | 
						|
    cvg_vdev_event_crypto_done,
 | 
						|
} cvg_vdev_event_t;
 | 
						|
 | 
						|
/* cvg layer virtual device descriptor */
 | 
						|
typedef struct _cvg_vdev {
 | 
						|
    /* vdev id */
 | 
						|
    uint8_t     id;
 | 
						|
    /* mac vdev id */
 | 
						|
    uint8_t     mac_vdev_id;
 | 
						|
    /* device role */
 | 
						|
    uint8_t     role;
 | 
						|
    /* protocol supported */
 | 
						|
    uint8_t     proto;
 | 
						|
    /* flag to mark if cert test command ever detected */
 | 
						|
    uint8_t     cert_test_detected;
 | 
						|
    /* flag to mark if power collapsed */
 | 
						|
    uint8_t     pw_collapsed            :1,
 | 
						|
    /* flag to mark if allow all APP data TX in power collapsed status */
 | 
						|
                ignore_pw_collapsed     :1,
 | 
						|
    /* reserved for future */
 | 
						|
                rsvd                    :6;
 | 
						|
    /* record the sn of zc status report */
 | 
						|
    uint8_t     zc_status_sn;
 | 
						|
    /* flag to record the power frequency */
 | 
						|
    uint8_t     power_freq              :4,
 | 
						|
    /* record the maximum zc phase collected */
 | 
						|
                zc_phase_cnt            :4;
 | 
						|
    /* vdev mac address */
 | 
						|
    uint8_t     addr[IOT_MAC_ADDR_LEN];
 | 
						|
    /* record the count of flash log */
 | 
						|
    uint16_t    flash_log_cnt;
 | 
						|
    /* vdev total start count */
 | 
						|
    uint32_t    total_start_cnt;
 | 
						|
    /* vdev total start count */
 | 
						|
    uint8_t     start_reason_cnt[CVG_VDEV_START_REASON_NUMBER];
 | 
						|
    /* app data broadcast tx total count */
 | 
						|
    uint32_t    app_data_tx_bc_cnt;
 | 
						|
    /* app data unicast tx total count */
 | 
						|
    uint32_t    app_data_tx_uc_cnt;
 | 
						|
    /* app data broadcast tx drop total count */
 | 
						|
    uint32_t    app_data_tx_bc_drop_cnt;
 | 
						|
    /* app data unicast tx drop total count */
 | 
						|
    uint32_t    app_data_tx_uc_drop_cnt;
 | 
						|
    /* app data broadcast rx total count */
 | 
						|
    uint32_t    app_data_rx_bc_cnt;
 | 
						|
    /* app data unicast rx total count */
 | 
						|
    uint32_t    app_data_rx_uc_cnt;
 | 
						|
    /* app data broadcast rx report to app total count */
 | 
						|
    uint32_t    app_data_rx_bc_rpt_cnt;
 | 
						|
    /* app data unicast rx report to app total count */
 | 
						|
    uint32_t    app_data_rx_uc_rpt_cnt;
 | 
						|
    /* app data msdu forward total count */
 | 
						|
    uint32_t    app_data_fwd_cnt;
 | 
						|
    /* app data broadcast rf rx total count */
 | 
						|
    uint32_t    app_data_rf_rx_bc_cnt;
 | 
						|
    /* app data unicast rf rx total count */
 | 
						|
    uint32_t    app_data_rf_rx_uc_cnt;
 | 
						|
    /* app data msdu rf forward total count */
 | 
						|
    uint32_t    app_data_rf_fwd_cnt;
 | 
						|
    /* app data broadcast rf rx report to app total count */
 | 
						|
    uint32_t    app_data_rf_rx_bc_rpt_cnt;
 | 
						|
    /* app data unicast rf rx report to app total count */
 | 
						|
    uint32_t    app_data_rf_rx_uc_rpt_cnt;
 | 
						|
 | 
						|
    /* app data conn less tx total count */
 | 
						|
    uint32_t    app_data_tx_conn_less_cnt;
 | 
						|
    /* app data conn less tx drop total count */
 | 
						|
    uint32_t    app_data_tx_conn_less_drop_cnt;
 | 
						|
    /* app data conn less rx total count */
 | 
						|
    uint32_t    app_data_rx_conn_less_cnt;
 | 
						|
    /* app data conn less rx report to app total count */
 | 
						|
    uint32_t    app_data_rx_conn_less_rpt_cnt;
 | 
						|
    /* app data unicast rx capture report to app total count */
 | 
						|
    uint32_t    app_data_rx_uc_cap_rpt_cnt;
 | 
						|
    /* app data broadcast rx capture report to app total count */
 | 
						|
    uint32_t    app_data_rx_bc_cap_rpt_cnt;
 | 
						|
    /* mme data tx total count */
 | 
						|
    uint32_t    app_data_tx_cnt;
 | 
						|
    /* app data rx total count */
 | 
						|
    uint32_t    app_data_rx_cnt;
 | 
						|
    /* mme data rx total count */
 | 
						|
    uint32_t    mme_data_tx_cnt;
 | 
						|
    /* mme data rx total count */
 | 
						|
    uint32_t    mme_data_rx_cnt;
 | 
						|
    /* mme data rf tx total count */
 | 
						|
    uint32_t    app_data_rf_tx_cnt;
 | 
						|
    /* app data rf rx total count */
 | 
						|
    uint32_t    app_data_rf_rx_cnt;
 | 
						|
    /* mme data rf rx total count */
 | 
						|
    uint32_t    mme_data_rf_tx_cnt;
 | 
						|
    /* mme data rf rx total count */
 | 
						|
    uint32_t    mme_data_rf_rx_cnt;
 | 
						|
 | 
						|
    /* route handler */
 | 
						|
    void        *rt;
 | 
						|
    /* peer management handler */
 | 
						|
    void        *prm;
 | 
						|
    /* bandwidth management handler */
 | 
						|
    void        *bwm;
 | 
						|
    /* network management handler */
 | 
						|
    void        *nwm;
 | 
						|
    /* security handler */
 | 
						|
    void        *sec;
 | 
						|
} cvg_vdev_t;
 | 
						|
 | 
						|
/* cvg layer physical device descriptor */
 | 
						|
typedef struct _cvg_pdev {
 | 
						|
    /* vdev pointer array */
 | 
						|
    cvg_vdev_t  *vdev_array[CVG_MAX_VDEV_PER_PDEV];
 | 
						|
} cvg_pdev_t;
 | 
						|
 | 
						|
/* cvg layer global descriptor */
 | 
						|
typedef struct _cvg_global {
 | 
						|
    /* configurations from cvg module init */
 | 
						|
    cvg_cfg_t           cfg;
 | 
						|
    /* pdev pointer array */
 | 
						|
    cvg_pdev_t          *pdev_array[CVG_MAX_PDEV];
 | 
						|
    /* cvg task configuration */
 | 
						|
    iot_task_config_t   task_cfg;
 | 
						|
    /* cvg task handle */
 | 
						|
    iot_task_h          task_h;
 | 
						|
} cvg_global_t;
 | 
						|
 | 
						|
/* cvg global internal structure */
 | 
						|
extern cvg_global_t *p_cvg_glb;
 | 
						|
 | 
						|
/* sof rx buf info */
 | 
						|
typedef struct cvg_rx_sof_buf {
 | 
						|
    /* cache plaintext sof */
 | 
						|
    iot_pkt_t *buf_plaintext;
 | 
						|
    /* cache encrypted sof */
 | 
						|
    iot_pkt_t *buf_encrypted;
 | 
						|
} cvg_rx_sof_buf_t;
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_init_rx_sof_buf() - initialize rx_sof_buf
 | 
						|
 * @param sof_buf:  initialized rx sof buffer
 | 
						|
 * @param buf:      rx sof
 | 
						|
 * @param is_encrypt: whether the buf is encrypted
 | 
						|
 */
 | 
						|
void cvg_init_rx_sof_buf(cvg_rx_sof_buf_t *sof_buf, iot_pkt_t *buf,
 | 
						|
    uint8_t is_encrypt);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_get_rx_sof_buf() - get plaintext buf from rx_sof_buf
 | 
						|
 * @param sof_buf:  rx sof buffer
 | 
						|
 * return:          plaintext buffer if valid, overwise encrypted buffer
 | 
						|
 */
 | 
						|
iot_pkt_t *cvg_get_rx_sof_buf(cvg_rx_sof_buf_t *sof_buf);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_get_and_clear_rx_sof_buf() - get plaintext buf from
 | 
						|
 *                  rx_sof_buf and free rx sof buffer
 | 
						|
 * @param sof_buf:  rx sof buffer
 | 
						|
 * return:          plaintext buffer if valid, overwise encrypted buffer
 | 
						|
 */
 | 
						|
iot_pkt_t *cvg_get_and_clear_rx_sof_buf(cvg_rx_sof_buf_t *sof_buf);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_free_rx_sof_buf() - free rx sof buffer
 | 
						|
 * @param sof_buf:  rx sof buffer
 | 
						|
 */
 | 
						|
void cvg_free_rx_sof_buf(cvg_rx_sof_buf_t *sof_buf);
 | 
						|
 | 
						|
/*
 | 
						|
 * cvg_find_vdev_by_id - find vdev by vdev id
 | 
						|
 * @glb:    pointer of cvg global data
 | 
						|
 * @id:     vdev id to be searched. The upper 4 bits is pdev array index,
 | 
						|
 *          and the lower 4 bits is vdev array index.
 | 
						|
 *
 | 
						|
 * return:
 | 
						|
 *  NULL        --  if no vdev found
 | 
						|
 *  otherwise   --  pointer to vdev
 | 
						|
 */
 | 
						|
cvg_vdev_t *cvg_find_vdev_by_id(cvg_global_t* glb, uint8_t id);
 | 
						|
 | 
						|
/*
 | 
						|
 * cvg_get_global_cfg - get global configurations
 | 
						|
 */
 | 
						|
cvg_cfg_t *cvg_get_global_cfg();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_save_pib_cfg() - save configuration into pib.
 | 
						|
 * @param inc_sn:       flag to mark if network sn should be increased while
 | 
						|
 *                      saving the configuration to pib.
 | 
						|
 * @param save_band:    flag to mark if band id configuration shall be saved.
 | 
						|
 * @param save_rf_channel: flag to mark if rf channel & option shall be saved.
 | 
						|
 */
 | 
						|
void cvg_save_pib_cfg(uint8_t inc_sn, uint8_t save_band,
 | 
						|
    uint8_t save_rf_channel);
 | 
						|
 | 
						|
/*
 | 
						|
 * cvg_stop_vdev_internal - stop vdev
 | 
						|
 * @vdev:   pointer of cvg vdev to be stopped
 | 
						|
 */
 | 
						|
void cvg_stop_vdev_internal(cvg_vdev_t *vdev);
 | 
						|
 | 
						|
/* cvg_get_wl_entry_count - get entry count in whitelist
 | 
						|
 * @vdev    pointer to cvg vdev
 | 
						|
 *
 | 
						|
 * return:
 | 
						|
 *     entry count of the whitelist
 | 
						|
 */
 | 
						|
uint16_t cvg_get_wl_entry_count(cvg_vdev_t *vdev);
 | 
						|
 | 
						|
/* cvg_get_bl_entry_count - get entry count in blacklist
 | 
						|
* @vdev    pointer to cvg vdev
 | 
						|
*
 | 
						|
* return:
 | 
						|
*     entry count of the blacklist
 | 
						|
*/
 | 
						|
uint16_t cvg_get_bl_entry_count(cvg_vdev_t *vdev);
 | 
						|
 | 
						|
/* cvg_convert_id_to_index - covert vdev id to pdev and vdev index
 | 
						|
 * @id:         vdev id to be converted
 | 
						|
 * @pdev_index: pdev index. output parameter.
 | 
						|
 * @vdev_index: vdev index. output parameter.
 | 
						|
 */
 | 
						|
void cvg_convert_id_to_index(uint8_t id, uint8_t *pdev_index,
 | 
						|
    uint8_t *vdev_index);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_get_vdev_config() - get vdev configuration.
 | 
						|
 * @param vdev:         vdev to be retrieved
 | 
						|
 *
 | 
						|
 * @retval NULL         -- for failure case
 | 
						|
 * @retval otherwise    -- pointer to vdev configration.
 | 
						|
 */
 | 
						|
cvg_vdev_cfg_t *cvg_get_vdev_config(cvg_vdev_t *vdev);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_gen_nid() - generate network id
 | 
						|
 * @param proto:    proto of the network
 | 
						|
 * @param vendor:   vendor id of the device
 | 
						|
 * @param max_nid:  allowed maximum nid
 | 
						|
 *
 | 
						|
 * @retval generate network id
 | 
						|
 */
 | 
						|
uint32_t cvg_gen_nid(uint8_t proto, uint16_t vendor, uint16_t max_nid);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_rf_channel_is_valid() - check if the rf channel is valid
 | 
						|
 * @param rf_channel:  rf channel to be checked
 | 
						|
 * @param rf_option:   using own option to check when rf option is invalid,
 | 
						|
 *                     using the option passed in to check when rf option
 | 
						|
 *                     is valid
 | 
						|
 *
 | 
						|
 * @retval 1 - valid, 0 - invalid
 | 
						|
 */
 | 
						|
uint8_t cvg_rf_channel_is_valid(uint8_t rf_channel, uint8_t rf_option);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_band_is_valid() - check if the hplc band id is valid
 | 
						|
 * @param band_id:      hplc band id to be checked
 | 
						|
 *
 | 
						|
 * @retval 1 - valid, 0 - invalid
 | 
						|
 */
 | 
						|
uint8_t cvg_band_is_valid(uint8_t band_id);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_gen_rf_channel() - generate rf channel id and option id
 | 
						|
 * @param rf_op:        generate rf option
 | 
						|
 * @param rf_chn:       generate rf channel
 | 
						|
 * @return
 | 
						|
 *  ERR_OK - success, otherwise - failed
 | 
						|
 */
 | 
						|
uint8_t cvg_gen_rf_channel(uint8_t *rf_op, uint8_t *rf_chn);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_clear_rf_select_bm() - clear rf select bitmap
 | 
						|
 */
 | 
						|
void cvg_clear_rf_select_bm();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_set_rf_select_bm() - set rf channel state to rf select bitmap
 | 
						|
 * @param rf_op:        rf option
 | 
						|
 * @param rf_chn:       rf channel
 | 
						|
 * @param selected:     set value of rf channel
 | 
						|
 */
 | 
						|
void cvg_set_rf_select_bm(uint8_t rf_op, uint8_t rf_chn, uint8_t selected);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_get_rf_scan_dur() - get rf scan duration
 | 
						|
 * @param vdev:         pointer to vdev
 | 
						|
 * @retval:             rf scan duration
 | 
						|
 */
 | 
						|
uint32_t cvg_get_rf_scan_dur(cvg_vdev_t *vdev);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief get rf scan duration when no network is found
 | 
						|
 * @param vdev:         pointer to vdev
 | 
						|
 * @retval:             rf scan minimum duration
 | 
						|
 */
 | 
						|
uint32_t cvg_get_rf_scan_min_dur(cvg_vdev_t *vdev);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief set hplc scan tbl
 | 
						|
 * @param vdev:            the vdev to be set
 | 
						|
 * @param plc_scan_tbl:    pointer to plc scan table
 | 
						|
 * @param band_cnt:        valid count in plc scan table
 | 
						|
 * @param set_mac:         flag to mark if plc scan table set to mac
 | 
						|
 * @return
 | 
						|
 *  ERR_OK - success, otherwise - failed
 | 
						|
 */
 | 
						|
uint32_t cvg_set_plc_scan_tbl(cvg_vdev_t *vdev, plc_scan_band_t *plc_scan_tbl,
 | 
						|
    uint8_t band_cnt, uint8_t set_mac);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief cvg query scan or support band table.
 | 
						|
 * @param is_scan:           0: get support band table.
 | 
						|
 *                           1: get scan band table.
 | 
						|
 * @param scan_band:         pointer to buffer of scan band.
 | 
						|
 * @param count:             max band count to be queried.
 | 
						|
 * @retval:                  band count of the queried
 | 
						|
 */
 | 
						|
uint8_t cvg_get_plc_scan_tbl(uint8_t is_scan, plc_scan_band_t *scan_band,
 | 
						|
    uint8_t count);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief send cvg data to mac layer
 | 
						|
 * @param vdev:     the vdev on which data will be sent
 | 
						|
 * @param msdu_buf: the buffer containing the msdu data to be sent.
 | 
						|
 *                  msdu data is containted in data block of the iot_pkt.
 | 
						|
 * @param tx_info:  tx descriptor
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *  ERR_OK      - for successful case
 | 
						|
 *  otherwise   - for failed case
 | 
						|
 */
 | 
						|
uint32_t cvg_send_msdu(cvg_vdev_t *vdev, iot_pkt_t* msdu_buf,
 | 
						|
    mac_tx_info *tx_info);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief send app data to mac layer
 | 
						|
 * @param vdev:     the vdev on which data will be sent
 | 
						|
 * @param msdu_buf: the buffer containing the msdu data to be sent.
 | 
						|
 *                  msdu data is containted in data block of the iot_pkt.
 | 
						|
 * @param tx_info:  tx descriptor
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *  ERR_OK      - for successful case
 | 
						|
 *  otherwise   - for failed case
 | 
						|
 */
 | 
						|
uint32_t cvg_send_app_msdu(cvg_vdev_t *vdev, iot_pkt_t* msdu_buf,
 | 
						|
    mac_tx_info *tx_info);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief enable or disable fixed rate for dedicated vdev
 | 
						|
 * @param vdev:     the vdev to be set
 | 
						|
 * @param enable:   1 - enable, 0 - disable
 | 
						|
 * @param rate_level: fixed rate level, see PLC_RATE_ADAPT_RATE_XXX
 | 
						|
 */
 | 
						|
void cvg_enable_fixed_rate(cvg_vdev_t *vdev, uint8_t enable,
 | 
						|
    uint8_t rate_level);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief enable or disable force phase tx
 | 
						|
 * @param vdev:     the vdev to be set
 | 
						|
 * @param enable:   1 - enable, 0 - disable
 | 
						|
 * @param phase:    phase, see IOT_PLC_PHASE_XXX
 | 
						|
 */
 | 
						|
void cvg_enable_force_phase(cvg_vdev_t *vdev, uint8_t enable, uint8_t phase);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief set sta joined flag.
 | 
						|
 * @param join_flag:   1 - joined, 0 - not joined
 | 
						|
 */
 | 
						|
void cvg_enable_sta_joined(cvg_vdev_t *vdev, uint8_t join_flag);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief enable or disable sw agc.
 | 
						|
 * @param enable:   1 - enable, 0 - disable
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *  ERR_OK      - for successful case
 | 
						|
 *  otherwise   - for failed case
 | 
						|
 */
 | 
						|
uint32_t cvg_enable_swagc(uint8_t enable);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief enable or disable neighbour network negotiation.
 | 
						|
 * @param enable:   1 - enable, 0 - disable
 | 
						|
 */
 | 
						|
void cvg_enable_nw_nego(cvg_vdev_t *vdev, uint8_t enable);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief set 3ps sta physical phase is L/N opposite.
 | 
						|
 * @param opposite_3ps:   1 - opposite, 0 - not opposite
 | 
						|
 */
 | 
						|
void cvg_enable_3ps_opposite(cvg_vdev_t *vdev, uint8_t opposite_3ps);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief   get noise floor of local device
 | 
						|
 *
 | 
						|
 * @return
 | 
						|
 *  1 ~ 63 which is mapped from noise floor range 31 ~ 93.
 | 
						|
 */
 | 
						|
uint8_t cvg_get_local_nf();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief set network lock status
 | 
						|
 * @param vdev:         pointer to vdev
 | 
						|
 * @param enable:       if NULL - not set network lock state.
 | 
						|
 *                      0 - disable network lock.
 | 
						|
 *                      1 - enable network lock.
 | 
						|
 * @param tsfm_addr:    transformer mac address, if NULL, not set tsfm_addr.
 | 
						|
 * @param nor_lock_time: network lock time, 0 means no lock. uint is 1min.
 | 
						|
 * @param abn_lock_time: the lock time of abnormal leave network,
 | 
						|
 *                      0 means no lock. uint is 1min.
 | 
						|
 * @param unlock_delay: network unlock delay time, unit is 1min.
 | 
						|
 */
 | 
						|
void cvg_set_nw_lock(cvg_vdev_t *vdev, uint32_t *enable,
 | 
						|
    uint8_t *tsfm_addr, uint16_t *nor_lock_time, uint16_t *abn_lock_time,
 | 
						|
    uint16_t *unlock_delay);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief set network monitor & ident enable status
 | 
						|
 * @param vdev:     pointer to vdev
 | 
						|
 * @param enable:   0 - disable, 1 - enable.
 | 
						|
 * @param wl_notify_enable: flag to mark if white list notification enable,
 | 
						|
 *                  invalid for sta role case. 0 - disable, 1 - enable.
 | 
						|
 * @param zc_notify_enable: flag to mark if zc ntb notification enable,
 | 
						|
 *                  invalid for sta role case. 0 - disable, 1 - enable.
 | 
						|
 */
 | 
						|
void cvg_set_nw_monitor_enable(cvg_vdev_t *vdev, uint32_t enable,
 | 
						|
    uint32_t wl_notify_enable, uint32_t zc_notify_enable);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief cvg_get_zc_status_sn() - get the sn of zc status report
 | 
						|
 * @param vdev:     pointer to vdev
 | 
						|
 * @return:         the value of sn
 | 
						|
 */
 | 
						|
uint8_t cvg_get_zc_status_sn(cvg_vdev_t *vdev);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief cvg_record_zc_status_sn() - record the sn of zc status report
 | 
						|
 * @param vdev:     pointer to vdev
 | 
						|
 * @return:         none
 | 
						|
 */
 | 
						|
void cvg_record_zc_status_sn(cvg_vdev_t *vdev);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_set_pkt_capture() - set the tei bitmap to be captured
 | 
						|
 *                 to capture application layer frames. only supports capture
 | 
						|
 *                 the packets matching destination tei.
 | 
						|
 * @param nwm:     pointer to vdev
 | 
						|
 * @param bm:      tei bitmap
 | 
						|
 * @param enable:  enable capture.  0 - disable, 1 - enable.
 | 
						|
 * @return:        return all captured tei bitmap.
 | 
						|
 */
 | 
						|
cvg_tei_map_t *cvg_set_pkt_capture(cvg_vdev_t *vdev, cvg_tei_map_t *bm,
 | 
						|
    uint8_t enable);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief cvg_set_pw_config() - set power config
 | 
						|
 * @param vdev:     pointer to vdev
 | 
						|
 * @param ignore_pw_collapsed: flag to mark if allow all APP data TX in power
 | 
						|
 *                  collapsed status
 | 
						|
 */
 | 
						|
void cvg_set_pw_config(cvg_vdev_t *vdev, uint8_t ignore_pw_collapsed);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief enable or disable power save function for dedicated vdev
 | 
						|
 * @param vdev:          the vdev to be set
 | 
						|
 * @param allow_sleep:   allow sleep or not
 | 
						|
 */
 | 
						|
void cvg_set_pm_save_cfg(cvg_vdev_t *vdev, uint8_t allow_sleep);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief get tx 3phase flag.
 | 
						|
 * @return: non 0 means enable tx 3phase, 0 means disable tx 3phase.
 | 
						|
 */
 | 
						|
uint8_t cvg_get_tx_3phase_flag();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg get plc ppm table
 | 
						|
 * @param vdev:       the vdev to be set
 | 
						|
 * @param ppm_tbl:    point to ppm table, length not less than
 | 
						|
 *                    PLC_MAX_NEIGHBOR_NETWORK
 | 
						|
 * @return uint8_t:   vaild nid cnt
 | 
						|
 */
 | 
						|
uint8_t cvg_get_plc_ppm_tbl(cvg_vdev_t *vdev, plc_ppm_status_t *ppm_tbl);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief cvg_get_txrx_sw_gpio_phase_valid() - get txrx switch phase valid
 | 
						|
 * @return: 0 - is invalid, 1 - is valid
 | 
						|
 */
 | 
						|
uint8_t cvg_get_txrx_sw_gpio_phase_valid();
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief convert addr type from meter to repeater
 | 
						|
 * @param repeater_addr: save the converted result
 | 
						|
 * @param meter_addr:    meter address to be converted
 | 
						|
 * @param rand_num:      association random number, and it will be updated
 | 
						|
 */
 | 
						|
void cvg_addr_convert_meter_to_repeater(uint8_t *repeater_addr,
 | 
						|
    uint8_t *meter_addr, uint32_t *rand_num);
 | 
						|
 | 
						|
/*
 | 
						|
 * @brief convert addr type from repeater to meter
 | 
						|
 * @param meter_addr:    save the converted result
 | 
						|
 * @param repeater_addr: repeater address to be converted
 | 
						|
 * @param rand_num:      association random number
 | 
						|
 */
 | 
						|
void cvg_addr_convert_repeater_to_meter(uint8_t *meter_addr,
 | 
						|
    uint8_t *repeater_addr, uint32_t *rand_num);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* CVG_H */
 |