#ifndef LAMP_MEASUREMENT_H
#define LAMP_MEASUREMENT_H
#include "lamp_adc.h"
enum lamp_measurement_status {
    LAMP_MEAS_OK, LAMP_MEAS_ARGUMENT, LAMP_MEAS_CALIBRATION,
    LAMP_MEAS_RAW_RANGE, LAMP_MEAS_STALE, LAMP_MEAS_SUPPLY_RANGE
};
enum lamp_measurement_flags {
    LAMP_MEAS_CURRENT_OUTSIDE_GAIN_WINDOW=1u,
    LAMP_MEAS_NTC_NEAR_SHORT=2u,
    LAMP_MEAS_NTC_NEAR_OPEN=4u
};
/* VREFINT factory calibration corrects the reference estimate. Frontend gains,
 * offsets, NTC installation and analog dynamics are NOT physically calibrated.
 * Diagnostic data must never be treated as output authorization. */
typedef struct {
    uint32_t estimated_vdda_uv, nominal_led_uv, nominal_led_current_ua;
    uint32_t nominal_ntc_ohm, quality_flags;
    uint32_t first_sample_ms, completed_ms, sequence;
} lamp_measurement;
enum lamp_measurement_status lamp_measurement_from_frame(
    const lamp_adc_frame *raw, uint16_t factory_vrefint_cal,
    uint32_t now_ms, lamp_measurement *out);
uint16_t lamp_read_factory_vrefint_cal(void);
#endif
