#ifndef VACUUM_BOARD_H
#define VACUUM_BOARD_H

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

typedef struct {
    uint16_t user_adc_raw;
    uint16_t vbus_adc_raw;
    uint16_t current_adc_raw;
    uint32_t estimated_vbus_mv;
    uint32_t estimated_current_ma;
    uint32_t tach_edges_100ms;
    uint32_t sampled_at_ms;
    bool key_pressed;
    bool adc_valid;
    uint8_t fan_status;
    bool fan_power_enabled;
    bool fan_power_command_confirmed;
    bool fan_fault_latched;
} vacuum_board_sample_t;

/* Diagnostic snapshots are available to a debugger; no serial protocol is
 * assigned because the reference product has no confirmed telemetry port. */
extern volatile vacuum_board_sample_t g_vacuum_diagnostics;

void vacuum_board_force_off(void);
void vacuum_board_force_fan_disabled(void);
int vacuum_board_set_fan_power(void *context, bool enabled);
int vacuum_board_set_fan_duty(void *context, uint16_t duty_permille);
bool vacuum_board_init(void);
bool vacuum_board_sample(vacuum_board_sample_t *sample, uint32_t now_ms);
void vacuum_board_publish_diagnostics(const vacuum_board_sample_t *sample);
void vacuum_board_note_tach_edge(void);

#endif
