#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 */
    P60DOCK_HANDLER = 0x44250000,
    PDU1_HANDLER = 0x44250001,
    PDU2_HANDLER = 0x44250002,
    ACU_HANDLER = 0x44250003,
    BPX_BATT_HANDLER = 0x44260000,
    TMP1075_HANDLER_1 = 0x44420004,
    TMP1075_HANDLER_2 = 0x44420005,
    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,
    PLPCDU_HANDLER = 0x44300000,

    IMTQ_HANDLER = 0x44140014,
    PLOC_MPSOC_HANDLER = 0x44330015,
    PLOC_SUPERVISOR_HANDLER = 0x44330016,
    PLOC_SUPERVISOR_HELPER = 0x44330017,

    /**
     * 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,

    GPS_CONTROLLER = 0x44130045,

    RW1 = 0x44120047,
    RW2 = 0x44120148,
    RW3 = 0x44120249,
    RW4 = 0x44120350,

    STAR_TRACKER = 0x44130001,

    PLOC_MEMORY_DUMPER = 0x44330001,
    STR_HELPER = 0x44330002,
    PLOC_MPSOC_HELPER = 0x44330003,
    AXI_PTME_CONFIG = 44330004,
    PTME_CONFIG = 44330005,

    // 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_ */