Files
kunlun/plc/halmac/inc/mac_rf_scan.h
2024-09-28 14:24:04 +08:00

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