#ifndef FSFWCONFIG_DEVICES_ADDRESSES_H_
#define FSFWCONFIG_DEVICES_ADDRESSES_H_

#include <fsfw/devicehandlers/CookieIF.h>
#include "objects/systemObjectList.h"
#include <cstdint>

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_1 = objects::SUS_1,
		SUS_2 = objects::SUS_2,
		SUS_3 = objects::SUS_3,
		SUS_4 = objects::SUS_4,
		SUS_5 = objects::SUS_5,
		SUS_6 = objects::SUS_6,
		SUS_7 = objects::SUS_7,
		SUS_8 = objects::SUS_8,
		SUS_9 = objects::SUS_9,
		SUS_10 = objects::SUS_10,
		SUS_11 = objects::SUS_11,
		SUS_12 = objects::SUS_12,
		SUS_13 = objects::SUS_13,

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

	enum i2cAddresses: address_t {
		IMTQ = 16,
		TMP1075_TCS_1 = 72,
		TMP1075_TCS_2 = 73,
	};

	enum spiAddresses: address_t {
        RTD_IC3,
        RTD_IC4,
        RTD_IC5,
        RTD_IC6,
        RTD_IC7,
        RTD_IC8,
        RTD_IC9,
        RTD_IC10,
        RTD_IC11,
        RTD_IC12,
        RTD_IC13,
        RTD_IC14,
        RTD_IC15,
        RTD_IC16,
        RTD_IC17,
        RTD_IC18,
        RW1,
        RW2,
        RW3,
        RW4
    };

	/* 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
	};
}


#endif /* FSFWCONFIG_DEVICES_ADDRESSES_H_ */