#ifndef COMMON_CONFIG_COMMONOBJECTS_H_
#define COMMON_CONFIG_COMMONOBJECTS_H_

#include <cstdint>

namespace objects {
enum commonObjects : uint32_t {
  /* First Byte 0x50-0x52 reserved for PUS Services **/
  CCSDS_PACKET_DISTRIBUTOR = 0x50000100,
  PUS_PACKET_DISTRIBUTOR = 0x50000200,
  TMTC_BRIDGE = 0x50000300,
  TMTC_POLLING_TASK = 0x50000400,
  FILE_SYSTEM_HANDLER = 0x50000500,
  SDC_MANAGER = 0x50000550,
  PTME = 0x50000600,
  PDEC_HANDLER = 0x50000700,
  CCSDS_HANDLER = 0x50000800,

  /* 0x43 ('C') for Controllers */
  THERMAL_CONTROLLER = 0x43400001,
  ACS_CONTROLLER = 0x43100002,
  CORE_CONTROLLER = 0x43000003,

  /* 0x44 ('D') for device handlers */
  MGM_0_LIS3_HANDLER = 0x44120006,
  MGM_1_RM3100_HANDLER = 0x44120107,
  MGM_2_LIS3_HANDLER = 0x44120208,
  MGM_3_RM3100_HANDLER = 0x44120309,
  GYRO_0_ADIS_HANDLER = 0x44120010,
  GYRO_1_L3G_HANDLER = 0x44120111,
  GYRO_2_ADIS_HANDLER = 0x44120212,
  GYRO_3_L3G_HANDLER = 0x44120313,
  RW1 = 0x44120047,
  RW2 = 0x44120148,
  RW3 = 0x44120249,
  RW4 = 0x44120350,
  STAR_TRACKER = 0x44130001,
  GPS_CONTROLLER = 0x44130045,

  IMTQ_HANDLER = 0x44140014,
  TMP1075_HANDLER_1 = 0x44420004,
  TMP1075_HANDLER_2 = 0x44420005,
  PCDU_HANDLER = 0x442000A1,
  P60DOCK_HANDLER = 0x44250000,
  PDU1_HANDLER = 0x44250001,
  PDU2_HANDLER = 0x44250002,
  ACU_HANDLER = 0x44250003,
  BPX_BATT_HANDLER = 0x44260000,
  PLPCDU_HANDLER = 0x44300000,
  RAD_SENSOR = 0x443200A5,
  PLOC_UPDATER = 0x44330000,
  PLOC_MEMORY_DUMPER = 0x44330001,
  STR_HELPER = 0x44330002,
  PLOC_MPSOC_HELPER = 0x44330003,
  AXI_PTME_CONFIG = 0x44330004,
  PTME_CONFIG = 0x44330005,
  PLOC_MPSOC_HANDLER = 0x44330015,
  PLOC_SUPERVISOR_HANDLER = 0x44330016,
  PLOC_SUPERVISOR_HELPER = 0x44330017,
  SOLAR_ARRAY_DEPL_HANDLER = 0x444100A2,
  HEATER_HANDLER = 0x444100A4,

  /**
   * Not yet specified which pt1000 will measure which device/location in the satellite.
   * Therefore object ids are named according to the IC naming of the RTDs in the schematic.
   */
  RTD_0_IC3_PLOC_HEATSPREADER = 0x44420016,
  RTD_1_IC4_PLOC_MISSIONBOARD = 0x44420017,
  RTD_2_IC5_4K_CAMERA = 0x44420018,
  RTD_3_IC6_DAC_HEATSPREADER = 0x44420019,
  RTD_4_IC7_STARTRACKER = 0x44420020,
  RTD_5_IC8_RW1_MX_MY = 0x44420021,
  RTD_6_IC9_DRO = 0x44420022,
  RTD_7_IC10_SCEX = 0x44420023,
  RTD_8_IC11_X8 = 0x44420024,
  RTD_9_IC12_HPA = 0x44420025,
  RTD_10_IC13_PL_TX = 0x44420026,
  RTD_11_IC14_MPA = 0x44420027,
  RTD_12_IC15_ACU = 0x44420028,
  RTD_13_IC16_PLPCDU_HEATSPREADER = 0x44420029,
  RTD_14_IC17_TCS_BOARD = 0x44420030,
  RTD_15_IC18_IMTQ = 0x44420031,

  // Name convention for SUS devices
  // SUS_<IDX>_<N/R>_LOC_X<F/M/B>Y<F/M/B>Z<F/M/B>_PT_<DIR><F/B>
  // LOC: Location
  // PT: Pointing
  // N/R: Nominal/Redundant
  // F/M/B: Forward/Middle/Backwards
  SUS_0_N_LOC_XFYFZM_PT_XF = 0x44120032,
  SUS_6_R_LOC_XFYBZM_PT_XF = 0x44120038,

  SUS_1_N_LOC_XBYFZM_PT_XB = 0x44120033,
  SUS_7_R_LOC_XBYBZM_PT_XB = 0x44120039,

  SUS_2_N_LOC_XFYBZB_PT_YB = 0x44120034,
  SUS_8_R_LOC_XBYBZB_PT_YB = 0x44120040,

  SUS_3_N_LOC_XFYBZF_PT_YF = 0x44120035,
  SUS_9_R_LOC_XBYBZB_PT_YF = 0x44120041,

  SUS_4_N_LOC_XMYFZF_PT_ZF = 0x44120036,
  SUS_10_N_LOC_XMYBZF_PT_ZF = 0x44120042,

  SUS_5_N_LOC_XFYMZB_PT_ZB = 0x44120037,
  SUS_11_R_LOC_XBYMZB_PT_ZB = 0x44120043,

  SYRLINKS_HK_HANDLER = 0x445300A3,

  // 0x60 for other stuff
  HEATER_0_PLOC_PROC_BRD = 0x60000000,
  HEATER_1_PCDU_BRD = 0x60000001,
  HEATER_2_ACS_BRD = 0x60000002,
  HEATER_3_OBC_BRD = 0x60000003,
  HEATER_4_CAMERA = 0x60000004,
  HEATER_5_STR = 0x60000005,
  HEATER_6_DRO = 0x60000006,
  HEATER_7_HPA = 0x60000007,

  // 0x73 ('s') for assemblies and system/subsystem components
  ACS_BOARD_ASS = 0x73000001,
  SUS_BOARD_ASS = 0x73000002,
  TCS_BOARD_ASS = 0x73000003,
  RW_ASS = 0x73000004
};
}

#endif /* COMMON_CONFIG_COMMONOBJECTS_H_ */