/*
 * Copyright (c) 2026, Texas Instruments Incorporated
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * *  Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * *  Redistributions in binary form 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.
 *
 * *  Neither the name of Texas Instruments Incorporated nor the names of
 *    its contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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.
 */

/* Feature Extraction Library */
#include <ti/ai/edge_ai/fe/feature_extract.h>

#ifdef __cplusplus
extern "C" {
#endif

/*!
 *  @brief    Specifies the Model Types
 */
typedef enum
{
    PIR_Model   = 0, /*!< PIR Model */
    Audio_Model = 1, /*!< Audio Model */
                     /*!< Future Models */

} FeatureExtract_Model;

typedef struct
{
    FeatureExtract_Model model_type; /*!< Model type */

} FeatureExtract_Params;

/*!
 *  @brief  Function to initialize FeatureExtract_Params based on a Model type
 *
 *  @param[in]  params    A pointer to FeatureExtract_Params structure for
 *                        initialization.
 *
 *  @return     fe_status_t indicating success or error code
 */
fe_status_t FeatureExtract_config(FeatureExtract_Params *params);

/*!
 *  @brief  Runs the feature extraction on input data
 *
 *  @param[in]  params         A pointer to FeatureExtract_Params structure
 *  @param[in]  input_stream   Input data buffer
 *  @param[out] output_stream  Output feature buffer
 *
 *  @return     fe_status_t indicating success or error code
 */
fe_status_t FeatureExtract_run(FeatureExtract_Params *params, uint8_t *input_stream, float *output_stream);

/*!
 *  @brief  Finds the class of the model prediction
 *
 *  @param[in]  input   Pointer to prediction output array
 *  @param[in]  size    Number of elements in the array
 *
 *  @return     Index of the predicted class
 */
uint8_t FeatureExtract_findClass(float *input, uint8_t size);

#ifdef __cplusplus
}
#endif