#ifndef PILOT_H_
#define PILOT_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <stdbool.h>
#include <stdint.h>

/**
 * @brief Níveis categóricos de tensão no sinal CP (Control Pilot)
 */
typedef enum
{
    PILOT_VOLTAGE_12, ///< Estado A: +12V
    PILOT_VOLTAGE_9,  ///< Estado B: +9V
    PILOT_VOLTAGE_6,  ///< Estado C: +6V
    PILOT_VOLTAGE_3,  ///< Estado D: +3V
    PILOT_VOLTAGE_1   ///< Estado E/F: abaixo de 3V
} pilot_voltage_t;

/**
 * @brief Inicializa o driver do sinal Pilot
 */
void pilot_init(void);

/**
 * @brief Define o nível do Pilot: +12V ou -12V
 *
 * @param level true = +12V, false = -12V
 */
void pilot_set_level(bool level);

/**
 * @brief Ativa o PWM do Pilot com corrente limitada
 *
 * @param amps Corrente em décimos de ampère (ex: 160 = 16A)
 */
void pilot_set_amps(uint16_t amps);

/**
 * @brief Mede o nível de tensão do Pilot e detecta -12V
 *
 * @param up_voltage        Valor categórico da tensão positiva
 * @param down_voltage_n12  true se o nível negativo atingir -12V
 */
void pilot_measure(pilot_voltage_t *up_voltage, bool *down_voltage_n12);

/**
 * @brief Retorna o estado lógico atual do Pilot (nível alto = +12V)
 *
 * @return true se nível atual for +12V, false se for -12V
 */
bool pilot_get_state(void);

/**
 * @brief Cache interno opcional dos níveis de tensão reais do Pilot
 */
typedef struct {
    uint16_t high_mv;  ///< Pico positivo medido (mV)
    uint16_t low_mv;   ///< Pico negativo medido (mV)
} pilot_voltage_cache_t;

#ifdef __cplusplus
}
#endif

#endif /* PILOT_H_ */
