Added OBSW Watchdog #67
@ -14,7 +14,8 @@ cmake_minimum_required(VERSION 3.13)
|
|||||||
set(CMAKE_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
set(CMAKE_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
if(TGT_BSP MATCHES "arm/q7s")
|
if(TGT_BSP MATCHES "arm/q7s")
|
||||||
option(Q7S_SIMPLE_MODE OFF "Simple mode with a minimal main function")
|
option(BUILD_WATCHDOG "Compile the OBSW watchdog insted" OFF)
|
||||||
|
option(BUILD_Q7S_SIMPLE_MODE OFF "Simple mode with a minimal main function")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(ADD_ETL_LIB "Add ETL library" ON)
|
option(ADD_ETL_LIB "Add ETL library" ON)
|
||||||
@ -32,8 +33,13 @@ endif()
|
|||||||
include(${CMAKE_SCRIPT_PATH}/PreProjectConfig.cmake)
|
include(${CMAKE_SCRIPT_PATH}/PreProjectConfig.cmake)
|
||||||
pre_project_config()
|
pre_project_config()
|
||||||
|
|
||||||
|
set(PROJECT_NAME_TO_SET eive-obsw-$ENV{USERNAME})
|
||||||
|
if(BUILD_WATCHDOG)
|
||||||
|
set(PROJECT_NAME_TO_SET eive-watchdog)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Project Name
|
# Project Name
|
||||||
project(eive_obsw ASM C CXX)
|
project(${PROJECT_NAME_TO_SET} ASM C CXX)
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Pre-Sources preparation
|
# Pre-Sources preparation
|
||||||
@ -60,6 +66,7 @@ set(MISSION_PATH mission)
|
|||||||
set(TEST_PATH test/testtasks)
|
set(TEST_PATH test/testtasks)
|
||||||
set(LINUX_PATH linux)
|
set(LINUX_PATH linux)
|
||||||
set(COMMON_PATH common)
|
set(COMMON_PATH common)
|
||||||
|
set(WATCHDOG_PATH watchdog)
|
||||||
set(COMMON_CONFIG_PATH ${COMMON_PATH}/config)
|
set(COMMON_CONFIG_PATH ${COMMON_PATH}/config)
|
||||||
|
|
||||||
set(FSFW_HAL_LIB_PATH fsfw_hal)
|
set(FSFW_HAL_LIB_PATH fsfw_hal)
|
||||||
@ -82,7 +89,7 @@ if(TGT_BSP)
|
|||||||
OR TGT_BSP MATCHES "arm/beagleboneblack"
|
OR TGT_BSP MATCHES "arm/beagleboneblack"
|
||||||
)
|
)
|
||||||
set(FSFW_CONFIG_PATH "linux/fsfwconfig")
|
set(FSFW_CONFIG_PATH "linux/fsfwconfig")
|
||||||
if(NOT Q7S_SIMPLE_MODE)
|
if(NOT BUILD_Q7S_SIMPLE_MODE)
|
||||||
set(ADD_LINUX_FILES TRUE)
|
set(ADD_LINUX_FILES TRUE)
|
||||||
set(ADD_CSP_LIB TRUE)
|
set(ADD_CSP_LIB TRUE)
|
||||||
set(FSFW_HAL_ADD_LINUX ON)
|
set(FSFW_HAL_ADD_LINUX ON)
|
||||||
@ -90,16 +97,19 @@ if(TGT_BSP)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${TGT_BSP} MATCHES "arm/raspberrypi")
|
if(${TGT_BSP} MATCHES "arm/raspberrypi")
|
||||||
add_definitions(-DRASPBERRY_PI)
|
# Used by configure file
|
||||||
|
set(RASPBERRY_PI ON)
|
||||||
set(FSFW_HAL_ADD_RASPBERRY_PI ON)
|
set(FSFW_HAL_ADD_RASPBERRY_PI ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${TGT_BSP} MATCHES "arm/beagleboneblack")
|
if(${TGT_BSP} MATCHES "arm/beagleboneblack")
|
||||||
add_definitions(-DBEAGLEBONEBLACK)
|
# Used by configure file
|
||||||
|
set(BEAGLEBONEBLACK ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(${TGT_BSP} MATCHES "arm/q7s")
|
if(${TGT_BSP} MATCHES "arm/q7s")
|
||||||
add_definitions(-DXIPHOS_Q7S)
|
# Used by configure file
|
||||||
|
set(XIPHOS_Q7S ON)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
# Required by FSFW library
|
# Required by FSFW library
|
||||||
@ -107,14 +117,17 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Configuration files
|
# Configuration files
|
||||||
configure_file(${COMMON_CONFIG_PATH}/commonConfig.h.in commonConfig.h)
|
if(NOT BUILD_WATCHDOG)
|
||||||
configure_file(${FSFW_CONFIG_PATH}/FSFWConfig.h.in FSFWConfig.h)
|
configure_file(${COMMON_CONFIG_PATH}/commonConfig.h.in commonConfig.h)
|
||||||
configure_file(${FSFW_CONFIG_PATH}/OBSWConfig.h.in OBSWConfig.h)
|
configure_file(${FSFW_CONFIG_PATH}/FSFWConfig.h.in FSFWConfig.h)
|
||||||
if(${TGT_BSP} MATCHES "arm/q7s")
|
configure_file(${FSFW_CONFIG_PATH}/OBSWConfig.h.in OBSWConfig.h)
|
||||||
configure_file(${BSP_PATH}/boardconfig/q7sConfig.h.in q7sConfig.h)
|
if(${TGT_BSP} MATCHES "arm/q7s")
|
||||||
elseif(${TGT_BSP} MATCHES "arm/raspberrypi")
|
configure_file(${BSP_PATH}/boardconfig/q7sConfig.h.in q7sConfig.h)
|
||||||
configure_file(${BSP_PATH}/boardconfig/rpiConfig.h.in rpiConfig.h)
|
elseif(${TGT_BSP} MATCHES "arm/raspberrypi")
|
||||||
|
configure_file(${BSP_PATH}/boardconfig/rpiConfig.h.in rpiConfig.h)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
configure_file(${WATCHDOG_PATH}/watchdogConf.h.in watchdogConf.h)
|
||||||
|
|
||||||
# Set common config path for FSFW
|
# Set common config path for FSFW
|
||||||
set(FSFW_ADDITIONAL_INC_PATHS
|
set(FSFW_ADDITIONAL_INC_PATHS
|
||||||
@ -131,26 +144,28 @@ set(LWGPS_CONFIG_PATH "${COMMON_PATH}/config")
|
|||||||
# Add executable
|
# Add executable
|
||||||
add_executable(${TARGET_NAME})
|
add_executable(${TARGET_NAME})
|
||||||
|
|
||||||
if(ADD_CSP_LIB)
|
|
||||||
add_subdirectory(${CSP_LIB_PATH})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(ADD_ETL_LIB)
|
if(ADD_ETL_LIB)
|
||||||
add_subdirectory(${ETL_LIB_PATH})
|
add_subdirectory(${ETL_LIB_PATH})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ADD_LINUX_FILES)
|
|
||||||
add_subdirectory(${LINUX_PATH})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(ADD_JSON_LIB)
|
if(ADD_JSON_LIB)
|
||||||
add_subdirectory(${LIB_JSON_PATH})
|
add_subdirectory(${LIB_JSON_PATH})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(${BSP_PATH})
|
|
||||||
add_subdirectory(${COMMON_PATH})
|
|
||||||
|
|
||||||
if(NOT Q7S_SIMPLE_MODE)
|
|
||||||
|
if(NOT BUILD_WATCHDOG)
|
||||||
|
if(ADD_LINUX_FILES)
|
||||||
|
add_subdirectory(${LINUX_PATH})
|
||||||
|
endif()
|
||||||
|
add_subdirectory(${BSP_PATH})
|
||||||
|
add_subdirectory(${COMMON_PATH})
|
||||||
|
if(ADD_CSP_LIB)
|
||||||
|
add_subdirectory(${CSP_LIB_PATH})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if((NOT BUILD_Q7S_SIMPLE_MODE) AND (NOT BUILD_WATCHDOG))
|
||||||
add_subdirectory(${LWGPS_LIB_PATH})
|
add_subdirectory(${LWGPS_LIB_PATH})
|
||||||
add_subdirectory(${FSFW_PATH})
|
add_subdirectory(${FSFW_PATH})
|
||||||
add_subdirectory(${MISSION_PATH})
|
add_subdirectory(${MISSION_PATH})
|
||||||
@ -158,6 +173,9 @@ if(NOT Q7S_SIMPLE_MODE)
|
|||||||
add_subdirectory(${ARCSEC_LIB_PATH})
|
add_subdirectory(${ARCSEC_LIB_PATH})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(BUILD_WATCHDOG)
|
||||||
|
add_subdirectory(${WATCHDOG_PATH})
|
||||||
|
endif()
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Post-Sources preparation
|
# Post-Sources preparation
|
||||||
@ -165,35 +183,42 @@ endif()
|
|||||||
|
|
||||||
set_property(CACHE FSFW_OSAL PROPERTY STRINGS host linux)
|
set_property(CACHE FSFW_OSAL PROPERTY STRINGS host linux)
|
||||||
|
|
||||||
if(NOT Q7S_SIMPLE_MODE)
|
if((NOT BUILD_Q7S_SIMPLE_MODE) AND (NOT BUILD_WATCHDOG))
|
||||||
# Add libraries for all sources.
|
# Add libraries for all sources.
|
||||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||||
${LIB_FSFW_NAME}
|
${LIB_FSFW_NAME}
|
||||||
${LIB_OS_NAME}
|
${LIB_OS_NAME}
|
||||||
${LIB_LWGPS_NAME}
|
${LIB_LWGPS_NAME}
|
||||||
${LIB_ARCSEC}
|
${LIB_ARCSEC}
|
||||||
${LIB_CXX_FS}
|
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT BUILD_WATCHDOG)
|
||||||
|
if(ADD_CSP_LIB)
|
||||||
|
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||||
|
${LIB_CSP_NAME}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(ADD_ETL_LIB)
|
if(ADD_ETL_LIB)
|
||||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||||
${LIB_ETL_NAME}
|
${LIB_ETL_NAME}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ADD_CSP_LIB)
|
|
||||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
|
||||||
${LIB_CSP_NAME}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(ADD_JSON_LIB)
|
if(ADD_JSON_LIB)
|
||||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||||
${LIB_JSON_NAME}
|
${LIB_JSON_NAME}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||||
|
${LIB_CXX_FS}
|
||||||
|
)
|
||||||
|
|
||||||
# Add include paths for all sources.
|
# Add include paths for all sources.
|
||||||
target_include_directories(${TARGET_NAME} PRIVATE
|
target_include_directories(${TARGET_NAME} PRIVATE
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
@ -249,10 +274,14 @@ if(NOT CMAKE_SIZE)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TGT_BSP)
|
if(BUILD_WATCHDOG)
|
||||||
set(TARGET_STRING "Target BSP: ${TGT_BSP}")
|
set(TARGET_STRING "OBSW Watchdog")
|
||||||
else()
|
else()
|
||||||
set(TARGET_STRING "Target BSP: Hosted")
|
if(TGT_BSP)
|
||||||
|
set(TARGET_STRING "Target BSP: ${TGT_BSP}")
|
||||||
|
else()
|
||||||
|
set(TARGET_STRING "Target BSP: Hosted")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
string(CONCAT POST_BUILD_COMMENT
|
string(CONCAT POST_BUILD_COMMENT
|
||||||
|
94
README.md
94
README.md
@ -148,6 +148,29 @@ When using Windows, run theses steps in MSYS2.
|
|||||||
|
|
||||||
# <a id="host-commands"></a> Useful and Common Commands (Host)
|
# <a id="host-commands"></a> Useful and Common Commands (Host)
|
||||||
|
|
||||||
|
## Build generation
|
||||||
|
|
||||||
|
Replace `Debug` with `Release` for release build. Add `-G "MinGW Makefiles` or `-G "Ninja"`
|
||||||
|
on Windows or when `ninja` should be used. You can build with `cmake --build . -j` after
|
||||||
|
build generation. You can finds scripts in `cmake/scripts` to perform the build commands
|
||||||
|
automatically.
|
||||||
|
|
||||||
|
### Q7S OBSW
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir build-Debug-Q7S && cd build-Debug-Q7S
|
||||||
|
cmake -DTGT_BSP=arm/q7s -DFSFW_OSAL=linux -DCMAKE_BUILD_TYPE=Debug ..
|
||||||
|
cmake --build . -j
|
||||||
|
```
|
||||||
|
|
||||||
|
### Q7S Watchdog
|
||||||
|
|
||||||
|
```sh
|
||||||
|
mkdir build-Debug-Q7S && cd build-Debug-Q7S
|
||||||
|
cmake -DTGT_BSP=arm/q7s -DFSFW_OSAL=linux -DBUILD_WATCHDOG=ON -DCMAKE_BUILD_TYPE=Debug ..
|
||||||
|
cmake --build . -j
|
||||||
|
```
|
||||||
|
|
||||||
## Connect to EIVE flatsat
|
## Connect to EIVE flatsat
|
||||||
|
|
||||||
### DNS
|
### DNS
|
||||||
@ -192,6 +215,12 @@ Other useful tmux commands:
|
|||||||
You can quit scroll mode with `q`.
|
You can quit scroll mode with `q`.
|
||||||
- Kill a tmux session: run `ctrl + b` and then `k`.
|
- Kill a tmux session: run `ctrl + b` and then `k`.
|
||||||
- Detach from a tmux session: run `ctrl + b` and then `d`
|
- Detach from a tmux session: run `ctrl + b` and then `d`
|
||||||
|
- [Pipe last 3000 lines](https://unix.stackexchange.com/questions/26548/write-all-tmux-scrollback-to-a-file)
|
||||||
|
into file for copying or analysis:
|
||||||
|
1. `ctrl + b` and `:`
|
||||||
|
2. `capture-pane -S -3000` + `enter`
|
||||||
|
3. `save-buffer /tmp/tmux-output.txt` + `enter`
|
||||||
|
|
||||||
|
|
||||||
### SSH console
|
### SSH console
|
||||||
|
|
||||||
@ -318,7 +347,7 @@ wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/rfoaistRd67yBbH/downloa
|
|||||||
or the following command for Linux (could be useful for CI/CD)
|
or the following command for Linux (could be useful for CI/CD)
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/2Fp2ag6NGnbtAsK/download/gcc-arm-linux-gnueabi.tar.gz
|
wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/MRaeA2XnMXpZ5Pp/download/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
|
||||||
```
|
```
|
||||||
|
|
||||||
## Installing CMake and MSYS2 on Windows
|
## Installing CMake and MSYS2 on Windows
|
||||||
@ -587,10 +616,14 @@ pscp -scp -P 22 eive@192.168.199.227:</directory-to-example-file/>/example-file
|
|||||||
|
|
||||||
More detailed information about the used q7s commands can be found in the Q7S user manual.
|
More detailed information about the used q7s commands can be found in the Q7S user manual.
|
||||||
|
|
||||||
# <a id="q7s"></a> Q7S
|
# <a id="q7s"></a> Q7S OBC
|
||||||
|
|
||||||
## Launching an application at start-up
|
## Launching an application at start-up
|
||||||
|
|
||||||
|
You can also do the steps performed here on a host computer inside the `q7s-rootfs` directory
|
||||||
|
of the [Q7S base repository](https://egit.irs.uni-stuttgart.de/eive/q7s-base). This might
|
||||||
|
be more convenient while also allowing to update all images at once with the finished `rootfs.xdi`.
|
||||||
|
|
||||||
Load the root partiton from the flash memory (there are to nor-flash memories and each flash holds
|
Load the root partiton from the flash memory (there are to nor-flash memories and each flash holds
|
||||||
two xdi images). Note: It is not possible to modify the currently loaded root partition, e.g.
|
two xdi images). Note: It is not possible to modify the currently loaded root partition, e.g.
|
||||||
creating directories. To do this, the parition needs to be mounted.
|
creating directories. To do this, the parition needs to be mounted.
|
||||||
@ -616,7 +649,7 @@ creating directories. To do this, the parition needs to be mounted.
|
|||||||
chmod +x application
|
chmod +x application
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Create systemd service in /lib/systemd/system. The following shows an example service.
|
5. Create systemd service in `/etc/systemd/system`. The following shows an example service.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
cat > example.service
|
cat > example.service
|
||||||
@ -634,12 +667,20 @@ creating directories. To do this, the parition needs to be mounted.
|
|||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
```
|
```
|
||||||
6. Enable the service. This is normally done with systemctl enable. However, this is not possible
|
|
||||||
when the service is created for a mounted root partition. Therefore create a symlink as follows.
|
6. Enable the service. This is normally done with `systemctl enable <service>` which would create
|
||||||
|
a symlink in the `multi-user.target.wants` directory. However, this is not possible
|
||||||
|
when the service is created for a mounted root partition. It is also not possible during run
|
||||||
|
time because symlinks can't be created in a read-only filesystem. Therefore, relative symlinks
|
||||||
|
are used like this:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ln -s '/tmp/the-mounted-xdi-image/lib/systemd/system/example.service' '/tmp/the-mounted-xdi-image/etc/systemd/system/multi-user.target.wants/example.service'
|
cd etc/systemd/system/multi-user.target.wants/
|
||||||
|
ln -s ../example.service example.service
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You can check the symlinnks with `ls -l`
|
||||||
|
|
||||||
7. The modified root partition is written back when the partion is locked again.
|
7. The modified root partition is written back when the partion is locked again.
|
||||||
```sh
|
```sh
|
||||||
writeprotect 0 0 1
|
writeprotect 0 0 1
|
||||||
@ -654,6 +695,47 @@ creating directories. To do this, the parition needs to be mounted.
|
|||||||
systemctl status example
|
systemctl status example
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Current user systemd services
|
||||||
|
|
||||||
|
The following custom `systemd` services are currently running on the Q7S and can be found in
|
||||||
|
the `/etc/systemd/system` folder.
|
||||||
|
You can query that status of a service by running `systemctl status <serviceName>`.
|
||||||
|
|
||||||
|
### `eive-watchdog`
|
||||||
|
|
||||||
|
The watchdog will create a pipe at `/tmp/watchdog-pipe` which can be used both by the watchdog and
|
||||||
|
the EIVE OBSW. The watchdog will only read from this pipe while the OBSW will only write
|
||||||
|
to this pipe. The watchdog checks for basic ASCII commands as a first basic feature set.
|
||||||
|
The most important functionality is that the watchdog cant detect if a timeout
|
||||||
|
has happened. This can happen beause the OBSW is hanging (or at least the CoreController thread) or
|
||||||
|
there is simply now OBSW running on the system. It does to by checking whether the FIFO is
|
||||||
|
regulary written to, which means the EIVE OBSW is alive.
|
||||||
|
|
||||||
|
If the EIVE OBSW is alive, a special file called `/tmp/obsw-running` will be created.
|
||||||
|
This file can be used by any other software component to query whether the EIVE OBSW is running.
|
||||||
|
The EIVE OBSW itself can be configured to check whether this file exists, which prevents two
|
||||||
|
EIVE OBSW instances running on the Q7S at once.
|
||||||
|
|
||||||
|
If a timeout occurs, this special file will be deleted as well.
|
||||||
|
The watchdog and its configuration will be directly integrated into this repostory, which
|
||||||
|
makes adaptions easy.
|
||||||
|
|
||||||
|
### `tcfagent`
|
||||||
|
|
||||||
|
This starts the `/usr/bin/agent` program to allows remote debugging. Might not be part of
|
||||||
|
the mission code
|
||||||
|
|
||||||
|
### `eive-early-config`
|
||||||
|
|
||||||
|
This is a configuration script which runs early after `local-fs.target` and `sysinit.target`
|
||||||
|
Currently only pipes the output of `xsc_boot_copy` into the file `/tmp/curr_copy.txt` which can be
|
||||||
|
used by other software components to read the current chip and copy.
|
||||||
|
|
||||||
|
### `eive-post-ntpd-config`
|
||||||
|
|
||||||
|
This is a configuration scripts which runs after the Network Time Protocol has run. This script
|
||||||
|
currently sets the static IP address `192.168.133.10` and starts the `can` interface.
|
||||||
|
|
||||||
## PCDU
|
## PCDU
|
||||||
|
|
||||||
Connect to serial console of P60 Dock
|
Connect to serial console of P60 Dock
|
||||||
|
@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
#cmakedefine01 Q7S_SIMPLE_MODE
|
#cmakedefine01 Q7S_SIMPLE_MODE
|
||||||
|
|
||||||
#define Q7S_SD_NONE 0
|
#define Q7S_SD_NONE 0
|
||||||
#define Q7S_SD_COLD_REDUNDANT 1
|
#define Q7S_SD_COLD_REDUNDANT 1
|
||||||
#define Q7S_SD_HOT_REDUNDANT 2
|
#define Q7S_SD_HOT_REDUNDANT 2
|
||||||
// The OBSW will perform different actions to set up the SD cards depending on the flag set here
|
// The OBSW will perform different actions to set up the SD cards depending on the flag set here
|
||||||
// Set to Q7S_SD_NONE: Don't do anything
|
// Set to Q7S_SD_NONE: Don't do anything
|
||||||
// Set to Q7S_COLD_REDUNDANT: On startup, get the prefered SD card, turn it on and mount it, and
|
// Set to Q7S_COLD_REDUNDANT: On startup, get the prefered SD card, turn it on and mount it, and
|
||||||
@ -15,7 +15,9 @@
|
|||||||
// Set to Q7S_HOT_REDUNDANT: On startup, turn on both SD cards and mount them
|
// Set to Q7S_HOT_REDUNDANT: On startup, turn on both SD cards and mount them
|
||||||
#define Q7S_SD_CARD_CONFIG Q7S_SD_COLD_REDUNDANT
|
#define Q7S_SD_CARD_CONFIG Q7S_SD_COLD_REDUNDANT
|
||||||
|
|
||||||
#define Q7S_ADD_RTD_DEVICES 0
|
// Probably better if this is disabled for mission code. Convenient for development
|
||||||
|
#define Q7S_CHECK_FOR_ALREADY_RUNNING_IMG 1
|
||||||
|
#define Q7S_ADD_RTD_DEVICES 0
|
||||||
|
|
||||||
/* Only one of those 2 should be enabled! */
|
/* Only one of those 2 should be enabled! */
|
||||||
/* Add code for ACS board */
|
/* Add code for ACS board */
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "CoreController.h"
|
#include "CoreController.h"
|
||||||
#include "OBSWConfig.h"
|
#include "OBSWConfig.h"
|
||||||
#include "OBSWVersion.h"
|
#include "OBSWVersion.h"
|
||||||
|
#include "watchdogConf.h"
|
||||||
|
|
||||||
#include "fsfw/FSFWVersion.h"
|
#include "fsfw/FSFWVersion.h"
|
||||||
#include "fsfw/serviceinterface/ServiceInterface.h"
|
#include "fsfw/serviceinterface/ServiceInterface.h"
|
||||||
@ -13,10 +14,38 @@
|
|||||||
#include "bsp_q7s/memory/scratchApi.h"
|
#include "bsp_q7s/memory/scratchApi.h"
|
||||||
#include "bsp_q7s/memory/SdCardManager.h"
|
#include "bsp_q7s/memory/SdCardManager.h"
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
|
||||||
|
CoreController::Chip CoreController::currentChip = Chip::NO_CHIP;
|
||||||
|
CoreController::Copy CoreController::currentCopy = Copy::NO_COPY;
|
||||||
|
|
||||||
CoreController::CoreController(object_id_t objectId):
|
CoreController::CoreController(object_id_t objectId):
|
||||||
ExtendedControllerBase(objectId, objects::NO_OBJECT, 5) {
|
ExtendedControllerBase(objectId, objects::NO_OBJECT, 5),
|
||||||
|
opDivider(5) {
|
||||||
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||||
|
try {
|
||||||
|
result = initWatchdogFifo();
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
sif::warning << "CoreController::CoreController: Watchdog FIFO init failed" <<
|
||||||
|
std::endl;
|
||||||
|
}
|
||||||
|
result = initSdCard();
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
sif::warning << "CoreController::CoreController: SD card init failed" << std::endl;
|
||||||
|
}
|
||||||
|
result = initBootCopy();
|
||||||
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
sif::warning << "CoreController::CoreController: Boot copy init" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(const std::filesystem::filesystem_error& e) {
|
||||||
|
sif::error << "CoreController::CoreController: Failed with exception " <<
|
||||||
|
e.what() << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CoreController::handleCommandMessage(CommandMessage *message) {
|
ReturnValue_t CoreController::handleCommandMessage(CommandMessage *message) {
|
||||||
@ -24,6 +53,7 @@ ReturnValue_t CoreController::handleCommandMessage(CommandMessage *message) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CoreController::performControlOperation() {
|
void CoreController::performControlOperation() {
|
||||||
|
performWatchdogControlOperation();
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CoreController::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
|
ReturnValue_t CoreController::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
|
||||||
@ -37,16 +67,6 @@ LocalPoolDataSetBase* CoreController::getDataSetHandle(sid_t sid) {
|
|||||||
|
|
||||||
ReturnValue_t CoreController::initialize() {
|
ReturnValue_t CoreController::initialize() {
|
||||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||||
try {
|
|
||||||
result = sdCardInit();
|
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
|
||||||
sif::warning << "CoreController::initialize: SD card init failed" << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(const std::filesystem::filesystem_error& e) {
|
|
||||||
sif::error << "CoreController::initialize: sdCardInit failed with exception " << e.what()
|
|
||||||
<< std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = scratch::writeNumber(scratch::ALLOC_FAILURE_COUNT, 0);
|
result = scratch::writeNumber(scratch::ALLOC_FAILURE_COUNT, 0);
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
@ -62,7 +82,7 @@ ReturnValue_t CoreController::checkModeCommand(Mode_t mode, Submode_t submode,
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CoreController::sdCardInit() {
|
ReturnValue_t CoreController::initSdCard() {
|
||||||
#if Q7S_SD_CARD_CONFIG == Q7S_SD_NONE
|
#if Q7S_SD_CARD_CONFIG == Q7S_SD_NONE
|
||||||
sif::info << "No SD card initialization will be performed" << std::endl;
|
sif::info << "No SD card initialization will be performed" << std::endl;
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
@ -136,51 +156,11 @@ ReturnValue_t CoreController::executeAction(ActionId_t actionId, MessageQueueId_
|
|||||||
const uint8_t *data, size_t size) {
|
const uint8_t *data, size_t size) {
|
||||||
switch(actionId) {
|
switch(actionId) {
|
||||||
case(LIST_DIRECTORY_INTO_FILE): {
|
case(LIST_DIRECTORY_INTO_FILE): {
|
||||||
// TODO: Packet definition for clean deserialization
|
return actionListDirectoryIntoFile(actionId, commandedBy, data, size);
|
||||||
// 2 bytes for a and R flag, at least 5 bytes for minimum valid path /tmp with
|
}
|
||||||
// null termination, at least 7 bytes for minimum target file name /tmp/a with
|
case(REBOOT_OBC): {
|
||||||
// null termination.
|
|
||||||
if(size < 14) {
|
|
||||||
return HasActionsIF::INVALID_PARAMETERS;
|
|
||||||
}
|
|
||||||
// We could also make -l optional, but I can't think of a reason why to not use -l..
|
|
||||||
|
|
||||||
// This flag specifies to run ls with -a
|
|
||||||
bool aFlag = data[0];
|
|
||||||
data += 1;
|
|
||||||
// This flag specifies to run ls with -R
|
|
||||||
bool RFlag = data[1];
|
|
||||||
data += 1;
|
|
||||||
|
|
||||||
size_t remainingSize = size - 2;
|
|
||||||
// One larger for null termination, which prevents undefined behaviour if the sent
|
|
||||||
// strings are not 0 terminated properly
|
|
||||||
std::vector<uint8_t> repoAndTargetFileBuffer(remainingSize + 1, 0);
|
|
||||||
std::memcpy(repoAndTargetFileBuffer.data(), data, remainingSize);
|
|
||||||
const char* currentCharPtr = reinterpret_cast<const char*>(repoAndTargetFileBuffer.data());
|
|
||||||
// Full target file name
|
|
||||||
std::string repoName(currentCharPtr);
|
|
||||||
size_t repoLength = repoName.length();
|
|
||||||
// The other string needs to be at least one letter plus NULL termination to be valid at all
|
|
||||||
// The first string also needs to be NULL terminated, but the termination is not included
|
|
||||||
// in the string length, so this is subtracted from the remaining size as well
|
|
||||||
if(repoLength > remainingSize - 3) {
|
|
||||||
return HasActionsIF::INVALID_PARAMETERS;
|
|
||||||
}
|
|
||||||
// The file length will not include the NULL termination, so we skip it
|
|
||||||
currentCharPtr += repoLength + 1;
|
|
||||||
std::string targetFileName(currentCharPtr);
|
|
||||||
std::ostringstream oss;
|
|
||||||
oss << "ls -l";
|
|
||||||
if(aFlag) {
|
|
||||||
oss << "a";
|
|
||||||
}
|
|
||||||
if(RFlag) {
|
|
||||||
oss << "R";
|
|
||||||
}
|
|
||||||
oss << " " << repoName << " > " << targetFileName;
|
|
||||||
std::system(oss.str().c_str());
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
return HasActionsIF::INVALID_ACTION_ID;
|
return HasActionsIF::INVALID_ACTION_ID;
|
||||||
@ -189,7 +169,7 @@ ReturnValue_t CoreController::executeAction(ActionId_t actionId, MessageQueueId_
|
|||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CoreController::initializeAfterTaskCreation() {
|
ReturnValue_t CoreController::initializeAfterTaskCreation() {
|
||||||
ReturnValue_t result = versionFileInit();
|
ReturnValue_t result = initVersionFile();
|
||||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
sif::warning << "CoreController::initialize: Version initialization failed" << std::endl;
|
sif::warning << "CoreController::initialize: Version initialization failed" << std::endl;
|
||||||
}
|
}
|
||||||
@ -272,7 +252,7 @@ ReturnValue_t CoreController::incrementAllocationFailureCount() {
|
|||||||
return scratch::writeNumber(scratch::ALLOC_FAILURE_COUNT, count);
|
return scratch::writeNumber(scratch::ALLOC_FAILURE_COUNT, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t CoreController::versionFileInit() {
|
ReturnValue_t CoreController::initVersionFile() {
|
||||||
|
|
||||||
std::string unameFileName = "/tmp/uname_version.txt";
|
std::string unameFileName = "/tmp/uname_version.txt";
|
||||||
// TODO: No -v flag for now. If the kernel version is used, need to cut off first few letters
|
// TODO: No -v flag for now. If the kernel version is used, need to cut off first few letters
|
||||||
@ -356,6 +336,111 @@ ReturnValue_t CoreController::versionFileInit() {
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReturnValue_t CoreController::actionListDirectoryIntoFile(ActionId_t actionId,
|
||||||
|
MessageQueueId_t commandedBy, const uint8_t *data, size_t size) {
|
||||||
|
// TODO: Packet definition for clean deserialization
|
||||||
|
// 2 bytes for a and R flag, at least 5 bytes for minimum valid path /tmp with
|
||||||
|
// null termination, at least 7 bytes for minimum target file name /tmp/a with
|
||||||
|
// null termination.
|
||||||
|
if(size < 14) {
|
||||||
|
return HasActionsIF::INVALID_PARAMETERS;
|
||||||
|
}
|
||||||
|
// We could also make -l optional, but I can't think of a reason why to not use -l..
|
||||||
|
|
||||||
|
// This flag specifies to run ls with -a
|
||||||
|
bool aFlag = data[0];
|
||||||
|
data += 1;
|
||||||
|
// This flag specifies to run ls with -R
|
||||||
|
bool RFlag = data[1];
|
||||||
|
data += 1;
|
||||||
|
|
||||||
|
size_t remainingSize = size - 2;
|
||||||
|
// One larger for null termination, which prevents undefined behaviour if the sent
|
||||||
|
// strings are not 0 terminated properly
|
||||||
|
std::vector<uint8_t> repoAndTargetFileBuffer(remainingSize + 1, 0);
|
||||||
|
std::memcpy(repoAndTargetFileBuffer.data(), data, remainingSize);
|
||||||
|
const char* currentCharPtr = reinterpret_cast<const char*>(repoAndTargetFileBuffer.data());
|
||||||
|
// Full target file name
|
||||||
|
std::string repoName(currentCharPtr);
|
||||||
|
size_t repoLength = repoName.length();
|
||||||
|
// The other string needs to be at least one letter plus NULL termination to be valid at all
|
||||||
|
// The first string also needs to be NULL terminated, but the termination is not included
|
||||||
|
// in the string length, so this is subtracted from the remaining size as well
|
||||||
|
if(repoLength > remainingSize - 3) {
|
||||||
|
return HasActionsIF::INVALID_PARAMETERS;
|
||||||
|
}
|
||||||
|
// The file length will not include the NULL termination, so we skip it
|
||||||
|
currentCharPtr += repoLength + 1;
|
||||||
|
std::string targetFileName(currentCharPtr);
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << "ls -l";
|
||||||
|
if(aFlag) {
|
||||||
|
oss << "a";
|
||||||
|
}
|
||||||
|
if(RFlag) {
|
||||||
|
oss << "R";
|
||||||
|
}
|
||||||
|
oss << " " << repoName << " > " << targetFileName;
|
||||||
|
int result = std::system(oss.str().c_str());
|
||||||
|
if(result != 0) {
|
||||||
|
utility::handleSystemError(result, "CoreController::actionListDirectoryIntoFile");
|
||||||
|
actionHelper.finish(false, commandedBy, actionId);
|
||||||
|
}
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t CoreController::initBootCopy() {
|
||||||
|
std::string fileName = "/tmp/curr_copy.txt";
|
||||||
|
if(not std::filesystem::exists(fileName)) {
|
||||||
|
// Thils file is created by the systemd service eive-early-config so this should
|
||||||
|
// not happen normally
|
||||||
|
std::string cmd = "xsc_boot_copy > " + fileName;
|
||||||
|
int result = std::system(cmd.c_str());
|
||||||
|
if(result != 0) {
|
||||||
|
utility::handleSystemError(result, "CoreController::initBootCopy");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::ifstream file(fileName);
|
||||||
|
std::string line;
|
||||||
|
std::getline(file, line);
|
||||||
|
std::istringstream iss(line);
|
||||||
|
int value = 0;
|
||||||
|
iss >> value;
|
||||||
|
currentChip = static_cast<Chip>(value);
|
||||||
|
iss >> value;
|
||||||
|
currentCopy = static_cast<Copy>(value);
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CoreController::getCurrentBootCopy(Chip &chip, Copy ©) {
|
||||||
|
// Not really thread-safe but it does not need to be
|
||||||
|
chip = currentChip;
|
||||||
|
copy = currentCopy;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t CoreController::initWatchdogFifo() {
|
||||||
|
if(not std::filesystem::exists(watchdog::FIFO_NAME)) {
|
||||||
|
// Still return RETURN_OK for now
|
||||||
|
sif::info << "Watchdog FIFO " << watchdog::FIFO_NAME << " does not exist, can't initiate" <<
|
||||||
|
" watchdog" << std::endl;
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
// Open FIFO write only and non-blocking to prevent SW from killing itself.
|
||||||
|
watchdogFifoFd = open(watchdog::FIFO_NAME.c_str(), O_WRONLY | O_NONBLOCK);
|
||||||
|
if(watchdogFifoFd < 0) {
|
||||||
|
if(errno == ENXIO) {
|
||||||
|
watchdogFifoFd = RETRY_FIFO_OPEN;
|
||||||
|
sif::info << "eive-watchdog not running. FIFO can not be opened" << std::endl;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sif::error << "Opening pipe " << watchdog::FIFO_NAME << " write-only failed with " <<
|
||||||
|
errno << ": " << strerror(errno) << std::endl;
|
||||||
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void CoreController::initPrint() {
|
void CoreController::initPrint() {
|
||||||
#if OBSW_VERBOSE_LEVEL >= 1
|
#if OBSW_VERBOSE_LEVEL >= 1
|
||||||
#if OBSW_USE_TMTC_TCP_BRIDGE == 0
|
#if OBSW_USE_TMTC_TCP_BRIDGE == 0
|
||||||
@ -365,5 +450,43 @@ void CoreController::initPrint() {
|
|||||||
sif::info << "Created TCP server for TMTC commanding with listener port " <<
|
sif::info << "Created TCP server for TMTC commanding with listener port " <<
|
||||||
TcpTmTcBridge::DEFAULT_SERVER_PORT << std::endl;
|
TcpTmTcBridge::DEFAULT_SERVER_PORT << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if(watchdogFifoFd > 0) {
|
||||||
|
sif::info << "Opened watchdog FIFO successfully.." << std::endl;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CoreController::performWatchdogControlOperation() {
|
||||||
|
// Only perform each fifth iteration
|
||||||
|
if(watchdogFifoFd != 0 and opDivider.checkAndIncrement()) {
|
||||||
|
if(watchdogFifoFd == RETRY_FIFO_OPEN) {
|
||||||
|
// Open FIFO write only and non-blocking
|
||||||
|
watchdogFifoFd = open(watchdog::FIFO_NAME.c_str(), O_WRONLY | O_NONBLOCK);
|
||||||
|
if(watchdogFifoFd < 0) {
|
||||||
|
if(errno == ENXIO) {
|
||||||
|
watchdogFifoFd = RETRY_FIFO_OPEN;
|
||||||
|
// No printout for now, would be spam
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sif::error << "Opening pipe " << watchdog::FIFO_NAME <<
|
||||||
|
" write-only failed with " << errno << ": " <<
|
||||||
|
strerror(errno) << std::endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sif::info << "Opened " << watchdog::FIFO_NAME << " successfully" << std::endl;
|
||||||
|
}
|
||||||
|
else if(watchdogFifoFd > 0) {
|
||||||
|
// Write to OBSW watchdog FIFO here
|
||||||
|
const char writeChar = 'a';
|
||||||
|
ssize_t writtenBytes = write(watchdogFifoFd, &writeChar, 1);
|
||||||
|
if(writtenBytes < 0) {
|
||||||
|
sif::error << "Errors writing to watchdog FIFO, code " << errno << ": " <<
|
||||||
|
strerror(errno) << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -1,19 +1,36 @@
|
|||||||
#ifndef BSP_Q7S_CORE_CORECONTROLLER_H_
|
#ifndef BSP_Q7S_CORE_CORECONTROLLER_H_
|
||||||
#define BSP_Q7S_CORE_CORECONTROLLER_H_
|
#define BSP_Q7S_CORE_CORECONTROLLER_H_
|
||||||
|
|
||||||
|
#include <fsfw/globalfunctions/PeriodicOperationDivider.h>
|
||||||
#include "fsfw/controller/ExtendedControllerBase.h"
|
#include "fsfw/controller/ExtendedControllerBase.h"
|
||||||
#include "bsp_q7s/memory/SdCardManager.h"
|
#include "bsp_q7s/memory/SdCardManager.h"
|
||||||
|
|
||||||
#include "events/subsystemIdRanges.h"
|
#include "events/subsystemIdRanges.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CoreController: public ExtendedControllerBase {
|
class CoreController: public ExtendedControllerBase {
|
||||||
public:
|
public:
|
||||||
|
enum Chip: uint8_t {
|
||||||
|
CHIP_0,
|
||||||
|
CHIP_1,
|
||||||
|
NO_CHIP
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Copy: uint8_t {
|
||||||
|
COPY_0,
|
||||||
|
COPY_1,
|
||||||
|
NO_COPY
|
||||||
|
};
|
||||||
|
|
||||||
static constexpr ActionId_t LIST_DIRECTORY_INTO_FILE = 0;
|
static constexpr ActionId_t LIST_DIRECTORY_INTO_FILE = 0;
|
||||||
|
static constexpr ActionId_t REBOOT_OBC = 1;
|
||||||
|
|
||||||
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::CORE;
|
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::CORE;
|
||||||
|
|
||||||
static constexpr Event ALLOC_FAILURE = event::makeEvent(SUBSYSTEM_ID, 0, severity::MEDIUM);
|
static constexpr Event ALLOC_FAILURE = event::makeEvent(SUBSYSTEM_ID, 0, severity::MEDIUM);
|
||||||
|
|
||||||
|
|
||||||
CoreController(object_id_t objectId);
|
CoreController(object_id_t objectId);
|
||||||
|
|
||||||
ReturnValue_t initialize() override;
|
ReturnValue_t initialize() override;
|
||||||
@ -27,22 +44,39 @@ public:
|
|||||||
void performControlOperation() override;
|
void performControlOperation() override;
|
||||||
|
|
||||||
static ReturnValue_t incrementAllocationFailureCount();
|
static ReturnValue_t incrementAllocationFailureCount();
|
||||||
|
static void getCurrentBootCopy(Chip& chip, Copy& copy);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static Chip currentChip;
|
||||||
|
static Copy currentCopy;
|
||||||
|
|
||||||
ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
||||||
LocalDataPoolManager& poolManager) override;
|
LocalDataPoolManager& poolManager) override;
|
||||||
LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
|
LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
|
||||||
ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode,
|
ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode,
|
||||||
uint32_t *msToReachTheMode);
|
uint32_t *msToReachTheMode);
|
||||||
|
|
||||||
ReturnValue_t sdCardInit();
|
ReturnValue_t initSdCard();
|
||||||
ReturnValue_t sdCardSetup(SdCardManager& sdcMan, SdCardManager::SdStatusPair& statusPair,
|
ReturnValue_t sdCardSetup(SdCardManager& sdcMan, SdCardManager::SdStatusPair& statusPair,
|
||||||
sd::SdCard sdCard, sd::SdStatus status, std::string sdString);
|
sd::SdCard sdCard, sd::SdStatus status, std::string sdString);
|
||||||
ReturnValue_t sdCardColdRedundantInit(SdCardManager* sdcMan,
|
ReturnValue_t sdCardColdRedundantInit(SdCardManager* sdcMan,
|
||||||
SdCardManager::SdStatusPair& statusPair);
|
SdCardManager::SdStatusPair& statusPair);
|
||||||
|
|
||||||
ReturnValue_t versionFileInit();
|
ReturnValue_t initVersionFile();
|
||||||
|
ReturnValue_t initBootCopy();
|
||||||
|
ReturnValue_t initWatchdogFifo();
|
||||||
|
|
||||||
|
ReturnValue_t actionListDirectoryIntoFile(ActionId_t actionId, MessageQueueId_t commandedBy,
|
||||||
|
const uint8_t *data, size_t size);
|
||||||
|
|
||||||
void initPrint();
|
void initPrint();
|
||||||
|
|
||||||
|
// Designated value for rechecking FIFO open
|
||||||
|
static constexpr int RETRY_FIFO_OPEN = -2;
|
||||||
|
int watchdogFifoFd = 0;
|
||||||
|
|
||||||
|
PeriodicOperationDivider opDivider;
|
||||||
|
void performWatchdogControlOperation();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,11 +2,15 @@
|
|||||||
#include "OBSWVersion.h"
|
#include "OBSWVersion.h"
|
||||||
#include "OBSWConfig.h"
|
#include "OBSWConfig.h"
|
||||||
#include "InitMission.h"
|
#include "InitMission.h"
|
||||||
|
#include "watchdogConf.h"
|
||||||
|
|
||||||
#include "fsfw/tasks/TaskFactory.h"
|
#include "fsfw/tasks/TaskFactory.h"
|
||||||
#include "fsfw/FSFWVersion.h"
|
#include "fsfw/FSFWVersion.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
|
static int OBSW_ALREADY_RUNNING = -2;
|
||||||
|
|
||||||
int obsw::obsw() {
|
int obsw::obsw() {
|
||||||
std::cout << "-- EIVE OBSW --" << std::endl;
|
std::cout << "-- EIVE OBSW --" << std::endl;
|
||||||
@ -20,6 +24,15 @@ int obsw::obsw() {
|
|||||||
FSFW_REVISION << "--" << std::endl;
|
FSFW_REVISION << "--" << std::endl;
|
||||||
std::cout << "-- " << __DATE__ << " " << __TIME__ << " --" << std::endl;
|
std::cout << "-- " << __DATE__ << " " << __TIME__ << " --" << std::endl;
|
||||||
|
|
||||||
|
#if Q7S_CHECK_FOR_ALREADY_RUNNING_IMG == 1
|
||||||
|
// Check special file here. This file is created or deleted by the eive-watchdog application
|
||||||
|
// or systemd service!
|
||||||
|
if(std::filesystem::exists(watchdog::RUNNING_FILE_NAME)) {
|
||||||
|
sif::warning << "File " << watchdog::RUNNING_FILE_NAME << " exists so the software might "
|
||||||
|
"already be running. Aborting.." << std::endl;
|
||||||
|
return OBSW_ALREADY_RUNNING;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
initmission::initMission();
|
initmission::initMission();
|
||||||
|
|
||||||
for(;;) {
|
for(;;) {
|
||||||
|
@ -18,7 +18,7 @@ os_fsfw="linux"
|
|||||||
tgt_bsp="arm/q7s"
|
tgt_bsp="arm/q7s"
|
||||||
build_dir="build-Simple-Q7S"
|
build_dir="build-Simple-Q7S"
|
||||||
build_generator=""
|
build_generator=""
|
||||||
definitions="Q7S_SIMPLE_MODE=On"
|
definitions="BUILD_Q7S_SIMPLE_MODE=On"
|
||||||
if [ "${OS}" = "Windows_NT" ]; then
|
if [ "${OS}" = "Windows_NT" ]; then
|
||||||
build_generator="MinGW Makefiles"
|
build_generator="MinGW Makefiles"
|
||||||
python="py"
|
python="py"
|
||||||
|
@ -18,7 +18,7 @@ os_fsfw="linux"
|
|||||||
tgt_bsp="arm/q7s"
|
tgt_bsp="arm/q7s"
|
||||||
build_dir="build-Simple-Q7S"
|
build_dir="build-Simple-Q7S"
|
||||||
build_generator="Ninja"
|
build_generator="Ninja"
|
||||||
definitions="Q7S_SIMPLE_MODE=On"
|
definitions="BUILD_Q7S_SIMPLE_MODE=On"
|
||||||
if [ "${OS}" = "Windows_NT" ]; then
|
if [ "${OS}" = "Windows_NT" ]; then
|
||||||
python="py"
|
python="py"
|
||||||
# Could be other OS but this works for now.
|
# Could be other OS but this works for now.
|
||||||
|
36
cmake/scripts/Q7S/watchdog/make_debug_cfg.sh
Executable file
36
cmake/scripts/Q7S/watchdog/make_debug_cfg.sh
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
counter=0
|
||||||
|
while [ ${counter} -lt 5 ]
|
||||||
|
do
|
||||||
|
cd ..
|
||||||
|
if [ -f "cmake_build_config.py" ];then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
counter=$((counter=counter + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${counter}" -ge 5 ];then
|
||||||
|
echo "cmake_build_config.py not found in upper directories!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
os_fsfw="linux"
|
||||||
|
tgt_bsp="arm/q7s"
|
||||||
|
build_dir="build-Debug-Watchdog"
|
||||||
|
build_generator=""
|
||||||
|
definitions="BUILD_WATCHDOG=ON"
|
||||||
|
if [ "${OS}" = "Windows_NT" ]; then
|
||||||
|
build_generator="MinGW Makefiles"
|
||||||
|
python="py"
|
||||||
|
# Could be other OS but this works for now.
|
||||||
|
else
|
||||||
|
build_generator="Unix Makefiles"
|
||||||
|
python="python3"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running command (without the leading +):"
|
||||||
|
set -x # Print command
|
||||||
|
${python} cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||||
|
-d "${definitions}" -l"${build_dir}"
|
||||||
|
# set +x
|
||||||
|
|
36
cmake/scripts/Q7S/watchdog/make_release_cfg.sh
Executable file
36
cmake/scripts/Q7S/watchdog/make_release_cfg.sh
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
counter=0
|
||||||
|
while [ ${counter} -lt 5 ]
|
||||||
|
do
|
||||||
|
cd ..
|
||||||
|
if [ -f "cmake_build_config.py" ];then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
counter=$((counter=counter + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${counter}" -ge 5 ];then
|
||||||
|
echo "cmake_build_config.py not found in upper directories!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
os_fsfw="linux"
|
||||||
|
tgt_bsp="arm/q7s"
|
||||||
|
build_dir="build-Release-Watchdog"
|
||||||
|
build_generator=""
|
||||||
|
definitions="BUILD_WATCHDOG=ON"
|
||||||
|
if [ "${OS}" = "Windows_NT" ]; then
|
||||||
|
build_generator="MinGW Makefiles"
|
||||||
|
python="py"
|
||||||
|
# Could be other OS but this works for now.
|
||||||
|
else
|
||||||
|
build_generator="Unix Makefiles"
|
||||||
|
python="python3"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running command (without the leading +):"
|
||||||
|
set -x # Print command
|
||||||
|
${python} cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "release" -t "${tgt_bsp}" \
|
||||||
|
-d "${definitions} -l"${build_dir}"
|
||||||
|
# set +x
|
||||||
|
|
34
cmake/scripts/Q7S/watchdog/ninja_debug_cfg.sh
Executable file
34
cmake/scripts/Q7S/watchdog/ninja_debug_cfg.sh
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
counter=0
|
||||||
|
while [ ${counter} -lt 5 ]
|
||||||
|
do
|
||||||
|
cd ..
|
||||||
|
if [ -f "cmake_build_config.py" ];then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
counter=$((counter=counter + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${counter}" -ge 5 ];then
|
||||||
|
echo "cmake_build_config.py not found in upper directories!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
os_fsfw="linux"
|
||||||
|
tgt_bsp="arm/q7s"
|
||||||
|
build_dir="build-Debug-Watchdog"
|
||||||
|
build_generator="Ninja"
|
||||||
|
definitions="-DBUILD_WATCHDOG=ON"
|
||||||
|
if [ "${OS}" = "Windows_NT" ]; then
|
||||||
|
python="py"
|
||||||
|
# Could be other OS but this works for now.
|
||||||
|
else
|
||||||
|
python="python3"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running command (without the leading +):"
|
||||||
|
set -x # Print command
|
||||||
|
${python} cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||||
|
-d "${definitions}" -l "${build_dir}"
|
||||||
|
# set +x
|
||||||
|
|
34
cmake/scripts/Q7S/watchdog/ninja_release_cfg.sh
Executable file
34
cmake/scripts/Q7S/watchdog/ninja_release_cfg.sh
Executable file
@ -0,0 +1,34 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
counter=0
|
||||||
|
while [ ${counter} -lt 5 ]
|
||||||
|
do
|
||||||
|
cd ..
|
||||||
|
if [ -f "cmake_build_config.py" ];then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
counter=$((counter=counter + 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${counter}" -ge 5 ];then
|
||||||
|
echo "cmake_build_config.py not found in upper directories!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
os_fsfw="linux"
|
||||||
|
tgt_bsp="arm/q7s"
|
||||||
|
build_dir="build-Release-Watchdog"
|
||||||
|
build_generator="Ninja"
|
||||||
|
definitions="BUILD_WATCHDOG=ON"
|
||||||
|
if [ "${OS}" = "Windows_NT" ]; then
|
||||||
|
python="py"
|
||||||
|
# Could be other OS but this works for now.
|
||||||
|
else
|
||||||
|
python="python3"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Running command (without the leading +):"
|
||||||
|
set -x # Print command
|
||||||
|
${python} cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "release" -t "${tgt_bsp}" \
|
||||||
|
-d "${definitions}" -l"${build_dir}"
|
||||||
|
# set +x
|
||||||
|
|
@ -1,4 +1,5 @@
|
|||||||
#include "SpiTestClass.h"
|
#include "SpiTestClass.h"
|
||||||
|
#include "OBSWConfig.h"
|
||||||
|
|
||||||
#include "devices/gpioIds.h"
|
#include "devices/gpioIds.h"
|
||||||
|
|
||||||
|
@ -6,6 +6,10 @@
|
|||||||
#ifndef FSFWCONFIG_OBSWCONFIG_H_
|
#ifndef FSFWCONFIG_OBSWCONFIG_H_
|
||||||
#define FSFWCONFIG_OBSWCONFIG_H_
|
#define FSFWCONFIG_OBSWCONFIG_H_
|
||||||
|
|
||||||
|
#cmakedefine RASPBERRY_Pi
|
||||||
|
#cmakedefine XIPHOS_Q7S
|
||||||
|
#cmakedefine BEAGLEBONEBLACK
|
||||||
|
|
||||||
#ifdef RASPBERRY_PI
|
#ifdef RASPBERRY_PI
|
||||||
#include "rpiConfig.h"
|
#include "rpiConfig.h"
|
||||||
#elif defined(XIPHOS_Q7S)
|
#elif defined(XIPHOS_Q7S)
|
||||||
|
@ -254,7 +254,7 @@
|
|||||||
</extensions>
|
</extensions>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<configuration artifactName="${ProjName}" buildProperties="" description="" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851" name="eive-rpi-debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.enablement=null,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.connection=null,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.image=null" parent="org.eclipse.cdt.build.core.emptycfg">
|
<configuration artifactName="${ProjName}" buildProperties="" description="" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851" name="eive-rpi-debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.enablement=null,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.image=null,org.eclipse.cdt.docker.launcher.containerbuild.property.connection=null" parent="org.eclipse.cdt.build.core.emptycfg">
|
||||||
<folderInfo id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851." name="/" resourcePath="">
|
<folderInfo id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851." name="/" resourcePath="">
|
||||||
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.base.1971474557" name="Arm Cross GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.base">
|
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.base.1971474557" name="Arm Cross GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.base">
|
||||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.1813444167" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture" value="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.arm" valueType="enumerated"/>
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.1813444167" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture" value="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.arm" valueType="enumerated"/>
|
||||||
@ -1031,6 +1031,332 @@
|
|||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
</cconfiguration>
|
</cconfiguration>
|
||||||
|
<cconfiguration id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851.1707795689.1631077874">
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851.1707795689.1631077874" moduleId="org.eclipse.cdt.core.settings" name="q7s-watchdog-debug">
|
||||||
|
<macros>
|
||||||
|
<stringMacro name="Q7S_SYSROOT_UNIX" type="VALUE_PATH_DIR" value="/home/rmueller/Xilinx/cortexa9hf-neon-xiphos-linux-gnueabi"/>
|
||||||
|
<stringMacro name="Q7S_SYSROOT" type="VALUE_TEXT" value="C:\Xilinx\cortexa9hf-neon-xiphos-linux-gnueabi"/>
|
||||||
|
</macros>
|
||||||
|
<externalSettings/>
|
||||||
|
<extensions>
|
||||||
|
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
</extensions>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<configuration artifactName="${ProjName}" buildProperties="" description="" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851.1707795689.1631077874" name="q7s-watchdog-debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.enablement=null,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.image=null,org.eclipse.cdt.docker.launcher.containerbuild.property.connection=null" parent="org.eclipse.cdt.build.core.emptycfg">
|
||||||
|
<folderInfo id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851.1707795689.1631077874." name="/" resourcePath="">
|
||||||
|
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.base.1853196545" name="Arm Cross GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.base">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.1428115688" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture" value="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.arm" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix.1510944155" name="Prefix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix" value="arm-linux-gnueabihf-" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.suffix.92769252" name="Suffix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.suffix"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.c.610019917" name="C compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.c" value="gcc" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp.1201031544" name="C++ compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp" value="g++" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar.1760410498" name="Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar" value="ar" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy.1064763498" name="Hex/Bin converter" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy" value="objcopy" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump.331631265" name="Listing generator" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump" value="objdump" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.size.970331748" name="Size command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.size" value="size" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.make.236522981" name="Build command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.make" value="make" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm.1865808922" name="Remove command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm" value="rm" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.useglobalpath.699729501" name="Use global path" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.useglobalpath"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.path.1295538139" name="Path" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.path"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.388594967" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.793340001" name="Create extended listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.1749727653" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.1349977381" name="Arm family (-mcpu)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.cortex-m3" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture.82989226" name="Architecture (-march)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.1541608075" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.thumb" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork.401888334" name="Thumb interwork (-mthumb-interwork)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness.272627134" name="Endianness" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.239262593" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.1141165586" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess.1695405433" name="Unaligned access" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcmse.116686091" name="TrustZone (-mcmse)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcmse"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.family.1655566978" name="AArch64 family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.family"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crc.229916669" name="Feature crc" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crc"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crypto.689188772" name="Feature crypto" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crypto"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.fp.1690300834" name="Feature fp" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.fp"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.simd.321734321" name="Feature simd" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.simd"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.cmodel.1092901157" name="Code model" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.cmodel"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.strictalign.1356288749" name="Strict align (-mstrict-align)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.strictalign"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.target.other.1535510832" name="Other target flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.target.other"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.899890698" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.653591581" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.749393024" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.178082852" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.1869939879" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nocommon.1203685642" name="No common unitialized (-fno-common)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nocommon"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.noinlinefunctions.118922060" name="Do not inline functions (-fno-inline-functions)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.noinlinefunctions"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding.395214006" name="Assume freestanding environment (-ffreestanding)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nobuiltin.301987739" name="Disable builtin (-fno-builtin)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nobuiltin"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.spconstant.2093987817" name="Single precision constants (-fsingle-precision-constant)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.spconstant"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.PIC.289151888" name="Position independent code (-fPIC)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.PIC"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.lto.785873443" name="Link-time optimizer (-flto)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.lto"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants.1448605850" name="Disable loop invariant move (-fno-move-loop-invariants)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.other.1532026535" name="Other optimization flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.other"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name.607327208" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name" value="Linaro ARMv7 Linux GNU EABI HF" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.id.62782791" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.id" value="4014586055" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.syntaxonly.642384458" name="Check syntax only (-fsyntax-only)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.syntaxonly"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic.525513943" name="Pedantic (-pedantic)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedanticerrors.1578782971" name="Pedantic warnings as errors (-pedantic-errors)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedanticerrors"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.nowarn.1037034083" name="Inhibit all warnings (-w)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.nowarn"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.unused.1247065471" name="Warn on various unused elements (-Wunused)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.unused"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.uninitialized.1260951251" name="Warn on uninitialized variables (-Wuninitialised)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.uninitialized"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.981936260" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.503012799" name="Enable extra warnings (-Wextra)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.missingdeclaration.253033895" name="Warn on undeclared global function (-Wmissing-declaration)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.missingdeclaration"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.conversion.1373654311" name="Warn on implicit conversions (-Wconversion)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.conversion"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pointerarith.1799537282" name="Warn if pointer arithmetic (-Wpointer-arith)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pointerarith"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.padded.1035296638" name="Warn if padding is included (-Wpadded)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.padded"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.shadow.464394102" name="Warn if shadowed variable (-Wshadow)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.shadow"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.logicalop.1460483292" name="Warn if suspicious logical ops (-Wlogical-op)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.logicalop"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.agreggatereturn.127377897" name="Warn if struct is returned (-Wagreggate-return)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.agreggatereturn"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.floatequal.1847784730" name="Warn if floats are compared as equal (-Wfloat-equal)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.floatequal"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.toerrors.1755613157" name="Generate errors instead of warnings (-Werror)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.toerrors"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.other.692577952" name="Other warning flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.other"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1908336701" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.1804194339" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.prof.526555351" name="Generate prof information (-p)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.prof"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.gprof.873587454" name="Generate gprof information (-pg)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.gprof"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.other.138952870" name="Other debugging flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.other"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.showDevicesTab.69065720" name="showDevicesTab" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.showDevicesTab"/>
|
||||||
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.1773865512" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
|
||||||
|
<builder arguments="--build . -j" buildPath="${workspace_loc:/eive-obsw/build-Watchdog}" command="cmake" enableCleanBuild="false" enabledIncrementalBuild="true" id="ilg.gnuarmeclipse.managedbuild.cross.builder.890124449" incrementalBuildTarget="" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="ilg.gnuarmeclipse.managedbuild.cross.builder"/>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.964799144" name="GNU Arm Cross Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.295289472" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" value="true" valueType="boolean"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths.111941431" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${Q7S_SYSROOT_UNIX}/usr/include""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/fsfw/src}""/>
|
||||||
|
</option>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input.459112711" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.715561087" name="GNU Arm Cross C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler">
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths.1490897717" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${Q7S_SYSROOT_UNIX}/usr/include""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/common/config}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/linux/fsfwconfig}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/fsfw/src}""/>
|
||||||
|
</option>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.103503120" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
|
||||||
|
<listOptionValue builtIn="false" value="LINUX=1"/>
|
||||||
|
</option>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.1004720080" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.1992099127" name="GNU Arm Cross C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler">
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths.415780010" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""../${Q7S_SYSROOT}/usr/include""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${Q7S_SYSROOT_UNIX}/usr/include""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/linux/fsfwconfig}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/common/config}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/build-Debug-Q7S}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/fsfw/src}""/>
|
||||||
|
</option>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs.257960269" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
|
||||||
|
<listOptionValue builtIn="false" value="LINUX=1"/>
|
||||||
|
</option>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.234631061" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.1055147494" name="GNU Arm Cross C Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections.764318262" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections" value="true" valueType="boolean"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.1702402068" name="GNU Arm Cross C++ Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.741677865" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input.731249103" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input">
|
||||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
|
</inputType>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver.667910659" name="GNU Arm Cross Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver"/>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash.1162425410" name="GNU Arm Cross Create Flash Image" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash"/>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting.753735540" name="GNU Arm Cross Create Listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source.967599747" name="Display source (--source|-S)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders.782719246" name="Display all headers (--all-headers|-x)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.demangle.887746034" name="Demangle names (--demangle|-C)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.demangle" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.linenumbers.2083687557" name="Display line numbers (--line-numbers|-l)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.linenumbers" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide.278410379" name="Wide lines (--wide|-w)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide" value="true" valueType="boolean"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize.1321295676" name="GNU Arm Cross Print Size" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format.2004631716" name="Size format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format"/>
|
||||||
|
</tool>
|
||||||
|
</toolChain>
|
||||||
|
</folderInfo>
|
||||||
|
<sourceEntries>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
||||||
|
</sourceEntries>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
<storageModule moduleId="ilg.gnumcueclipse.managedbuild.packs"/>
|
||||||
|
</cconfiguration>
|
||||||
|
<cconfiguration id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851.1707795689.1631077874.1323243318">
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851.1707795689.1631077874.1323243318" moduleId="org.eclipse.cdt.core.settings" name="q7s-watchdog-release">
|
||||||
|
<macros>
|
||||||
|
<stringMacro name="Q7S_SYSROOT_UNIX" type="VALUE_PATH_DIR" value="/home/rmueller/Xilinx/cortexa9hf-neon-xiphos-linux-gnueabi"/>
|
||||||
|
<stringMacro name="Q7S_SYSROOT" type="VALUE_TEXT" value="C:\Xilinx\cortexa9hf-neon-xiphos-linux-gnueabi"/>
|
||||||
|
</macros>
|
||||||
|
<externalSettings/>
|
||||||
|
<extensions>
|
||||||
|
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
</extensions>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<configuration artifactName="${ProjName}" buildProperties="" description="" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851.1707795689.1631077874.1323243318" name="q7s-watchdog-release" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.enablement=null,org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.image=null,org.eclipse.cdt.docker.launcher.containerbuild.property.connection=null" parent="org.eclipse.cdt.build.core.emptycfg">
|
||||||
|
<folderInfo id="cdt.managedbuild.toolchain.gnu.mingw.base.1455833186.1840876443.2117915473.688890851.1707795689.1631077874.1323243318." name="/" resourcePath="">
|
||||||
|
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.base.945823170" name="Arm Cross GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.base">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.1822710270" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture" value="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.arm" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix.605508402" name="Prefix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix" value="arm-linux-gnueabihf-" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.suffix.1685371232" name="Suffix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.suffix"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.c.1230707505" name="C compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.c" value="gcc" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp.1964629067" name="C++ compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp" value="g++" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar.385685672" name="Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar" value="ar" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy.19798029" name="Hex/Bin converter" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy" value="objcopy" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump.660151116" name="Listing generator" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump" value="objdump" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.size.1389883617" name="Size command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.size" value="size" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.make.1048438852" name="Build command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.make" value="make" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm.868955624" name="Remove command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm" value="rm" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.useglobalpath.118295726" name="Use global path" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.useglobalpath"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.path.1093543991" name="Path" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.path"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.921980090" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting.1363567442" name="Create extended listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createlisting"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.2082737223" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.1423005809" name="Arm family (-mcpu)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.cortex-m3" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture.618203550" name="Architecture (-march)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.architecture"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.1847875724" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.thumb" valueType="enumerated"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork.2079846402" name="Thumb interwork (-mthumb-interwork)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.thumbinterwork"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness.199745021" name="Endianness" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.endianness"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi.859908593" name="Float ABI" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.abi"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit.575938010" name="FPU Type" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.fpu.unit"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess.1351320485" name="Unaligned access" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.unalignedaccess"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcmse.727223476" name="TrustZone (-mcmse)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcmse"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.family.1731779212" name="AArch64 family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.family"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crc.777808183" name="Feature crc" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crc"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crypto.421152926" name="Feature crypto" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.crypto"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.fp.1971579602" name="Feature fp" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.fp"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.simd.1672918300" name="Feature simd" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.feature.simd"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.cmodel.1151412221" name="Code model" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.cmodel"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.strictalign.325813321" name="Strict align (-mstrict-align)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.aarch64.target.strictalign"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.target.other.1987396366" name="Other target flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.target.other"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.937657323" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.449353406" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.1585813196" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.1824290503" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.914739306" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nocommon.535397306" name="No common unitialized (-fno-common)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nocommon"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.noinlinefunctions.1186797822" name="Do not inline functions (-fno-inline-functions)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.noinlinefunctions"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding.1945013655" name="Assume freestanding environment (-ffreestanding)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nobuiltin.243922601" name="Disable builtin (-fno-builtin)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nobuiltin"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.spconstant.666712948" name="Single precision constants (-fsingle-precision-constant)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.spconstant"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.PIC.1105072873" name="Position independent code (-fPIC)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.PIC"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.lto.2055098195" name="Link-time optimizer (-flto)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.lto"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants.1126925637" name="Disable loop invariant move (-fno-move-loop-invariants)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.nomoveloopinvariants"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.other.474962212" name="Other optimization flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.other"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name.310881289" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name" value="Linaro ARMv7 Linux GNU EABI HF" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.id.1368410061" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.id" value="4014586055" valueType="string"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.syntaxonly.1445202717" name="Check syntax only (-fsyntax-only)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.syntaxonly"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic.737997342" name="Pedantic (-pedantic)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedantic"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedanticerrors.1571094982" name="Pedantic warnings as errors (-pedantic-errors)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pedanticerrors"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.nowarn.465411429" name="Inhibit all warnings (-w)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.nowarn"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.unused.905397234" name="Warn on various unused elements (-Wunused)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.unused"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.uninitialized.17965819" name="Warn on uninitialized variables (-Wuninitialised)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.uninitialized"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.1834746748" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.1938682393" name="Enable extra warnings (-Wextra)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.missingdeclaration.2145593538" name="Warn on undeclared global function (-Wmissing-declaration)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.missingdeclaration"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.conversion.109579169" name="Warn on implicit conversions (-Wconversion)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.conversion"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pointerarith.1735516051" name="Warn if pointer arithmetic (-Wpointer-arith)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.pointerarith"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.padded.1660774802" name="Warn if padding is included (-Wpadded)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.padded"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.shadow.1385036335" name="Warn if shadowed variable (-Wshadow)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.shadow"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.logicalop.253199518" name="Warn if suspicious logical ops (-Wlogical-op)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.logicalop"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.agreggatereturn.771630072" name="Warn if struct is returned (-Wagreggate-return)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.agreggatereturn"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.floatequal.1688337175" name="Warn if floats are compared as equal (-Wfloat-equal)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.floatequal"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.toerrors.2068827270" name="Generate errors instead of warnings (-Werror)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.toerrors"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.other.1300850125" name="Other warning flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.other"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.1392289946" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.1274169924" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.prof.1855458448" name="Generate prof information (-p)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.prof"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.gprof.161141850" name="Generate gprof information (-pg)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.gprof"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.other.1135900144" name="Other debugging flags" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.other"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.showDevicesTab.2092395820" name="showDevicesTab" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.showDevicesTab"/>
|
||||||
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.381962613" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
|
||||||
|
<builder arguments="--build . -j" buildPath="${workspace_loc:/eive-obsw/build-Release-Watchdog}" command="cmake" enableCleanBuild="false" enabledIncrementalBuild="true" id="ilg.gnuarmeclipse.managedbuild.cross.builder.1784164529" incrementalBuildTarget="" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="ilg.gnuarmeclipse.managedbuild.cross.builder"/>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.926630835" name="GNU Arm Cross Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.243911424" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" value="true" valueType="boolean"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths.473023042" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${Q7S_SYSROOT_UNIX}/usr/include""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/fsfw/src}""/>
|
||||||
|
</option>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input.1421275058" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.449221513" name="GNU Arm Cross C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler">
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths.518907687" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${Q7S_SYSROOT_UNIX}/usr/include""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/common/config}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/linux/fsfwconfig}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/fsfw/src}""/>
|
||||||
|
</option>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.1215245446" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
|
||||||
|
<listOptionValue builtIn="false" value="LINUX=1"/>
|
||||||
|
</option>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input.1048106331" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.1358447993" name="GNU Arm Cross C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler">
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths.1479238966" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""../${Q7S_SYSROOT}/usr/include""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${Q7S_SYSROOT_UNIX}/usr/include""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/linux/fsfwconfig}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/common/config}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/build-Debug-Q7S}""/>
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/eive-obsw/fsfw/src}""/>
|
||||||
|
</option>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs.1072937788" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.defs" useByScannerDiscovery="true" valueType="definedSymbols">
|
||||||
|
<listOptionValue builtIn="false" value="LINUX=1"/>
|
||||||
|
</option>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input.1822075528" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.24089673" name="GNU Arm Cross C Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections.520318104" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.gcsections" value="true" valueType="boolean"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.497099701" name="GNU Arm Cross C++ Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.230575607" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
|
||||||
|
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input.1250155843" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input">
|
||||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
|
</inputType>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver.1661455988" name="GNU Arm Cross Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.archiver"/>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash.1439410817" name="GNU Arm Cross Create Flash Image" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createflash"/>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting.660901959" name="GNU Arm Cross Create Listing" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source.1807964015" name="Display source (--source|-S)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.source" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders.1831292329" name="Display all headers (--all-headers|-x)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.allheaders" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.demangle.1766387449" name="Demangle names (--demangle|-C)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.demangle" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.linenumbers.2058436534" name="Display line numbers (--line-numbers|-l)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.linenumbers" value="true" valueType="boolean"/>
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide.663388579" name="Wide lines (--wide|-w)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide" value="true" valueType="boolean"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize.688188043" name="GNU Arm Cross Print Size" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize">
|
||||||
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format.703088320" name="Size format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format"/>
|
||||||
|
</tool>
|
||||||
|
</toolChain>
|
||||||
|
</folderInfo>
|
||||||
|
<sourceEntries>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
||||||
|
</sourceEntries>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
<storageModule moduleId="ilg.gnumcueclipse.managedbuild.packs"/>
|
||||||
|
</cconfiguration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
<project id="eive_obsw.null.1109622296" name="eive_obsw"/>
|
<project id="eive_obsw.null.1109622296" name="eive_obsw"/>
|
||||||
@ -1044,6 +1370,9 @@
|
|||||||
<resource resourceType="PROJECT" workspacePath="/eive_obsw"/>
|
<resource resourceType="PROJECT" workspacePath="/eive_obsw"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration configurationName="eive-mingw-release"/>
|
<configuration configurationName="eive-mingw-release"/>
|
||||||
|
<configuration configurationName="q7s-watchdog-release">
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/eive-obsw"/>
|
||||||
|
</configuration>
|
||||||
<configuration configurationName="eive-rpi-release-win"/>
|
<configuration configurationName="eive-rpi-release-win"/>
|
||||||
<configuration configurationName="Default">
|
<configuration configurationName="Default">
|
||||||
<resource resourceType="PROJECT" workspacePath="/eive_obsw"/>
|
<resource resourceType="PROJECT" workspacePath="/eive_obsw"/>
|
||||||
@ -1060,6 +1389,7 @@
|
|||||||
<configuration configurationName="eive-mingw-debug">
|
<configuration configurationName="eive-mingw-debug">
|
||||||
<resource resourceType="PROJECT" workspacePath="/eive_obsw"/>
|
<resource resourceType="PROJECT" workspacePath="/eive_obsw"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
<configuration configurationName="q7s-watchdog"/>
|
||||||
<configuration configurationName="eive-rpi-debug"/>
|
<configuration configurationName="eive-rpi-debug"/>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings">
|
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings">
|
||||||
|
@ -8,7 +8,13 @@ def main():
|
|||||||
cmd = build_cmd(args)
|
cmd = build_cmd(args)
|
||||||
# Run the command
|
# Run the command
|
||||||
print(f'Running command: {cmd}')
|
print(f'Running command: {cmd}')
|
||||||
os.system(cmd)
|
result = os.system(cmd)
|
||||||
|
if result != 0:
|
||||||
|
print('')
|
||||||
|
print('Removing problematic SSH key and trying again..')
|
||||||
|
remove_ssh_key_cmd = 'ssh-keygen -f "${HOME}/.ssh/known_hosts" -R "[localhost]:1535"'
|
||||||
|
os.system(remove_ssh_key_cmd)
|
||||||
|
result = os.system(cmd)
|
||||||
|
|
||||||
|
|
||||||
def handle_args():
|
def handle_args():
|
||||||
|
4
watchdog/CMakeLists.txt
Normal file
4
watchdog/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
|
main.cpp
|
||||||
|
Watchdog.cpp
|
||||||
|
)
|
258
watchdog/Watchdog.cpp
Normal file
258
watchdog/Watchdog.cpp
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
#include "Watchdog.h"
|
||||||
|
#include "watchdogConf.h"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <poll.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <thread>
|
||||||
|
#include <cstring>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
|
|
||||||
|
WatchdogTask::WatchdogTask (): fd(0) {
|
||||||
|
int result = 0;
|
||||||
|
// Only create the FIFO if it does not exist yet
|
||||||
|
if(not std::filesystem::exists(watchdog::FIFO_NAME)) {
|
||||||
|
// Permission 666 or rw-rw-rw-
|
||||||
|
mode_t mode = DEFFILEMODE;
|
||||||
|
result = mkfifo(watchdog::FIFO_NAME.c_str(), mode);
|
||||||
|
if(result != 0) {
|
||||||
|
std::cerr << "eive-watchdog: Could not created named pipe at " <<
|
||||||
|
watchdog::FIFO_NAME << ", error " << errno << ": " << strerror(errno) <<
|
||||||
|
std::endl;
|
||||||
|
throw std::runtime_error("eive-watchdog: FIFO creation failed");
|
||||||
|
}
|
||||||
|
#if WATCHDOG_VERBOSE_LEVEL >= 1
|
||||||
|
std::cout << "eive-watchdog: Pipe at " << watchdog::FIFO_NAME <<
|
||||||
|
" created successfully" << std::endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
WatchdogTask::~WatchdogTask() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int WatchdogTask::performOperation() {
|
||||||
|
// Open FIFO read only and non-blocking
|
||||||
|
fd = open(watchdog::FIFO_NAME.c_str(), O_RDONLY | O_NONBLOCK);
|
||||||
|
if(fd < 0) {
|
||||||
|
std::cerr << "eive-watchdog: Opening pipe " << watchdog::FIFO_NAME <<
|
||||||
|
"read-only failed with " << errno << ": " << strerror(errno) << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
state = States::RUNNING;
|
||||||
|
|
||||||
|
while(true) {
|
||||||
|
WatchdogTask::LoopResult loopResult = watchdogLoop();
|
||||||
|
switch(loopResult) {
|
||||||
|
case(LoopResult::OK): {
|
||||||
|
performRunningOperation();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case(LoopResult::CANCEL_RQ): {
|
||||||
|
std::cout << "eive-watchdog: Received cancel request, closing watchdog.." << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case(LoopResult::SUSPEND_RQ): {
|
||||||
|
performSuspendOperation();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case(LoopResult::TIMEOUT): {
|
||||||
|
performNotRunningOperation(loopResult);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case(LoopResult::HUNG_UP): {
|
||||||
|
performNotRunningOperation(loopResult);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case(LoopResult::RESTART_RQ): {
|
||||||
|
if(state == States::SUSPENDED or state == States::FAULTY) {
|
||||||
|
performRunningOperation();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case(LoopResult::FAULT): {
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
// Configuration error
|
||||||
|
std::cerr << "Fault has occured in watchdog loop" << std::endl;
|
||||||
|
// Prevent spam
|
||||||
|
std::this_thread::sleep_for(2000ms);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (close(fd) < 0) {
|
||||||
|
std::cerr << "eive-watchdog: Closing named pipe at " << watchdog::FIFO_NAME <<
|
||||||
|
"failed, error " << errno << ": " << strerror(errno) << std::endl;
|
||||||
|
}
|
||||||
|
std::cout << "eive-watchdog: Finished" << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WatchdogTask::LoopResult WatchdogTask::watchdogLoop() {
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
struct pollfd waiter = {};
|
||||||
|
waiter.fd = fd;
|
||||||
|
waiter.events = POLLIN;
|
||||||
|
|
||||||
|
switch(state) {
|
||||||
|
case(States::SUSPENDED): {
|
||||||
|
// Sleep, then check whether a restart request was received
|
||||||
|
std::this_thread::sleep_for(1000ms);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case(States::RUNNING): {
|
||||||
|
// Continue as usual
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case(States::NOT_STARTED): {
|
||||||
|
// This should not happen
|
||||||
|
std::cerr << "eive-watchdog: State is NOT_STARTED, configuration error" << std::endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case(States::FAULTY): {
|
||||||
|
// TODO: Not sure what to do yet. Continue for now
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 10 seconds timeout, only poll one file descriptor
|
||||||
|
switch(poll(&waiter, 1, watchdog::TIMEOUT_MS)) {
|
||||||
|
case(0): {
|
||||||
|
return LoopResult::TIMEOUT;
|
||||||
|
}
|
||||||
|
case(1): {
|
||||||
|
return pollEvent(waiter);
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
std::cerr << "eive-watchdog: Unknown poll error at " << watchdog::FIFO_NAME << ", error " <<
|
||||||
|
errno << ": " << strerror(errno) << std::endl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return LoopResult::OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
WatchdogTask::LoopResult WatchdogTask::pollEvent(struct pollfd& waiter) {
|
||||||
|
if (waiter.revents & POLLIN) {
|
||||||
|
ssize_t readLen = read(fd, buf.data(), buf.size());
|
||||||
|
if (readLen < 0) {
|
||||||
|
std::cerr << "eive-watchdog: Read error on pipe " << watchdog::FIFO_NAME <<
|
||||||
|
", error " << errno << ": " << strerror(errno) << std::endl;
|
||||||
|
return LoopResult::OK;
|
||||||
|
}
|
||||||
|
#if WATCHDOG_VERBOSE_LEVEL == 2
|
||||||
|
std::cout << "Read " << readLen << " byte(s) on the pipe " << FIFO_NAME
|
||||||
|
<< std::endl;
|
||||||
|
#endif
|
||||||
|
else if(readLen >= 1) {
|
||||||
|
return parseCommandByte(readLen);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(waiter.revents & POLLERR) {
|
||||||
|
std::cerr << "eive-watchdog: Poll error error on pipe " << watchdog::FIFO_NAME <<
|
||||||
|
std::endl;
|
||||||
|
return LoopResult::FAULT;
|
||||||
|
}
|
||||||
|
else if (waiter.revents & POLLHUP) {
|
||||||
|
// Writer closed its end
|
||||||
|
return LoopResult::HUNG_UP;
|
||||||
|
}
|
||||||
|
return LoopResult::FAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
WatchdogTask::LoopResult WatchdogTask::parseCommandByte(ssize_t readLen) {
|
||||||
|
for(ssize_t idx = 0; idx < readLen; idx++) {
|
||||||
|
char readChar = buf[idx];
|
||||||
|
// Cancel request
|
||||||
|
if(readChar == watchdog::CANCEL_CHAR) {
|
||||||
|
return LoopResult::CANCEL_RQ;
|
||||||
|
}
|
||||||
|
// Begin request. Does not work if the operation was not suspended before
|
||||||
|
else if(readChar == watchdog::RESTART_CHAR) {
|
||||||
|
return LoopResult::RESTART_RQ;
|
||||||
|
}
|
||||||
|
// Suspend request
|
||||||
|
else if(readChar == watchdog::SUSPEND_CHAR) {
|
||||||
|
return LoopResult::SUSPEND_RQ;
|
||||||
|
}
|
||||||
|
// Everything else: All working as expected
|
||||||
|
}
|
||||||
|
return LoopResult::OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int WatchdogTask::performRunningOperation() {
|
||||||
|
if(state != States::RUNNING) {
|
||||||
|
state = States::RUNNING;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(not obswRunning) {
|
||||||
|
if(printNotRunningLatch) {
|
||||||
|
// Reset latch so user can see timeouts
|
||||||
|
printNotRunningLatch = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
obswRunning = true;
|
||||||
|
std::cout << "eive-watchdog: Running OBSW detected.." << std::endl;
|
||||||
|
#if WATCHDOG_CREATE_FILE_IF_RUNNING == 1
|
||||||
|
std::cout << "eive-watchdog: Creating " << watchdog::RUNNING_FILE_NAME << std::endl;
|
||||||
|
if (not std::filesystem::exists(watchdog::RUNNING_FILE_NAME)) {
|
||||||
|
std::ofstream obswRunningFile(watchdog::RUNNING_FILE_NAME);
|
||||||
|
if(not obswRunningFile.good()) {
|
||||||
|
std::cerr << "Creating file " << watchdog::RUNNING_FILE_NAME << " failed"
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int WatchdogTask::performNotRunningOperation(LoopResult type) {
|
||||||
|
// Latch prevents spam on console
|
||||||
|
if(not printNotRunningLatch) {
|
||||||
|
if(type == LoopResult::HUNG_UP) {
|
||||||
|
std::cout << "eive-watchdog: FIFO writer hung up!" << std::endl;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
std::cout << "eive-watchdog: The FIFO timed out!" << std::endl;
|
||||||
|
}
|
||||||
|
printNotRunningLatch = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(obswRunning) {
|
||||||
|
#if WATCHDOG_CREATE_FILE_IF_RUNNING == 1
|
||||||
|
if (std::filesystem::exists(watchdog::RUNNING_FILE_NAME)) {
|
||||||
|
int result = std::remove(watchdog::RUNNING_FILE_NAME.c_str());
|
||||||
|
if(result != 0) {
|
||||||
|
std::cerr << "Removing " << watchdog::RUNNING_FILE_NAME << " failed with code " <<
|
||||||
|
errno << ": " << strerror(errno) << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
obswRunning = false;
|
||||||
|
}
|
||||||
|
if(type == LoopResult::HUNG_UP) {
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
// Prevent spam
|
||||||
|
std::this_thread::sleep_for(2000ms);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int WatchdogTask::performSuspendOperation() {
|
||||||
|
if(state == States::RUNNING or state == States::FAULTY) {
|
||||||
|
std::cout << "eive-watchdog: Suspending watchdog operations" << std::endl;
|
||||||
|
watchdogRunning = false;
|
||||||
|
state = States::SUSPENDED;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
49
watchdog/Watchdog.h
Normal file
49
watchdog/Watchdog.h
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#ifndef WATCHDOG_WATCHDOG_H_
|
||||||
|
#define WATCHDOG_WATCHDOG_H_
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
|
||||||
|
class WatchdogTask {
|
||||||
|
public:
|
||||||
|
enum class States {
|
||||||
|
NOT_STARTED,
|
||||||
|
RUNNING,
|
||||||
|
SUSPENDED,
|
||||||
|
FAULTY
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class LoopResult {
|
||||||
|
OK,
|
||||||
|
SUSPEND_RQ,
|
||||||
|
CANCEL_RQ,
|
||||||
|
RESTART_RQ,
|
||||||
|
TIMEOUT,
|
||||||
|
HUNG_UP,
|
||||||
|
FAULT
|
||||||
|
};
|
||||||
|
|
||||||
|
WatchdogTask();
|
||||||
|
|
||||||
|
virtual ~WatchdogTask();
|
||||||
|
|
||||||
|
int performOperation();
|
||||||
|
private:
|
||||||
|
int fd = 0;
|
||||||
|
|
||||||
|
bool obswRunning = false;
|
||||||
|
bool watchdogRunning = false;
|
||||||
|
bool printNotRunningLatch = false;
|
||||||
|
std::array<uint8_t, 64> buf;
|
||||||
|
States state = States::NOT_STARTED;
|
||||||
|
|
||||||
|
LoopResult watchdogLoop();
|
||||||
|
LoopResult pollEvent(struct pollfd& waiter);
|
||||||
|
LoopResult parseCommandByte(ssize_t readLen);
|
||||||
|
|
||||||
|
int performRunningOperation();
|
||||||
|
int performNotRunningOperation(LoopResult type);
|
||||||
|
int performSuspendOperation();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* WATCHDOG_WATCHDOG_H_ */
|
24
watchdog/main.cpp
Normal file
24
watchdog/main.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "Watchdog.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This watchdog application uses a FIFO to check whether the OBSW is still running.
|
||||||
|
* It checks whether the OBSW writes to the the FIFO regularly.
|
||||||
|
*/
|
||||||
|
int main() {
|
||||||
|
std::cout << "eive-watchdog: Starting OBSW watchdog.." << std::endl;
|
||||||
|
try {
|
||||||
|
WatchdogTask watchdogTask;
|
||||||
|
int result = watchdogTask.performOperation();
|
||||||
|
if(result != 0) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(const std::runtime_error& e) {
|
||||||
|
std::cerr << "eive-watchdog: Run time exception " << e.what() << std::endl;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
24
watchdog/watchdogConf.h.in
Normal file
24
watchdog/watchdogConf.h.in
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#define WATCHDOG_VERBOSE_LEVEL 1
|
||||||
|
/**
|
||||||
|
* This flag instructs the watchdog to create a special file in /tmp if the OBSW is running
|
||||||
|
* or to delete it if it is not running
|
||||||
|
*/
|
||||||
|
#define WATCHDOG_CREATE_FILE_IF_RUNNING 1
|
||||||
|
|
||||||
|
namespace watchdog {
|
||||||
|
|
||||||
|
static constexpr int TIMEOUT_MS = 5 * 1000;
|
||||||
|
const std::string FIFO_NAME = "/tmp/watchdog-pipe";
|
||||||
|
const std::string RUNNING_FILE_NAME = "/tmp/obsw-running";
|
||||||
|
|
||||||
|
// Suspend watchdog operations temporarily
|
||||||
|
static constexpr char SUSPEND_CHAR = 's';
|
||||||
|
// Resume watchdog operations
|
||||||
|
static constexpr char RESTART_CHAR = 'b';
|
||||||
|
// Causes the watchdog to close down
|
||||||
|
static constexpr char CANCEL_CHAR = 'c';
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user