#ifndef _INPUT_FILTER_H
#define _INPUT_FILTER_H

#include <stdint.h>   // Necessário para uint32_t
#include <inttypes.h> // Para uso de PRIu32 se necessário em logs

// Constante mínima de tempo (tau), em milissegundos
#ifndef INPUT_FILTER_MIN_TAU
#define INPUT_FILTER_MIN_TAU 10  // ms
#endif

/**
 * @brief Calcula o fator de suavização com base em delta e tau.
 * 
 * @param delta Tempo desde a última atualização (ms)
 * @param tau Constante de tempo do filtro (ms)
 * @return double Fator de suavização (0.0 a 1.0)
 */
double getFactor(uint32_t delta, uint32_t tau);

/**
 * @brief Aplica filtro exponencial a uma entrada.
 * 
 * @param input Valor atual medido
 * @param filtered Valor suavizado anterior
 * @param tau Constante de tempo (ms)
 * @return double Novo valor suavizado
 */
double filter(double input, double filtered, uint32_t tau);

#endif // _INPUT_FILTER_H
