#ifndef LINUX_FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_
#define LINUX_FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_

#include <fsfw/objectmanager/frameworkObjects.h>

#include <cstdint>

#include "eive/objects.h"

// The objects will be instantiated in the ID order
// For naming scheme see flight manual
/*
https://egit.irs.uni-stuttgart.de/redmine/projects/eive-flight-manual/wiki/EIVE_Project_IDs

Second byte first four bits is the subsystem:
OBDH 0x0
ACS  0x1
EPS  0x2
PL   0x3
TCS  0x4
COM  0x5

Second byte last four bits is the bus:
None 0x0
GPIO 0x1
SPI  0x2
UART 0x3
I2C  0x4
CAN  0x5

Third byte is an assembly counter if there are multiple redundant devices.
Fourth byte is a unique counter.

 */
namespace objects {
enum sourceObjects : uint32_t {
  /* 0x53 reserved for FSFW */
  FW_ADDRESS_START = PUS_SERVICE_1_VERIFICATION,
  FW_ADDRESS_END = TIME_STAMPER,
  PUS_SERVICE_6 = 0x51000500,

  /* 0x49 ('I') for Communication Interfaces **/
  ARDUINO_COM_IF = 0x49000000,
  CSP_COM_IF = 0x49050001,
  I2C_COM_IF = 0x49040002,
  SPI_MAIN_COM_IF = 0x49020004,
  GPIO_IF = 0x49010005,

  /* Custom device handler */

  /* 0x54 ('T') for test handlers */
  TEST_TASK = 0x54694269,
  LIBGPIOD_TEST = 0x54123456,
  SPI_TEST = 0x54000010,
  UART_TEST = 0x54000020,
  I2C_TEST = 0x54000030,
  DUMMY_INTERFACE = 0x5400CAFE,
  DUMMY_HANDLER = 0x5400AFFE,
  P60DOCK_TEST_TASK = 0x00005060,
  DUMMY_COM_IF = 0x54000040
};
}

#endif /* LINUX_FSFWCONFIG_OBJECTS_SYSTEMOBJECTLIST_H_ */