#ifndef INC_IMD_MONITORING_H
#define INC_IMD_MONITORING_H

#include <stdint.h>

#include "stm32f3xx_hal.h"

typedef enum {
  IMD_STATE_UNKNOWN,
  IMD_STATE_SHORTCIRCUIT_SUPPLY,
  IMD_STATE_SHORTCIRCUIT_GND,
  IMD_STATE_NORMAL,
  IMD_STATE_UNDERVOLTAGE,
  IMD_STATE_SST,
  IMD_STATE_DEV_ERROR,
  IMD_STATE_GND_FAULT,
} IMDState;

typedef struct {
  int ok;

  IMDState state;
  uint32_t r_iso;

  uint32_t freq;
  uint32_t duty_cycle;
  uint32_t last_high;
} IMDData;

extern IMDData imd_data;

void imd_init(TIM_HandleTypeDef *htim);

void imd_update(void);

#endif // INC_IMD_MONITORING_H
