/* * 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 LIB_KF_H #define LIB_KF_H #include "mk_common.h" enum KF_DATA_TYPE_T { KF_DATA_TYPE_RANGING = 0, KF_DATA_TYPE_AZIMUTH = 1, KF_DATA_TYPE_ELEVATION = 2, }; struct KF_MAC_ADDR_T { uint8_t mac_addr[8]; uint32_t elapsed_time; uint8_t data_type; }; struct MAT_CACHE_T { int row, col; float *element; }; struct KF_MAT_VALUE_CACHE_T { float float_1_2[1 * 1 * 2]; float float_2_1[4 * 2 * 1]; float float_2_2[2 * 2 * 2]; }; struct KF_CHANNEL_CACHE_T { struct MAT_CACHE_T mat_cache[7]; float float_cache[4]; uint16_t uint16_t_chache[2]; }; /** * @addtogroup MK8000_ALGO_KF * @{ */ #ifdef __cplusplus extern "C" { #endif /** * @brief Configure location post process Kalman filter. * * @param[in] update_period_ms Ranging result update period, unit: ms * @param[in] mac_addr_cache mac address list input * @param[in] kf_channel_cache kf channel state data list input * @param[in] mat_value_cache kf mat data list input * @param[in] cache_len list length(equal to the tag number supported) * @param[in] timeout_ms timeout setting for Kalman filter, unit: millisecond */ void loc_post_kf_config(uint32_t update_period_ms, struct KF_MAC_ADDR_T *mac_addr_cache, struct KF_CHANNEL_CACHE_T *kf_channel_cache, struct KF_MAT_VALUE_CACHE_T *mat_value_cache, size_t cache_len, uint32_t timeout_ms); /** * @brief Filter input data. * @param[in] data_meas data measurement result * @param[out] data_post data filtered result * @param[in] channel data type */ /** * @brief Filter input data. * * @param[in] data_meas data measurement result * @param[in] data_type data type * @param[in] mac_addr mac address * @param[out] data_post data filtered result * @return uint8_t */ uint8_t loc_kf_filter(float data_meas, enum KF_DATA_TYPE_T data_type, uint8_t *mac_addr, float *data_post); /** * @brief Get KF lib version. * @return KF lib version */ const char *MK8000_get_kflib_version(void); #ifdef __cplusplus } #endif /** * @} */ #endif // LIB_KF_H