/*
|
* Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and
|
* its subsidiaries and affiliates (collectly called MKSEMI).
|
*
|
* All rights reserved.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are met:
|
*
|
* 1. Redistributions of source code must retain the above copyright notice,
|
* this list of conditions and the following disclaimer.
|
*
|
* 2. Redistributions in binary form, except as embedded into an MKSEMI
|
* integrated circuit in a product or a software update for such product,
|
* must reproduce the above copyright notice, this list of conditions and
|
* the following disclaimer in the documentation and/or other materials
|
* provided with the distribution.
|
*
|
* 3. Neither the name of MKSEMI nor the names of its contributors may be used
|
* to endorse or promote products derived from this software without
|
* specific prior written permission.
|
*
|
* 4. This software, with or without modification, must only be used with a
|
* MKSEMI integrated circuit.
|
*
|
* 5. Any software provided in binary form under this license must not be
|
* reverse engineered, decompiled, modified and/or disassembled.
|
*
|
* THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
* MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
*/
|
|
#ifndef MK_RADAR_H_
|
#define MK_RADAR_H_
|
#include "mk_common.h"
|
// #include "uwb_api.h"
|
|
/**
|
* @addtogroup MK8000_UWB
|
* @{
|
*/
|
|
#ifndef UWB_RADAR_2G_MODE_EN
|
#define UWB_RADAR_2G_MODE_EN 1
|
#endif
|
|
#ifndef UWB_RADAR_PULSE_PERIOD
|
#define UWB_RADAR_PULSE_PERIOD 2
|
#endif
|
|
#if UWB_RADAR_2G_MODE_EN
|
/* Samples per radar pulse period (1ns per sample), 0:16ns - 16, 1:32ns - 32, 2:64ns - 64, 3:128ns - 128, 4:256ns - 256 */
|
#define PULSE_PERIOD_POINTS(x) (16U << (x))
|
|
/* Dump data size, unit: Byte ( 0:STS segment length 16 - 32K, 1:STS segment length 32 - 64K, 2:STS segment length 64 - 128K) */
|
#define DUMP_DATA_SIZE(x) ((32 * 1024) << (x))
|
|
/* Dump memory bank number, 128bits per clock cycle */
|
#define BANK_NUM (4)
|
|
#else
|
|
/* Samples per radar pulse period (2ns per sample), 0:16ns - 8, 1:32ns - 16, 2:64ns - 32, 3:128ns - 64, 4:256ns - 128 */
|
#define PULSE_PERIOD_POINTS(x) (8U << (x))
|
|
/* Dump data size, unit: Byte ( 0:STS segment length 16 - 16K, 1:STS segment length 32 - 32K, 2:STS segment length 64 - 64K) */
|
#define DUMP_DATA_SIZE(x) ((16 * 1024) << (x))
|
|
/* Dump memory bank number, 64bits per clock cycle */
|
#define BANK_NUM (2)
|
|
#endif
|
|
// output frame samples
|
#define OUT_FRAME_LEN (PULSE_PERIOD_POINTS(UWB_RADAR_PULSE_PERIOD) * 2)
|
|
/** UWB RADAR STS segment length */
|
enum UWB_RADAR_STS_SEGLEN_T
|
{
|
UWB_RADAR_STS_SEGLEN16 = 0, /*!< Dump 32K I/Q data */
|
UWB_RADAR_STS_SEGLEN32 = 1, /*!< Dump 64K I/Q data */
|
UWB_RADAR_STS_SEGLEN64 = 2, /*!< Dump 128K I/Q data */
|
};
|
|
/** UWB RADAR pulse period */
|
enum UWB_RADAR_PULSE_PERIOD_T
|
{
|
UWB_RADAR_PULSE_PERIOD_16NS = 0,
|
UWB_RADAR_PULSE_PERIOD_32NS = 1,
|
UWB_RADAR_PULSE_PERIOD_64NS = 2,
|
UWB_RADAR_PULSE_PERIOD_128NS = 3,
|
UWB_RADAR_PULSE_PERIOD_256NS = 4,
|
};
|
|
/**
|
* @brief UWB_RADAR configure structure
|
*/
|
struct UWB_RADAR_T
|
{
|
enum UWB_RADAR_STS_SEGLEN_T sts_len;
|
enum UWB_RADAR_PULSE_PERIOD_T pulse_period;
|
uint8_t ranging_tx_power_level;
|
uint8_t tx_power_level;
|
uint8_t channel_num;
|
uint8_t rx_gain_level;
|
uint8_t lna_gain_level;
|
uint8_t bandwidth;
|
uint8_t ant_id;
|
uint8_t request;
|
};
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/**
|
* @brief Enable UWB radar.
|
*/
|
int radar_enable(void);
|
|
/**
|
* @brief Disable UWB radar.
|
*/
|
int radar_disable(void);
|
|
/**
|
* @brief Configure radar.
|
* @param[in] radar_cfg Radar configuration
|
*/
|
void radar_config(struct UWB_RADAR_T *radar_cfg);
|
|
/**
|
* @brief Trigger the MAC start to start radar function.
|
* @param[in] ant_idx Antenna index
|
*/
|
void radar_start(uint8_t ant_idx);
|
|
/**
|
* @brief Process the radar data.
|
* @param[in] raw_data_addr Input radar raw data address
|
* @param[in] data_out Output radar result data
|
* @param[in] data_len Output radar result data length
|
*/
|
void radar_data_process(uint32_t *raw_data_addr, float *data_out, uint16_t *data_len);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
/**
|
* @}
|
*/
|
|
#endif /* MK_UWB_H_ */
|