186 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			6.0 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 MAC_RF_SCAN_H
 | 
						|
#define MAC_RF_SCAN_H
 | 
						|
 | 
						|
#include "os_types.h"
 | 
						|
#include "os_timer_api.h"
 | 
						|
#include "iot_config.h"
 | 
						|
#include "mac_ppm_scan.h"
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
extern "C" {
 | 
						|
#endif
 | 
						|
 | 
						|
/* define rf scan timer unit 500ms */
 | 
						|
#define MAC_RF_SCAN_TIMER_UNIT                   (500)
 | 
						|
/* define rf scan default dwell uint MAC_RF_SCAN_TIMER_UNIT, 15s */
 | 
						|
#define MAC_RF_SCAN_DWELL_TIME                   (30)
 | 
						|
/* define rf scan default dwell uint MAC_RF_SCAN_TIMER_UNIT, 5s */
 | 
						|
#define MAC_RF_SCAN_MIN_TIME                     (10)
 | 
						|
/* define rf scan default dwell uint MAC_RF_SCAN_TIMER_UNIT, 20s */
 | 
						|
#define MAC_RF_SCAN_FIRST_DWELL_TIME             (40)
 | 
						|
 | 
						|
/* define scan option cahnnel table max */
 | 
						|
#define MAC_RF_SCAN_OP_CHN_MAX                   (104)
 | 
						|
 | 
						|
/* scan option channel */
 | 
						|
typedef struct _mac_rf_scan_option_channel {
 | 
						|
    /* scan option id */
 | 
						|
    uint8_t option_id;
 | 
						|
    /* scan channel id */
 | 
						|
    uint8_t channel_id;
 | 
						|
    /* option and channel min time, uint MAC_RF_SCAN_TIMER_UNIT */
 | 
						|
    uint8_t min_time;
 | 
						|
    /* option and channel dwell time, uint MAC_RF_SCAN_TIMER_UNIT */
 | 
						|
    uint8_t dwell_time;
 | 
						|
} mac_rf_scan_op_chn_t;
 | 
						|
 | 
						|
/* channel table ctxt */
 | 
						|
typedef struct _mac_rf_scan_op_chn_ctxt {
 | 
						|
    /* the point of scan option channel table */
 | 
						|
    mac_rf_scan_op_chn_t *rf_scan_op_chn_tbl;
 | 
						|
} mac_rf_scan_op_chn_ctxt_t;
 | 
						|
 | 
						|
/* this is per rf pdev, for channel scan */
 | 
						|
typedef struct _mac_rf_scan_ctxt {
 | 
						|
    /* which option is on */
 | 
						|
    uint8_t option_id;
 | 
						|
    /* which channel is on */
 | 
						|
    uint8_t channel_id;
 | 
						|
    /* flags */
 | 
						|
    uint16_t
 | 
						|
        /* means option/channel selected by upper layer */
 | 
						|
        channel_selected : 1,
 | 
						|
        /* flag to mark if current option/channel rx packet is valid */
 | 
						|
        is_valid_packet :  1,
 | 
						|
        resv            :  14;
 | 
						|
    /* scan table cnt */
 | 
						|
    uint8_t scan_cnt;
 | 
						|
    /* current scan idx */
 | 
						|
    uint8_t scan_idx;
 | 
						|
    /* ppm scan timer */
 | 
						|
    timer_id_t rf_scan_timer;
 | 
						|
    /* mac rf scan option channel ctxt */
 | 
						|
    mac_rf_scan_op_chn_ctxt_t rf_scan_op_chn_ctxt;
 | 
						|
    uint32_t phr_with_pld_cnt;
 | 
						|
    uint32_t phr_witchout_pld_cnt;
 | 
						|
    /* record rf timer start ms */
 | 
						|
    uint32_t timer_start_ms;
 | 
						|
} mac_rf_scan_ctxt_t;
 | 
						|
 | 
						|
/*
 | 
						|
 * @breif mac_rf_scan_set_scan_tbl()        - set rf scan table.
 | 
						|
 * @param tbl_size                          - table size.
 | 
						|
 * @param rf_scan_tbl                       - the point to set scan table.
 | 
						|
 * @return void                             - void.
 | 
						|
 */
 | 
						|
void mac_rf_scan_set_scan_tbl(uint8_t tbl_size, uint8_t *rf_scan_tbl);
 | 
						|
 | 
						|
/**
 | 
						|
 *@brief mac_rf_scan_start  start mac rf scan process
 | 
						|
 *
 | 
						|
 *@exception                [none.]
 | 
						|
 *@return                   [none.]
 | 
						|
*/
 | 
						|
uint32_t mac_rf_scan_start();
 | 
						|
 | 
						|
/**
 | 
						|
 *@brief mac_rf_scan_stop
 | 
						|
 *
 | 
						|
 * stop mac scan process, usually found a candidate
 | 
						|
 *
 | 
						|
 *@exception                [none.]
 | 
						|
 *@return                   [none.]
 | 
						|
*/
 | 
						|
uint32_t mac_rf_scan_stop();
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief mac_scan_set_channel_selected
 | 
						|
 * @param is_sel            [1: selected done; 0: not selected, need scan]
 | 
						|
 * @return                  [ERR_OK or else fail]
 | 
						|
 */
 | 
						|
void mac_rf_scan_set_channel_selected(uint32_t is_sel);
 | 
						|
 | 
						|
/**
 | 
						|
 * @brief mac_rf_scan_get_channel_selected
 | 
						|
 * @return                  [1: selected done; 0: not selected, need scan]
 | 
						|
 */
 | 
						|
uint32_t mac_rf_scan_get_channel_selected();
 | 
						|
 | 
						|
/**
 | 
						|
 *@brief mac_rf_scan_next_target jump to next target option/channel section
 | 
						|
 *
 | 
						|
 *@param arg                     [rf pdev context]
 | 
						|
 *@exception                     [none.]
 | 
						|
 *@return                        [none.]
 | 
						|
*/
 | 
						|
uint32_t mac_rf_scan_next_target(void *arg);
 | 
						|
 | 
						|
/**
 | 
						|
 *@brief mac_rf_scan_init       init the rf scan context in pdev
 | 
						|
 *
 | 
						|
 *@param pdev_in                [rf pdev pointer]
 | 
						|
 *@exception                    [none.]
 | 
						|
 *@return                       [none.]
 | 
						|
*/
 | 
						|
void mac_rf_scan_init(void *pdev_in);
 | 
						|
 | 
						|
/**
 | 
						|
 *@brief mac_rf_scan_update_rx_status   update rx status
 | 
						|
 *
 | 
						|
 *@param vdev                   [mac vdev pointer]
 | 
						|
 *@param scan                   [point to rf scan context]
 | 
						|
 *@param nid                    [the nid for the packet to be processed]
 | 
						|
 *@param rx_channel             [the rx channel for the packet to be processed]
 | 
						|
 *@exception                    [none.]
 | 
						|
 *@return                       [none.]
 | 
						|
*/
 | 
						|
void mac_rf_scan_update_rx_status(void *vdev_in, mac_rf_scan_ctxt_t *scan,
 | 
						|
    uint32_t nid, uint8_t rx_channel);
 | 
						|
 | 
						|
/**
 | 
						|
 *@brief mac_rf_ntb_ppm_sync    mac rf sync ppm
 | 
						|
 *
 | 
						|
 *@param rf_vdev                [mac rf vdev pointer]
 | 
						|
 *@param remote_ts              [network timestamp]
 | 
						|
 *@param local_ts               [local ts]
 | 
						|
 *@param local_ntb              [local ntb]
 | 
						|
 *@param bcn_period_ms          [bcn period]
 | 
						|
 *@param ppm_err_record         [ppm_err_record]
 | 
						|
 *@param rfppm                  [rf ppm from interface]
 | 
						|
 *@exception                    [none.]
 | 
						|
 *@return uint32_t              [0.]
 | 
						|
 */
 | 
						|
uint32_t mac_rf_ntb_ppm_sync(void *rf_vdev,
 | 
						|
    uint32_t remote_ts, uint32_t local_ts, uint32_t local_ntb,
 | 
						|
    uint32_t bcn_period_ms, int16_t *ppm_err_record, int16_t rfppm);
 | 
						|
 | 
						|
/**
 | 
						|
 *@brief mac_rf_ppm_init        mac rf ppm context
 | 
						|
 *
 | 
						|
 *@param rf_vdev                [mac rf vdev pointer]
 | 
						|
 *@param ppm                    [ppm value, unit: 1/64]
 | 
						|
 *@return                       [none]
 | 
						|
 */
 | 
						|
void mac_rf_ppm_init(void *rf_vdev, int16_t ppm);
 | 
						|
 | 
						|
#ifdef __cplusplus
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif // !MAC_RF_SCAN_H
 |