#ifndef ALARMS_H_
#define ALARMS_H_

void blinkLED(uint8_t num, uint8_t ontime,uint8_t repeat);
uint8_t isBuzzerON(void);
void alarmHandler(void);
void vario_signaling(void);
void i2CLedRingState(void);
void blinkLedRing(void);
void auto_switch_led_flasher();
void init_led_flasher();
void led_flasher_set_sequence(uint8_t s);
void led_flasher_autoselect_sequence();
void init_landing_lights(void);
void auto_switch_landing_lights(void);
void PilotLamp(uint8_t count);

/*
AlarmArray
0: toggle
1: failsafe
2: noGPS
3: beeperOn
4: pMeter
5: runtime
6: vBat
7: confirmation
8: Acc
9: I2C Error
*/
enum alrm_fac {
  ALRM_FAC_TOGGLE = 0,
  ALRM_FAC_FAILSAFE,
  ALRM_FAC_GPS,
  ALRM_FAC_BEEPERON,
  ALRM_FAC_PMETER,
  ALRM_FAC_RUNTIME,
  ALRM_FAC_VBAT,
  ALRM_FAC_CONFIRM,
  ALRM_FAC_ACC,
  ALRM_FAC_I2CERROR,
  ALRM_FAC_SIZE, // MUST be LAST - used for size of array alarmArray
 };


/*
Resources:
0: onboard LED
1: Buzzer
2: PL GREEN
3: PL BLUE
4: PL RED
*/
enum alrm_res {
  ALRM_RES_LED = 0,
  ALRM_RES_BUZZER,
  ALRM_RES_PL_GREEN,
  ALRM_RES_PL_BLUE,
  ALRM_RES_PL_RED,
  ALRM_RES_PL     ,
  ALRM_RES_ANY    ,
};

enum alrm_lvl_onoff {
 ALRM_LVL_OFF = 0,
 ALRM_LVL_ON = 1,
};
enum alrm_lvl_failsafe {
 ALRM_LVL_FAILSAFE_FINDME = 1,
 ALRM_LVL_FAILSAFE_PANIC,
 };
enum alrm_lvl_toggle {
 ALRM_LVL_TOGGLE_1  = 1,
 ALRM_LVL_TOGGLE_2    ,
 ALRM_LVL_TOGGLE_ELSE ,
};
#if GPS
  enum alrm_lvl_gps {
   ALRM_LVL_GPS_NOFIX  = 2,
  };
#endif
#ifdef VBAT
  enum alrm_lvl_vbat {
   ALRM_LVL_VBAT_INFO  = 1,
   ALRM_LVL_VBAT_WARN ,
   ALRM_LVL_VBAT_CRIT ,
  };
#endif
enum alrm_lvl_confirm {
 ALRM_LVL_CONFIRM_1 = 1,
 ALRM_LVL_CONFIRM_2    ,
 ALRM_LVL_CONFIRM_ELSE ,
};

#define SET_ALARM(fac, level) alarmArray[fac] = level
#ifdef BUZZER
  #define SET_ALARM_BUZZER(fac, level)    SET_ALARM( fac, level)
#else
  #define SET_ALARM_BUZZER(fac, level)
#endif

#define IS_ALARM_SET(fac, level) ( alarmArray[fac] == level )

#endif /* ALARMS_H_ */
