/**
 * @brief   This file can be used to add preprocessor define for conditional
 *          code inclusion exclusion or various other project constants and
 *          properties in one place.
 */
#ifndef FSFWCONFIG_OBSWCONFIG_H_
#define FSFWCONFIG_OBSWCONFIG_H_

#cmakedefine RASPBERRY_PI
#cmakedefine XIPHOS_Q7S
#cmakedefine BEAGLEBONEBLACK
#cmakedefine EGSE
#cmakedefine TE0720_1CFA

#ifdef RASPBERRY_PI
#include "rpiConfig.h"
#elif defined(XIPHOS_Q7S)
#include "q7sConfig.h"
#endif
#include "commonConfig.h"
#include "OBSWVersion.h"

/* These defines should be disabled for mission code but are useful for
debugging. */
#define OBSW_VERBOSE_LEVEL                          1

//! Board defines
#define BOARD_TE0720                                0                                   

/*******************************************************************/
/** All of the following flags should be enabled for mission code  */
/*******************************************************************/

//! Timers can mess up the code when debugging
//! All of this should be enabled for mission code!
#if defined XIPHOS_Q7S

#define Q7S_EM                                      0

#define OBSW_USE_CCSDS_IP_CORE                      0
// Set to 1 if all telemetry should be sent to the PTME IP Core
#define OBSW_TM_TO_PTME                             0
// Set to 1 if telecommands are received via the PDEC IP Core
#define OBSW_TC_FROM_PDEC                           0

#define OBSW_ENABLE_TIMERS                          1
#define OBSW_ADD_MGT                                1
#define OBSW_ADD_BPX_BATTERY_HANDLER                1
#define OBSW_ADD_STAR_TRACKER                       0
#define OBSW_ADD_PLOC_SUPERVISOR                    0
#define OBSW_ADD_PLOC_MPSOC                         0
#define OBSW_ADD_SUN_SENSORS                        0
#define OBSW_ADD_ACS_BOARD                          1
#define OBSW_ADD_ACS_HANDLERS                       1
#define OBSW_ADD_RW                                 0
#define OBSW_ADD_RTD_DEVICES                        1
#define OBSW_ADD_TMP_DEVICES                        0
#define OBSW_ADD_RAD_SENSORS                        0
#define OBSW_ADD_PL_PCDU                            0
#define OBSW_ADD_SYRLINKS                           0
#define OBSW_ENABLE_SYRLINKS_TRANSMIT_TIMEOUT       0
#define OBSW_STAR_TRACKER_GROUND_CONFIG             1
#define OBSW_ENABLE_PERIODIC_HK                     0

// This is a really tricky switch.. It initializes the PCDU switches to their default states
// at powerup. I think it would be better
// to leave it off for now. It makes testing a lot more difficult and it might mess with
// something the operators might want to do by giving the software too much intelligence
// at the wrong place. The system component might command all the Switches accordingly anyway
#define OBSW_INITIALIZE_SWITCHES                    0

#endif

#ifdef EGSE
#define OBSW_ADD_STAR_TRACKER                      1
#endif

#ifdef TE0720_1CFA

#define OBSW_USE_CCSDS_IP_CORE                      0
// Set to 1 if all telemetry should be sent to the PTME IP Core
#define OBSW_TM_TO_PTME                             0
// Set to 1 if telecommands are received via the PDEC IP Core
#define OBSW_TC_FROM_PDEC                           0
#define OBSW_ENABLE_TIMERS                          1
#define OBSW_ADD_MGT                                0
#define OBSW_ADD_BPX_BATTERY_HANDLER                0
#define OBSW_ADD_STAR_TRACKER                       0
#define OBSW_ADD_PLOC_SUPERVISOR                    0
#define OBSW_ADD_PLOC_MPSOC                         1
#define OBSW_ADD_SUN_SENSORS                        0
#define OBSW_ADD_ACS_BOARD                          1
#define OBSW_ADD_ACS_HANDLERS                       0
#define OBSW_ADD_RW                                 0
#define OBSW_ADD_RTD_DEVICES                        0
#define OBSW_ADD_TMP_DEVICES                        0
#define OBSW_ADD_RAD_SENSORS                        0
#define OBSW_ADD_PL_PCDU                            0
#define OBSW_ADD_SYRLINKS                           0
#define OBSW_ENABLE_SYRLINKS_TRANSMIT_TIMEOUT       0
#define OBSW_SYRLINKS_SIMULATED										  1
#define OBSW_STAR_TRACKER_GROUND_CONFIG             1
#define OBSW_ENABLE_PERIODIC_HK                     0
#define OBSW_PRINT_CORE_HK													0

#endif

/*******************************************************************/
/** All of the following flags should be disabled for mission code */
/*******************************************************************/

// Can be used to switch device to NORMAL mode immediately
#define OBSW_SWITCH_TO_NORMAL_MODE_AFTER_STARTUP    1
#define OBSW_PRINT_MISSED_DEADLINES                 1

#define OBSW_SYRLINKS_SIMULATED                     1
#define OBSW_ADD_TEST_CODE                          0
#define OBSW_ADD_TEST_TASK                          0
#define OBSW_ADD_TEST_PST                           0
// If this is enabled, all other SPI code should be disabled
#define OBSW_ADD_SPI_TEST_CODE                      0
// If this is enabled, all other I2C code should be disabled
#define OBSW_ADD_I2C_TEST_CODE                      0
#define OBSW_ADD_UART_TEST_CODE                     0

#define OBSW_TEST_ACS                               0
#define OBSW_TEST_ACS_BOARD_ASS                     0
#define OBSW_DEBUG_ACS                              0
#define OBSW_TEST_SUS                               0
#define OBSW_DEBUG_SUS                              0
#define OBSW_TEST_RTD                               0
#define OBSW_DEBUG_RTD                              0
#define OBSW_TEST_RAD_SENSOR                        0
#define OBSW_DEBUG_RAD_SENSOR                       0
#define OBSW_TEST_PL_PCDU                           0
#define OBSW_DEBUG_PL_PCDU                          0
#define OBSW_TEST_BPX_BATT                          0
#define OBSW_DEBUG_BPX_BATT                         0

#define OBSW_TEST_LIBGPIOD                          0
#define OBSW_TEST_PLOC_HANDLER                      0
#define OBSW_TEST_CCSDS_BRIDGE                      0
#define OBSW_TEST_CCSDS_PTME                        0
#define OBSW_TEST_TE7020_HEATER                     0
#define OBSW_TEST_GPIO_OPEN_BY_LABEL                0
#define OBSW_TEST_GPIO_OPEN_BY_LINE_NAME            0
#define OBSW_DEBUG_P60DOCK                          0

#define OBSW_PRINT_CORE_HK                          0
#define OBSW_DEBUG_PDU1                             0
#define OBSW_DEBUG_PDU2                             0
#define OBSW_DEBUG_GPS                              0
#define OBSW_DEBUG_ACU                              0
#define OBSW_DEBUG_SYRLINKS                         0
#define OBSW_DEBUG_IMTQ                             0
#define OBSW_DEBUG_RW                               0
#define OBSW_DEBUG_PLOC_MPSOC                       0
#define OBSW_DEBUG_PLOC_SUPERVISOR                  0
#define OBSW_DEBUG_PDEC_HANDLER	                    0

#ifdef EGSE
#define OBSW_DEBUG_STARTRACKER                      1
#else
#define OBSW_DEBUG_STARTRACKER                      0
#endif

#ifdef RASPBERRY_PI

#define OBSW_ENABLE_TIMERS                          1
#define OBSW_ADD_STAR_TRACKER                       0
#define OBSW_ADD_PLOC_SUPERVISOR                    0
#define OBSW_ADD_PLOC_MPSOC                         0
#define OBSW_ADD_SUN_SENSORS                        0
#define OBSW_ADD_ACS_BOARD                          0
#define OBSW_ADD_GPS_0                              0
#define OBSW_ADD_GPS_1                              0
#define OBSW_ADD_RW                                 0
#define OBSW_ADD_RTD_DEVICES                        0
#define OBSW_ADD_TMP_DEVICES                        0
#define OBSW_ADD_RAD_SENSORS                        0
#define OBSW_ADD_SYRLINKS                           0

#endif

#define TCP_SERVER_WIRETAPPING                      0

/*******************************************************************/
/** CMake Defines                                                  */
/*******************************************************************/
#cmakedefine EIVE_BUILD_GPSD_GPS_HANDLER

#include "OBSWVersion.h"

#ifdef __cplusplus

#include "objects/systemObjectList.h"
#include "events/subsystemIdRanges.h"
#include "returnvalues/classIds.h"

namespace config {
#endif

/* Add mission configuration flags here */
static constexpr uint32_t OBSW_FILESYSTEM_HANDLER_QUEUE_SIZE = 50;
static constexpr uint32_t PLOC_UPDATER_QUEUE_SIZE = 50;
/* Global config values to check validity of received file path strings and filenames */
static constexpr uint32_t MAX_PATH_SIZE = 100;
static constexpr uint32_t MAX_FILENAME_SIZE = 50;
static constexpr uint8_t LIVE_TM = 0;

#ifdef __cplusplus
}
#endif

#endif /* FSFWCONFIG_OBSWCONFIG_H_ */