#ifndef FSFWCONFIG_DEVICES_ADDRESSES_H_
#define FSFWCONFIG_DEVICES_ADDRESSES_H_

#include <fsfw/devicehandlers/CookieIF.h>

#include <cstdint>

#include "objects/systemObjectList.h"

namespace addresses {
/* Logical addresses have uint32_t datatype */
enum logicalAddresses : address_t {
  PCDU,

  MGM_0_LIS3 = objects::MGM_0_LIS3_HANDLER,
  MGM_1_RM3100 = objects::MGM_1_RM3100_HANDLER,
  MGM_2_LIS3 = objects::MGM_2_LIS3_HANDLER,
  MGM_3_RM3100 = objects::MGM_3_RM3100_HANDLER,

  GYRO_0_ADIS = objects::GYRO_0_ADIS_HANDLER,
  GYRO_1_L3G = objects::GYRO_1_L3G_HANDLER,
  GYRO_2_ADIS = objects::GYRO_2_ADIS_HANDLER,
  GYRO_3_L3G = objects::GYRO_3_L3G_HANDLER,

  RAD_SENSOR = objects::RAD_SENSOR,

  SUS_0 = objects::SUS_0_N_LOC_XFYFZM_PT_XF,
  SUS_1 = objects::SUS_1_N_LOC_XBYFZM_PT_XB,
  SUS_2 = objects::SUS_2_N_LOC_XFYBZB_PT_YB,
  SUS_3 = objects::SUS_3_N_LOC_XFYBZF_PT_YF,
  SUS_4 = objects::SUS_4_N_LOC_XMYFZF_PT_ZF,
  SUS_5 = objects::SUS_5_N_LOC_XFYMZB_PT_ZB,
  SUS_6 = objects::SUS_6_R_LOC_XFYBZM_PT_XF,
  SUS_7 = objects::SUS_7_R_LOC_XBYBZM_PT_XB,
  SUS_8 = objects::SUS_8_R_LOC_XBYBZB_PT_YB,
  SUS_9 = objects::SUS_9_R_LOC_XBYBZB_PT_YF,
  SUS_10 = objects::SUS_10_N_LOC_XMYBZF_PT_ZF,
  SUS_11 = objects::SUS_11_R_LOC_XBYMZB_PT_ZB,

  /* Dummy and Test Addresses */
  DUMMY_ECHO = 129,
  DUMMY_GPS0 = 130,
  DUMMY_GPS1 = 131,
};

enum I2cAddress : address_t {
  BPX_BATTERY = 0x07,
  IMTQ = 0x10,
  TMP1075_TCS_0 = 0x48,
  TMP1075_TCS_1 = 0x49,
  TMP1075_PLPCDU_0 = 0x4A,
  TMP1075_PLPCDU_1 = 0x4B,
  TMP1075_IF_BOARD = 0x4C,
};

enum spiAddresses : address_t {
  RTD_IC_3,
  RTD_IC_4,
  RTD_IC_5,
  RTD_IC_6,
  RTD_IC_7,
  RTD_IC_8,
  RTD_IC_9,
  RTD_IC_10,
  RTD_IC_11,
  RTD_IC_12,
  RTD_IC_13,
  RTD_IC_14,
  RTD_IC_15,
  RTD_IC_16,
  RTD_IC_17,
  RTD_IC_18,
  RW1,
  RW2,
  RW3,
  RW4,
  PLPCDU_ADC
};

/* Addresses of devices supporting the CSP protocol */
enum cspAddresses : uint8_t {
  P60DOCK = 4,
  ACU = 2,
  PDU1 = 3,
  /* PDU2 occupies X4 slot of P60Dock */
  PDU2 = 6
};
}  // namespace addresses

#endif /* FSFWCONFIG_DEVICES_ADDRESSES_H_ */