/*
|
* 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 PDOA_3D_LIB_H
|
#define PDOA_3D_LIB_H
|
#include "mk_uwb.h"
|
|
/**
|
* @addtogroup MK8000_ALGO_PDOA
|
* @{
|
*
|
* PDoA support:
|
* - Linear 2/3/4-ants
|
* - Square 4-ants (horizontal - 360 degree, vertical - half ball 3D)
|
* - Triangle 3-ants
|
*
|
*/
|
|
enum PDOA_3D_AMBIGUITY_MODE_T
|
{
|
PDOA_3D_AMBIGUITY_LEVEL_HIGH = 0,
|
PDOA_3D_AMBIGUITY_LEVEL_MIDIUM,
|
PDOA_3D_AMBIGUITY_LEVEL_LOW,
|
PDOA_3D_AMBIGUITY_LEVEL_NONE,
|
};
|
|
struct PDOA_3D_MAC_ADDR_T
|
{
|
uint8_t mac_addr[8];
|
uint32_t elapsed_time;
|
};
|
|
struct PDOA_3D_PDOA_DATA_T
|
{
|
int16_t pdoa[18];
|
};
|
|
#ifdef __cplusplus
|
extern "C" {
|
#endif
|
|
/**
|
* @brief PDoA configuration.
|
*
|
* @param [in] ant_pattern antenna pattern
|
* @param [in] ant_layout layout of PCB board configuration
|
* @param [in] ambiguity_mode PDoA ambiguity configuration
|
* @param [in] mac_addr_cache mac address list input
|
* @param [in] azimuth previous PDoA data list input
|
* @param [in] cache_len list length(equal to the tag number supported)
|
* @param [in] timeout_ms timeout setting for PDoA ambiguity process, unit: millisecond
|
*/
|
void pdoa_3d_param_config(uint8_t ant_pattern,
|
enum ANT_LAYOUT_T ant_layout,
|
enum PDOA_3D_AMBIGUITY_MODE_T ambiguity_mode,
|
struct PDOA_3D_MAC_ADDR_T *mac_addr_cache,
|
struct PDOA_3D_PDOA_DATA_T *pdoa_data_cache,
|
size_t cache_len,
|
uint32_t timeout_ms);
|
|
/**
|
* @brief Calculate PDoA.
|
*
|
* @param [in] mac_addr mac address
|
* @param [out] elevation PDoA elevation result
|
* @param [out] azimuth PDoA azimuth result
|
* @return 1: success, 0: failure
|
*/
|
uint8_t pdoa_3d_calculate(uint8_t *mac_addr, int16_t *elevation, int16_t *azimuth);
|
|
/**
|
* @brief Set gain of each PDoA channel
|
*
|
* @param [in] gain gain list of antenna port
|
* @param [in] rx_ant_num The number of antenna gain(PDoA channel) to be set
|
* @return 0: success, -1: fail
|
*/
|
uint8_t pdoa_3d_ant_layout_get(void);
|
|
/**
|
* @brief Set gain of each PDoA channel
|
*
|
* @param [in] gain gain list of antenna port, unit: 1 percent
|
* @param [in] rx_ant_num The number of antenna gain(PDoA channel) to be set
|
* @return 0: success, -1: fail
|
*/
|
int pdoa_gain_set(int16_t *gain, uint8_t rx_ant_num);
|
|
/**
|
* @brief Set offset for each angle
|
*
|
* @param [in] angle_offset offset list for azimuth & elevation, unit: 0.1 degree
|
*/
|
int pdoa_angle_offset_set(int16_t *angle_offset);
|
|
/**
|
* @brief Get pdoa fom
|
*
|
* @param ele_fom elevation fom, completely untrustworthy when fom equal to 0
|
* @param az_fom azimuth fom, completely untrustworthy when fom equal to 0
|
*/
|
void pdoa_fom_get(uint8_t *ele_fom, uint8_t *az_fom);
|
|
/**
|
* @brief Reverse angle
|
*
|
* @param azimuth_reverse reverse azimuth
|
* @param elevation_reverse reverse elevation
|
*/
|
void pdoa_angle_reverse_set(bool azimuth_reverse, bool elevation_reverse);
|
|
#ifdef __cplusplus
|
}
|
#endif
|
|
/**
|
* @}
|
*/
|
|
#endif // PDOA_3D_LIB_H
|