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

#include "commonConfig.h"
#include "q7sConfig.h"

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

#define OBSW_ENABLE_PERIODIC_HK                     0
#define OBSW_ENABLE_SYRLINKS_TRANSMIT_TIMEOUT       0
// This switch will cause the SW to command the EIVE system object to safe mode. This will
// trigger a lot of events, so it can make sense to disable this for debugging purposes
#define OBSW_COMMAND_SAFE_MODE_AT_STARTUP           1

#define OBSW_ADD_GOMSPACE_PCDU                      @OBSW_ADD_GOMSPACE_PCDU@
#define OBSW_ADD_MGT                                @OBSW_ADD_MGT@
#define OBSW_ADD_BPX_BATTERY_HANDLER                @OBSW_ADD_BPX_BATTERY_HANDLER@
#define OBSW_ADD_STAR_TRACKER                       @OBSW_ADD_STAR_TRACKER@
#define OBSW_ADD_PLOC_SUPERVISOR                    @OBSW_ADD_PLOC_SUPERVISOR@
#define OBSW_ADD_PLOC_MPSOC                         @OBSW_ADD_PLOC_MPSOC@
#define OBSW_ADD_SUN_SENSORS                        @OBSW_ADD_SUN_SENSORS@
#define OBSW_ADD_SUS_BOARD_ASS                      @OBSW_ADD_SUS_BOARD_ASS@
#define OBSW_ADD_ACS_BOARD                          @OBSW_ADD_ACS_BOARD@
#define OBSW_ADD_ACS_CTRL                           1
#define OBSW_ADD_GPS_CTRL                           @OBSW_ADD_GPS_CTRL@
#define OBSW_ADD_TCS_CTRL                           @OBSW_ADD_TCS_CTRL@
#define OBSW_ADD_RW                                 @OBSW_ADD_RW@
#define OBSW_ADD_RTD_DEVICES                        @OBSW_ADD_RTD_DEVICES@
#define OBSW_ADD_SA_DEPL                            @OBSW_ADD_SA_DEPL@
#define OBSW_ADD_SCEX_DEVICE                        @OBSW_ADD_SCEX_DEVICE@
#define OBSW_ADD_HEATERS                            @OBSW_ADD_HEATERS@
#define OBSW_ADD_TMP_DEVICES                        @OBSW_ADD_TMP_DEVICES@
#define OBSW_ADD_RAD_SENSORS                        @OBSW_ADD_RAD_SENSORS@
#define OBSW_ADD_PL_PCDU                            @OBSW_ADD_PL_PCDU@
#define OBSW_ADD_SYRLINKS                           @OBSW_ADD_SYRLINKS@
#define OBSW_ADD_CCSDS_IP_CORES                     @OBSW_ADD_CCSDS_IP_CORES@
// Set to 1 if all telemetry should be sent to the PTME IP Core
#define OBSW_TM_TO_PTME                             @OBSW_TM_TO_PTME@
// Set to 1 if telecommands are received via the PDEC IP Core
#define OBSW_TC_FROM_PDEC                           @OBSW_TC_FROM_PDEC@

// Configuration parameter which causes the core controller to try to keep at least one SD card
// working
#define OBSW_SD_CARD_MUST_BE_ON                     1
#define OBSW_ENABLE_TIMERS                          1

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

// Use TCP instead of UDP for the TMTC bridge. This allows using the TMTC client locally
// because UDP packets are not allowed in the VPN
// This will cause the OBSW to initialize the TMTC bridge responsible for exchanging data with the
// CCSDS IP Cores. 
#define OBSW_ADD_TMTC_TCP_SERVER                    1
#define OBSW_ADD_TMTC_UDP_SERVER                    1

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

#define OBSW_MPSOC_JTAG_BOOT                        0
#define OBSW_STAR_TRACKER_GROUND_CONFIG             1
#define OBSW_SYRLINKS_SIMULATED                     @OBSW_SYRLINKS_SIMULATED@
#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_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_IMTQ                              0
#define OBSW_DEBUG_IMTQ                             0
#define OBSW_TEST_RW                                0
#define OBSW_DEBUG_RW                               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_TMP1075                          0
#define OBSW_DEBUG_GPS                              0
#define OBSW_DEBUG_ACU                              0
#define OBSW_DEBUG_SYRLINKS                         0

#define OBSW_DEBUG_PDEC_HANDLER                     0
#define OBSW_DEBUG_PLOC_SUPERVISOR                  0
#define OBSW_DEBUG_PLOC_MPSOC                       0
#define OBSW_DEBUG_STARTRACKER                      0

#define OBSW_TCP_SERVER_WIRETAPPING                 0

/*******************************************************************/
/** CMake Defines                                                  */
/*******************************************************************/

#cmakedefine EIVE_BUILD_GPSD_GPS_HANDLER

#cmakedefine LIBGPS_VERSION_MAJOR @LIBGPS_VERSION_MAJOR@
#cmakedefine LIBGPS_VERSION_MINOR @LIBGPS_VERSION_MINOR@

#ifdef __cplusplus

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

#endif

#endif /* FSFWCONFIG_OBSWCONFIG_H_ */