v1.6.0 #78
14
.gitignore
vendored
14
.gitignore
vendored
@ -1,19 +1,15 @@
|
||||
/build*
|
||||
|
||||
Debug
|
||||
Debug*
|
||||
Release
|
||||
Release*
|
||||
|
||||
# Eclipse
|
||||
.settings
|
||||
.metadata
|
||||
.project
|
||||
.cproject
|
||||
__pycache__
|
||||
|
||||
.idea
|
||||
|
||||
!misc/eclipse/**/.cproject
|
||||
!misc/eclipse/**/.project
|
||||
|
||||
# Python
|
||||
__pycache__
|
||||
.idea
|
||||
|
||||
generators/*.db
|
||||
|
@ -14,11 +14,13 @@ cmake_minimum_required(VERSION 3.13)
|
||||
set(CMAKE_SCRIPT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
|
||||
if(TGT_BSP MATCHES "arm/q7s")
|
||||
option(Q7S_SIMPLE_MODE OFF "Simple mode with a minimal main function")
|
||||
option(EIVE_BUILD_WATCHDOG "Compile the OBSW watchdog insted" OFF)
|
||||
option(BUILD_Q7S_SIMPLE_MODE OFF "Simple mode with a minimal main function")
|
||||
endif()
|
||||
|
||||
option(ADD_ETL_LIB "Add ETL library" ON)
|
||||
option(ADD_JSON_LIB "Add JSON librara" ON)
|
||||
option(ADD_JSON_LIB "Add JSON library" ON)
|
||||
option(EIVE_SYSROOT_MAGIC "Perform sysroot magic which might not be necessary" OFF)
|
||||
|
||||
if(NOT FSFW_OSAL)
|
||||
set(FSFW_OSAL host CACHE STRING "OS for the FSFW.")
|
||||
@ -32,8 +34,13 @@ endif()
|
||||
include(${CMAKE_SCRIPT_PATH}/PreProjectConfig.cmake)
|
||||
pre_project_config()
|
||||
|
||||
set(PROJECT_NAME_TO_SET eive-obsw-$ENV{USERNAME})
|
||||
if(EIVE_BUILD_WATCHDOG)
|
||||
set(PROJECT_NAME_TO_SET eive-watchdog)
|
||||
endif()
|
||||
|
||||
# Project Name
|
||||
project(eive_obsw ASM C CXX)
|
||||
project(${PROJECT_NAME_TO_SET} ASM C CXX)
|
||||
|
||||
################################################################################
|
||||
# Pre-Sources preparation
|
||||
@ -60,6 +67,7 @@ set(MISSION_PATH mission)
|
||||
set(TEST_PATH test/testtasks)
|
||||
set(LINUX_PATH linux)
|
||||
set(COMMON_PATH common)
|
||||
set(WATCHDOG_PATH watchdog)
|
||||
set(COMMON_CONFIG_PATH ${COMMON_PATH}/config)
|
||||
|
||||
set(FSFW_HAL_LIB_PATH fsfw_hal)
|
||||
@ -82,7 +90,7 @@ if(TGT_BSP)
|
||||
OR TGT_BSP MATCHES "arm/beagleboneblack"
|
||||
)
|
||||
set(FSFW_CONFIG_PATH "linux/fsfwconfig")
|
||||
if(NOT Q7S_SIMPLE_MODE)
|
||||
if(NOT BUILD_Q7S_SIMPLE_MODE)
|
||||
set(ADD_LINUX_FILES TRUE)
|
||||
set(ADD_CSP_LIB TRUE)
|
||||
set(FSFW_HAL_ADD_LINUX ON)
|
||||
@ -90,16 +98,19 @@ if(TGT_BSP)
|
||||
endif()
|
||||
|
||||
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)
|
||||
endif()
|
||||
|
||||
if(${TGT_BSP} MATCHES "arm/beagleboneblack")
|
||||
add_definitions(-DBEAGLEBONEBLACK)
|
||||
# Used by configure file
|
||||
set(BEAGLEBONEBLACK ON)
|
||||
endif()
|
||||
|
||||
if(${TGT_BSP} MATCHES "arm/q7s")
|
||||
add_definitions(-DXIPHOS_Q7S)
|
||||
# Used by configure file
|
||||
set(XIPHOS_Q7S ON)
|
||||
endif()
|
||||
else()
|
||||
# Required by FSFW library
|
||||
@ -107,6 +118,7 @@ else()
|
||||
endif()
|
||||
|
||||
# Configuration files
|
||||
if(NOT EIVE_BUILD_WATCHDOG)
|
||||
configure_file(${COMMON_CONFIG_PATH}/commonConfig.h.in commonConfig.h)
|
||||
configure_file(${FSFW_CONFIG_PATH}/FSFWConfig.h.in FSFWConfig.h)
|
||||
configure_file(${FSFW_CONFIG_PATH}/OBSWConfig.h.in OBSWConfig.h)
|
||||
@ -115,6 +127,8 @@ if(${TGT_BSP} MATCHES "arm/q7s")
|
||||
elseif(${TGT_BSP} MATCHES "arm/raspberrypi")
|
||||
configure_file(${BSP_PATH}/boardconfig/rpiConfig.h.in rpiConfig.h)
|
||||
endif()
|
||||
endif()
|
||||
configure_file(${WATCHDOG_PATH}/watchdogConf.h.in watchdogConf.h)
|
||||
|
||||
# Set common config path for FSFW
|
||||
set(FSFW_ADDITIONAL_INC_PATHS
|
||||
@ -131,26 +145,28 @@ set(LWGPS_CONFIG_PATH "${COMMON_PATH}/config")
|
||||
# Add executable
|
||||
add_executable(${TARGET_NAME})
|
||||
|
||||
if(ADD_CSP_LIB)
|
||||
add_subdirectory(${CSP_LIB_PATH})
|
||||
endif()
|
||||
|
||||
if(ADD_ETL_LIB)
|
||||
add_subdirectory(${ETL_LIB_PATH})
|
||||
endif()
|
||||
|
||||
if(ADD_LINUX_FILES)
|
||||
add_subdirectory(${LINUX_PATH})
|
||||
endif()
|
||||
|
||||
if(ADD_JSON_LIB)
|
||||
add_subdirectory(${LIB_JSON_PATH})
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
if(NOT EIVE_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 Q7S_SIMPLE_MODE)
|
||||
if((NOT BUILD_Q7S_SIMPLE_MODE) AND (NOT EIVE_BUILD_WATCHDOG))
|
||||
add_subdirectory(${LWGPS_LIB_PATH})
|
||||
add_subdirectory(${FSFW_PATH})
|
||||
add_subdirectory(${MISSION_PATH})
|
||||
@ -158,6 +174,9 @@ if(NOT Q7S_SIMPLE_MODE)
|
||||
add_subdirectory(${ARCSEC_LIB_PATH})
|
||||
endif()
|
||||
|
||||
if(EIVE_BUILD_WATCHDOG)
|
||||
add_subdirectory(${WATCHDOG_PATH})
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Post-Sources preparation
|
||||
@ -165,35 +184,42 @@ endif()
|
||||
|
||||
set_property(CACHE FSFW_OSAL PROPERTY STRINGS host linux)
|
||||
|
||||
if(NOT Q7S_SIMPLE_MODE)
|
||||
if((NOT BUILD_Q7S_SIMPLE_MODE) AND (NOT EIVE_BUILD_WATCHDOG))
|
||||
# Add libraries for all sources.
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||
${LIB_FSFW_NAME}
|
||||
${LIB_OS_NAME}
|
||||
${LIB_LWGPS_NAME}
|
||||
${LIB_ARCSEC}
|
||||
${LIB_CXX_FS}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT EIVE_BUILD_WATCHDOG)
|
||||
if(ADD_CSP_LIB)
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||
${LIB_CSP_NAME}
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(ADD_ETL_LIB)
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||
${LIB_ETL_NAME}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(ADD_CSP_LIB)
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||
${LIB_CSP_NAME}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(ADD_JSON_LIB)
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||
${LIB_JSON_NAME}
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||
${LIB_CXX_FS}
|
||||
)
|
||||
|
||||
# Add include paths for all sources.
|
||||
target_include_directories(${TARGET_NAME} PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
@ -249,11 +275,15 @@ if(NOT CMAKE_SIZE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(EIVE_BUILD_WATCHDOG)
|
||||
set(TARGET_STRING "OBSW Watchdog")
|
||||
else()
|
||||
if(TGT_BSP)
|
||||
set(TARGET_STRING "Target BSP: ${TGT_BSP}")
|
||||
else()
|
||||
set(TARGET_STRING "Target BSP: Hosted")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
string(CONCAT POST_BUILD_COMMENT
|
||||
"Build directory: ${CMAKE_BINARY_DIR}\n"
|
||||
|
894
README.md
894
README.md
@ -1,7 +1,25 @@
|
||||
<img align="center" src="./doc/img/eive-logo.png" width="20%">
|
||||
|
||||
<a id="top"></a> <a name="linux"></a> EIVE On-Board Software
|
||||
======
|
||||
|
||||
# General information
|
||||
# Index
|
||||
|
||||
1. [General](#general)
|
||||
2. [Prerequisites](#prereq)
|
||||
3. [Building the Software](#build)
|
||||
4. [Useful and Common Host Commands](#host-commands)
|
||||
5. [Setting up Prerequisites](#set-up-prereq)
|
||||
6. [Remote Debugging](#remote-debugging)
|
||||
7. [Direct Debugging](#direct-debugging)
|
||||
8. [Transfering Files to the Q7S](#file-transfer)
|
||||
9. [Q7S OBC](#q7s)
|
||||
10. [Static Code Analysis](#static-code-analysis)
|
||||
11. [Eclipse](#eclipse)
|
||||
12. [Running the OBSW on a Raspberry Pi](#rpi)
|
||||
13. [FSFW](#fsfw)
|
||||
|
||||
# <a id="general"></a> General information
|
||||
|
||||
Target systems:
|
||||
|
||||
@ -36,16 +54,245 @@ The CMake build system can be used to generate build systems as well (see helper
|
||||
- Linux Host: Uses the `bsp_hosted` BSP folder and the CMake Unix Makefiles generator.
|
||||
- Windows Host: Uses the `bsp_hosted` BSP folder, the CMake MinGW Makefiles generator and MSYS2.
|
||||
|
||||
# Setting up development environment
|
||||
# <a id="prereq"></a> Prerequisites
|
||||
|
||||
## Installing Vivado the the Xilinx development tools
|
||||
There is a separate [prerequisites](#set-up-prereq) which specifies how to set up all
|
||||
prerequisites.
|
||||
|
||||
## Building the OBSW and flashing it on the Q7S
|
||||
|
||||
1. ARM cross-compiler installed, either as part of [Vivado 2018.2 installation](#vivado) or
|
||||
as a [separate download](#arm-toolchain)
|
||||
2. [Q7S sysroot](#q7s-sysroot) on local development machine
|
||||
3. Recommended: Eclipse or [Vivado 2018.2 SDK](#vivado) for OBSW development
|
||||
3. [TCF agent] running on Q7S
|
||||
|
||||
## Hardware Design
|
||||
|
||||
1. [Vivado 2018.2](#vivado) for programmable logic design
|
||||
|
||||
# <a id="build"></a> Building the software
|
||||
|
||||
## CMake
|
||||
|
||||
When using Windows, run theses steps in MSYS2.
|
||||
|
||||
1. Clone the repository with
|
||||
|
||||
```sh
|
||||
git clone https://egit.irs.uni-stuttgart.de/eive/eive_obsw.git
|
||||
```
|
||||
|
||||
2. Update all the submodules
|
||||
|
||||
```sh
|
||||
git submodule init
|
||||
git submodule sync
|
||||
git submodule update
|
||||
```
|
||||
|
||||
3. Ensure that the cross-compiler is working with `arm-linux-gnueabihf-gcc --version`.
|
||||
It is recommended to set up a shell script which takes care of setting up the environment
|
||||
for convenience or to set up the
|
||||
[PATH and the CROSS_COMPILE variable permanently](https://unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path)
|
||||
in the `.profile` file.
|
||||
|
||||
4. Run the CMake configuration to create the build system in a `build-Debug-Q7S` folder.
|
||||
Add `-G "MinGW Makefiles` in MinGW64 on Windows.
|
||||
|
||||
```sh
|
||||
mkdir build-Debug-Q7S && cd build-Debug-Q7S
|
||||
cmake -DTGT_BSP="arm/q7s" -DCMAKE_BUILD_TYPE=Debug -DOS_FSFW=linux ..
|
||||
cmake --build . -j
|
||||
```
|
||||
|
||||
You can also use provided shell scripts to perform these commands
|
||||
|
||||
```sh
|
||||
cd cmake/scripts/Q7S
|
||||
./make_debug_cfg.sh
|
||||
cd ../../..
|
||||
```
|
||||
|
||||
This will invoke a Python script which in turn invokes CMake with the correct
|
||||
arguments to configure CMake for Q7S cross-compilation.
|
||||
|
||||
You can build the hosted variant of the OBSW by replacing `-DOS_FSFW=linux` with
|
||||
`-DOS_FSFW=host`. There are also different values for `-DTGT_BSP` to build for the Raspberry Pi
|
||||
or the Beagle Bone Black: `arm/raspberrypi` and `arm/beagleboneblack`.
|
||||
|
||||
5. Build the software with
|
||||
```sh
|
||||
cd build-Debug-Q7S
|
||||
cmake --build . -j
|
||||
```
|
||||
|
||||
## Building in Xilinx SDK 2018.2
|
||||
|
||||
1. Open Xilinx SDK 2018.2
|
||||
2. Import project
|
||||
* File → Import → C/C++ → Existing Code as Makefile Project
|
||||
3. Set build command. Replace \<target\> with either debug or release.
|
||||
* When on Linux right click project → Properties → C/C++ Build → Set build command to `make <target> -j`
|
||||
* -j causes the compiler to use all available cores
|
||||
* The target is used to either compile the debug or the optimized release build.
|
||||
* On windows create a make target additionally (Windows → Show View → Make Target)
|
||||
* Right click eive_obsw → New
|
||||
* Target name: all
|
||||
* Uncheck "Same as the target name"
|
||||
* Uncheck "Use builder settings"
|
||||
* As build command type: `cmake --build .`
|
||||
* In the Behaviour tab, you can enable build acceleration
|
||||
4. Run build command by double clicking the created target or by right clicking
|
||||
the project folder and selecting Build Project.
|
||||
|
||||
# <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 -DEIVE_BUILD_WATCHDOG=ON -DCMAKE_BUILD_TYPE=Debug ..
|
||||
cmake --build . -j
|
||||
```
|
||||
|
||||
## Connect to EIVE flatsat
|
||||
|
||||
### DNS
|
||||
|
||||
```sh
|
||||
ssh eive@flatsat.eive.absatvirt.lw
|
||||
```
|
||||
|
||||
### IPv6
|
||||
```sh
|
||||
ssh eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5
|
||||
```
|
||||
|
||||
### IPv4
|
||||
|
||||
```sh
|
||||
ssh eive@192.168.199.227
|
||||
```
|
||||
|
||||
## Connecting to the serial console or ssh console
|
||||
|
||||
A serial console session is up permanently in a `tmux` session
|
||||
|
||||
### Serial console
|
||||
|
||||
You can check whether the sessions exist with `tmux ls`
|
||||
|
||||
```sh
|
||||
tmux a -t q7s-serial
|
||||
```
|
||||
|
||||
If the session does not exist, you can create it like this
|
||||
|
||||
```sh
|
||||
tmux new -s q7s-serial
|
||||
/bin/bash
|
||||
q7s_serial
|
||||
```
|
||||
|
||||
Other useful tmux commands:
|
||||
- Enable scroll mode: You can press `ctrl + b` and then `[` (`AltGr + 8`) to enable scroll mode.
|
||||
You can quit scroll mode with `q`.
|
||||
- Kill a tmux session: run `ctrl + b` and then `k`.
|
||||
- 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
|
||||
|
||||
You can use the following command to connect to the Q7S with `ssh`:
|
||||
|
||||
```sh
|
||||
q7s_ssh
|
||||
```
|
||||
|
||||
## Port forwarding for connection to TCF agent
|
||||
|
||||
This is a required step to connect to the `tcf-agent` on the Q7S, which is required for convenient
|
||||
remote debugging. Assuming the IPv6
|
||||
|
||||
```sh
|
||||
ssh -L 1534:192.168.133.10:1534 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5 -t /bin/bash
|
||||
```
|
||||
|
||||
You then need to connect to `localhost` with port `1534`.
|
||||
|
||||
## Port forwarding for file transfers with `scp`
|
||||
|
||||
```sh
|
||||
ssh -L 1535:192.168.133.10:22 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5 -t /bin/bash
|
||||
```
|
||||
|
||||
You then need to run `scp` with the `-P 1535` flag with `localhost` as the target IP address.
|
||||
|
||||
## Port forwarding for TMTC commanding
|
||||
|
||||
If you are using the UDP communication interface, you can use:
|
||||
|
||||
```sh
|
||||
ssh -L 1536:192.168.133.10:7301 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5 -t /bin/bash
|
||||
```
|
||||
|
||||
This forwards UDP TMTC packets on port `1536` of localhost to the TMTC reception port of the Q7S.
|
||||
|
||||
For TCP, you can use
|
||||
|
||||
```sh
|
||||
ssh -L 1537:192.168.133.10:7303 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5 -t /bin/bash
|
||||
```
|
||||
|
||||
This forwards TCP TMTC packets on port `1537` of localhost to the TMTC reception port of the Q7S.
|
||||
|
||||
## Set up all port forwarding at once
|
||||
|
||||
You can specify the `-L` option multiple times to set up all port forwarding at once.
|
||||
Example for using the UDP communication interface:
|
||||
|
||||
```sh
|
||||
ssh -L 1534:192.168.133.10:1534 \
|
||||
-L 1535:192.168.133.10:22 \
|
||||
-L 1536:192.168.133.10:7301 \
|
||||
eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5 \
|
||||
-t 'export CONSOLE_PREFIX="[Q7S Tunnel] /bin/bash'
|
||||
```
|
||||
|
||||
There is also a shell script called `q7s-port.sh` which can be used to achieve the same.
|
||||
|
||||
# <a id="set-up-prereq"></a> Setting up prerequisites
|
||||
|
||||
## <a id="vivado"></a> Installing Vivado the the Xilinx development tools
|
||||
|
||||
It's also possible to perform debugging with a normal Eclipse installation by installing
|
||||
the TCF plugin and downloading the cross-compiler as specified in the section below. However,
|
||||
if you want to generate the `*.xdi` files necessary to update the firmware, you need to
|
||||
installed Vivado with the SDK core tools.
|
||||
|
||||
* Install Vivado 2018.2 and Xilinx SDK from https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html.
|
||||
* Install Vivado 2018.2 and
|
||||
[Xilinx SDK](https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools/archive.html).
|
||||
Install the Vivado Design Suite - HLx Editions - 2018.2 Full Product Installation instead of
|
||||
the updates. It is recommended to use the installer.
|
||||
|
||||
@ -85,7 +332,7 @@ For Linux, you can also download a more recent version of the
|
||||
[Linaro 8.3.0 cross-compiler](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads)
|
||||
from [here](https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz?revision=e09a1c45-0ed3-4a8e-b06b-db3978fd8d56&la=en&hash=93ED4444B8B3A812B893373B490B90BBB28FD2E3)
|
||||
|
||||
## Installing toolchain without Vivado
|
||||
## <a id="arm-toolchain"></a> Installing toolchain without Vivado
|
||||
|
||||
You can download the toolchains for Windows and Linux
|
||||
[from the EIVE cloud](https://eive-cloud.irs.uni-stuttgart.de/index.php/apps/files?dir=/EIVE_IRS/Software/tools&fileid=831898).
|
||||
@ -100,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)
|
||||
|
||||
```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
|
||||
@ -136,7 +383,7 @@ wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/2Fp2ag6NGnbtAsK/downloa
|
||||
sudo apt-get install cmake
|
||||
````
|
||||
|
||||
## Getting the Q7S system root
|
||||
## <a id="q7s-sysroot"></a> Getting the Q7S system root
|
||||
|
||||
It is necessary to copy the Q7S system root to your local development machine for libraries
|
||||
like `libgpio`. You can find the system root for the Q7S, the Raspberry Pi and the
|
||||
@ -151,277 +398,6 @@ wget https://eive-cloud.irs.uni-stuttgart.de/index.php/s/agnJGYeRf6fw2ci/downloa
|
||||
|
||||
Then, create a new environmental variables `Q7S_SYSROOT` and set it to the local system root path.
|
||||
|
||||
# Building the software with CMake
|
||||
|
||||
When using Windows, run theses steps in MSYS2.
|
||||
|
||||
1. Clone the repository with
|
||||
|
||||
```sh
|
||||
git clone https://egit.irs.uni-stuttgart.de/eive/eive_obsw.git
|
||||
```
|
||||
|
||||
2. Update all the submodules
|
||||
|
||||
```sh
|
||||
git submodule init
|
||||
git submodule sync
|
||||
git submodule update
|
||||
```
|
||||
|
||||
3. Ensure that the cross-compiler is working with `arm-linux-gnueabihf-gcc --version`.
|
||||
It is recommended to run the shell script `win_path_helper_xilinx_tools.sh` in `cmake/scripts/Q7S`
|
||||
or to set up the [PATH and the CROSS_COMPILE variable permanently](https://unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path)
|
||||
in the `.profile` file.
|
||||
|
||||
4. Run the CMake configuration to create the build system in a `build-Debug-Q7S` folder.
|
||||
Add `-G "MinGW Makefiles` in MinGW64 on Windows.
|
||||
|
||||
```sh
|
||||
mkdir build-Debug-Q7S && cd build-Debug-Q7S
|
||||
cmake -DTGT_BSP="arm/q7s" -DCMAKE_BUILD_TYPE=Debug -DOS_FSFW=linux ..
|
||||
cmake --build . -j
|
||||
```
|
||||
|
||||
You can also use provided shell scripts to perform these commands
|
||||
|
||||
```sh
|
||||
cd cmake/scripts/Q7S
|
||||
./make_debug_cfg.sh
|
||||
cd ../../..
|
||||
```
|
||||
|
||||
This will invoke a Python script which in turn invokes CMake with the correct
|
||||
arguments to configure CMake for Q7S cross-compilation.
|
||||
|
||||
You can build the hosted variant of the OBSW by replacing `-DOS_FSFW=linux` with
|
||||
`-DOS_FSFW=host`. There are also different values for `-DTGT_BSP` to build for the Raspberry Pi
|
||||
or the Beagle Bone Black: `arm/raspberrypi` and `arm/beagleboneblack`.
|
||||
|
||||
5. Build the software with
|
||||
```sh
|
||||
cd Debug
|
||||
cmake --build . -j
|
||||
```
|
||||
|
||||
## Setting up default Eclipse for Q7S projects - TCF agent
|
||||
|
||||
The [TCF agent](https://wiki.eclipse.org/TCF) can be used to perform remote debugging on the Q7S.
|
||||
|
||||
1. Install the TCF agent plugin in Eclipse from the [releases](https://www.eclipse.org/tcf/downloads.php). Go to Help → Install New Software and use the download page, for example https://download.eclipse.org/tools/tcf/releases/1.6/1.6.2/ to search for the plugin and install it.
|
||||
|
||||
2. Go to Window → Perspective → Open Perspective and open the **Target Explorer Perspective**.
|
||||
Here, the Q7S should show up if the local port forwarding was set up as explained previously. Please note that you have to connect to `localhost` and port `1534` with port forwaring set up.
|
||||
|
||||
3. A launch configuration was provided, but it might be necessary to adapt it for your own needs. Alternatively:
|
||||
|
||||
- Create a new **TCF Remote Application** by pressing the cogs button at the top or going to Run → Debug Configurations → Remote Application and creating a new one there.
|
||||
|
||||
- Set up the correct image in the main tab (it might be necessary to send the image to the Q7S manually once) and file transfer properties
|
||||
|
||||
- It is also recommended to link the correct Eclipse project.
|
||||
|
||||
After that, comfortable remote debugging should be possible with the Debug button.
|
||||
|
||||
A build configuration and a shell helper script has been provided to set up the path variables and
|
||||
build the Q7S binary on Windows, but a launch configuration needs to be newly created because the
|
||||
IP address and path settings differ from machine to machine.
|
||||
|
||||
## Building in Xilinx SDK 2018.2
|
||||
|
||||
1. Open Xilinx SDK 2018.2
|
||||
2. Import project
|
||||
* File → Import → C/C++ → Existing Code as Makefile Project
|
||||
3. Set build command. Replace \<target\> with either debug or release.
|
||||
* When on Linux right click project → Properties → C/C++ Build → Set build command to `make <target> -j`
|
||||
* -j causes the compiler to use all available cores
|
||||
* The target is used to either compile the debug or the optimized release build.
|
||||
* On windows create a make target additionally (Windows → Show View → Make Target)
|
||||
* Right click eive_obsw → New
|
||||
* Target name: all
|
||||
* Uncheck "Same as the target name"
|
||||
* Uncheck "Use builder settings"
|
||||
* As build command type: `cmake --build .`
|
||||
* In the Behaviour tab, you can enable build acceleration
|
||||
4. Run build command by double clicking the created target or by right clicking
|
||||
the project folder and selecting Build Project.
|
||||
|
||||
## TCF-Agent
|
||||
|
||||
1. On reboot, some steps have to be taken on the Q7S. Set static IP address and netmask
|
||||
|
||||
```sh
|
||||
ifconfig eth0 192.168.133.10
|
||||
ifconfig eth0 netmask 255.255.255.0
|
||||
```
|
||||
|
||||
2. `tcfagent` application should run automatically but this can be checked with
|
||||
```sh
|
||||
systemctl status tcfagent
|
||||
```
|
||||
|
||||
3. If the agent is not running, check whether `agent` is located inside `usr/bin`.
|
||||
You can run it manually there. To perform auto-start on boot, have a look at the start-up
|
||||
application section.
|
||||
|
||||
# Debugging the software via Flatsat PC
|
||||
|
||||
Open SSH connection to flatsat PC:
|
||||
|
||||
```sh
|
||||
ssh eive@flatsat.eive.absatvirt.lw
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```sh
|
||||
ssh eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```sh
|
||||
ssh eive@192.168.199.227
|
||||
```
|
||||
|
||||
If the static IP address of the Q7S has already been set,
|
||||
you can access it with ssh
|
||||
|
||||
```sh
|
||||
ssh root@192.168.133.10
|
||||
```
|
||||
|
||||
If this has not been done yet, you can access the serial
|
||||
console of the Q7S like this to set it
|
||||
|
||||
```sh
|
||||
picocom -b 115200 /dev/ttyUSB0
|
||||
```
|
||||
|
||||
If the serial port is blocked for some reason, you can kill
|
||||
the process using it with `q7s_kill`.
|
||||
|
||||
You can use `AltGr` + `X` to exit the picocom session.
|
||||
|
||||
To debug an application, first make sure a static IP address is assigned to the Q7S. Run ifconfig
|
||||
on the Q7S serial console.
|
||||
|
||||
```sh
|
||||
ifconfig
|
||||
```
|
||||
|
||||
Set IP address and netmask with
|
||||
|
||||
```sh
|
||||
ifconfig eth0 192.168.133.10
|
||||
ifconfig eth0 netmask 255.255.255.0
|
||||
```
|
||||
|
||||
To launch application from Xilinx SDK setup port fowarding on the development machine
|
||||
(not on the flatsat!)
|
||||
|
||||
```sh
|
||||
ssh -L 1534:192.168.133.10:1534 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5 -t bash
|
||||
```
|
||||
|
||||
This forwards any requests to localhost:1534 to the port 1534 of the Q7S with the IP address
|
||||
192.168.133.10.
|
||||
This needs to be done every time, so it is recommended to create an alias to do this quickly.
|
||||
|
||||
Note: When now setting up a debug session in the Xilinx SDK or Eclipse, the host must be set
|
||||
to localhost instead of the IP address of the Q7S.
|
||||
|
||||
# Transfering files via SCP
|
||||
|
||||
To transfer files from the local machine to the Q7S, use port forwarding
|
||||
|
||||
```sh
|
||||
ssh -L 1535:192.168.133.10:22 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5
|
||||
```
|
||||
|
||||
An `example` file can be copied like this
|
||||
|
||||
```sh
|
||||
scp -P 1535 example root@localhost:/tmp
|
||||
```
|
||||
|
||||
Copying a file from Q7S to flatsat PC
|
||||
````
|
||||
scp -P 22 root@192.168.133.10:/tmp/kernel-config /tmp
|
||||
````
|
||||
|
||||
From a windows machine files can be copied with putty tools (note: use IPv4 address)
|
||||
````
|
||||
pscp -scp -P 22 eive@192.168.199.227:</directory-to-example-file/>/example-file </windows-machine-path/>
|
||||
````
|
||||
|
||||
# Launching an application at start-up
|
||||
|
||||
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.
|
||||
creating directories. To do this, the parition needs to be mounted.
|
||||
|
||||
1. Disable write protection of the desired root partition
|
||||
|
||||
```sh
|
||||
writeprotect 0 0 0 # unlocks nominal image on nor-flash 0
|
||||
```
|
||||
|
||||
2. Mount the root partition
|
||||
|
||||
```sh
|
||||
xsc_mount_copy 0 0 # Mounts the nominal image from nor-flash 0
|
||||
```
|
||||
The mounted partition will be located inside the `/tmp` folder
|
||||
|
||||
3. Copy the executable to `/usr/bin`
|
||||
|
||||
4. Make sure the permissions to execute the application are set
|
||||
|
||||
```sh
|
||||
chmod +x application
|
||||
```
|
||||
|
||||
5. Create systemd service in /lib/systemd/system. The following shows an example service.
|
||||
|
||||
```sh
|
||||
cat > example.service
|
||||
[Unit]
|
||||
Description=Example Service
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
User=root
|
||||
ExecStart=/usr/bin/application
|
||||
|
||||
[Install]
|
||||
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.
|
||||
```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'
|
||||
```
|
||||
|
||||
7. The modified root partition is written back when the partion is locked again.
|
||||
```sh
|
||||
writeprotect 0 0 1
|
||||
```
|
||||
8. Now verify the application start by booting from the modified image
|
||||
```sh
|
||||
xsc_boot_copy 0 0
|
||||
````
|
||||
|
||||
9. After booting verify if the service is running
|
||||
```sh
|
||||
systemctl status example
|
||||
```
|
||||
|
||||
More detailed information about the used q7s commands can be found in the Q7S user manual.
|
||||
|
||||
## Setting up UNIX environment for real-time functionalities
|
||||
|
||||
Please note that on most UNIX environments (e.g. Ubuntu), the real time functionalities
|
||||
@ -471,32 +447,95 @@ length is 130.
|
||||
echo <newMsgMax> | sudo tee /proc/sys/fs/mqueue/msg_max
|
||||
```
|
||||
|
||||
# PCDU
|
||||
## <a id="tcf-agent"></a> TCF-Agent
|
||||
|
||||
Connect to serial console of P60 Dock
|
||||
````
|
||||
picocom -b 500000 /dev/ttyUSBx
|
||||
````
|
||||
General information
|
||||
````
|
||||
cmp ident
|
||||
````
|
||||
List parameter table:
|
||||
x values: 1,2 or 4
|
||||
````
|
||||
param list x
|
||||
````
|
||||
Table 4 lists HK parameters
|
||||
Changing parameters
|
||||
First switch to table where parameter shall be changed (here table id is 1)
|
||||
````
|
||||
p60-dock # param mem 1
|
||||
p60-dock # param set out_en[0] 1
|
||||
p60-dock # param get out_en[0]
|
||||
GET out_en[0] = 1
|
||||
````
|
||||
Most of the steps specified here were already automated
|
||||
|
||||
# Debugging the software (when workstation is directly conncected to Q7S)
|
||||
1. On reboot, some steps have to be taken on the Q7S. Set static IP address and netmask
|
||||
|
||||
```sh
|
||||
ifconfig eth0 192.168.133.10
|
||||
ifconfig eth0 netmask 255.255.255.0
|
||||
```
|
||||
|
||||
2. `tcfagent` application should run automatically but this can be checked with
|
||||
```sh
|
||||
systemctl status tcfagent
|
||||
```
|
||||
|
||||
3. If the agent is not running, check whether `agent` is located inside `usr/bin`.
|
||||
You can run it manually there. To perform auto-start on boot, have a look at the start-up
|
||||
application section.
|
||||
|
||||
# <a id="remote-debugging"></a> Remote Debugging
|
||||
|
||||
Open SSH connection to flatsat PC:
|
||||
|
||||
```sh
|
||||
ssh eive@flatsat.eive.absatvirt.lw
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```sh
|
||||
ssh eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```sh
|
||||
ssh eive@192.168.199.227
|
||||
```
|
||||
|
||||
If the static IP address of the Q7S has already been set,
|
||||
you can access it with ssh
|
||||
|
||||
```sh
|
||||
ssh root@192.168.133.10
|
||||
```
|
||||
|
||||
If this has not been done yet, you can access the serial
|
||||
console of the Q7S like this to set it
|
||||
|
||||
```sh
|
||||
picocom -b 115200 /dev/ttyUSB0
|
||||
```
|
||||
|
||||
The flatsat has the aliases and shell scripts `q7s_ssh` and `q7s_serial` for this task as well.
|
||||
If the serial port is blocked for some reason, you can kill
|
||||
the process using it with `q7s_kill`.
|
||||
|
||||
You can use `AltGr` + `X` to exit the picocom session.
|
||||
|
||||
To debug an application, first make sure a static IP address is assigned to the Q7S. Run ifconfig
|
||||
on the Q7S serial console.
|
||||
|
||||
```sh
|
||||
ifconfig
|
||||
```
|
||||
|
||||
Set IP address and netmask with
|
||||
|
||||
```sh
|
||||
ifconfig eth0 192.168.133.10
|
||||
ifconfig eth0 netmask 255.255.255.0
|
||||
```
|
||||
|
||||
To launch application from Xilinx SDK setup port fowarding on the development machine
|
||||
(not on the flatsat!)
|
||||
|
||||
```sh
|
||||
ssh -L 1534:192.168.133.10:1534 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5 -t bash
|
||||
```
|
||||
|
||||
This forwards any requests to localhost:1534 to the port 1534 of the Q7S with the IP address
|
||||
192.168.133.10. This needs to be done every time, so it is recommended to create an
|
||||
alias or shell script to do this quickly.
|
||||
|
||||
Note: When now setting up a debug session in the Xilinx SDK or Eclipse, the host must be set
|
||||
to localhost instead of the IP address of the Q7S.
|
||||
|
||||
# <a id="direct-debugging"></a> Direct Debugging
|
||||
|
||||
1. Assign static IP address to Q7S
|
||||
* Open serial console of Q7S (Accessible via the micro-USB of the PIM, see also Q7S user
|
||||
@ -551,46 +590,176 @@ GET out_en[0] = 1
|
||||
* Local File Path: Path to eiveobsw-linux.elf (in `_bin\linux\devel`)
|
||||
* Remote File Path: `/tmp/eive_obsw.elf`
|
||||
|
||||
# Running cppcheck on the Software
|
||||
# <a id="file-transfer"></a> Transfering Files to the Q7S
|
||||
|
||||
Static code analysis can be useful to find bugs.
|
||||
`cppcheck` can be used for this purpose. On Windows you can use MinGW64 to do this.
|
||||
To transfer files from the local machine to the Q7S, use port forwarding
|
||||
|
||||
```sh
|
||||
pacman -S mingw-w64-x86_64-cppcheck
|
||||
ssh -L 1535:192.168.133.10:22 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5
|
||||
```
|
||||
|
||||
On Ubuntu, install with
|
||||
An `example` file can be copied like this
|
||||
|
||||
```sh
|
||||
sudo apt-get install cppcheck
|
||||
scp -P 1535 example root@localhost:/tmp
|
||||
```
|
||||
|
||||
You can use the Eclipse integration or you can perform the scanning manually from the command line.
|
||||
CMake will be used for this.
|
||||
Copying a file from Q7S to flatsat PC
|
||||
````
|
||||
scp -P 22 root@192.168.133.10:/tmp/kernel-config /tmp
|
||||
````
|
||||
|
||||
Run the CMake build generation commands specified above but supply
|
||||
`-DCMAKE_EXPORT_COMPILE_COMMANDS=ON` to the build generation. Invoking the build command will
|
||||
generate a `compile_commands.json` file which can be used by cppcheck.
|
||||
From a windows machine files can be copied with putty tools (note: use IPv4 address)
|
||||
````
|
||||
pscp -scp -P 22 eive@192.168.199.227:</directory-to-example-file/>/example-file </windows-machine-path/>
|
||||
````
|
||||
|
||||
More detailed information about the used q7s commands can be found in the Q7S user manual.
|
||||
|
||||
# <a id="q7s"></a> Q7S OBC
|
||||
|
||||
## 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
|
||||
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.
|
||||
|
||||
1. Disable write protection of the desired root partition
|
||||
|
||||
```sh
|
||||
cppcheck --project=compile_commands.json --xml 2> report.xml
|
||||
writeprotect 0 0 0 # unlocks nominal image on nor-flash 0
|
||||
```
|
||||
|
||||
Finally, you can convert the generated `.xml` file to HTML with the following command
|
||||
2. Mount the root partition
|
||||
|
||||
```sh
|
||||
cppcheck-htmlreport --file=report.xml --report-dir=cppcheck --source-dir=..
|
||||
xsc_mount_copy 0 0 # Mounts the nominal image from nor-flash 0
|
||||
```
|
||||
The mounted partition will be located inside the `/tmp` folder
|
||||
|
||||
3. Copy the executable to `/usr/bin`
|
||||
|
||||
4. Make sure the permissions to execute the application are set
|
||||
|
||||
```sh
|
||||
chmod +x application
|
||||
```
|
||||
|
||||
# Special notes on Eclipse
|
||||
5. Create systemd service in `/etc/systemd/system`. The following shows an example service.
|
||||
|
||||
When using Eclipse, there are two special build variables in the project properties
|
||||
→ C/C++ Build → Build Variables called `Q7S_SYSROOT` or `RPI_SYSROOT`. You can set
|
||||
the sysroot path in those variables to get any additional includes like `gpiod.h` in the
|
||||
Eclipse indexer.
|
||||
```sh
|
||||
cat > example.service
|
||||
[Unit]
|
||||
Description=Example Service
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
# Q7S Utilities and Troubleshooting
|
||||
[Service]
|
||||
Type=simple
|
||||
Restart=always
|
||||
RestartSec=1
|
||||
User=root
|
||||
ExecStart=/usr/bin/application
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
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
|
||||
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.
|
||||
```sh
|
||||
writeprotect 0 0 1
|
||||
```
|
||||
8. Now verify the application start by booting from the modified image
|
||||
```sh
|
||||
xsc_boot_copy 0 0
|
||||
````
|
||||
|
||||
9. After booting verify if the service is running
|
||||
```sh
|
||||
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
|
||||
|
||||
Connect to serial console of P60 Dock
|
||||
````
|
||||
picocom -b 500000 /dev/ttyUSBx
|
||||
````
|
||||
General information
|
||||
````
|
||||
cmp ident
|
||||
````
|
||||
List parameter table:
|
||||
x values: 1,2 or 4
|
||||
````
|
||||
param list x
|
||||
````
|
||||
Table 4 lists HK parameters
|
||||
Changing parameters
|
||||
First switch to table where parameter shall be changed (here table id is 1)
|
||||
````
|
||||
p60-dock # param mem 1
|
||||
p60-dock # param set out_en[0] 1
|
||||
p60-dock # param get out_en[0]
|
||||
GET out_en[0] = 1
|
||||
````
|
||||
|
||||
## Core commands
|
||||
|
||||
@ -773,7 +942,10 @@ EIVE implementation
|
||||
- Mount point `/mnt/sd0` created for SD card 0. Created with `mkdir`
|
||||
- Mount point `/mnt/sd1` created for SD card 1. Created with `mkdir`
|
||||
- Folder `scripts` in `/home/root` folder.
|
||||
- `scripts` folder currently contains `update_main_components.sh` script
|
||||
- `scripts` folder currently contains a few shell helper scripts
|
||||
- Folder `profile.d` in `/etc` folder which contains the `path-set.sh` script
|
||||
which is sourced at software startup
|
||||
- Library `libwire.so` in `/usr/lib` folder
|
||||
|
||||
### SD Cards
|
||||
|
||||
@ -783,7 +955,76 @@ EIVE implementation
|
||||
- Folder `tm` for telemetry
|
||||
- Folder `xdi` for XDI components (e.g. for firmware or device tree updates)
|
||||
|
||||
# Running the EIVE OBSW on a Raspberry Pi
|
||||
# <a id="static-code-analysis"></a> Running cppcheck on the Software
|
||||
|
||||
Static code analysis can be useful to find bugs.
|
||||
`cppcheck` can be used for this purpose. On Windows you can use MinGW64 to do this.
|
||||
|
||||
```sh
|
||||
pacman -S mingw-w64-x86_64-cppcheck
|
||||
```
|
||||
|
||||
On Ubuntu, install with
|
||||
|
||||
```sh
|
||||
sudo apt-get install cppcheck
|
||||
```
|
||||
|
||||
You can use the Eclipse integration or you can perform the scanning manually from the command line.
|
||||
CMake will be used for this.
|
||||
|
||||
Run the CMake build generation commands specified above but supply
|
||||
`-DCMAKE_EXPORT_COMPILE_COMMANDS=ON` to the build generation. Invoking the build command will
|
||||
generate a `compile_commands.json` file which can be used by cppcheck.
|
||||
|
||||
```sh
|
||||
cppcheck --project=compile_commands.json --xml 2> report.xml
|
||||
```
|
||||
|
||||
Finally, you can convert the generated `.xml` file to HTML with the following command
|
||||
|
||||
```sh
|
||||
cppcheck-htmlreport --file=report.xml --report-dir=cppcheck --source-dir=..
|
||||
```
|
||||
|
||||
# <a id="eclipse"></a> Eclipse
|
||||
|
||||
When using Eclipse, there are two special build variables in the project properties
|
||||
→ C/C++ Build → Build Variables called `Q7S_SYSROOT` or `RPI_SYSROOT`. You can set
|
||||
the sysroot path in those variables to get any additional includes like `gpiod.h` in the
|
||||
Eclipse indexer.
|
||||
|
||||
## Setting up default Eclipse for Q7S projects - TCF agent
|
||||
|
||||
The [TCF agent](https://wiki.eclipse.org/TCF) can be used to perform remote debugging on the Q7S.
|
||||
|
||||
1. Install the TCF agent plugin in Eclipse from
|
||||
the [releases](https://www.eclipse.org/tcf/downloads.php). Go to
|
||||
Help → Install New Software and use the download page, for
|
||||
example https://download.eclipse.org/tools/tcf/releases/1.6/1.6.2/ to search for the plugin and install it.
|
||||
|
||||
2. Go to Window → Perspective → Open Perspective and open the **Target Explorer Perspective**.
|
||||
Here, the Q7S should show up if the local port forwarding was set up as explained previously.
|
||||
Please note that you have to connect to `localhost` and port `1534` with port forwaring set up.
|
||||
|
||||
3. A launch configuration was provided, but it might be necessary to adapt it for your own needs.
|
||||
Alternatively:
|
||||
|
||||
- Create a new **TCF Remote Application** by pressing the cogs button at the top or going to
|
||||
Run → Debug Configurations → Remote Application and creating a new one there.
|
||||
|
||||
- Set up the correct image in the main tab (it might be necessary to send the image to the
|
||||
Q7S manually once) and file transfer properties
|
||||
|
||||
- It is also recommended to link the correct Eclipse project.
|
||||
|
||||
After that, comfortable remote debugging should be possible with the Debug button.
|
||||
|
||||
A build configuration and a shell helper script has been provided to set up the path variables and
|
||||
build the Q7S binary on Windows, but a launch configuration needs to be newly created because the
|
||||
IP address and path settings differ from machine to machine.
|
||||
|
||||
# <a id="rpi"></a> Running the EIVE OBSW on a Raspberry Pi
|
||||
|
||||
Special section for running the EIVE OBSW on the Raspberry Pi.
|
||||
The Raspberry Pi build uses the `bsp_rpi` BSP folder, and a very similar cross-compiler.
|
||||
@ -799,7 +1040,7 @@ sudo apt-get install gpiod libgpiod-dev
|
||||
|
||||
to install the required GPIO libraries before cloning the system root folder.
|
||||
|
||||
# Flight Software Framework (FSFW)
|
||||
# <a id="fsfw"></a> Flight Software Framework (FSFW)
|
||||
|
||||
An EIVE fork of the FSFW is submodules into this repository.
|
||||
To add the master upstream branch and merge changes and updates from it
|
||||
@ -816,4 +1057,5 @@ After that, an update can be merged by running
|
||||
git merge upstream/master
|
||||
```
|
||||
|
||||
Alternatively, changes from other upstreams (forks) and branches can be merged like that in the same way.
|
||||
Alternatively, changes from other upstreams (forks) and branches can be merged like that
|
||||
in the same way.
|
||||
|
19
automation/Dockerfile-q7s
Normal file
19
automation/Dockerfile-q7s
Normal file
@ -0,0 +1,19 @@
|
||||
FROM ubuntu:focal
|
||||
|
||||
RUN apt-get update
|
||||
RUN apt-get --yes upgrade
|
||||
RUN apt-get --yes install cmake libgpiod-dev xz-utils nano curl
|
||||
|
||||
# Q7S root filesystem, required for cross-compilation.
|
||||
RUN mkdir -p /usr/rootfs; \
|
||||
curl https://buggy.irs.uni-stuttgart.de/eive/tools/cortexa9hf-neon-xiphos-linux-gnueabi.tar.gz \
|
||||
| tar -xz -C /usr/rootfs
|
||||
|
||||
# Cross compiler
|
||||
RUN mkdir -p /usr/tools; \
|
||||
curl https://buggy.irs.uni-stuttgart.de/eive/tools/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.gz \
|
||||
| tar -xz -C /usr/tools
|
||||
|
||||
|
||||
ENV Q7S_SYSROOT="/usr/rootfs/cortexa9hf-neon-xiphos-linux-gnueabi"
|
||||
ENV PATH=$PATH:"/usr/tools/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin"
|
49
automation/Jenkinsfile
vendored
Normal file
49
automation/Jenkinsfile
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
pipeline {
|
||||
agent any
|
||||
stages {
|
||||
stage('Build Container') {
|
||||
when {
|
||||
changeset "automation/Dockerfile-q7s"
|
||||
branch 'develop'
|
||||
}
|
||||
steps {
|
||||
sh 'docker build -t eive-fsw-build-q7s:gcc8 - < automation/Dockerfile-q7s'
|
||||
|
||||
}
|
||||
}
|
||||
stage('Clean') {
|
||||
when {
|
||||
anyOf {
|
||||
changelog 'cleanCI'
|
||||
changeset '*.cmake'
|
||||
changeset 'CMakeLists.txt'
|
||||
}
|
||||
}
|
||||
steps {
|
||||
sh 'rm -rf build-q7s-debug'
|
||||
}
|
||||
}
|
||||
stage('Build Q7S') {
|
||||
agent {
|
||||
docker {
|
||||
image 'eive-fsw-build-q7s:gcc8'
|
||||
reuseNode true
|
||||
}
|
||||
}
|
||||
steps {
|
||||
dir('build-q7s-debug') {
|
||||
sh 'cmake -DTGT_BSP="arm/q7s" -DCMAKE_BUILD_TYPE=Debug -DFSFW_OSAL=linux ..'
|
||||
sh 'cmake --build . -j'
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Deploy') {
|
||||
when {
|
||||
tag 'v*.*.*'
|
||||
}
|
||||
steps {
|
||||
sh 'echo Deploying'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -70,15 +70,15 @@ void initmission::initTasks() {
|
||||
}
|
||||
|
||||
/* UDP bridge */
|
||||
PeriodicTaskIF* udpBridgeTask = factory->createPeriodicTask(
|
||||
"UDP_UNIX_BRIDGE", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
|
||||
result = udpBridgeTask->addComponent(objects::UDP_BRIDGE);
|
||||
PeriodicTaskIF* tmtcBridgeTask = factory->createPeriodicTask(
|
||||
"TMTC_UNIX_BRIDGE", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
|
||||
result = tmtcBridgeTask->addComponent(objects::TMTC_BRIDGE);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::error << "Add component UDP Unix Bridge failed" << std::endl;
|
||||
}
|
||||
PeriodicTaskIF* udpPollingTask = factory->createPeriodicTask(
|
||||
PeriodicTaskIF* tmtcPollingTask = factory->createPeriodicTask(
|
||||
"UDP_POLLING", 80, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc);
|
||||
result = udpPollingTask->addComponent(objects::UDP_POLLING_TASK);
|
||||
result = tmtcPollingTask->addComponent(objects::TMTC_POLLING_TASK);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::error << "Add component UDP Polling failed" << std::endl;
|
||||
}
|
||||
@ -142,8 +142,8 @@ void initmission::initTasks() {
|
||||
|
||||
sif::info << "Starting tasks.." << std::endl;
|
||||
tmTcDistributor->startTask();
|
||||
udpBridgeTask->startTask();
|
||||
udpPollingTask->startTask();
|
||||
tmtcBridgeTask->startTask();
|
||||
tmtcPollingTask->startTask();
|
||||
|
||||
pusVerification->startTask();
|
||||
pusEvents->startTask();
|
||||
|
@ -1,6 +1,5 @@
|
||||
#include "ObjectFactory.h"
|
||||
|
||||
#include <OBSWConfig.h>
|
||||
#include "OBSWConfig.h"
|
||||
#include <objects/systemObjectList.h>
|
||||
#include <tmtc/apid.h>
|
||||
#include <tmtc/pusIds.h>
|
||||
@ -11,8 +10,13 @@
|
||||
#include <mission/core/GenericFactory.h>
|
||||
#include <mission/utility/TmFunnel.h>
|
||||
|
||||
#include <fsfw/osal/common/UdpTcPollingTask.h>
|
||||
#include <fsfw/osal/common/UdpTmTcBridge.h>
|
||||
#if OBSW_USE_TMTC_TCP_BRIDGE == 0
|
||||
#include "fsfw/osal/common/UdpTcPollingTask.h"
|
||||
#include "fsfw/osal/common/UdpTmTcBridge.h"
|
||||
#else
|
||||
#include "fsfw/osal/common/TcpTmTcBridge.h"
|
||||
#include "fsfw/osal/common/TcpTmTcServer.h"
|
||||
#endif
|
||||
|
||||
#include <fsfw/tmtcpacket/pus/tm.h>
|
||||
|
||||
@ -28,7 +32,7 @@ void Factory::setStaticFrameworkObjectIds(){
|
||||
CommandingServiceBase::defaultPacketSource = objects::PUS_PACKET_DISTRIBUTOR;
|
||||
CommandingServiceBase::defaultPacketDestination = objects::TM_FUNNEL;
|
||||
|
||||
TmFunnel::downlinkDestination = objects::UDP_BRIDGE;
|
||||
TmFunnel::downlinkDestination = objects::TMTC_BRIDGE;
|
||||
// No storage object for now.
|
||||
TmFunnel::storageDestination = objects::NO_OBJECT;
|
||||
|
||||
@ -40,7 +44,18 @@ void ObjectFactory::produce(void* args){
|
||||
Factory::setStaticFrameworkObjectIds();
|
||||
ObjectFactory::produceGenericObjects();
|
||||
|
||||
new UdpTmTcBridge(objects::UDP_BRIDGE, objects::CCSDS_PACKET_DISTRIBUTOR);
|
||||
new UdpTcPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE);
|
||||
#if OBSW_USE_TMTC_TCP_BRIDGE == 0
|
||||
sif::info << "Setting up UDP TMTC bridge with listener port " <<
|
||||
UdpTmTcBridge::DEFAULT_SERVER_PORT << std::endl;
|
||||
new UdpTmTcBridge(objects::TMTC_BRIDGE, objects::CCSDS_PACKET_DISTRIBUTOR);
|
||||
new UdpTcPollingTask(objects::TMTC_POLLING_TASK, objects::TMTC_BRIDGE);
|
||||
#else
|
||||
sif::info << "Setting up TCP TMTC bridge with listener port " <<
|
||||
TcpTmTcBridge::DEFAULT_SERVER_PORT << std::endl;
|
||||
new TcpTmTcBridge(objects::TMTC_BRIDGE, objects::CCSDS_PACKET_DISTRIBUTOR);
|
||||
new TcpTmTcServer(objects::TMTC_POLLING_TASK, objects::TMTC_BRIDGE);
|
||||
#endif
|
||||
|
||||
new TestTask(objects::TEST_TASK);
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,10 @@
|
||||
#include "InitMission.h"
|
||||
#include "OBSWVersion.h"
|
||||
|
||||
#include "fsfw/FSFWVersion.h"
|
||||
#include "fsfw/tasks/TaskFactory.h"
|
||||
|
||||
#include <OBSWVersion.h>
|
||||
#include <fsfw/tasks/TaskFactory.h>
|
||||
#include <iostream>
|
||||
|
||||
#ifdef WIN32
|
||||
static const char* COMPILE_PRINTOUT = "Windows";
|
||||
#elif LINUX
|
||||
@ -20,8 +21,9 @@ int main(void)
|
||||
{
|
||||
std::cout << "-- EIVE OBSW --" << std::endl;
|
||||
std::cout << "-- Compiled for " << COMPILE_PRINTOUT << " --" << std::endl;
|
||||
std::cout << "-- Software version " << SW_NAME << " v" << SW_VERSION << "."
|
||||
<< SW_SUBVERSION << "." << SW_REVISION << " -- " << std::endl;
|
||||
std::cout << "-- OBSW " << SW_NAME << " v" << SW_VERSION << "." << SW_SUBVERSION <<
|
||||
"." << SW_REVISION << ", FSFW v" << FSFW_VERSION << "." << FSFW_SUBVERSION << "." <<
|
||||
FSFW_REVISION << "--" << std::endl;
|
||||
std::cout << "-- " << __DATE__ << " " << __TIME__ << " --" << std::endl;
|
||||
|
||||
initmission::initMission();
|
||||
|
@ -66,13 +66,13 @@ void initmission::initTasks() {
|
||||
/* UDP bridge */
|
||||
PeriodicTaskIF* udpBridgeTask = factory->createPeriodicTask(
|
||||
"UDP_UNIX_BRIDGE", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
|
||||
result = udpBridgeTask->addComponent(objects::UDP_BRIDGE);
|
||||
result = udpBridgeTask->addComponent(objects::TMTC_BRIDGE);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::error << "Add component UDP Unix Bridge failed" << std::endl;
|
||||
}
|
||||
PeriodicTaskIF* udpPollingTask = factory->createPeriodicTask(
|
||||
"UDP_POLLING", 80, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc);
|
||||
result = udpPollingTask->addComponent(objects::UDP_POLLING_TASK);
|
||||
result = udpPollingTask->addComponent(objects::TMTC_POLLING_TASK);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::error << "Add component UDP Polling failed" << std::endl;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#include <fsfw/hal/linux/uart/UartComIF.h>
|
||||
#include <fsfw/hal/linux/uart/UartCookie.h>
|
||||
#include <fsfw_hal/linux/uart/UartComIF.h>
|
||||
#include <fsfw_hal/linux/uart/UartCookie.h>
|
||||
#include <mission/devices/GPSHyperionHandler.h>
|
||||
#include "ObjectFactory.h"
|
||||
|
||||
@ -31,12 +31,12 @@
|
||||
#include "fsfw/osal/common/UdpTmTcBridge.h"
|
||||
#include "fsfw/osal/common/UdpTcPollingTask.h"
|
||||
|
||||
#include "fsfw/hal/devicehandlers/GyroL3GD20Handler.h"
|
||||
#include "fsfw/hal/linux/gpio/LinuxLibgpioIF.h"
|
||||
#include "fsfw/hal/linux/rpi/GpioRPi.h"
|
||||
#include "fsfw/hal/common/gpio/GpioCookie.h"
|
||||
#include "fsfw/hal/linux/spi/SpiCookie.h"
|
||||
#include "fsfw/hal/linux/spi/SpiComIF.h"
|
||||
#include "fsfw_hal/devicehandlers/GyroL3GD20Handler.h"
|
||||
#include "fsfw_hal/linux/gpio/LinuxLibgpioIF.h"
|
||||
#include "fsfw_hal/linux/rpi/GpioRPi.h"
|
||||
#include "fsfw_hal/common/gpio/GpioCookie.h"
|
||||
#include "fsfw_hal/linux/spi/SpiCookie.h"
|
||||
#include "fsfw_hal/linux/spi/SpiComIF.h"
|
||||
|
||||
void Factory::setStaticFrameworkObjectIds() {
|
||||
PusServiceBase::packetSource = objects::PUS_PACKET_DISTRIBUTOR;
|
||||
@ -45,7 +45,7 @@ void Factory::setStaticFrameworkObjectIds() {
|
||||
CommandingServiceBase::defaultPacketSource = objects::PUS_PACKET_DISTRIBUTOR;
|
||||
CommandingServiceBase::defaultPacketDestination = objects::TM_FUNNEL;
|
||||
|
||||
TmFunnel::downlinkDestination = objects::UDP_BRIDGE;
|
||||
TmFunnel::downlinkDestination = objects::TMTC_BRIDGE;
|
||||
// No storage object for now.
|
||||
TmFunnel::storageDestination = objects::NO_OBJECT;
|
||||
|
||||
@ -59,8 +59,8 @@ void ObjectFactory::produce(void* args){
|
||||
Factory::setStaticFrameworkObjectIds();
|
||||
ObjectFactory::produceGenericObjects();
|
||||
|
||||
new UdpTmTcBridge(objects::UDP_BRIDGE, objects::CCSDS_PACKET_DISTRIBUTOR);
|
||||
new UdpTcPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE);
|
||||
new UdpTmTcBridge(objects::TMTC_BRIDGE, objects::CCSDS_PACKET_DISTRIBUTOR);
|
||||
new UdpTcPollingTask(objects::TMTC_POLLING_TASK, objects::TMTC_BRIDGE);
|
||||
|
||||
GpioIF* gpioIF = new LinuxLibgpioIF(objects::GPIO_IF);
|
||||
GpioCookie* gpioCookie = nullptr;
|
||||
|
@ -1,35 +0,0 @@
|
||||
FROM ubuntu:latest
|
||||
# FROM alpine:latest
|
||||
|
||||
ENV TZ=Europe/Berlin
|
||||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||
|
||||
RUN apt-get update && apt-get install -y curl cmake g++
|
||||
|
||||
# Q7S root filesystem, required for cross-compilation. Use IPv6 for curl
|
||||
RUN mkdir -p /usr/rootfs; \
|
||||
curl -6 https://eive-cloud.irs.uni-stuttgart.de/index.php/s/dnfMy9kGpgynN6J/download/cortexa9hf-neon-xiphos-linux-gnueabi.tar.gz \
|
||||
| tar xvz -C /usr/rootfs
|
||||
# Q7S C++ cross-compiler. Use IPv6 for curl
|
||||
RUN mkdir -p /usr/tools; \
|
||||
curl -6 https://eive-cloud.irs.uni-stuttgart.de/index.php/s/RMsbHydJc6PSqcz/download/gcc-arm-linux-gnueabi.tar.gz \
|
||||
| tar xvz -C /usr/tools
|
||||
|
||||
# RUN apk add cmake make g++
|
||||
|
||||
# Required for cmake build
|
||||
ENV Q7S_SYSROOT="/usr/rootfs/cortexa9hf-neon-xiphos-linux-gnueabi"
|
||||
ENV PATH=$PATH:"/usr/tools/gcc-arm-linux-gnueabi/bin"
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
COPY . .
|
||||
|
||||
RUN set -ex; \
|
||||
rm -rf build-q7s; \
|
||||
mkdir build-q7s; \
|
||||
cd build-q7s; \
|
||||
cmake -DCMAKE_BUILD_TYPE=Release -DOS_FSFW=linux -DTGT_BSP="arm/q7s" ..;
|
||||
|
||||
ENTRYPOINT ["cmake", "--build", "build-q7s"]
|
||||
CMD ["-j"]
|
||||
# CMD ["bash"]
|
@ -15,6 +15,8 @@
|
||||
// Set to Q7S_HOT_REDUNDANT: On startup, turn on both SD cards and mount them
|
||||
#define Q7S_SD_CARD_CONFIG Q7S_SD_COLD_REDUNDANT
|
||||
|
||||
// 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! */
|
||||
|
@ -4,6 +4,11 @@
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
|
||||
enum SdCard {
|
||||
SDC0,
|
||||
SDC1
|
||||
};
|
||||
|
||||
FileSystemTest::FileSystemTest() {
|
||||
using namespace std;
|
||||
SdCard sdCard = SdCard::SDC0;
|
||||
|
@ -1,11 +1,6 @@
|
||||
#ifndef BSP_Q7S_BOARDTEST_FILESYSTEMTEST_H_
|
||||
#define BSP_Q7S_BOARDTEST_FILESYSTEMTEST_H_
|
||||
|
||||
enum SdCard {
|
||||
SDC0,
|
||||
SDC1
|
||||
};
|
||||
|
||||
class FileSystemTest {
|
||||
public:
|
||||
FileSystemTest();
|
||||
|
@ -24,8 +24,8 @@ ReturnValue_t Q7STestTask::performOneShotAction() {
|
||||
//testScratchApi();
|
||||
//testJsonLibDirect();
|
||||
//testDummyParams();
|
||||
FsOpCodes opCode = FsOpCodes::ATTEMPT_DIR_REMOVAL_NON_EMPTY;
|
||||
testFileSystemHandlerDirect(opCode);
|
||||
//FsOpCodes opCode = FsOpCodes::ATTEMPT_DIR_REMOVAL_NON_EMPTY;
|
||||
//testFileSystemHandlerDirect(opCode);
|
||||
return TestTask::performOneShotAction();
|
||||
}
|
||||
|
||||
|
@ -1,24 +1,67 @@
|
||||
#include "CoreController.h"
|
||||
#include "q7sConfig.h"
|
||||
#include "OBSWConfig.h"
|
||||
#include "OBSWVersion.h"
|
||||
#include "watchdogConf.h"
|
||||
|
||||
#include "fsfw/FSFWVersion.h"
|
||||
#include "fsfw/timemanager/Stopwatch.h"
|
||||
#include "fsfw/serviceinterface/ServiceInterface.h"
|
||||
#include "fsfw/osal/linux/Timer.h"
|
||||
#if OBSW_USE_TMTC_TCP_BRIDGE == 0
|
||||
#include "fsfw/osal/common/UdpTmTcBridge.h"
|
||||
#else
|
||||
#include "fsfw/osal/common/TcpTmTcBridge.h"
|
||||
#endif
|
||||
|
||||
#include "bsp_q7s/memory/scratchApi.h"
|
||||
#include "bsp_q7s/memory/SdCardManager.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <filesystem>
|
||||
|
||||
CoreController::Chip CoreController::currentChip = Chip::NO_CHIP;
|
||||
CoreController::Copy CoreController::currentCopy = Copy::NO_COPY;
|
||||
|
||||
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;
|
||||
}
|
||||
sdcMan = SdCardManager::instance();
|
||||
if(sdcMan == nullptr) {
|
||||
sif::error << "CoreController::CoreController: SD card manager invalid!" << std::endl;
|
||||
}
|
||||
|
||||
if(not BLOCKING_SD_INIT) {
|
||||
sdcMan->setBlocking(false);
|
||||
}
|
||||
sdStateMachine();
|
||||
|
||||
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) {
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
return ExtendedControllerBase::handleCommandMessage(message);
|
||||
}
|
||||
|
||||
void CoreController::performControlOperation() {
|
||||
performWatchdogControlOperation();
|
||||
sdStateMachine();
|
||||
}
|
||||
|
||||
ReturnValue_t CoreController::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
|
||||
@ -32,16 +75,6 @@ LocalPoolDataSetBase* CoreController::getDataSetHandle(sid_t sid) {
|
||||
|
||||
ReturnValue_t CoreController::initialize() {
|
||||
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);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
@ -49,7 +82,8 @@ ReturnValue_t CoreController::initialize() {
|
||||
"count failed" << std::endl;
|
||||
}
|
||||
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
sdStateMachine();
|
||||
return ExtendedControllerBase::initialize();
|
||||
}
|
||||
|
||||
ReturnValue_t CoreController::checkModeCommand(Mode_t mode, Submode_t submode,
|
||||
@ -57,35 +91,36 @@ ReturnValue_t CoreController::checkModeCommand(Mode_t mode, Submode_t submode,
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
|
||||
ReturnValue_t CoreController::sdCardInit() {
|
||||
#if Q7S_SD_CARD_CONFIG == Q7S_SD_NONE
|
||||
sif::info << "No SD card initialization will be performed" << std::endl;
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
#else
|
||||
SdCardManager* sdcMan = SdCardManager::instance();
|
||||
if(sdcMan == nullptr) {
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
ReturnValue_t CoreController::initSdCardBlocking() {
|
||||
// Create update status file
|
||||
ReturnValue_t result = sdcMan->updateSdCardStateFile();
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::warning << "CoreController::initialize: Updating SD card state file failed"
|
||||
<< std::endl;
|
||||
}
|
||||
#if Q7S_SD_CARD_CONFIG == Q7S_SD_NONE
|
||||
sif::info << "No SD card initialization will be performed" << std::endl;
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
#else
|
||||
|
||||
auto statusPair = SdCardManager::SdStatusPair(sd::SdStatus::OFF, sd::SdStatus::OFF);
|
||||
result = sdcMan->getSdCardActiveStatus(statusPair);
|
||||
result = sdcMan->getSdCardActiveStatus(sdInfo.currentState);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::warning << "Getting SD card activity status failed" << std::endl;
|
||||
}
|
||||
|
||||
#if Q7S_SD_CARD_CONFIG == Q7S_SD_COLD_REDUNDANT
|
||||
return sdCardColdRedundantInit(sdcMan, statusPair);
|
||||
determinePreferredSdCard();
|
||||
updateSdInfoOther();
|
||||
sif::info << "Cold redundant SD card configuration, preferred SD card: " <<
|
||||
static_cast<int>(sdInfo.pref) << std::endl;
|
||||
result = sdColdRedundantBlockingInit();
|
||||
// Update status file
|
||||
sdcMan->updateSdCardStateFile();
|
||||
return result;
|
||||
#elif Q7S_SD_CARD_CONFIG == Q7S_SD_HOT_REDUNDANT
|
||||
sif::info << "Hot redundant SD card configuration" << std::endl;
|
||||
|
||||
setUpSdCard(sd::SdCard::SLOT_0, sdStatus.first, "0");
|
||||
setUpSdCard(sd::SdCard::SLOT_1, sdStatus.second, "1");
|
||||
sdCardSetup(sd::SdCard::SLOT_0, sd::SdState::MOUNTED, "0", false);
|
||||
sdCardSetup(sd::SdCard::SLOT_1, sd::SdState::MOUNTED, "1", false);
|
||||
// Update status file
|
||||
sdcMan->updateSdCardStateFile();
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
@ -95,10 +130,332 @@ ReturnValue_t CoreController::sdCardInit() {
|
||||
|
||||
}
|
||||
|
||||
ReturnValue_t CoreController::sdCardSetup(SdCardManager& sdcMan,
|
||||
SdCardManager::SdStatusPair& statusPair,sd::SdCard sdCard, sd::SdStatus status,
|
||||
std::string sdString) {
|
||||
ReturnValue_t CoreController::sdStateMachine() {
|
||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||
SdCardManager::Operations operation;
|
||||
|
||||
if(sdInfo.state == SdStates::IDLE) {
|
||||
// Nothing to do
|
||||
return result;
|
||||
}
|
||||
|
||||
if(sdInfo.state == SdStates::START) {
|
||||
// Init will be performed by separate function
|
||||
if(BLOCKING_SD_INIT) {
|
||||
sdInfo.state = SdStates::IDLE;
|
||||
sdInfo.initFinished = true;
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
// Still update SD state file
|
||||
#if Q7S_SD_CARD_CONFIG == Q7S_SD_NONE
|
||||
sdInfo.state = SdStates::UPDATE_INFO;
|
||||
#else
|
||||
sdInfo.cycleCount = 0;
|
||||
sdInfo.commandExecuted = false;
|
||||
sdInfo.state = SdStates::GET_INFO;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
// This lambda checks the non-blocking operation and assigns the new state on success.
|
||||
// It returns true for an operation success and false otherwise
|
||||
auto nonBlockingOpChecking = [&](SdStates newStateOnSuccess,
|
||||
uint16_t maxCycleCount, std::string opPrintout) {
|
||||
SdCardManager::OpStatus status = sdcMan->checkCurrentOp(operation);
|
||||
if(status == SdCardManager::OpStatus::SUCCESS) {
|
||||
sdInfo.state = newStateOnSuccess;
|
||||
sdInfo.commandExecuted = false;
|
||||
sdInfo.cycleCount = 0;
|
||||
return true;
|
||||
}
|
||||
else if(sdInfo.cycleCount > 4) {
|
||||
sif::warning << "CoreController::sdInitStateMachine: " << opPrintout <<
|
||||
" takes too long" << std::endl;
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
if(sdInfo.state == SdStates::GET_INFO) {
|
||||
if(not sdInfo.commandExecuted) {
|
||||
// Create update status file
|
||||
result = sdcMan->updateSdCardStateFile();
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::warning << "CoreController::initialize: Updating SD card state file failed"
|
||||
<< std::endl;
|
||||
}
|
||||
sdInfo.commandExecuted = true;
|
||||
}
|
||||
else {
|
||||
nonBlockingOpChecking(SdStates::SET_STATE_SELF, 4, "Updating SDC file");
|
||||
}
|
||||
}
|
||||
|
||||
if(sdInfo.state == SdStates::SET_STATE_SELF) {
|
||||
if(not sdInfo.commandExecuted) {
|
||||
result = sdcMan->getSdCardActiveStatus(sdInfo.currentState);
|
||||
determinePreferredSdCard();
|
||||
updateSdInfoOther();
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::warning << "Getting SD card activity status failed" << std::endl;
|
||||
}
|
||||
#if Q7S_SD_CARD_CONFIG == Q7S_SD_COLD_REDUNDANT
|
||||
sif::info << "Cold redundant SD card configuration, preferred SD card: " <<
|
||||
static_cast<int>(sdInfo.pref) << std::endl;
|
||||
#endif
|
||||
if(sdInfo.prefState == sd::SdState::MOUNTED) {
|
||||
#if OBSW_VERBOSE_LEVEL >= 1
|
||||
std::string mountString;
|
||||
if(sdInfo.pref == sd::SdCard::SLOT_0) {
|
||||
mountString = SdCardManager::SD_0_MOUNT_POINT;
|
||||
}
|
||||
else {
|
||||
mountString = SdCardManager::SD_1_MOUNT_POINT;
|
||||
}
|
||||
sif::info << "SD card " << sdInfo.prefChar << " already on and mounted at " <<
|
||||
mountString << std::endl;
|
||||
#endif
|
||||
sdInfo.state = SdStates::DETERMINE_OTHER;
|
||||
}
|
||||
else if(sdInfo.prefState == sd::SdState::OFF) {
|
||||
sdCardSetup(sdInfo.pref, sd::SdState::ON, sdInfo.prefChar, false);
|
||||
sdInfo.commandExecuted = true;
|
||||
}
|
||||
else if(sdInfo.prefState == sd::SdState::ON) {
|
||||
sdInfo.state = SdStates::MOUNT_SELF;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(nonBlockingOpChecking(SdStates::MOUNT_SELF, 10, "Setting SDC state")) {
|
||||
sdInfo.prefState = sd::SdState::ON;
|
||||
currentStateSetter(sdInfo.pref, sd::SdState::ON);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(sdInfo.state == SdStates::MOUNT_SELF) {
|
||||
if(not sdInfo.commandExecuted) {
|
||||
result = sdCardSetup(sdInfo.pref, sd::SdState::MOUNTED, sdInfo.prefChar);
|
||||
sdInfo.commandExecuted = true;
|
||||
}
|
||||
else {
|
||||
if(nonBlockingOpChecking(SdStates::DETERMINE_OTHER, 5, "Mounting SD card")) {
|
||||
sdInfo.prefState = sd::SdState::MOUNTED;
|
||||
currentStateSetter(sdInfo.pref, sd::SdState::MOUNTED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(sdInfo.state == SdStates::DETERMINE_OTHER) {
|
||||
// Determine whether any additional operations have to be done for the other SD card
|
||||
// 1. Cold redundant case: Other SD card needs to be unmounted and switched off
|
||||
// 2. Hot redundant case: Other SD card needs to be mounted and switched on
|
||||
#if Q7S_SD_CARD_CONFIG == Q7S_SD_COLD_REDUNDANT
|
||||
if(sdInfo.otherState == sd::SdState::ON) {
|
||||
sdInfo.state = SdStates::SET_STATE_OTHER;
|
||||
}
|
||||
else if(sdInfo.otherState == sd::SdState::MOUNTED) {
|
||||
sdInfo.state = SdStates::MOUNT_UNMOUNT_OTHER;
|
||||
}
|
||||
else {
|
||||
// Is already off, update info, but with a small delay
|
||||
sdInfo.state = SdStates::SKIP_CYCLE_BEFORE_INFO_UPDATE;
|
||||
}
|
||||
#elif Q7S_SD_CARD_CONFIG == Q7S_SD_HOT_REDUNDANT
|
||||
if(sdInfo.otherState == sd::SdState::OFF) {
|
||||
sdInfo.state = SdStates::SET_STATE_OTHER;
|
||||
}
|
||||
else if(sdInfo.otherState == sd::SdState::ON) {
|
||||
sdInfo.state = SdStates::MOUNT_UNMOUNT_OTHER;
|
||||
}
|
||||
else {
|
||||
// Is already on and mounted, update info
|
||||
sdInfo.state = SdStates::SKIP_CYCLE_BEFORE_INFO_UPDATE;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if(sdInfo.state == SdStates::SET_STATE_OTHER) {
|
||||
// Set state of other SD card to ON or OFF, depending on redundancy mode
|
||||
#if Q7S_SD_CARD_CONFIG == Q7S_SD_COLD_REDUNDANT
|
||||
if(not sdInfo.commandExecuted) {
|
||||
result = sdCardSetup(sdInfo.other, sd::SdState::OFF, sdInfo.otherChar, false);
|
||||
sdInfo.commandExecuted = true;
|
||||
}
|
||||
else {
|
||||
if(nonBlockingOpChecking(SdStates::SKIP_CYCLE_BEFORE_INFO_UPDATE, 10,
|
||||
"Switching off other SD card")) {
|
||||
sdInfo.otherState = sd::SdState::OFF;
|
||||
currentStateSetter(sdInfo.other, sd::SdState::OFF);
|
||||
}
|
||||
}
|
||||
#elif Q7S_SD_CARD_CONFIG == Q7S_SD_HOT_REDUNDANT
|
||||
if(not sdInfo.commandExecuted) {
|
||||
result = sdCardSetup(sdInfo.other, sd::SdState::ON, sdInfo.otherChar, false);
|
||||
sdInfo.commandExecuted = true;
|
||||
}
|
||||
else {
|
||||
if(nonBlockingOpChecking(SdStates::MOUNT_UNMOUNT_OTHER, 10,
|
||||
"Switching on other SD card")) {
|
||||
sdInfo.otherState = sd::SdState::ON;
|
||||
currentStateSetter(sdInfo.other, sd::SdState::ON);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if(sdInfo.state == SdStates::MOUNT_UNMOUNT_OTHER) {
|
||||
// Mount or unmount other SD card, depending on redundancy mode
|
||||
#if Q7S_SD_CARD_CONFIG == Q7S_SD_COLD_REDUNDANT
|
||||
if(not sdInfo.commandExecuted) {
|
||||
result = sdCardSetup(sdInfo.other, sd::SdState::ON, sdInfo.otherChar);
|
||||
sdInfo.commandExecuted = true;
|
||||
}
|
||||
else {
|
||||
if(nonBlockingOpChecking(SdStates::SET_STATE_OTHER, 10, "Unmounting other SD card")) {
|
||||
sdInfo.otherState = sd::SdState::ON;
|
||||
currentStateSetter(sdInfo.other, sd::SdState::ON);
|
||||
}
|
||||
}
|
||||
#elif Q7S_SD_CARD_CONFIG == Q7S_SD_HOT_REDUNDANT
|
||||
if(not sdInfo.commandExecuted) {
|
||||
result = sdCardSetup(sdInfo.other, sd::SdState::MOUNTED, sdInfo.otherChar);
|
||||
sdInfo.commandExecuted = true;
|
||||
}
|
||||
else {
|
||||
if(nonBlockingOpChecking(SdStates::UPDATE_INFO, 4, "Mounting other SD card")) {
|
||||
sdInfo.otherState = sd::SdState::MOUNTED;
|
||||
currentStateSetter(sdInfo.other, sd::SdState::MOUNTED);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if(sdInfo.state == SdStates::SKIP_CYCLE_BEFORE_INFO_UPDATE) {
|
||||
sdInfo.state = SdStates::UPDATE_INFO;
|
||||
}
|
||||
else if(sdInfo.state == SdStates::UPDATE_INFO) {
|
||||
// It is assumed that all tasks are running by the point this section is reached.
|
||||
// Therefore, perform this operation in blocking mode because it does not take long
|
||||
// and the ready state of the SD card is available sooner
|
||||
sdcMan->setBlocking(true);
|
||||
// Update status file
|
||||
result = sdcMan->updateSdCardStateFile();
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::warning << "CoreController::initialize: Updating SD card state file failed"
|
||||
<< std::endl;
|
||||
}
|
||||
sdInfo.commandExecuted = false;
|
||||
sdInfo.state = SdStates::IDLE;
|
||||
sdInfo.cycleCount = 0;
|
||||
sdcMan->setBlocking(false);
|
||||
sdcMan->getSdCardActiveStatus(sdInfo.currentState);
|
||||
if(not sdInfo.initFinished) {
|
||||
updateSdInfoOther();
|
||||
sdInfo.initFinished = true;
|
||||
sif::info << "SD card initialization finished" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
if(sdInfo.state == SdStates::SET_STATE_FROM_COMMAND) {
|
||||
if(not sdInfo.commandExecuted) {
|
||||
executeNextExternalSdCommand();
|
||||
}
|
||||
else {
|
||||
checkExternalSdCommandStatus();
|
||||
}
|
||||
}
|
||||
|
||||
sdInfo.cycleCount++;
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
|
||||
void CoreController::executeNextExternalSdCommand() {
|
||||
std::string sdChar;
|
||||
sd::SdState currentStateOfCard = sd::SdState::OFF;
|
||||
if(sdInfo.commandedCard == sd::SdCard::SLOT_0) {
|
||||
sdChar = "0";
|
||||
currentStateOfCard = sdInfo.currentState.first;
|
||||
}
|
||||
else {
|
||||
sdChar = "1";
|
||||
currentStateOfCard = sdInfo.currentState.second;
|
||||
}
|
||||
if(currentStateOfCard == sd::SdState::OFF) {
|
||||
if(sdInfo.commandedState == sd::SdState::ON) {
|
||||
sdInfo.currentlyCommandedState = sdInfo.commandedState;
|
||||
}
|
||||
else if(sdInfo.commandedState == sd::SdState::MOUNTED) {
|
||||
sdInfo.currentlyCommandedState = sd::SdState::ON;
|
||||
}
|
||||
else {
|
||||
// SD card is already on target state
|
||||
sdInfo.commandFinished = true;
|
||||
sdInfo.state = SdStates::IDLE;
|
||||
}
|
||||
}
|
||||
else if(currentStateOfCard == sd::SdState::ON) {
|
||||
if(sdInfo.commandedState == sd::SdState::OFF or
|
||||
sdInfo.commandedState == sd::SdState::MOUNTED) {
|
||||
sdInfo.currentlyCommandedState = sdInfo.commandedState;
|
||||
}
|
||||
else {
|
||||
// Already on target state
|
||||
sdInfo.commandFinished = true;
|
||||
sdInfo.state = SdStates::IDLE;
|
||||
}
|
||||
}
|
||||
else if(currentStateOfCard == sd::SdState::MOUNTED) {
|
||||
if(sdInfo.commandedState == sd::SdState::ON) {
|
||||
sdInfo.currentlyCommandedState = sdInfo.commandedState;
|
||||
}
|
||||
else if(sdInfo.commandedState == sd::SdState::OFF) {
|
||||
// This causes an unmount in sdCardSetup
|
||||
sdInfo.currentlyCommandedState = sd::SdState::ON;
|
||||
}
|
||||
else {
|
||||
sdInfo.commandFinished = true;
|
||||
}
|
||||
}
|
||||
sdCardSetup(sdInfo.commandedCard, sdInfo.commandedState, sdChar);
|
||||
sdInfo.commandExecuted = true;
|
||||
}
|
||||
|
||||
void CoreController::checkExternalSdCommandStatus() {
|
||||
SdCardManager::Operations operation;
|
||||
SdCardManager::OpStatus status = sdcMan->checkCurrentOp(operation);
|
||||
if(status == SdCardManager::OpStatus::SUCCESS) {
|
||||
if(sdInfo.currentlyCommandedState == sdInfo.commandedState) {
|
||||
sdInfo.state = SdStates::SKIP_CYCLE_BEFORE_INFO_UPDATE;
|
||||
sdInfo.commandFinished = true;
|
||||
}
|
||||
else {
|
||||
// stay on same state machine state because the target state was not reached yet.
|
||||
sdInfo.cycleCount = 0;
|
||||
}
|
||||
currentStateSetter(sdInfo.commandedCard, sdInfo.currentlyCommandedState);
|
||||
sdInfo.commandExecuted = false;
|
||||
}
|
||||
else if(sdInfo.cycleCount > 4) {
|
||||
sif::warning << "CoreController::sdStateMachine: Commanding SD state "
|
||||
"takes too long" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void CoreController::currentStateSetter(sd::SdCard sdCard, sd::SdState newState) {
|
||||
if(sdCard == sd::SdCard::SLOT_0) {
|
||||
sdInfo.currentState.first = newState;
|
||||
}
|
||||
else {
|
||||
sdInfo.currentState.second = newState;
|
||||
}
|
||||
}
|
||||
|
||||
ReturnValue_t CoreController::sdCardSetup(sd::SdCard sdCard, sd::SdState targetState,
|
||||
std::string sdChar, bool printOutput) {
|
||||
std::string mountString;
|
||||
sdcMan->setPrintCommandOutput(printOutput);
|
||||
if(sdCard == sd::SdCard::SLOT_0) {
|
||||
mountString = SdCardManager::SD_0_MOUNT_POINT;
|
||||
}
|
||||
@ -106,76 +463,71 @@ ReturnValue_t CoreController::sdCardSetup(SdCardManager& sdcMan,
|
||||
mountString = SdCardManager::SD_1_MOUNT_POINT;
|
||||
}
|
||||
|
||||
if(status == sd::SdStatus::OFF) {
|
||||
sif::info << "Switching on and mounting SD card " << sdString << " at " <<
|
||||
mountString << std::endl;
|
||||
return sdcMan.switchOnSdCard(sdCard, true, &statusPair);
|
||||
sd::SdState state = sd::SdState::OFF;
|
||||
if(sdCard == sd::SdCard::SLOT_0) {
|
||||
state = sdInfo.currentState.first;
|
||||
}
|
||||
else if(status == sd::SdStatus::ON) {
|
||||
sif::info << "Mounting SD card " << sdString << " at " << mountString << std::endl;
|
||||
return sdcMan.mountSdCard(sdCard);
|
||||
else {
|
||||
state = sdInfo.currentState.second;
|
||||
}
|
||||
if(state == sd::SdState::MOUNTED) {
|
||||
if(targetState == sd::SdState::OFF) {
|
||||
sif::info << "Switching off SD card " << sdChar << std::endl;
|
||||
return sdcMan->switchOffSdCard(sdCard, true, &sdInfo.currentState);
|
||||
}
|
||||
else if(targetState == sd::SdState::ON) {
|
||||
sif::info << "Unmounting SD card " << sdChar << std::endl;
|
||||
return sdcMan->unmountSdCard(sdCard);
|
||||
}
|
||||
else {
|
||||
if(std::filesystem::exists(mountString)) {
|
||||
sif::info << "SD card " << sdString << " already on and mounted at " <<
|
||||
sif::info << "SD card " << sdChar << " already on and mounted at " <<
|
||||
mountString << std::endl;
|
||||
return SdCardManager::ALREADY_MOUNTED;
|
||||
}
|
||||
sif::error << "SD card mounted but expected mount point " << mountString << " not found!"
|
||||
<< std::endl;
|
||||
sif::error << "SD card mounted but expected mount point " <<
|
||||
mountString << " not found!" << std::endl;
|
||||
return SdCardManager::MOUNT_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
if(state == sd::SdState::OFF) {
|
||||
if(targetState == sd::SdState::MOUNTED) {
|
||||
sif::info << "Switching on and mounting SD card " << sdChar << " at " <<
|
||||
mountString << std::endl;
|
||||
return sdcMan->switchOnSdCard(sdCard, true, &sdInfo.currentState);
|
||||
}
|
||||
else if(targetState == sd::SdState::ON) {
|
||||
sif::info << "Switching on SD card " << sdChar << std::endl;
|
||||
return sdcMan->switchOnSdCard(sdCard, false, &sdInfo.currentState);
|
||||
}
|
||||
}
|
||||
|
||||
else if(state == sd::SdState::ON) {
|
||||
if(targetState == sd::SdState::MOUNTED) {
|
||||
sif::info << "Mounting SD card " << sdChar << " at " << mountString << std::endl;
|
||||
return sdcMan->mountSdCard(sdCard);
|
||||
}
|
||||
else if(targetState == sd::SdState::OFF) {
|
||||
sif::info << "Switching off SD card " << sdChar << std::endl;
|
||||
return sdcMan->switchOffSdCard(sdCard, false, &sdInfo.currentState);
|
||||
}
|
||||
}
|
||||
else {
|
||||
sif::warning << "CoreController::sdCardSetup: Invalid state for this call" << std::endl;
|
||||
}
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
}
|
||||
|
||||
|
||||
ReturnValue_t CoreController::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy,
|
||||
const uint8_t *data, size_t size) {
|
||||
switch(actionId) {
|
||||
case(LIST_DIRECTORY_INTO_FILE): {
|
||||
// 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;
|
||||
return actionListDirectoryIntoFile(actionId, commandedBy, data, size);
|
||||
}
|
||||
// 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;
|
||||
case(REBOOT_OBC): {
|
||||
return actionPerformReboot(data, size);
|
||||
}
|
||||
default: {
|
||||
return HasActionsIF::INVALID_ACTION_ID;
|
||||
@ -184,76 +536,46 @@ ReturnValue_t CoreController::executeAction(ActionId_t actionId, MessageQueueId_
|
||||
}
|
||||
|
||||
ReturnValue_t CoreController::initializeAfterTaskCreation() {
|
||||
ReturnValue_t result = versionFileInit();
|
||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||
if(BLOCKING_SD_INIT) {
|
||||
ReturnValue_t result = initSdCardBlocking();
|
||||
if(result != HasReturnvaluesIF::RETURN_OK and result != SdCardManager::ALREADY_MOUNTED) {
|
||||
sif::warning << "CoreController::CoreController: SD card init failed" << std::endl;
|
||||
}
|
||||
}
|
||||
sdStateMachine();
|
||||
result = initVersionFile();
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::warning << "CoreController::initialize: Version initialization failed" << std::endl;
|
||||
}
|
||||
initPrint();
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t CoreController::sdCardColdRedundantInit(SdCardManager* sdcMan,
|
||||
SdCardManager::SdStatusPair& statusPair) {
|
||||
sd::SdCard preferredSdCard = sd::SdCard::SLOT_0;
|
||||
ReturnValue_t result = sdcMan->getPreferredSdCard(preferredSdCard);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
if(result == scratch::KEY_NOT_FOUND) {
|
||||
sif::warning << "CoreController::sdCardInit: "
|
||||
"Preferred SD card not set. Setting to 0" << std::endl;
|
||||
sdcMan->setPreferredSdCard(preferredSdCard);
|
||||
}
|
||||
else {
|
||||
sif::warning << "CoreController::sdCardInit: Could not get preferred SD card"
|
||||
"information from the scratch buffer" << std::endl;
|
||||
}
|
||||
}
|
||||
std::string preferredString;
|
||||
sd::SdStatus preferredStatus = sd::SdStatus::OFF;
|
||||
ReturnValue_t CoreController::sdColdRedundantBlockingInit() {
|
||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||
|
||||
sd::SdStatus otherStatus = sd::SdStatus::OFF;
|
||||
std::string otherString;
|
||||
sd::SdCard otherSdc = sd::SdCard::SLOT_0;
|
||||
|
||||
if(preferredSdCard == sd::SdCard::SLOT_0) {
|
||||
preferredStatus = statusPair.first;
|
||||
preferredString = "0";
|
||||
otherSdc = sd::SdCard::SLOT_1;
|
||||
otherStatus = statusPair.second;
|
||||
otherString = "1";
|
||||
}
|
||||
else {
|
||||
preferredString = "1";
|
||||
preferredStatus = statusPair.second;
|
||||
otherStatus = statusPair.first;
|
||||
otherSdc = sd::SdCard::SLOT_0;
|
||||
otherString = "0";
|
||||
}
|
||||
|
||||
sif::info << "Cold redundant SD card configuration, preferred SD card " <<
|
||||
preferredString << std::endl;
|
||||
|
||||
result = sdCardSetup(*sdcMan, statusPair, preferredSdCard, preferredStatus, preferredString);
|
||||
result = sdCardSetup(sdInfo.pref, sd::SdState::MOUNTED, sdInfo.prefChar);
|
||||
if(result != SdCardManager::ALREADY_MOUNTED and result != HasReturnvaluesIF::RETURN_OK) {
|
||||
sif::warning << "Setting up preferred card " << otherString <<
|
||||
sif::warning << "Setting up preferred card " << sdInfo.otherChar <<
|
||||
" in cold redundant mode failed" << std::endl;
|
||||
// Try other SD card and mark set up operation as failed
|
||||
sdCardSetup(*sdcMan, statusPair, preferredSdCard, preferredStatus, preferredString);
|
||||
sdCardSetup(sdInfo.pref, sd::SdState::MOUNTED, sdInfo.prefChar);
|
||||
result = HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
|
||||
if(result != HasReturnvaluesIF::RETURN_FAILED and otherStatus != sd::SdStatus::OFF) {
|
||||
sif::info << "Switching off secondary SD card " << otherString << std::endl;
|
||||
// Switch off other SD card in cold redundant mode if setting up preferred one walked
|
||||
if(result != HasReturnvaluesIF::RETURN_FAILED and sdInfo.otherState != sd::SdState::OFF) {
|
||||
sif::info << "Switching off secondary SD card " << sdInfo.otherChar << std::endl;
|
||||
// Switch off other SD card in cold redundant mode if setting up preferred one worked
|
||||
// without issues
|
||||
result = sdcMan->switchOffSdCard(otherSdc, otherStatus, &statusPair);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK and result != SdCardManager::ALREADY_OFF) {
|
||||
sif::warning << "Switching off secondary SD card " << otherString <<
|
||||
ReturnValue_t result2 = sdcMan->switchOffSdCard(sdInfo.other,
|
||||
sdInfo.otherState, &sdInfo.currentState);
|
||||
if(result2 != HasReturnvaluesIF::RETURN_OK and result2 != SdCardManager::ALREADY_OFF) {
|
||||
sif::warning << "Switching off secondary SD card " << sdInfo.otherChar <<
|
||||
" in cold redundant mode failed" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
// Update status file
|
||||
sdcMan->updateSdCardStateFile();
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t CoreController::incrementAllocationFailureCount() {
|
||||
@ -266,10 +588,11 @@ ReturnValue_t CoreController::incrementAllocationFailureCount() {
|
||||
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 unameCmd = "uname -a > " + unameFileName;
|
||||
// TODO: No -v flag for now. If the kernel version is used, need to cut off first few letters
|
||||
std::string unameCmd = "uname -mnrso > " + unameFileName;
|
||||
int result = std::system(unameCmd.c_str());
|
||||
if(result != 0) {
|
||||
utility::handleSystemError(result, "CoreController::versionFileInit");
|
||||
@ -348,3 +671,238 @@ ReturnValue_t CoreController::versionFileInit() {
|
||||
|
||||
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() {
|
||||
#if OBSW_VERBOSE_LEVEL >= 1
|
||||
#if OBSW_USE_TMTC_TCP_BRIDGE == 0
|
||||
sif::info << "Created UDP server for TMTC commanding with listener port " <<
|
||||
UdpTmTcBridge::DEFAULT_SERVER_PORT << std::endl;
|
||||
#else
|
||||
sif::info << "Created TCP server for TMTC commanding with listener port " <<
|
||||
TcpTmTcBridge::DEFAULT_SERVER_PORT << std::endl;
|
||||
#endif
|
||||
|
||||
if(watchdogFifoFd > 0) {
|
||||
sif::info << "Opened watchdog FIFO successfully.." << std::endl;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
ReturnValue_t CoreController::actionPerformReboot(const uint8_t *data, size_t size) {
|
||||
if(size < 1) {
|
||||
return HasActionsIF::INVALID_PARAMETERS;
|
||||
}
|
||||
bool rebootSameBootCopy = data[0];
|
||||
if(rebootSameBootCopy) {
|
||||
#if OBSW_VERBOSE_LEVEL >= 1
|
||||
sif::info << "CoreController::actionPerformReboot: Rebooting on current image" << std::endl;
|
||||
#endif
|
||||
// Attempt graceful shutdown by unmounting and switching off SD cards
|
||||
SdCardManager::instance()->switchOffSdCard(sd::SdCard::SLOT_0);
|
||||
SdCardManager::instance()->switchOffSdCard(sd::SdCard::SLOT_1);
|
||||
int result = std::system("xsc_boot_copy -r");
|
||||
if(result != 0) {
|
||||
utility::handleSystemError(result, "CoreController::executeAction");
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
return HasActionsIF::EXECUTION_FINISHED;
|
||||
}
|
||||
if(size < 3) {
|
||||
return HasActionsIF::INVALID_PARAMETERS;
|
||||
}
|
||||
#if OBSW_VERBOSE_LEVEL >= 1
|
||||
sif::info << "CoreController::actionPerformReboot: Rebooting on " <<
|
||||
static_cast<int>(data[1]) << " " << static_cast<int>(data[2]) << std::endl;
|
||||
#endif
|
||||
// The second byte in data is the target chip, the third byte is the target copy
|
||||
std::string cmdString = "xsc_boot_copy " + std::to_string(data[1]) + " " +
|
||||
std::to_string(data[2]);
|
||||
int result = std::system(cmdString.c_str());
|
||||
if(result != 0) {
|
||||
utility::handleSystemError(result, "CoreController::executeAction");
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
return HasActionsIF::EXECUTION_FINISHED;
|
||||
}
|
||||
|
||||
CoreController::~CoreController() {
|
||||
}
|
||||
|
||||
void CoreController::determinePreferredSdCard() {
|
||||
if(sdInfo.pref == sd::SdCard::NONE) {
|
||||
ReturnValue_t result = sdcMan->getPreferredSdCard(sdInfo.pref);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
if(result == scratch::KEY_NOT_FOUND) {
|
||||
sif::warning << "CoreController::sdCardInit: "
|
||||
"Preferred SD card not set. Setting to 0" << std::endl;
|
||||
sdcMan->setPreferredSdCard(sdInfo.pref);
|
||||
}
|
||||
else {
|
||||
sif::warning << "CoreController::sdCardInit: Could not get preferred SD card"
|
||||
"information from the scratch buffer" << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CoreController::updateSdInfoOther() {
|
||||
if(sdInfo.pref == sd::SdCard::SLOT_0) {
|
||||
sdInfo.prefChar = "0";
|
||||
sdInfo.otherChar = "1";
|
||||
sdInfo.otherState = sdInfo.currentState.second;
|
||||
sdInfo.prefState = sdInfo.currentState.first;
|
||||
sdInfo.other = sd::SdCard::SLOT_1;
|
||||
|
||||
}
|
||||
else {
|
||||
sdInfo.prefChar = "1";
|
||||
sdInfo.otherChar = "0";
|
||||
sdInfo.otherState = sdInfo.currentState.first;
|
||||
sdInfo.prefState = sdInfo.currentState.second;
|
||||
sdInfo.other = sd::SdCard::SLOT_0;
|
||||
}
|
||||
}
|
||||
|
||||
bool CoreController::sdInitFinished() const {
|
||||
return sdInfo.initFinished;
|
||||
}
|
||||
|
||||
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,20 +1,40 @@
|
||||
#ifndef BSP_Q7S_CORE_CORECONTROLLER_H_
|
||||
#define BSP_Q7S_CORE_CORECONTROLLER_H_
|
||||
|
||||
#include <fsfw/globalfunctions/PeriodicOperationDivider.h>
|
||||
#include "fsfw/controller/ExtendedControllerBase.h"
|
||||
#include "bsp_q7s/memory/SdCardManager.h"
|
||||
|
||||
#include "events/subsystemIdRanges.h"
|
||||
|
||||
|
||||
class Timer;
|
||||
class SdCardManager;
|
||||
|
||||
class CoreController: public ExtendedControllerBase {
|
||||
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 REBOOT_OBC = 32;
|
||||
|
||||
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::CORE;
|
||||
|
||||
static constexpr Event ALLOC_FAILURE = event::makeEvent(SUBSYSTEM_ID, 0, severity::MEDIUM);
|
||||
|
||||
|
||||
CoreController(object_id_t objectId);
|
||||
virtual~ CoreController();
|
||||
|
||||
ReturnValue_t initialize() override;
|
||||
|
||||
@ -27,21 +47,95 @@ public:
|
||||
void performControlOperation() override;
|
||||
|
||||
static ReturnValue_t incrementAllocationFailureCount();
|
||||
static void getCurrentBootCopy(Chip& chip, Copy& copy);
|
||||
bool sdInitFinished() const;
|
||||
|
||||
private:
|
||||
static Chip currentChip;
|
||||
static Copy currentCopy;
|
||||
|
||||
ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
||||
LocalDataPoolManager& poolManager) override;
|
||||
LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
|
||||
ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode,
|
||||
uint32_t *msToReachTheMode);
|
||||
|
||||
ReturnValue_t sdCardInit();
|
||||
ReturnValue_t sdCardSetup(SdCardManager& sdcMan, SdCardManager::SdStatusPair& statusPair,
|
||||
sd::SdCard sdCard, sd::SdStatus status, std::string sdString);
|
||||
ReturnValue_t sdCardColdRedundantInit(SdCardManager* sdcMan,
|
||||
SdCardManager::SdStatusPair& statusPair);
|
||||
// States for SD state machine, which is used in non-blocking mode
|
||||
enum class SdStates {
|
||||
NONE,
|
||||
START,
|
||||
GET_INFO,
|
||||
SET_STATE_SELF,
|
||||
MOUNT_SELF,
|
||||
// Determine operations for other SD card, depending on redundancy configuration
|
||||
DETERMINE_OTHER,
|
||||
SET_STATE_OTHER,
|
||||
// Mount or unmount other
|
||||
MOUNT_UNMOUNT_OTHER,
|
||||
// Skip period because the shell command used to generate the info file sometimes is
|
||||
// missing the last performed operation if executed too early
|
||||
SKIP_CYCLE_BEFORE_INFO_UPDATE,
|
||||
UPDATE_INFO,
|
||||
// SD initialization done
|
||||
IDLE,
|
||||
// Used if SD switches or mount commands are issued via telecommand
|
||||
SET_STATE_FROM_COMMAND,
|
||||
};
|
||||
static constexpr bool BLOCKING_SD_INIT = false;
|
||||
|
||||
ReturnValue_t versionFileInit();
|
||||
SdCardManager* sdcMan = nullptr;
|
||||
|
||||
ReturnValue_t initSdCardBlocking();
|
||||
ReturnValue_t sdStateMachine();
|
||||
|
||||
struct SdInfo {
|
||||
sd::SdCard pref = sd::SdCard::NONE;
|
||||
sd::SdState prefState = sd::SdState::OFF;
|
||||
sd::SdCard other = sd::SdCard::NONE;
|
||||
sd::SdState otherState = sd::SdState::OFF;
|
||||
std::string prefChar = "0";
|
||||
std::string otherChar = "1";
|
||||
SdStates state = SdStates::START;
|
||||
// Used to track whether a command was executed
|
||||
bool commandExecuted = true;
|
||||
bool initFinished = false;
|
||||
SdCardManager::SdStatePair currentState;
|
||||
uint16_t cycleCount = 0;
|
||||
// These two flags are related to external commanding
|
||||
bool commandIssued = false;
|
||||
bool commandFinished = false;
|
||||
sd::SdState currentlyCommandedState = sd::SdState::OFF;
|
||||
sd::SdCard commandedCard = sd::SdCard::NONE;
|
||||
sd::SdState commandedState = sd::SdState::OFF;
|
||||
};
|
||||
|
||||
SdInfo sdInfo;
|
||||
|
||||
void updateSdInfoOther();
|
||||
ReturnValue_t sdCardSetup(sd::SdCard sdCard, sd::SdState targetState, std::string sdChar,
|
||||
bool printOutput = true);
|
||||
ReturnValue_t sdColdRedundantBlockingInit();
|
||||
void currentStateSetter(sd::SdCard sdCard, sd::SdState newState);
|
||||
void determinePreferredSdCard();
|
||||
void executeNextExternalSdCommand();
|
||||
void checkExternalSdCommandStatus();
|
||||
|
||||
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);
|
||||
ReturnValue_t actionPerformReboot(const uint8_t *data, size_t size);
|
||||
|
||||
void initPrint();
|
||||
|
||||
// Designated value for rechecking FIFO open
|
||||
static constexpr int RETRY_FIFO_OPEN = -2;
|
||||
int watchdogFifoFd = 0;
|
||||
|
||||
PeriodicOperationDivider opDivider;
|
||||
void performWatchdogControlOperation();
|
||||
};
|
||||
|
||||
|
||||
|
@ -82,19 +82,27 @@ void initmission::initTasks() {
|
||||
}
|
||||
|
||||
/* UDP bridge */
|
||||
PeriodicTaskIF* udpBridgeTask = factory->createPeriodicTask(
|
||||
PeriodicTaskIF* tmtcBridgeTask = factory->createPeriodicTask(
|
||||
"UDP_UNIX_BRIDGE", 50, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.2, missedDeadlineFunc);
|
||||
result = udpBridgeTask->addComponent(objects::UDP_BRIDGE);
|
||||
result = tmtcBridgeTask->addComponent(objects::TMTC_BRIDGE);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
initmission::printAddObjectError("UDP_BRIDGE", objects::UDP_BRIDGE);
|
||||
initmission::printAddObjectError("UDP_BRIDGE", objects::TMTC_BRIDGE);
|
||||
}
|
||||
PeriodicTaskIF* udpPollingTask = factory->createPeriodicTask(
|
||||
PeriodicTaskIF* tmtcPollingTask = factory->createPeriodicTask(
|
||||
"UDP_POLLING", 80, PeriodicTaskIF::MINIMUM_STACK_SIZE, 2.0, missedDeadlineFunc);
|
||||
result = udpPollingTask->addComponent(objects::UDP_POLLING_TASK);
|
||||
result = tmtcPollingTask->addComponent(objects::TMTC_POLLING_TASK);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
initmission::printAddObjectError("UDP_POLLING", objects::UDP_POLLING_TASK);
|
||||
initmission::printAddObjectError("UDP_POLLING", objects::TMTC_POLLING_TASK);
|
||||
}
|
||||
|
||||
PeriodicTaskIF* plocUpdaterTask = factory->createPeriodicTask(
|
||||
"PLOC_UPDATER_TASK", 30, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5, missedDeadlineFunc);
|
||||
result = plocUpdaterTask->addComponent(objects::PLOC_UPDATER);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
initmission::printAddObjectError("PLOC_UPDATER_TASK", objects::PLOC_UPDATER);
|
||||
}
|
||||
|
||||
|
||||
// FS task, task interval does not matter because it runs in permanent loop, priority low
|
||||
// because it is a non-essential background task
|
||||
PeriodicTaskIF* fsTask = factory->createPeriodicTask(
|
||||
@ -133,9 +141,10 @@ void initmission::initTasks() {
|
||||
|
||||
sif::info << "Starting tasks.." << std::endl;
|
||||
tmTcDistributor->startTask();
|
||||
udpBridgeTask->startTask();
|
||||
udpPollingTask->startTask();
|
||||
tmtcBridgeTask->startTask();
|
||||
tmtcPollingTask->startTask();
|
||||
coreController->startTask();
|
||||
plocUpdaterTask->startTask();
|
||||
|
||||
taskStarter(pstTasks, "PST task vector");
|
||||
taskStarter(pusTasks, "PUS task vector");
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "mission/devices/RadiationSensorHandler.h"
|
||||
#include "mission/devices/RwHandler.h"
|
||||
#include "mission/devices/StarTrackerHandler.h"
|
||||
#include "mission/devices/PlocUpdater.h"
|
||||
#include "mission/devices/devicedefinitions/GomspaceDefinitions.h"
|
||||
#include "mission/devices/devicedefinitions/SyrlinksDefinitions.h"
|
||||
#include "mission/devices/devicedefinitions/PlocMPSoCDefinitions.h"
|
||||
@ -48,24 +49,31 @@
|
||||
#include "mission/utility/TmFunnel.h"
|
||||
#include "linux/obc/CCSDSIPCoreBridge.h"
|
||||
|
||||
#include "fsfw/hal/linux/uart/UartComIF.h"
|
||||
#include "fsfw/hal/linux/uart/UartCookie.h"
|
||||
#include "fsfw/hal/devicehandlers/GyroL3GD20Handler.h"
|
||||
#include "fsfw/hal/linux/i2c/I2cCookie.h"
|
||||
#include "fsfw/hal/linux/i2c/I2cComIF.h"
|
||||
#include "fsfw/hal/linux/spi/SpiCookie.h"
|
||||
#include "fsfw/hal/linux/spi/SpiComIF.h"
|
||||
#include "fsfw/hal/linux/gpio/LinuxLibgpioIF.h"
|
||||
#include "fsfw/hal/common/gpio/GpioCookie.h"
|
||||
#include "fsfw_hal/linux/uart/UartComIF.h"
|
||||
#include "fsfw_hal/linux/uart/UartCookie.h"
|
||||
#include "fsfw_hal/devicehandlers/GyroL3GD20Handler.h"
|
||||
#include "fsfw_hal/linux/i2c/I2cCookie.h"
|
||||
#include "fsfw_hal/linux/i2c/I2cComIF.h"
|
||||
#include "fsfw_hal/linux/spi/SpiCookie.h"
|
||||
#include "fsfw_hal/linux/spi/SpiComIF.h"
|
||||
#include "fsfw_hal/linux/gpio/LinuxLibgpioIF.h"
|
||||
#include "fsfw_hal/common/gpio/GpioCookie.h"
|
||||
|
||||
#include "fsfw/datapoollocal/LocalDataPoolManager.h"
|
||||
#include "fsfw/tmtcservices/CommandingServiceBase.h"
|
||||
#include "fsfw/tmtcservices/PusServiceBase.h"
|
||||
#include "fsfw/tmtcpacket/pus/tm.h"
|
||||
|
||||
/* UDP server includes */
|
||||
#if OBSW_USE_TMTC_TCP_BRIDGE == 0
|
||||
// UDP server includes
|
||||
#include "fsfw/osal/common/UdpTmTcBridge.h"
|
||||
#include "fsfw/osal/common/UdpTcPollingTask.h"
|
||||
#else
|
||||
// TCP server includes
|
||||
#include "fsfw/osal/common/TcpTmTcBridge.h"
|
||||
#include "fsfw/osal/common/TcpTmTcServer.h"
|
||||
#endif
|
||||
|
||||
#include "linux/boardtest/SpiTestClass.h"
|
||||
|
||||
#if TEST_LIBGPIOD == 1
|
||||
@ -83,7 +91,7 @@ void Factory::setStaticFrameworkObjectIds() {
|
||||
CommandingServiceBase::defaultPacketSource = objects::PUS_PACKET_DISTRIBUTOR;
|
||||
CommandingServiceBase::defaultPacketDestination = objects::TM_FUNNEL;
|
||||
|
||||
TmFunnel::downlinkDestination = objects::UDP_BRIDGE;
|
||||
TmFunnel::downlinkDestination = objects::TMTC_BRIDGE;
|
||||
// No storage object for now.
|
||||
TmFunnel::storageDestination = objects::NO_OBJECT;
|
||||
|
||||
@ -131,8 +139,13 @@ void ObjectFactory::produce(void* args){
|
||||
createReactionWheelComponents(gpioComIF);
|
||||
#endif /* TE7020 != 0 */
|
||||
|
||||
new UdpTmTcBridge(objects::UDP_BRIDGE, objects::CCSDS_PACKET_DISTRIBUTOR);
|
||||
new UdpTcPollingTask(objects::UDP_POLLING_TASK, objects::UDP_BRIDGE);
|
||||
#if OBSW_USE_TMTC_TCP_BRIDGE == 0
|
||||
new UdpTmTcBridge(objects::TMTC_BRIDGE, objects::CCSDS_PACKET_DISTRIBUTOR);
|
||||
new UdpTcPollingTask(objects::TMTC_POLLING_TASK, objects::TMTC_BRIDGE);
|
||||
#else
|
||||
new TcpTmTcBridge(objects::TMTC_BRIDGE, objects::CCSDS_PACKET_DISTRIBUTOR);
|
||||
new TcpTmTcServer(objects::TMTC_POLLING_TASK, objects::TMTC_BRIDGE);
|
||||
#endif
|
||||
|
||||
/* Test Task */
|
||||
#if OBSW_ADD_TEST_CODE == 1
|
||||
@ -158,13 +171,15 @@ void ObjectFactory::produce(void* args){
|
||||
/* Configuration for MIO0 on TE0720-03-1CFA */
|
||||
UartCookie* plocSupervisorCookie = new UartCookie(objects::PLOC_SUPERVISOR_HANDLER,
|
||||
std::string("/dev/ttyUL3"), UartModes::NON_CANONICAL, 115200,
|
||||
PLOC_SPV::MAX_REPLY_SIZE);
|
||||
PLOC_SPV::MAX_PACKET_SIZE * 20);
|
||||
plocSupervisorCookie->setNoFixedSizeReply();
|
||||
PlocSupervisorHandler* plocSupervisor = new PlocSupervisorHandler(
|
||||
objects::PLOC_SUPERVISOR_HANDLER, objects::UART_COM_IF, plocSupervisorCookie);
|
||||
plocSupervisor->setStartUpImmediately();
|
||||
|
||||
#endif
|
||||
|
||||
new PlocUpdater(objects::PLOC_UPDATER);
|
||||
}
|
||||
|
||||
void ObjectFactory::createTmpComponents() {
|
||||
@ -790,7 +805,7 @@ void ObjectFactory::createTestComponents() {
|
||||
radSensor->setStartUpImmediately();
|
||||
#endif
|
||||
|
||||
#if BOARD_TE0720 == 1 && TEST_PLOC_HANDLER == 1
|
||||
#if BOARD_TE0720 == 1 && ADD_PLOC_MPSOC == 1
|
||||
UartCookie* plocUartCookie = new UartCookie(std::string("/dev/ttyPS1"), 115200,
|
||||
PLOC_MPSOC::MAX_REPLY_SIZE);
|
||||
/* Testing PlocMPSoCHandler on TE0720-03-1CFA */
|
||||
@ -808,7 +823,7 @@ void ObjectFactory::createTestComponents() {
|
||||
pcduSwitches::TCS_BOARD_8V_HEATER_IN);
|
||||
#endif
|
||||
|
||||
#if TE0720 == 1 && ADD_PLOC_SUPERVISOR == 1
|
||||
#if BOARD_TE0720 == 1 && ADD_PLOC_SUPERVISOR == 1
|
||||
/* Configuration for MIO0 on TE0720-03-1CFA */
|
||||
UartCookie* plocSupervisorCookie = new UartCookie(objects::PLOC_SUPERVISOR_HANDLER,
|
||||
std::string("/dev/ttyPS1"), UartModes::NON_CANONICAL, 115200,
|
||||
|
@ -2,11 +2,15 @@
|
||||
#include "OBSWVersion.h"
|
||||
#include "OBSWConfig.h"
|
||||
#include "InitMission.h"
|
||||
#include "watchdogConf.h"
|
||||
|
||||
#include "fsfw/tasks/TaskFactory.h"
|
||||
#include "fsfw/FSFWVersion.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <filesystem>
|
||||
|
||||
static int OBSW_ALREADY_RUNNING = -2;
|
||||
|
||||
int obsw::obsw() {
|
||||
std::cout << "-- EIVE OBSW --" << std::endl;
|
||||
@ -15,11 +19,20 @@ int obsw::obsw() {
|
||||
#else
|
||||
std::cout << "-- Compiled for Linux (TE0720) --" << std::endl;
|
||||
#endif
|
||||
std::cout << "-- OBSW " << SW_NAME << " v" << SW_VERSION << "." << SW_SUBVERSION <<
|
||||
std::cout << "-- OBSW v" << SW_VERSION << "." << SW_SUBVERSION <<
|
||||
"." << SW_REVISION << ", FSFW v" << FSFW_VERSION << "." << FSFW_SUBVERSION << "." <<
|
||||
FSFW_REVISION << "--" << 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();
|
||||
|
||||
for(;;) {
|
||||
|
@ -1,8 +1,8 @@
|
||||
#include "gpioCallbacks.h"
|
||||
#include <devices/gpioIds.h>
|
||||
|
||||
#include <fsfw/hal/linux/gpio/LinuxLibgpioIF.h>
|
||||
#include <fsfw/hal/common/gpio/GpioCookie.h>
|
||||
#include <fsfw_hal/linux/gpio/LinuxLibgpioIF.h>
|
||||
#include <fsfw_hal/common/gpio/GpioCookie.h>
|
||||
#include <fsfw/serviceinterface/ServiceInterface.h>
|
||||
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
#ifndef LINUX_GPIO_GPIOCALLBACKS_H_
|
||||
#define LINUX_GPIO_GPIOCALLBACKS_H_
|
||||
|
||||
#include <fsfw/hal/common/gpio/gpioDefinitions.h>
|
||||
#include <fsfw/hal/common/gpio/GpioIF.h>
|
||||
#include <fsfw_hal/common/gpio/gpioDefinitions.h>
|
||||
#include <fsfw_hal/common/gpio/GpioIF.h>
|
||||
|
||||
|
||||
namespace gpioCallbacks {
|
||||
|
@ -41,8 +41,10 @@ void FileSystemHandler::fileSystemHandlerLoop() {
|
||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||
while(true) {
|
||||
if(opCounter % 5 == 0) {
|
||||
if(coreCtrl->sdInitFinished()) {
|
||||
fileSystemCheckup();
|
||||
}
|
||||
}
|
||||
result = mq->receiveMessage(&filemsg);
|
||||
if(result == MessageQueueIF::EMPTY) {
|
||||
break;
|
||||
@ -72,16 +74,16 @@ void FileSystemHandler::fileSystemHandlerLoop() {
|
||||
}
|
||||
|
||||
void FileSystemHandler::fileSystemCheckup() {
|
||||
SdCardManager::SdStatusPair statusPair;
|
||||
SdCardManager::SdStatePair statusPair;
|
||||
sdcMan->getSdCardActiveStatus(statusPair);
|
||||
sd::SdCard preferredSdCard;
|
||||
sdcMan->getPreferredSdCard(preferredSdCard);
|
||||
if((preferredSdCard == sd::SdCard::SLOT_0) and
|
||||
(statusPair.first == sd::SdStatus::MOUNTED)) {
|
||||
(statusPair.first == sd::SdState::MOUNTED)) {
|
||||
currentMountPrefix = SdCardManager::SD_0_MOUNT_POINT;
|
||||
}
|
||||
else if((preferredSdCard == sd::SdCard::SLOT_1) and
|
||||
(statusPair.second == sd::SdStatus::MOUNTED)) {
|
||||
(statusPair.second == sd::SdState::MOUNTED)) {
|
||||
currentMountPrefix = SdCardManager::SD_1_MOUNT_POINT;
|
||||
}
|
||||
else {
|
||||
@ -111,6 +113,11 @@ MessageQueueId_t FileSystemHandler::getCommandQueue() const {
|
||||
}
|
||||
|
||||
ReturnValue_t FileSystemHandler::initialize() {
|
||||
coreCtrl = ObjectManager::instance()->get<CoreController>(objects::CORE_CONTROLLER);
|
||||
if(coreCtrl == nullptr) {
|
||||
sif::error << "FileSystemHandler::initialize: Could not retrieve core controller handle" <<
|
||||
std::endl;
|
||||
}
|
||||
sdcMan = SdCardManager::instance();
|
||||
sd::SdCard preferredSdCard;
|
||||
ReturnValue_t result = sdcMan->getPreferredSdCard(preferredSdCard);
|
||||
|
@ -11,6 +11,8 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
class CoreController;
|
||||
|
||||
class FileSystemHandler: public SystemObject,
|
||||
public ExecutableObjectIF,
|
||||
public HasFileSystemIF {
|
||||
@ -47,6 +49,7 @@ public:
|
||||
void* args = nullptr) override;
|
||||
|
||||
private:
|
||||
CoreController* coreCtrl = nullptr;
|
||||
MessageQueueIF* mq = nullptr;
|
||||
std::string currentMountPrefix = SdCardManager::SD_0_MOUNT_POINT;
|
||||
static constexpr uint32_t FS_MAX_QUEUE_SIZE = config::OBSW_FILESYSTEM_HANDLER_QUEUE_SIZE;
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include <fsfw/osal/linux/Timer.h>
|
||||
#include "SdCardManager.h"
|
||||
#include "scratchApi.h"
|
||||
|
||||
@ -6,13 +7,16 @@
|
||||
#include "fsfw/ipc/MutexFactory.h"
|
||||
#include "fsfw/serviceinterface/ServiceInterface.h"
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <memory>
|
||||
#include <filesystem>
|
||||
#include <cstring>
|
||||
|
||||
SdCardManager* SdCardManager::factoryInstance = nullptr;
|
||||
|
||||
SdCardManager::SdCardManager() {
|
||||
SdCardManager::SdCardManager(): cmdExecutor(256) {
|
||||
}
|
||||
|
||||
SdCardManager::~SdCardManager() {
|
||||
@ -30,11 +34,19 @@ SdCardManager* SdCardManager::instance() {
|
||||
}
|
||||
|
||||
ReturnValue_t SdCardManager::switchOnSdCard(sd::SdCard sdCard, bool doMountSdCard,
|
||||
SdStatusPair* statusPair) {
|
||||
SdStatePair* statusPair) {
|
||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||
std::unique_ptr<SdStatusPair> sdStatusPtr;
|
||||
if(doMountSdCard) {
|
||||
if(not blocking) {
|
||||
sif::warning << "SdCardManager::switchOnSdCard: Two-step command but manager is"
|
||||
" not configured for blocking operation. "
|
||||
"Forcing blocking mode.." << std::endl;
|
||||
blocking = true;
|
||||
}
|
||||
}
|
||||
std::unique_ptr<SdStatePair> sdStatusPtr;
|
||||
if(statusPair == nullptr) {
|
||||
sdStatusPtr = std::make_unique<SdStatusPair>();
|
||||
sdStatusPtr = std::make_unique<SdStatePair>();
|
||||
statusPair = sdStatusPtr.get();
|
||||
result = getSdCardActiveStatus(*statusPair);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
@ -49,20 +61,19 @@ ReturnValue_t SdCardManager::switchOnSdCard(sd::SdCard sdCard, bool doMountSdCar
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
|
||||
sd::SdStatus targetStatus;
|
||||
sd::SdState currentState;
|
||||
if(sdCard == sd::SdCard::SLOT_0) {
|
||||
targetStatus = statusPair->first;
|
||||
currentState = statusPair->first;
|
||||
}
|
||||
else if(sdCard == sd::SdCard::SLOT_1) {
|
||||
targetStatus = statusPair->second;
|
||||
currentState = statusPair->second;
|
||||
}
|
||||
else {
|
||||
// Should not happen
|
||||
targetStatus = sd::SdStatus::OFF;
|
||||
currentState = sd::SdState::OFF;
|
||||
}
|
||||
|
||||
auto switchCall = [&]() {
|
||||
if(targetStatus == sd::SdStatus::ON) {
|
||||
if(currentState == sd::SdState::ON) {
|
||||
if(not doMountSdCard) {
|
||||
return ALREADY_ON;
|
||||
}
|
||||
@ -70,18 +81,15 @@ ReturnValue_t SdCardManager::switchOnSdCard(sd::SdCard sdCard, bool doMountSdCar
|
||||
return mountSdCard(sdCard);
|
||||
}
|
||||
}
|
||||
else if(targetStatus == sd::SdStatus::MOUNTED) {
|
||||
return ALREADY_MOUNTED;
|
||||
else if(currentState == sd::SdState::MOUNTED) {
|
||||
result = ALREADY_MOUNTED;
|
||||
}
|
||||
else if(targetStatus == sd::SdStatus::OFF) {
|
||||
return setSdCardState(sdCard, true);
|
||||
else if(currentState == sd::SdState::OFF) {
|
||||
result = setSdCardState(sdCard, true);
|
||||
}
|
||||
else {
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
result = HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
};
|
||||
|
||||
result = switchCall();
|
||||
|
||||
if(result != HasReturnvaluesIF::RETURN_OK or not doMountSdCard) {
|
||||
return result;
|
||||
@ -91,12 +99,19 @@ ReturnValue_t SdCardManager::switchOnSdCard(sd::SdCard sdCard, bool doMountSdCar
|
||||
}
|
||||
|
||||
ReturnValue_t SdCardManager::switchOffSdCard(sd::SdCard sdCard, bool doUnmountSdCard,
|
||||
SdStatusPair* statusPair) {
|
||||
std::pair<sd::SdStatus, sd::SdStatus> active;
|
||||
SdStatePair* statusPair) {
|
||||
std::pair<sd::SdState, sd::SdState> active;
|
||||
ReturnValue_t result = getSdCardActiveStatus(active);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {
|
||||
return result;
|
||||
}
|
||||
if(doUnmountSdCard) {
|
||||
if(not blocking) {
|
||||
sif::warning << "SdCardManager::switchOffSdCard: Two-step command but manager is"
|
||||
" not configured for blocking operation. Forcing blocking mode.." << std::endl;
|
||||
blocking = true;
|
||||
}
|
||||
}
|
||||
// Not allowed, this function turns off one SD card
|
||||
if(sdCard == sd::SdCard::BOTH) {
|
||||
sif::warning << "SdCardManager::switchOffSdCard: API does not allow sd::SdStatus::BOTH"
|
||||
@ -104,12 +119,12 @@ ReturnValue_t SdCardManager::switchOffSdCard(sd::SdCard sdCard, bool doUnmountSd
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
}
|
||||
if(sdCard == sd::SdCard::SLOT_0) {
|
||||
if(active.first == sd::SdStatus::OFF) {
|
||||
if(active.first == sd::SdState::OFF) {
|
||||
return ALREADY_OFF;
|
||||
}
|
||||
}
|
||||
else if(sdCard == sd::SdCard::SLOT_1) {
|
||||
if(active.second == sd::SdStatus::OFF) {
|
||||
if(active.second == sd::SdState::OFF) {
|
||||
return ALREADY_OFF;
|
||||
}
|
||||
}
|
||||
@ -126,6 +141,9 @@ ReturnValue_t SdCardManager::switchOffSdCard(sd::SdCard sdCard, bool doUnmountSd
|
||||
|
||||
ReturnValue_t SdCardManager::setSdCardState(sd::SdCard sdCard, bool on) {
|
||||
using namespace std;
|
||||
if(cmdExecutor.getCurrentState() == CommandExecutor::States::PENDING) {
|
||||
return CommandExecutor::COMMAND_PENDING;
|
||||
}
|
||||
string sdstring = "";
|
||||
string statestring = "";
|
||||
if(sdCard == sd::SdCard::SLOT_0) {
|
||||
@ -135,23 +153,24 @@ ReturnValue_t SdCardManager::setSdCardState(sd::SdCard sdCard, bool on) {
|
||||
sdstring = "1";
|
||||
}
|
||||
if(on) {
|
||||
currentOp = Operations::SWITCHING_ON;
|
||||
statestring = "on";
|
||||
}
|
||||
else {
|
||||
currentOp = Operations::SWITCHING_OFF;
|
||||
statestring = "off";
|
||||
}
|
||||
ostringstream command;
|
||||
command << "q7hw sd set " << sdstring << " " << statestring;
|
||||
int result = system(command.str().c_str());
|
||||
if(result == 0) {
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
cmdExecutor.load(command.str(), blocking, printCmdOutput);
|
||||
ReturnValue_t result = cmdExecutor.execute();
|
||||
if(blocking and result != HasReturnvaluesIF::RETURN_OK) {
|
||||
utility::handleSystemError(cmdExecutor.getLastError(), "SdCardManager::setSdCardState");
|
||||
}
|
||||
sif::warning << "SdCardManager::setSdCardState: system call failed with code " <<
|
||||
result << std::endl;
|
||||
return SYSTEM_CALL_ERROR;
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t SdCardManager::getSdCardActiveStatus(SdStatusPair& active) {
|
||||
ReturnValue_t SdCardManager::getSdCardActiveStatus(SdStatePair& active) {
|
||||
using namespace std;
|
||||
if(not filesystem::exists(SD_STATE_FILE)) {
|
||||
return STATUS_FILE_NEXISTS;
|
||||
@ -174,6 +193,9 @@ ReturnValue_t SdCardManager::getSdCardActiveStatus(SdStatusPair& active) {
|
||||
|
||||
ReturnValue_t SdCardManager::mountSdCard(sd::SdCard sdCard) {
|
||||
using namespace std;
|
||||
if(cmdExecutor.getCurrentState() == CommandExecutor::States::PENDING) {
|
||||
return CommandExecutor::COMMAND_PENDING;
|
||||
}
|
||||
if(sdCard == sd::SdCard::BOTH) {
|
||||
sif::warning << "SdCardManager::mountSdCard: API does not allow sd::SdStatus::BOTH"
|
||||
<< std::endl;
|
||||
@ -195,16 +217,22 @@ ReturnValue_t SdCardManager::mountSdCard(sd::SdCard sdCard) {
|
||||
return MOUNT_ERROR;
|
||||
}
|
||||
|
||||
string sdMountCommand = "mount " + mountDev + " " + mountPoint;
|
||||
int result = system(sdMountCommand.c_str());
|
||||
if (result != 0) {
|
||||
utility::handleSystemError(result, "SdCardManager::mountSdCard");
|
||||
return SYSTEM_CALL_ERROR;
|
||||
if(not blocking) {
|
||||
currentOp = Operations::MOUNTING;
|
||||
}
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
string sdMountCommand = "mount " + mountDev + " " + mountPoint;
|
||||
cmdExecutor.load(sdMountCommand, blocking, printCmdOutput);
|
||||
ReturnValue_t result = cmdExecutor.execute();
|
||||
if(blocking and result != HasReturnvaluesIF::RETURN_OK) {
|
||||
utility::handleSystemError(cmdExecutor.getLastError(), "SdCardManager::mountSdCard");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t SdCardManager::unmountSdCard(sd::SdCard sdCard) {
|
||||
if(cmdExecutor.getCurrentState() == CommandExecutor::States::PENDING) {
|
||||
return CommandExecutor::COMMAND_PENDING;
|
||||
}
|
||||
using namespace std;
|
||||
if(sdCard == sd::SdCard::BOTH) {
|
||||
sif::warning << "SdCardManager::unmountSdCard: API does not allow sd::SdStatus::BOTH"
|
||||
@ -229,34 +257,53 @@ ReturnValue_t SdCardManager::unmountSdCard(sd::SdCard sdCard) {
|
||||
sif::warning << "SdCardManager::unmountSdCard: Mount point is empty!" << std::endl;
|
||||
}
|
||||
string sdUnmountCommand = "umount " + mountPoint;
|
||||
int result = system(sdUnmountCommand.c_str());
|
||||
if (result != 0) {
|
||||
utility::handleSystemError(result, "SdCardManager::unmountSdCard");
|
||||
return SYSTEM_CALL_ERROR;
|
||||
if(not blocking) {
|
||||
currentOp = Operations::UNMOUNTING;
|
||||
}
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
cmdExecutor.load(sdUnmountCommand, blocking, printCmdOutput);
|
||||
ReturnValue_t result = cmdExecutor.execute();
|
||||
if(blocking and result != HasReturnvaluesIF::RETURN_OK) {
|
||||
utility::handleSystemError(cmdExecutor.getLastError(), "SdCardManager::unmountSdCard");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
ReturnValue_t SdCardManager::sanitizeState(SdStatusPair* statusPair, sd::SdCard prefSdCard) {
|
||||
std::unique_ptr<SdStatusPair> sdStatusPtr;
|
||||
ReturnValue_t SdCardManager::sanitizeState(SdStatePair* statusPair, sd::SdCard prefSdCard) {
|
||||
std::unique_ptr<SdStatePair> sdStatusPtr;
|
||||
ReturnValue_t result = HasReturnvaluesIF::RETURN_OK;
|
||||
// Enforce blocking operation for now. Be careful to reset it when returning prematurely!
|
||||
bool resetNonBlockingState = false;
|
||||
if(not this->blocking) {
|
||||
blocking = true;
|
||||
resetNonBlockingState = true;
|
||||
}
|
||||
if(prefSdCard == sd::SdCard::NONE) {
|
||||
ReturnValue_t result = getPreferredSdCard(prefSdCard);
|
||||
result = getPreferredSdCard(prefSdCard);
|
||||
if(result != HasReturnvaluesIF::RETURN_OK) {}
|
||||
}
|
||||
if(statusPair == nullptr) {
|
||||
sdStatusPtr = std::make_unique<SdStatusPair>();
|
||||
sdStatusPtr = std::make_unique<SdStatePair>();
|
||||
statusPair = sdStatusPtr.get();
|
||||
getSdCardActiveStatus(*statusPair);
|
||||
}
|
||||
|
||||
if(statusPair->first == sd::SdStatus::ON) {
|
||||
return mountSdCard(prefSdCard);
|
||||
if(statusPair->first == sd::SdState::ON) {
|
||||
result = mountSdCard(prefSdCard);
|
||||
}
|
||||
|
||||
return switchOnSdCard(prefSdCard, true, statusPair);
|
||||
result = switchOnSdCard(prefSdCard, true, statusPair);
|
||||
if(resetNonBlockingState) {
|
||||
blocking = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void SdCardManager::processSdStatusLine(std::pair<sd::SdStatus, sd::SdStatus> &active,
|
||||
void SdCardManager::resetState() {
|
||||
cmdExecutor.reset();
|
||||
currentOp = Operations::IDLE;
|
||||
}
|
||||
|
||||
void SdCardManager::processSdStatusLine(std::pair<sd::SdState, sd::SdState> &active,
|
||||
std::string& line, uint8_t& idx, sd::SdCard& currentSd) {
|
||||
using namespace std;
|
||||
istringstream iss(line);
|
||||
@ -278,28 +325,28 @@ void SdCardManager::processSdStatusLine(std::pair<sd::SdStatus, sd::SdStatus> &a
|
||||
|
||||
if(word == "on") {
|
||||
if(currentSd == sd::SdCard::SLOT_0) {
|
||||
active.first = sd::SdStatus::ON;
|
||||
active.first = sd::SdState::ON;
|
||||
}
|
||||
else {
|
||||
active.second = sd::SdStatus::ON;
|
||||
active.second = sd::SdState::ON;
|
||||
}
|
||||
}
|
||||
else if (word == "off") {
|
||||
if(currentSd == sd::SdCard::SLOT_0) {
|
||||
active.first = sd::SdStatus::OFF;
|
||||
active.first = sd::SdState::OFF;
|
||||
}
|
||||
else {
|
||||
active.second = sd::SdStatus::OFF;
|
||||
active.second = sd::SdState::OFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(mountLine) {
|
||||
if(currentSd == sd::SdCard::SLOT_0) {
|
||||
active.first = sd::SdStatus::MOUNTED;
|
||||
active.first = sd::SdState::MOUNTED;
|
||||
}
|
||||
else {
|
||||
active.second = sd::SdStatus::MOUNTED;
|
||||
active.second = sd::SdState::MOUNTED;
|
||||
}
|
||||
}
|
||||
|
||||
@ -329,15 +376,17 @@ ReturnValue_t SdCardManager::setPreferredSdCard(sd::SdCard sdCard) {
|
||||
}
|
||||
|
||||
ReturnValue_t SdCardManager::updateSdCardStateFile() {
|
||||
if(cmdExecutor.getCurrentState() == CommandExecutor::States::PENDING) {
|
||||
return CommandExecutor::COMMAND_PENDING;
|
||||
}
|
||||
// Use q7hw utility and pipe the command output into the state file
|
||||
std::string updateCmd = "q7hw sd info all > " + std::string(SD_STATE_FILE);
|
||||
int result = std::system(updateCmd.c_str());
|
||||
if(result == 0) {
|
||||
return HasReturnvaluesIF::RETURN_OK;
|
||||
cmdExecutor.load(updateCmd, blocking, printCmdOutput);
|
||||
ReturnValue_t result = cmdExecutor.execute();
|
||||
if(blocking and result != HasReturnvaluesIF::RETURN_OK) {
|
||||
utility::handleSystemError(cmdExecutor.getLastError(), "SdCardManager::mountSdCard");
|
||||
}
|
||||
sif::warning << "SdCardManager::updateSdCardStateFile: system call failed with code " <<
|
||||
result << std::endl;
|
||||
return HasReturnvaluesIF::RETURN_FAILED;
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string SdCardManager::getCurrentMountPrefix(sd::SdCard prefSdCard) {
|
||||
@ -354,3 +403,56 @@ std::string SdCardManager::getCurrentMountPrefix(sd::SdCard prefSdCard) {
|
||||
return SD_1_MOUNT_POINT;
|
||||
}
|
||||
}
|
||||
|
||||
SdCardManager::OpStatus SdCardManager::checkCurrentOp(Operations ¤tOp) {
|
||||
CommandExecutor::States state = cmdExecutor.getCurrentState();
|
||||
if(state == CommandExecutor::States::IDLE or state == CommandExecutor::States::COMMAND_LOADED) {
|
||||
return OpStatus::IDLE;
|
||||
}
|
||||
currentOp = this->currentOp;
|
||||
bool bytesRead = false;
|
||||
|
||||
#if OBSW_ENABLE_TIMERS == 1
|
||||
Timer timer;
|
||||
timer.setTimer(100);
|
||||
uint32_t remainingTimeMs = 0;
|
||||
#endif
|
||||
while(true) {
|
||||
ReturnValue_t result = cmdExecutor.check(bytesRead);
|
||||
// This timer can prevent deadlocks due to missconfigurations
|
||||
#if OBSW_ENABLE_TIMERS == 1
|
||||
timer.getTimer(&remainingTimeMs);
|
||||
if(remainingTimeMs == 0) {
|
||||
sif::error << "SdCardManager::checkCurrentOp: Timeout!" << std::endl;
|
||||
return OpStatus::FAIL;
|
||||
}
|
||||
#endif
|
||||
switch(result) {
|
||||
case(CommandExecutor::BYTES_READ): {
|
||||
continue;
|
||||
}
|
||||
case(CommandExecutor::EXECUTION_FINISHED): {
|
||||
return OpStatus::SUCCESS;
|
||||
}
|
||||
case(HasReturnvaluesIF::RETURN_OK): {
|
||||
return OpStatus::ONGOING;
|
||||
}
|
||||
case(HasReturnvaluesIF::RETURN_FAILED): {
|
||||
return OpStatus::FAIL;
|
||||
}
|
||||
default: {
|
||||
sif::warning << "SdCardManager::checkCurrentOp: Unhandled case" << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void SdCardManager::setBlocking(bool blocking) {
|
||||
this->blocking = blocking;
|
||||
}
|
||||
|
||||
void SdCardManager::setPrintCommandOutput(bool print) {
|
||||
this->printCmdOutput = print;
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
#ifndef BSP_Q7S_MEMORY_SDCARDACCESSMANAGER_H_
|
||||
#define BSP_Q7S_MEMORY_SDCARDACCESSMANAGER_H_
|
||||
|
||||
#include <fsfw/osal/linux/CommandExecutor.h>
|
||||
#include "definitions.h"
|
||||
#include "returnvalues/classIds.h"
|
||||
#include "events/subsystemIdRanges.h"
|
||||
@ -8,10 +9,13 @@
|
||||
#include "fsfw/events/Event.h"
|
||||
#include "fsfw/returnvalues/HasReturnvaluesIF.h"
|
||||
|
||||
#include <poll.h>
|
||||
|
||||
#include <cstdint>
|
||||
#include <utility>
|
||||
#include <string>
|
||||
#include <optional>
|
||||
#include <array>
|
||||
|
||||
class MutexIF;
|
||||
|
||||
@ -22,16 +26,34 @@ class MutexIF;
|
||||
class SdCardManager {
|
||||
friend class SdCardAccess;
|
||||
public:
|
||||
using SdStatusPair = std::pair<sd::SdStatus, sd::SdStatus>;
|
||||
enum class Operations {
|
||||
SWITCHING_ON,
|
||||
SWITCHING_OFF,
|
||||
MOUNTING,
|
||||
UNMOUNTING,
|
||||
IDLE
|
||||
};
|
||||
|
||||
enum class OpStatus {
|
||||
IDLE,
|
||||
TIMEOUT,
|
||||
ONGOING,
|
||||
SUCCESS,
|
||||
FAIL
|
||||
};
|
||||
|
||||
using SdStatePair = std::pair<sd::SdState, sd::SdState>;
|
||||
|
||||
static constexpr uint8_t INTERFACE_ID = CLASS_ID::SD_CARD_MANAGER;
|
||||
|
||||
static constexpr ReturnValue_t ALREADY_ON =
|
||||
static constexpr ReturnValue_t OP_ONGOING =
|
||||
HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 0);
|
||||
static constexpr ReturnValue_t ALREADY_MOUNTED =
|
||||
static constexpr ReturnValue_t ALREADY_ON =
|
||||
HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 1);
|
||||
static constexpr ReturnValue_t ALREADY_OFF =
|
||||
static constexpr ReturnValue_t ALREADY_MOUNTED =
|
||||
HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 2);
|
||||
static constexpr ReturnValue_t ALREADY_OFF =
|
||||
HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 3);
|
||||
static constexpr ReturnValue_t STATUS_FILE_NEXISTS =
|
||||
HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 10);
|
||||
static constexpr ReturnValue_t STATUS_FILE_FORMAT_INVALID =
|
||||
@ -42,6 +64,8 @@ public:
|
||||
HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 13);
|
||||
static constexpr ReturnValue_t SYSTEM_CALL_ERROR =
|
||||
HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 14);
|
||||
static constexpr ReturnValue_t POPEN_CALL_ERROR =
|
||||
HasReturnvaluesIF::makeReturnCode(INTERFACE_ID, 15);
|
||||
|
||||
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::FILE_SYSTEM;
|
||||
|
||||
@ -90,7 +114,7 @@ public:
|
||||
* SYSTEM_CALL_ERROR on system error
|
||||
*/
|
||||
ReturnValue_t switchOnSdCard(sd::SdCard sdCard, bool doMountSdCard = true,
|
||||
SdStatusPair* statusPair = nullptr);
|
||||
SdStatePair* statusPair = nullptr);
|
||||
|
||||
/**
|
||||
* Switch off the specified SD card.
|
||||
@ -102,13 +126,15 @@ public:
|
||||
* SYSTEM_CALL_ERROR on system error
|
||||
*/
|
||||
ReturnValue_t switchOffSdCard(sd::SdCard sdCard, bool doUnmountSdCard = true,
|
||||
SdStatusPair* statusPair = nullptr);
|
||||
SdStatePair* statusPair = nullptr);
|
||||
|
||||
/**
|
||||
* Update the state file or creates one if it does not exist. You need to call this
|
||||
* function before calling #sdCardActive
|
||||
* @return - RETURN_OK if the state file was updated successfully
|
||||
* - SYSTEM_CALL_ERROR if the call to create the status file failed
|
||||
* @return
|
||||
* - RETURN_OK if the state file was updated successfully
|
||||
* - CommandExecutor::COMMAND_PENDING: Non-blocking command is pending
|
||||
* - RETURN_FAILED: blocking command failed
|
||||
*/
|
||||
ReturnValue_t updateSdCardStateFile();
|
||||
|
||||
@ -123,7 +149,7 @@ public:
|
||||
* should call #updateSdCardStateFile again in that case
|
||||
* - STATUS_FILE_NEXISTS if the status file does not exist
|
||||
*/
|
||||
ReturnValue_t getSdCardActiveStatus(SdStatusPair& active);
|
||||
ReturnValue_t getSdCardActiveStatus(SdStatePair& active);
|
||||
|
||||
/**
|
||||
* Mount the specified SD card. This is necessary to use it.
|
||||
@ -143,28 +169,43 @@ public:
|
||||
* In case that there is a discrepancy between the preferred SD card and the currently
|
||||
* mounted one, this function will sanitize the state by attempting to mount the
|
||||
* currently preferred SD card. If the caller already has state information, it can be
|
||||
* passed into the function.
|
||||
* passed into the function. For now, this operation will be enforced in blocking mode.
|
||||
* @param statusPair Current SD card status capture with #getSdCardActiveStatus
|
||||
* @param prefSdCard Preferred SD card captured with #getPreferredSdCard
|
||||
* @throws std::bad_alloc if one of the two arguments was a nullptr and an allocation failed
|
||||
* @return
|
||||
*/
|
||||
ReturnValue_t sanitizeState(SdStatusPair* statusPair = nullptr,
|
||||
ReturnValue_t sanitizeState(SdStatePair* statusPair = nullptr,
|
||||
sd::SdCard prefSdCard = sd::SdCard::NONE);
|
||||
|
||||
/**
|
||||
* If sd::SdCard::NONE is passed as an argument, this funtion will get the currently
|
||||
* If sd::SdCard::NONE is passed as an argument, this function will get the currently
|
||||
* preferred SD card from the scratch buffer.
|
||||
* @param prefSdCardPtr
|
||||
* @return
|
||||
*/
|
||||
std::string getCurrentMountPrefix(sd::SdCard prefSdCardPtr = sd::SdCard::NONE);
|
||||
|
||||
OpStatus checkCurrentOp(Operations& currentOp);
|
||||
|
||||
/**
|
||||
* If there are issues with the state machine, it can be reset with this function
|
||||
*/
|
||||
void resetState();
|
||||
|
||||
void setBlocking(bool blocking);
|
||||
void setPrintCommandOutput(bool print);
|
||||
private:
|
||||
CommandExecutor cmdExecutor;
|
||||
Operations currentOp = Operations::IDLE;
|
||||
bool blocking = false;
|
||||
bool printCmdOutput = true;
|
||||
|
||||
SdCardManager();
|
||||
|
||||
ReturnValue_t setSdCardState(sd::SdCard sdCard, bool on);
|
||||
|
||||
void processSdStatusLine(SdStatusPair& active, std::string& line, uint8_t& idx,
|
||||
void processSdStatusLine(SdStatePair& active, std::string& line, uint8_t& idx,
|
||||
sd::SdCard& currentSd);
|
||||
|
||||
std::string currentPrefix;
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
namespace sd {
|
||||
|
||||
enum SdStatus: uint8_t {
|
||||
enum SdState: uint8_t {
|
||||
OFF = 0,
|
||||
ON = 1,
|
||||
// A mounted SD card is on as well
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef BSP_Q7S_SPI_Q7SSPICOMIF_H_
|
||||
#define BSP_Q7S_SPI_Q7SSPICOMIF_H_
|
||||
|
||||
#include <fsfw/hal/linux/spi/SpiComIF.h>
|
||||
#include <fsfw_hal/linux/spi/SpiComIF.h>
|
||||
|
||||
|
||||
/**
|
||||
|
@ -1,8 +1,8 @@
|
||||
#include <bsp_q7s/spiCallbacks/rwSpiCallback.h>
|
||||
#include <fsfw/serviceinterface/ServiceInterface.h>
|
||||
#include <mission/devices/RwHandler.h>
|
||||
#include <fsfw/hal/linux/spi/SpiCookie.h>
|
||||
#include <fsfw/hal/linux/UnixFileGuard.h>
|
||||
#include <fsfw_hal/linux/spi/SpiCookie.h>
|
||||
#include <fsfw_hal/linux/UnixFileGuard.h>
|
||||
#include "devices/gpioIds.h"
|
||||
|
||||
namespace rwSpiCallback {
|
||||
|
@ -2,8 +2,8 @@
|
||||
#define BSP_Q7S_RW_SPI_CALLBACK_H_
|
||||
|
||||
#include <fsfw/returnvalues/HasReturnvaluesIF.h>
|
||||
#include <fsfw/hal/linux/spi/SpiComIF.h>
|
||||
#include <fsfw/hal/common/gpio/GpioCookie.h>
|
||||
#include <fsfw_hal/linux/spi/SpiComIF.h>
|
||||
#include <fsfw_hal/common/gpio/GpioCookie.h>
|
||||
|
||||
|
||||
namespace rwSpiCallback {
|
||||
|
@ -54,6 +54,7 @@ set(CMAKE_SYSTEM_PROCESSOR "armv7")
|
||||
set(CMAKE_C_COMPILER ${CROSS_COMPILE_CC})
|
||||
set(CMAKE_CXX_COMPILER ${CROSS_COMPILE_CXX})
|
||||
|
||||
if(EIVE_SYSROOT_MAGIC)
|
||||
# List of library dirs where LD has to look. Pass them directly through gcc.
|
||||
set(LIB_DIRS
|
||||
"${SYSROOT_PATH}/usr/include"
|
||||
@ -69,6 +70,7 @@ set(COMMON_FLAGS "-I${SYSROOT_PATH}/usr/lib")
|
||||
foreach(LIB ${LIB_DIRS})
|
||||
set(COMMON_FLAGS "${COMMON_FLAGS} -L${LIB} -Wl,-rpath-link,${LIB}")
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
set(CMAKE_PREFIX_PATH
|
||||
"${CMAKE_PREFIX_PATH}"
|
||||
|
@ -1,30 +0,0 @@
|
||||
#!/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/beagleboneblack"
|
||||
build_generator=""
|
||||
builddir="build-Debug-BBB"
|
||||
defines="LINUX_CROSS_COMPILE=OFF"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
python3 cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${builddir}" -d "${defines}"
|
@ -1,30 +0,0 @@
|
||||
#!/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/beagleboneblack"
|
||||
build_generator=""
|
||||
builddir="build-Debug-BBB"
|
||||
defines="LINUX_CROSS_COMPILE=ON"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
python3 cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${builddir}" -d "${defines}"
|
@ -1,30 +0,0 @@
|
||||
#!/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/beagleboneblack"
|
||||
build_generator=""
|
||||
builddir="build-Release-BBB"
|
||||
defines="LINUX_CROSS_COMPILE=ON"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
python3 cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${builddir}" -d "${defines}"
|
@ -1,30 +0,0 @@
|
||||
#!/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/beagleboneblack"
|
||||
build_generator=""
|
||||
builddir="build-Release-BBB"
|
||||
defines="LINUX_CROSS_COMPILE=ON"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
python3 cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${builddir}" -d "${defines}"
|
35
cmake/scripts/BeagleBoneBlack/crosscompile/make-debug-cfg.sh
Executable file
35
cmake/scripts/BeagleBoneBlack/crosscompile/make-debug-cfg.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/beagleboneblack"
|
||||
build_generator=""
|
||||
builddir="build-Debug-BBB"
|
||||
defines="LINUX_CROSS_COMPILE=ON"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${builddir}" -d "${defines}"
|
||||
# Use this if commands are added which should not be printed
|
||||
# set +x
|
35
cmake/scripts/BeagleBoneBlack/crosscompile/make-release-cfg.sh
Executable file
35
cmake/scripts/BeagleBoneBlack/crosscompile/make-release-cfg.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/beagleboneblack"
|
||||
build_generator=""
|
||||
builddir="build-Release-BBB"
|
||||
defines="LINUX_CROSS_COMPILE=ON"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${builddir}" -d "${defines}"
|
||||
# Use this if commands are added which should not be printed
|
||||
# set +x
|
35
cmake/scripts/BeagleBoneBlack/make-debug-cfg.sh
Executable file
35
cmake/scripts/BeagleBoneBlack/make-debug-cfg.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/beagleboneblack"
|
||||
build_generator=""
|
||||
builddir="build-Debug-BBB"
|
||||
defines="LINUX_CROSS_COMPILE=OFF"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${builddir}" -d "${defines}"
|
||||
# Use this if commands are added which should not be printed
|
||||
# set +x
|
@ -1,27 +0,0 @@
|
||||
#!/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 "create_cmake_cfg.sh not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="host"
|
||||
build_dir="Release-Host"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
python3 cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "release" -l"${build_dir}"
|
@ -1,26 +0,0 @@
|
||||
#!/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 "create_cmake_cfg.sh not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="host"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
python3 cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "reldeb"
|
@ -1,26 +0,0 @@
|
||||
#!/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 "create_cmake_cfg.sh not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
os_fsfw="host"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
python3 cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "size"
|
32
cmake/scripts/Host/make-debug-cfg.sh
Executable file
32
cmake/scripts/Host/make-debug-cfg.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator="Unix Makefiles"
|
||||
os_fsfw="host"
|
||||
builddir="build-Debug-Host"
|
||||
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} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
# Use this if commands are added which should not be printed
|
||||
# set +x
|
32
cmake/scripts/Host/make-release-cfg.sh
Executable file
32
cmake/scripts/Host/make-release-cfg.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator="Unix Makefiles"
|
||||
os_fsfw="host"
|
||||
builddir="build-Release-Host"
|
||||
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} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "release" -l "${builddir}"
|
||||
# Use this if commands are added which should not be printed
|
||||
# set +x
|
@ -1,27 +0,0 @@
|
||||
#!/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 "create_cmake_cfg.sh not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator=""
|
||||
build_dir="build-Debug-Host"
|
||||
os_fsfw="host"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
python3 cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l"${build_dir}"
|
32
cmake/scripts/Host/ninja-debug-cfg.sh
Executable file
32
cmake/scripts/Host/ninja-debug-cfg.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_generator="Ninja"
|
||||
os_fsfw="host"
|
||||
builddir="build-Debug-Host"
|
||||
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} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
# Use this if commands are added which should not be printed
|
||||
# set +x
|
@ -1,16 +1,17 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "create_cmake_cfg.sh not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -26,7 +27,6 @@ fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
# Use this if commands are added which should not be printed
|
||||
# set +x
|
||||
|
@ -1,16 +1,17 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "create_cmake_cfg.sh not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -26,6 +27,6 @@ fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "release" -l "${builddir}"
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "release" -l "${builddir}"
|
||||
# Use this if commands are added which should not be printed
|
||||
# set +x
|
@ -1,16 +1,17 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "create_cmake_cfg.sh not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -26,7 +27,7 @@ fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -l "${builddir}"
|
||||
# Use this if commands are added which should not be printed
|
||||
# set +x
|
||||
|
36
cmake/scripts/Q7S/make-debug-cfg.sh
Executable file
36
cmake/scripts/Q7S/make-debug-cfg.sh
Executable file
@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/q7s"
|
||||
build_dir="build-Debug-Q7S"
|
||||
build_generator=""
|
||||
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} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l"${build_dir}"
|
||||
# set +x
|
||||
|
@ -1,16 +1,17 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "cmake_build_config.py not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -29,6 +30,6 @@ 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}" \
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l"${build_dir}"
|
||||
# set +x
|
@ -1,16 +1,17 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "cmake_build_config.py not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -27,7 +28,7 @@ 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}" \
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${build_dir}"
|
||||
# set +x
|
||||
|
@ -1,16 +1,17 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "cmake_build_config.py not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -27,7 +28,7 @@ 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}" \
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "release" -t "${tgt_bsp}" \
|
||||
-l"${build_dir}"
|
||||
# set +x
|
||||
|
@ -1,16 +1,17 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "cmake_build_config.py not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -18,7 +19,7 @@ os_fsfw="linux"
|
||||
tgt_bsp="arm/q7s"
|
||||
build_dir="build-Simple-Q7S"
|
||||
build_generator=""
|
||||
definitions="Q7S_SIMPLE_MODE=On"
|
||||
definitions="BUILD_Q7S_SIMPLE_MODE=On"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
python="py"
|
||||
@ -30,6 +31,6 @@ 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}" \
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${build_dir}" -d "${definitions}"
|
||||
# set +x
|
@ -1,16 +1,17 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "cmake_build_config.py not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -18,7 +19,7 @@ os_fsfw="linux"
|
||||
tgt_bsp="arm/q7s"
|
||||
build_dir="build-Simple-Q7S"
|
||||
build_generator="Ninja"
|
||||
definitions="Q7S_SIMPLE_MODE=On"
|
||||
definitions="BUILD_Q7S_SIMPLE_MODE=On"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
python="py"
|
||||
# Could be other OS but this works for now.
|
||||
@ -28,7 +29,7 @@ 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}" \
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l "${build_dir}" -d "${definitions}"
|
||||
# set +x
|
||||
|
37
cmake/scripts/Q7S/watchdog/make-debug-cfg.sh
Executable file
37
cmake/scripts/Q7S/watchdog/make-debug-cfg.sh
Executable file
@ -0,0 +1,37 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/q7s"
|
||||
build_dir="build-Debug-Watchdog"
|
||||
build_generator=""
|
||||
definitions="EIVE_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} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-d "${definitions}" -l"${build_dir}"
|
||||
# set +x
|
||||
|
@ -16,8 +16,9 @@ fi
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/q7s"
|
||||
build_dir="build-Debug-Q7S"
|
||||
build_dir="build-Release-Watchdog"
|
||||
build_generator=""
|
||||
definitions="EIVE_BUILD_WATCHDOG=ON"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
python="py"
|
||||
@ -29,7 +30,7 @@ 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}" \
|
||||
-l"${build_dir}"
|
||||
${python} cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "release" -t "${tgt_bsp}" \
|
||||
-d "${definitions} -l"${build_dir}"
|
||||
# set +x
|
||||
|
35
cmake/scripts/Q7S/watchdog/ninja-debug-cfg.sh
Executable file
35
cmake/scripts/Q7S/watchdog/ninja-debug-cfg.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/q7s"
|
||||
build_dir="build-Debug-Watchdog"
|
||||
build_generator="Ninja"
|
||||
definitions="EIVE_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} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-d "${definitions}" -l "${build_dir}"
|
||||
# set +x
|
||||
|
35
cmake/scripts/Q7S/watchdog/ninja-release-cfg.sh
Executable file
35
cmake/scripts/Q7S/watchdog/ninja-release-cfg.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/q7s"
|
||||
build_dir="build-Release-Watchdog"
|
||||
build_generator="Ninja"
|
||||
definitions="EIVE_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} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "release" -t "${tgt_bsp}" \
|
||||
-d "${definitions}" -l"${build_dir}"
|
||||
# set +x
|
||||
|
@ -1,19 +1,21 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "cmake_build_config.py not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/raspberrypi"
|
||||
build_generator=""
|
||||
@ -29,7 +31,6 @@ 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}" \
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l"${build_dir}"
|
||||
# set +x
|
||||
|
33
cmake/scripts/RPi/make-release-cfg.sh
Executable file
33
cmake/scripts/RPi/make-release-cfg.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
os_fsfw="linux"
|
||||
tgt_bsp="arm/raspberrypi"
|
||||
build_generator=""
|
||||
build_dir="build-Release-RPi"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
echo "Running command (without the leading +):"
|
||||
set -x # Print command
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "release" -t "${tgt_bsp}" \
|
||||
-l"${build_dir}"
|
||||
# set +x
|
@ -1,29 +0,0 @@
|
||||
#!/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/raspberrypi"
|
||||
build_generator=""
|
||||
build_dir="build-Release-RPi"
|
||||
if [ "${OS}" = "Windows_NT" ]; then
|
||||
build_generator="MinGW Makefiles"
|
||||
# Could be other OS but this works for now.
|
||||
else
|
||||
build_generator="Unix Makefiles"
|
||||
fi
|
||||
|
||||
python3 cmake_build_config.py -o "${os_fsfw}" -g "${build_generator}" -b "release" -t "${tgt_bsp}" \
|
||||
-l"${build_dir}"
|
@ -1,16 +1,17 @@
|
||||
#!/bin/sh
|
||||
counter=0
|
||||
cfg_script_name="cmake-build-cfg.py"
|
||||
while [ ${counter} -lt 5 ]
|
||||
do
|
||||
cd ..
|
||||
if [ -f "cmake_build_config.py" ];then
|
||||
if [ -f ${cfg_script_name} ];then
|
||||
break
|
||||
fi
|
||||
counter=$((counter=counter + 1))
|
||||
done
|
||||
|
||||
if [ "${counter}" -ge 5 ];then
|
||||
echo "cmake_build_config.py not found in upper directories!"
|
||||
echo "${cfg_script_name} not found in upper directories!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -27,7 +28,7 @@ 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}" \
|
||||
${python} ${cfg_script_name} -o "${os_fsfw}" -g "${build_generator}" -b "debug" -t "${tgt_bsp}" \
|
||||
-l"${build_dir}"
|
||||
# set +x
|
||||
|
@ -4,7 +4,7 @@
|
||||
const char* const SW_NAME = "eive";
|
||||
|
||||
#define SW_VERSION 1
|
||||
#define SW_SUBVERSION 5
|
||||
#define SW_SUBVERSION 6
|
||||
#define SW_REVISION 0
|
||||
|
||||
#endif /* COMMON_CONFIG_OBSWVERSION_H_ */
|
||||
|
@ -13,12 +13,13 @@ enum commonClassIds: uint8_t {
|
||||
HEATER_HANDLER, //HEATER
|
||||
SYRLINKS_HANDLER, //SYRLINKS
|
||||
IMTQ_HANDLER, //IMTQ
|
||||
RW_HANDLER, //Reaction Wheels
|
||||
STR_HANDLER, //Star tracker
|
||||
PLOC_MPSOC_HANDLER, //PLOC MPSoC
|
||||
PLOC_SUPERVISOR_HANDLER, //PLOC Supervisor
|
||||
RW_HANDLER, //RWHA
|
||||
STR_HANDLER, //STRH
|
||||
PLOC_MPSOC_HANDLER, //PLMP
|
||||
PLOC_SUPERVISOR_HANDLER, //PLSV
|
||||
SUS_HANDLER, //SUSS
|
||||
CCSDS_IP_CORE_BRIDGE, // IP Core interface
|
||||
CCSDS_IP_CORE_BRIDGE, //IPCI
|
||||
PLOC_UPDATER, //PLUD
|
||||
COMMON_CLASS_ID_END // [EXPORT] : [END]
|
||||
};
|
||||
|
||||
|
@ -3,5 +3,8 @@
|
||||
|
||||
#define OBSW_ADD_LWGPS_TEST 0
|
||||
|
||||
// Use TCP instead of UDP for the TMTC bridge. This allows using the TMTC client locally
|
||||
// because UDP packets are not allowed in the VPN
|
||||
#define OBSW_USE_TMTC_TCP_BRIDGE 0
|
||||
|
||||
#endif /* COMMON_CONFIG_COMMONCONFIG_H_ */
|
||||
|
@ -8,8 +8,8 @@ enum commonObjects: uint32_t {
|
||||
/* First Byte 0x50-0x52 reserved for PUS Services **/
|
||||
CCSDS_PACKET_DISTRIBUTOR = 0x50000100,
|
||||
PUS_PACKET_DISTRIBUTOR = 0x50000200,
|
||||
UDP_BRIDGE = 0x50000300,
|
||||
UDP_POLLING_TASK = 0x50000400,
|
||||
TMTC_BRIDGE = 0x50000300,
|
||||
TMTC_POLLING_TASK = 0x50000400,
|
||||
FILE_SYSTEM_HANDLER = 0x50000500,
|
||||
|
||||
/* 0x43 ('C') for Controllers */
|
||||
@ -80,7 +80,9 @@ enum commonObjects: uint32_t {
|
||||
RW3 = 0x44120003,
|
||||
RW4 = 0x44120004,
|
||||
|
||||
START_TRACKER = 0x44130001
|
||||
START_TRACKER = 0x44130001,
|
||||
|
||||
PLOC_UPDATER = 0x44330000
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -17,6 +17,7 @@ enum: uint8_t {
|
||||
STR_HANDLER = 114,
|
||||
PLOC_SUPERVISOR_HANDLER = 115,
|
||||
FILE_SYSTEM = 116,
|
||||
PLOC_UPDATER = 117,
|
||||
COMMON_SUBSYSTEM_ID_END
|
||||
};
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
#define COMMON_CONFIG_SPICONF_H_
|
||||
|
||||
#include <cstdint>
|
||||
#include <fsfw/hal/linux/spi/spiDefinitions.h>
|
||||
#include <fsfw_hal/linux/spi/spiDefinitions.h>
|
||||
|
||||
/**
|
||||
* SPI configuration will be contained here to let the device handlers remain independent
|
||||
|
BIN
doc/img/eive-logo.png
Normal file
BIN
doc/img/eive-logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 104 KiB |
2
fsfw
2
fsfw
@ -1 +1 @@
|
||||
Subproject commit c5b4b0136217219a4443d858f42c368af9b15f27
|
||||
Subproject commit 22e29144b6783a824b310204c76fa413eb94f331
|
24
generators/.run/events.run.xml
Normal file
24
generators/.run/events.run.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="events" type="PythonConfigurationType" factoryName="Python">
|
||||
<module name="generators" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/fsfwgen.py" />
|
||||
<option name="PARAMETERS" value="events" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="false" />
|
||||
<option name="MODULE_MODE" value="false" />
|
||||
<option name="REDIRECT_INPUT" value="false" />
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
24
generators/.run/objects.run.xml
Normal file
24
generators/.run/objects.run.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="objects" type="PythonConfigurationType" factoryName="Python">
|
||||
<module name="generators" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/fsfwgen.py" />
|
||||
<option name="PARAMETERS" value="objects" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="false" />
|
||||
<option name="MODULE_MODE" value="false" />
|
||||
<option name="REDIRECT_INPUT" value="false" />
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
24
generators/.run/returnvalues.run.xml
Normal file
24
generators/.run/returnvalues.run.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="returnvalues" type="PythonConfigurationType" factoryName="Python">
|
||||
<module name="generators" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/fsfwgen.py" />
|
||||
<option name="PARAMETERS" value="returnvalues" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
<option name="EMULATE_TERMINAL" value="false" />
|
||||
<option name="MODULE_MODE" value="false" />
|
||||
<option name="REDIRECT_INPUT" value="false" />
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
@ -1,96 +1,102 @@
|
||||
2200;STORE_SEND_WRITE_FAILED;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2201;STORE_WRITE_FAILED;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2202;STORE_SEND_READ_FAILED;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2203;STORE_READ_FAILED;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2204;UNEXPECTED_MSG;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2205;STORING_FAILED;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2206;TM_DUMP_FAILED;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2207;STORE_INIT_FAILED;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2208;STORE_INIT_EMPTY;INFO; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2209;STORE_CONTENT_CORRUPTED;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2210;STORE_INITIALIZE;INFO; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2211;INIT_DONE;INFO; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2212;DUMP_FINISHED;INFO; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2213;DELETION_FINISHED;INFO; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2214;DELETION_FAILED;LOW; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2215;AUTO_CATALOGS_SENDING_FAILED;INFO; ;../../fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2600;GET_DATA_FAILED;LOW; ;../../fsfw/storagemanager/StorageManagerIF.h
|
||||
2601;STORE_DATA_FAILED;LOW; ;../../fsfw/storagemanager/StorageManagerIF.h
|
||||
2800;DEVICE_BUILDING_COMMAND_FAILED;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2801;DEVICE_SENDING_COMMAND_FAILED;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2802;DEVICE_REQUESTING_REPLY_FAILED;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2803;DEVICE_READING_REPLY_FAILED;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2804;DEVICE_INTERPRETING_REPLY_FAILED;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2805;DEVICE_MISSED_REPLY;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2806;DEVICE_UNKNOWN_REPLY;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2807;DEVICE_UNREQUESTED_REPLY;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2808;INVALID_DEVICE_COMMAND;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2809;MONITORING_LIMIT_EXCEEDED;LOW; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2810;MONITORING_AMBIGUOUS;HIGH; ;../../fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
4201;FUSE_CURRENT_HIGH;LOW; ;../../fsfw/power/Fuse.h
|
||||
4202;FUSE_WENT_OFF;LOW; ;../../fsfw/power/Fuse.h
|
||||
4204;POWER_ABOVE_HIGH_LIMIT;LOW; ;../../fsfw/power/Fuse.h
|
||||
4205;POWER_BELOW_LOW_LIMIT;LOW; ;../../fsfw/power/Fuse.h
|
||||
4300;SWITCH_WENT_OFF;LOW; ;../../fsfw/power/PowerSwitchIF.h
|
||||
5000;HEATER_ON;INFO; ;../../fsfw/thermal/Heater.h
|
||||
5001;HEATER_OFF;INFO; ;../../fsfw/thermal/Heater.h
|
||||
5002;HEATER_TIMEOUT;LOW; ;../../fsfw/thermal/Heater.h
|
||||
5003;HEATER_STAYED_ON;LOW; ;../../fsfw/thermal/Heater.h
|
||||
5004;HEATER_STAYED_OFF;LOW; ;../../fsfw/thermal/Heater.h
|
||||
5200;TEMP_SENSOR_HIGH;LOW; ;../../fsfw/thermal/AbstractTemperatureSensor.h
|
||||
5201;TEMP_SENSOR_LOW;LOW; ;../../fsfw/thermal/AbstractTemperatureSensor.h
|
||||
5202;TEMP_SENSOR_GRADIENT;LOW; ;../../fsfw/thermal/AbstractTemperatureSensor.h
|
||||
5901;COMPONENT_TEMP_LOW;LOW; ;../../fsfw/thermal/ThermalComponentIF.h
|
||||
5902;COMPONENT_TEMP_HIGH;LOW; ;../../fsfw/thermal/ThermalComponentIF.h
|
||||
5903;COMPONENT_TEMP_OOL_LOW;LOW; ;../../fsfw/thermal/ThermalComponentIF.h
|
||||
5904;COMPONENT_TEMP_OOL_HIGH;LOW; ;../../fsfw/thermal/ThermalComponentIF.h
|
||||
5905;TEMP_NOT_IN_OP_RANGE;LOW; ;../../fsfw/thermal/ThermalComponentIF.h
|
||||
7101;FDIR_CHANGED_STATE;INFO; ;../../fsfw/fdir/FailureIsolationBase.h
|
||||
7102;FDIR_STARTS_RECOVERY;MEDIUM; ;../../fsfw/fdir/FailureIsolationBase.h
|
||||
7103;FDIR_TURNS_OFF_DEVICE;MEDIUM; ;../../fsfw/fdir/FailureIsolationBase.h
|
||||
7201;MONITOR_CHANGED_STATE;LOW; ;../../fsfw/monitoring/MonitoringIF.h
|
||||
7202;VALUE_BELOW_LOW_LIMIT;LOW; ;../../fsfw/monitoring/MonitoringIF.h
|
||||
7203;VALUE_ABOVE_HIGH_LIMIT;LOW; ;../../fsfw/monitoring/MonitoringIF.h
|
||||
7204;VALUE_OUT_OF_RANGE;LOW; ;../../fsfw/monitoring/MonitoringIF.h
|
||||
7301;SWITCHING_TM_FAILED;LOW; ;../../fsfw/datapool/HkSwitchHelper.h
|
||||
7400;CHANGING_MODE;INFO; ;../../fsfw/modes/HasModesIF.h
|
||||
7401;MODE_INFO;INFO; ;../../fsfw/modes/HasModesIF.h
|
||||
7402;FALLBACK_FAILED;HIGH; ;../../fsfw/modes/HasModesIF.h
|
||||
7403;MODE_TRANSITION_FAILED;LOW; ;../../fsfw/modes/HasModesIF.h
|
||||
7404;CANT_KEEP_MODE;HIGH; ;../../fsfw/modes/HasModesIF.h
|
||||
7405;OBJECT_IN_INVALID_MODE;LOW; ;../../fsfw/modes/HasModesIF.h
|
||||
7406;FORCING_MODE;MEDIUM; ;../../fsfw/modes/HasModesIF.h
|
||||
7407;MODE_CMD_REJECTED;LOW; ;../../fsfw/modes/HasModesIF.h
|
||||
7506;HEALTH_INFO;INFO; ;../../fsfw/health/HasHealthIF.h
|
||||
7507;CHILD_CHANGED_HEALTH;INFO; ;../../fsfw/health/HasHealthIF.h
|
||||
7508;CHILD_PROBLEMS;LOW; ;../../fsfw/health/HasHealthIF.h
|
||||
7509;OVERWRITING_HEALTH;LOW; ;../../fsfw/health/HasHealthIF.h
|
||||
7510;TRYING_RECOVERY;MEDIUM; ;../../fsfw/health/HasHealthIF.h
|
||||
7511;RECOVERY_STEP;MEDIUM; ;../../fsfw/health/HasHealthIF.h
|
||||
7512;RECOVERY_DONE;MEDIUM; ;../../fsfw/health/HasHealthIF.h
|
||||
7900;RF_AVAILABLE;INFO; ;../../fsfw/datalinklayer/DataLinkLayer.h
|
||||
7901;RF_LOST;INFO; ;../../fsfw/datalinklayer/DataLinkLayer.h
|
||||
7902;BIT_LOCK;INFO; ;../../fsfw/datalinklayer/DataLinkLayer.h
|
||||
7903;BIT_LOCK_LOST;INFO; ;../../fsfw/datalinklayer/DataLinkLayer.h
|
||||
7905;FRAME_PROCESSING_FAILED;LOW; ;../../fsfw/datalinklayer/DataLinkLayer.h
|
||||
8900;CLOCK_SET;INFO; ;../../fsfw/pus/Service9TimeManagement.h
|
||||
8901;CLOCK_SET_FAILURE;LOW; ;../../fsfw/pus/Service9TimeManagement.h
|
||||
9700;TEST;INFO; ;../../fsfw/pus/Service17Test.h
|
||||
10600;CHANGE_OF_SETUP_PARAMETER;LOW; ;../../mission/devices/MGMHandlerLIS3MDL.h
|
||||
11101;MEMORY_READ_RPT_CRC_FAILURE;LOW; ;../../mission/devices/PlocMPSoCHandler.h
|
||||
11102;ACK_FAILURE;LOW; ;../../mission/devices/PlocMPSoCHandler.h
|
||||
11103;EXE_FAILURE;LOW; ;../../mission/devices/PlocMPSoCHandler.h
|
||||
11104;CRC_FAILURE_EVENT;LOW; ;../../mission/devices/PlocMPSoCHandler.h
|
||||
11201;SELF_TEST_I2C_FAILURE;LOW; ;../../mission/devices/IMTQHandler.h
|
||||
11202;SELF_TEST_SPI_FAILURE;LOW; ;../../mission/devices/IMTQHandler.h
|
||||
11203;SELF_TEST_ADC_FAILURE;LOW; ;../../mission/devices/IMTQHandler.h
|
||||
11204;SELF_TEST_PWM_FAILURE;LOW; ;../../mission/devices/IMTQHandler.h
|
||||
11205;SELF_TEST_TC_FAILURE;LOW; ;../../mission/devices/IMTQHandler.h
|
||||
11206;SELF_TEST_MTM_RANGE_FAILURE;LOW; ;../../mission/devices/IMTQHandler.h
|
||||
11207;SELF_TEST_COIL_CURRENT_FAILURE;LOW; ;../../mission/devices/IMTQHandler.h
|
||||
11208;INVALID_ERROR_BYTE;LOW; ;../../mission/devices/IMTQHandler.h
|
||||
11301;ERROR_STATE;HIGH; ;../../mission/devices/RwHandler.h
|
||||
11501;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW; ;../../mission/devices/PlocSupervisorHandler.h
|
||||
11502;SUPV_ACK_FAILURE;LOW; ;../../mission/devices/PlocSupervisorHandler.h
|
||||
11503;SUPV_EXE_FAILURE;LOW; ;../../mission/devices/PlocSupervisorHandler.h
|
||||
11504;SUPV_CRC_FAILURE_EVENT;LOW; ;../../mission/devices/PlocSupervisorHandler.h
|
||||
2200;STORE_SEND_WRITE_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2201;STORE_WRITE_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2202;STORE_SEND_READ_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2203;STORE_READ_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2204;UNEXPECTED_MSG;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2205;STORING_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2206;TM_DUMP_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2207;STORE_INIT_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2208;STORE_INIT_EMPTY;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2209;STORE_CONTENT_CORRUPTED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2210;STORE_INITIALIZE;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2211;INIT_DONE;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2212;DUMP_FINISHED;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2213;DELETION_FINISHED;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2214;DELETION_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2215;AUTO_CATALOGS_SENDING_FAILED;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
|
||||
2600;GET_DATA_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h
|
||||
2601;STORE_DATA_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h
|
||||
2800;DEVICE_BUILDING_COMMAND_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2801;DEVICE_SENDING_COMMAND_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2802;DEVICE_REQUESTING_REPLY_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2803;DEVICE_READING_REPLY_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2804;DEVICE_INTERPRETING_REPLY_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2805;DEVICE_MISSED_REPLY;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2806;DEVICE_UNKNOWN_REPLY;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2807;DEVICE_UNREQUESTED_REPLY;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2808;INVALID_DEVICE_COMMAND;LOW;Indicates a SW bug in child class.;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2809;MONITORING_LIMIT_EXCEEDED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
2810;MONITORING_AMBIGUOUS;HIGH;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
|
||||
4201;FUSE_CURRENT_HIGH;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/Fuse.h
|
||||
4202;FUSE_WENT_OFF;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/Fuse.h
|
||||
4204;POWER_ABOVE_HIGH_LIMIT;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/Fuse.h
|
||||
4205;POWER_BELOW_LOW_LIMIT;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/Fuse.h
|
||||
4300;SWITCH_WENT_OFF;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/PowerSwitchIF.h
|
||||
5000;HEATER_ON;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/Heater.h
|
||||
5001;HEATER_OFF;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/Heater.h
|
||||
5002;HEATER_TIMEOUT;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/Heater.h
|
||||
5003;HEATER_STAYED_ON;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/Heater.h
|
||||
5004;HEATER_STAYED_OFF;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/Heater.h
|
||||
5200;TEMP_SENSOR_HIGH;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
|
||||
5201;TEMP_SENSOR_LOW;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
|
||||
5202;TEMP_SENSOR_GRADIENT;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/AbstractTemperatureSensor.h
|
||||
5901;COMPONENT_TEMP_LOW;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||
5902;COMPONENT_TEMP_HIGH;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||
5903;COMPONENT_TEMP_OOL_LOW;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||
5904;COMPONENT_TEMP_OOL_HIGH;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||
5905;TEMP_NOT_IN_OP_RANGE;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h
|
||||
7101;FDIR_CHANGED_STATE;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/fdir/FailureIsolationBase.h
|
||||
7102;FDIR_STARTS_RECOVERY;MEDIUM;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/fdir/FailureIsolationBase.h
|
||||
7103;FDIR_TURNS_OFF_DEVICE;MEDIUM;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/fdir/FailureIsolationBase.h
|
||||
7201;MONITOR_CHANGED_STATE;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h
|
||||
7202;VALUE_BELOW_LOW_LIMIT;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h
|
||||
7203;VALUE_ABOVE_HIGH_LIMIT;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h
|
||||
7204;VALUE_OUT_OF_RANGE;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h
|
||||
7301;SWITCHING_TM_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapool/HkSwitchHelper.h
|
||||
7400;CHANGING_MODE;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
||||
7401;MODE_INFO;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
||||
7402;FALLBACK_FAILED;HIGH;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
||||
7403;MODE_TRANSITION_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
||||
7404;CANT_KEEP_MODE;HIGH;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
||||
7405;OBJECT_IN_INVALID_MODE;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
||||
7406;FORCING_MODE;MEDIUM;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
||||
7407;MODE_CMD_REJECTED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h
|
||||
7506;HEALTH_INFO;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
||||
7507;CHILD_CHANGED_HEALTH;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
||||
7508;CHILD_PROBLEMS;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
||||
7509;OVERWRITING_HEALTH;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
||||
7510;TRYING_RECOVERY;MEDIUM;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
||||
7511;RECOVERY_STEP;MEDIUM;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
||||
7512;RECOVERY_DONE;MEDIUM;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/health/HasHealthIF.h
|
||||
7900;RF_AVAILABLE;INFO;A RF available signal was detected. P1: raw RFA state, P2: 0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||
7901;RF_LOST;INFO;A previously found RF available signal was lost. P1: raw RFA state, P2: 0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||
7902;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||
7903;BIT_LOCK_LOST;INFO;A previously found Bit Lock signal was lost. P1: raw BLO state, P2: 0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||
7905;FRAME_PROCESSING_FAILED;LOW;The CCSDS Board could not interpret a TC;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
|
||||
8900;CLOCK_SET;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
8901;CLOCK_SET_FAILURE;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/pus/Service9TimeManagement.h
|
||||
9700;TEST;INFO;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/pus/Service17Test.h
|
||||
10600;CHANGE_OF_SETUP_PARAMETER;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/MGMHandlerLIS3MDL.h
|
||||
11101;MEMORY_READ_RPT_CRC_FAILURE;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocMPSoCHandler.h
|
||||
11102;ACK_FAILURE;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocMPSoCHandler.h
|
||||
11103;EXE_FAILURE;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocMPSoCHandler.h
|
||||
11104;CRC_FAILURE_EVENT;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocMPSoCHandler.h
|
||||
11201;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||
11202;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||
11203;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||
11204;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||
11205;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||
11206;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||
11207;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||
11208;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h
|
||||
11301;ERROR_STATE;HIGH;Reaction wheel signals an error state;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h
|
||||
11501;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h
|
||||
11502;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h
|
||||
11503;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h
|
||||
11504;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h
|
||||
11700;UPDATE_FILE_NOT_EXISTS;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
||||
11701;ACTION_COMMANDING_FAILED;LOW;;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
||||
11702;UPDATE_AVAILABLE_FAILED;LOW;Supervisor handler replied action message indicating a command execution failure of the update available command;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
||||
11703;UPDATE_TRANSFER_FAILED;LOW;Supervisor handler failed to transfer an update space packet. P1: Parameter holds the number of update packets already sent.;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
||||
11704;UPDATE_VERIFY_FAILED;LOW;Supervisor failed to execute the update verify command.;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
||||
11705;UPDATE_FINISHED;INFO;MPSoC update successful completed;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h
|
||||
|
|
@ -37,6 +37,7 @@
|
||||
0x44250002;PDU2_HANDLER
|
||||
0x44250003;ACU_HANDLER
|
||||
0x443200A5;RAD_SENSOR
|
||||
0x44330000;PLOC_UPDATER
|
||||
0x44330015;PLOC_MPSOC_HANDLER
|
||||
0x44330016;PLOC_SUPERVISOR_HANDLER
|
||||
0x444100A2;SOLAR_ARRAY_DEPL_HANDLER
|
||||
@ -68,8 +69,9 @@
|
||||
0x49050001;CSP_COM_IF
|
||||
0x50000100;CCSDS_PACKET_DISTRIBUTOR
|
||||
0x50000200;PUS_PACKET_DISTRIBUTOR
|
||||
0x50000300;UDP_BRIDGE
|
||||
0x50000400;UDP_POLLING_TASK
|
||||
0x50000300;TMTC_BRIDGE
|
||||
0x50000400;TMTC_POLLING_TASK
|
||||
0x50000500;FILE_SYSTEM_HANDLER
|
||||
0x51000500;PUS_SERVICE_6
|
||||
0x53000000;FSFW_OBJECTS_START
|
||||
0x53000001;PUS_SERVICE_1_VERIFICATION
|
||||
|
|
@ -1,407 +1,461 @@
|
||||
0x0;OK;System-wide code for ok.;RETURN_OK;HasReturnvaluesIF.h;HasReturnvaluesIF
|
||||
0x1;Failed;Unspecified system-wide code for failed.;RETURN_FAILED;HasReturnvaluesIF.h;HasReturnvaluesIF
|
||||
0xe0;_PacketTooLong;;0xE0;../../mission/devices/GomspaceDeviceHandler.h;
|
||||
0xe1;_InvalidTableId;;0xE1;../../mission/devices/GomspaceDeviceHandler.h;
|
||||
0xe2;_InvalidAddress;;0xE2;../../mission/devices/GomspaceDeviceHandler.h;
|
||||
0xe3;_InvalidParamSize;;0xE3;../../mission/devices/GomspaceDeviceHandler.h;
|
||||
0xe4;_InvalidPayloadSize;;0xE4;../../mission/devices/GomspaceDeviceHandler.h;
|
||||
0xe5;_UnknownReplyId;;0xE5;../../mission/devices/GomspaceDeviceHandler.h;
|
||||
0x4da0;PLOC_CrcFailure;;0xA0;../../mission/devices/PlocHandler.h;PLOC_HANDLER
|
||||
0x4da1;PLOC_ReceivedAckFailure;;0xA1;../../mission/devices/PlocHandler.h;PLOC_HANDLER
|
||||
0x4da2;PLOC_ReceivedExeFailure;;0xA2;../../mission/devices/PlocHandler.h;PLOC_HANDLER
|
||||
0x4da3;PLOC_InvalidApid;;0xA3;../../mission/devices/PlocHandler.h;PLOC_HANDLER
|
||||
0x4ca0;IMTQ_InvalidCommandCode;;0xA0;../../mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x4ca1;IMTQ_ParameterMissing;;0xA1;../../mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x4ca2;IMTQ_ParameterInvalid;;0xA2;../../mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x4ca3;IMTQ_CcUnavailable;;0xA3;../../mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x4ca4;IMTQ_InternalProcessingError;;0xA4;../../mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x4ca5;IMTQ_RejectedWithoutReason;;0xA5;../../mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x4ca6;IMTQ_CmdErrUnknown;;0xA6;../../mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x4ba0;SYRLINKS_CrcFailure;;0xA0;../../mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4ba1;SYRLINKS_UartFraminOrParityErrorAck;;0xA1;../../mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4ba2;SYRLINKS_BadCharacterAck;;0xA2;../../mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4ba3;SYRLINKS_BadParameterValueAck;;0xA3;../../mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4ba4;SYRLINKS_BadEndOfFrameAck;;0xA4;../../mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4ba5;SYRLINKS_UnknownCommandIdAck;;0xA5;../../mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4ba6;SYRLINKS_BadCrcAck;;0xA6;../../mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4ba7;SYRLINKS_ReplyWrongSize;;0xA7;../../mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4ba8;SYRLINKS_MissingStartFrameCharacter;;0xA8;../../mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x2b01;CCS_BcIsSetVrCommand;;0x01;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2b02;CCS_BcIsUnlockCommand;;0x02;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bb0;CCS_BcIllegalCommand;;0xB0;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bb1;CCS_BoardReadingNotFinished;;0xB1;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf0;CCS_NsPositiveW;;0xF0;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf1;CCS_NsNegativeW;;0xF1;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf2;CCS_NsLockout;;0xF2;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf3;CCS_FarmInLockout;;0xF3;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf4;CCS_FarmInWait;;0xF4;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be0;CCS_WrongSymbol;;0xE0;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be1;CCS_DoubleStart;;0xE1;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be2;CCS_StartSymbolMissed;;0xE2;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be3;CCS_EndWithoutStart;;0xE3;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be4;CCS_TooLarge;;0xE4;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be5;CCS_TooShort;;0xE5;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be6;CCS_WrongTfVersion;;0xE6;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be7;CCS_WrongSpacecraftId;;0xE7;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be8;CCS_NoValidFrameType;;0xE8;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be9;CCS_CrcFailed;;0xE9;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bea;CCS_VcNotFound;;0xEA;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2beb;CCS_ForwardingFailed;;0xEB;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bec;CCS_ContentTooLarge;;0xEC;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bed;CCS_ResidualData;;0xED;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bee;CCS_DataCorrupted;;0xEE;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bef;CCS_IllegalSegmentationFlag;;0xEF;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bd0;CCS_IllegalFlagCombination;;0xD0;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bd1;CCS_ShorterThanHeader;;0xD1;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bd2;CCS_TooShortBlockedPacket;;0xD2;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bd3;CCS_TooShortMapExtraction;;0xD3;../../fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2901;IEC_NoConfigurationTable;;0x01;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2902;IEC_NoCpuTable;;0x02;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2903;IEC_InvalidWorkspaceAddress;;0x03;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2904;IEC_TooLittleWorkspace;;0x04;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2905;IEC_WorkspaceAllocation;;0x05;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2906;IEC_InterruptStackTooSmall;;0x06;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2907;IEC_ThreadExitted;;0x07;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2908;IEC_InconsistentMpInformation;;0x08;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2909;IEC_InvalidNode;;0x09;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290a;IEC_NoMpci;;0x0a;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290b;IEC_BadPacket;;0x0b;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290c;IEC_OutOfPackets;;0x0c;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290d;IEC_OutOfGlobalObjects;;0x0d;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290e;IEC_OutOfProxies;;0x0e;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290f;IEC_InvalidGlobalId;;0x0f;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2910;IEC_BadStackHook;;0x10;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2911;IEC_BadAttributes;;0x11;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2912;IEC_ImplementationKeyCreateInconsistency;;0x12;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2913;IEC_ImplementationBlockingOperationCancel;;0x13;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2914;IEC_MutexObtainFromBadState;;0x14;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2915;IEC_UnlimitedAndMaximumIs0;;0x15;../../fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0xe01;HM_InvalidMode;;0x01;../../fsfw/modes/HasModesIF.h;HAS_MODES_IF
|
||||
0xe02;HM_TransNotAllowed;;0x02;../../fsfw/modes/HasModesIF.h;HAS_MODES_IF
|
||||
0xe03;HM_InTransition;;0x03;../../fsfw/modes/HasModesIF.h;HAS_MODES_IF
|
||||
0xe04;HM_InvalidSubmode;;0x04;../../fsfw/modes/HasModesIF.h;HAS_MODES_IF
|
||||
0x2d01;HPA_InvalidIdentifierId;;0x01;../../fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
|
||||
0x2d02;HPA_InvalidDomainId;;0x02;../../fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
|
||||
0x2d03;HPA_InvalidValue;;0x03;../../fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
|
||||
0x2d05;HPA_ReadOnly;;0x05;../../fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
|
||||
0x2c01;PAW_UnknownDatatype;;0x01;../../fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c02;PAW_DatatypeMissmatch;;0x02;../../fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c03;PAW_Readonly;;0x03;../../fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c04;PAW_TooBig;;0x04;../../fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c05;PAW_SourceNotSet;;0x05;../../fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c06;PAW_OutOfBounds;;0x06;../../fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c07;PAW_NotSet;;0x07;../../fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c08;PAW_ColumnOrRowsZero;;0x08;../../fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x3101;CF_ObjectHasNoFunctions;;1;../../fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF
|
||||
0x3102;CF_AlreadyCommanding;;2;../../fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF
|
||||
0x3201;HF_IsBusy;;1;../../fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
|
||||
0x3202;HF_InvalidParameters;;2;../../fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
|
||||
0x3203;HF_ExecutionFinished;;3;../../fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
|
||||
0x3204;HF_InvalidActionId;;4;../../fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
|
||||
0x201;OM_InsertionFailed;;1;../../fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
|
||||
0x202;OM_NotFound;;2;../../fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
|
||||
0x203;OM_ChildInitFailed;;3;../../fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
|
||||
0x204;OM_InternalErrReporterUninit;;4;../../fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
|
||||
0x2500;FDI_YourFault;;0;../../fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF
|
||||
0x2501;FDI_MyFault;;1;../../fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF
|
||||
0x2502;FDI_ConfirmLater;;2;../../fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF
|
||||
0x2101;TMF_Busy;;1;../../fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2102;TMF_LastPacketFound;;2;../../fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2103;TMF_StopFetch;;3;../../fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2104;TMF_Timeout;;4;../../fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2105;TMF_TmChannelFull;;5;../../fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2106;TMF_NotStored;;6;../../fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2107;TMF_AllDeleted;;7;../../fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2108;TMF_InvalidData;;8;../../fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2109;TMF_NotReady;;9;../../fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2001;TMB_Busy;;1;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2002;TMB_Full;;2;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2003;TMB_Empty;;3;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2004;TMB_NullRequested;;4;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2005;TMB_TooLarge;;5;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2006;TMB_NotReady;;6;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2007;TMB_DumpError;;7;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2008;TMB_CrcError;;8;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2009;TMB_Timeout;;9;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200a;TMB_IdlePacketFound;;10;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200b;TMB_TelecommandFound;;11;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200c;TMB_NoPusATm;;12;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200d;TMB_TooSmall;;13;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200e;TMB_BlockNotFound;;14;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200f;TMB_InvalidRequest;;15;../../fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x1c01;TCD_PacketLost;;1;../../fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
|
||||
0x1c02;TCD_DestinationNotFound;;2;../../fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
|
||||
0x1c03;TCD_ServiceIdAlreadyExists;;3;../../fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
|
||||
0x1b00;TCC_IllegalApid;;0;../../fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b01;TCC_IncompletePacket;;1;../../fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b02;TCC_IncorrectChecksum;;2;../../fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b03;TCC_IllegalPacketType;;3;../../fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b04;TCC_IllegalPacketSubtype;;4;../../fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b05;TCC_IncorrectPrimaryHeader;;5;../../fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b06;TCC_IncorrectSecondaryHeader;;6;../../fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x4e1;RMP_CommandNoDescriptorsAvailable;;0xE1;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e2;RMP_CommandBufferFull;;0xE2;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e3;RMP_CommandChannelOutOfRange;;0xE3;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e6;RMP_CommandChannelDeactivated;;0xE6;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e7;RMP_CommandPortOutOfRange;;0xE7;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e8;RMP_CommandPortInUse;;0xE8;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e9;RMP_CommandNoChannel;;0xE9;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4ea;RMP_NoHwCrc;;0xEA;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d0;RMP_ReplyNoReply;;0xD0;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d1;RMP_ReplyNotSent;;0xD1;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d2;RMP_ReplyNotYetSent;;0xD2;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d3;RMP_ReplyMissmatch;;0xD3;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d4;RMP_ReplyTimeout;;0xD4;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4c0;RMP_ReplyInterfaceBusy;;0xC0;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4c1;RMP_ReplyTransmissionError;;0xC1;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4c2;RMP_ReplyInvalidData;;0xC2;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4c3;RMP_ReplyNotSupported;;0xC3;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f0;RMP_LinkDown;;0xF0;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f1;RMP_SpwCredit;;0xF1;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f2;RMP_SpwEscape;;0xF2;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f3;RMP_SpwDisconnect;;0xF3;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f4;RMP_SpwParity;;0xF4;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f5;RMP_SpwWriteSync;;0xF5;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f6;RMP_SpwInvalidAddress;;0xF6;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f7;RMP_SpwEarlyEop;;0xF7;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f8;RMP_SpwDma;;0xF8;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f9;RMP_SpwLinkError;;0xF9;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x400;RMP_ReplyOk;;0;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x401;RMP_ReplyGeneralErrorCode;;1;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x402;RMP_ReplyUnusedPacketTypeOrCommandCode;;2;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x403;RMP_ReplyInvalidKey;;3;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x404;RMP_ReplyInvalidDataCrc;;4;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x405;RMP_ReplyEarlyEop;;5;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x406;RMP_ReplyTooMuchData;;6;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x407;RMP_ReplyEep;;7;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x408;RMP_ReplyReserved;;8;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x409;RMP_ReplyVerifyBufferOverrun;;9;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x40a;RMP_ReplyCommandNotImplementedOrNotAuthorised;;10;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x40b;RMP_ReplyRmwDataLengthError;;11;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x40c;RMP_ReplyInvalidTargetLogicalAddress;;12;../../fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x2701;SM_DataTooLarge;;1;../../fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2702;SM_DataStorageFull;;2;../../fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2703;SM_IllegalStorageId;;3;../../fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2704;SM_DataDoesNotExist;;4;../../fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2705;SM_IllegalAddress;;5;../../fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2706;SM_PoolTooLarge;;6;../../fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x36a1;SGP4_InvalidEccentricity;;0xA1;../../fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a2;SGP4_InvalidMeanMotion;;0xA2;../../fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a3;SGP4_InvalidPerturbationElements;;0xA3;../../fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a4;SGP4_InvalidSemiLatusRectum;;0xA4;../../fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a5;SGP4_InvalidEpochElements;;0xA5;../../fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a6;SGP4_SatelliteHasDecayed;;0xA6;../../fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36b1;SGP4_TleTooOld;;0xB1;../../fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36b2;SGP4_TleNotInitialized;;0xB2;../../fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x2301;MT_TooDetailedRequest;;1;../../fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x2302;MT_TooGeneralRequest;;2;../../fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x2303;MT_NoMatch;;3;../../fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x2304;MT_Full;;4;../../fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x2305;MT_NewNodeCreated;;5;../../fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x3d01;DLEE_StreamTooShort;;0x01;../../fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER
|
||||
0x3d02;DLEE_DecodingError;;0x02;../../fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER
|
||||
0x2e01;ASC_TooLongForTargetType;;1;../../fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
|
||||
0x2e02;ASC_InvalidCharacters;;2;../../fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
|
||||
0x2e03;ASC_BufferTooSmall;;0x3;../../fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
|
||||
0xf01;CM_UnknownCommand;;1;../../fsfw/ipc/CommandMessageIF.h;COMMAND_MESSAGE
|
||||
0x3801;MQI_Empty;;1;../../fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
|
||||
0x3802;MQI_Full; No space left for more messages;2;../../fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
|
||||
0x3803;MQI_NoReplyPartner; Returned if a reply method was called without partner;3;../../fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
|
||||
0x3804;MQI_DestinationInvalid; Returned if the target destination is invalid.;4;../../fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
|
||||
0x3701;MUX_NotEnoughResources;;1;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3702;MUX_InsufficientMemory;;2;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3703;MUX_NoPrivilege;;3;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3704;MUX_WrongAttributeSetting;;4;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3705;MUX_MutexAlreadyLocked;;5;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3706;MUX_MutexNotFound;;6;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3707;MUX_MutexMaxLocks;;7;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3708;MUX_CurrThreadAlreadyOwnsMutex;;8;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3709;MUX_CurrThreadDoesNotOwnMutex;;9;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x370a;MUX_MutexTimeout;;10;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x370b;MUX_MutexInvalidId;;11;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x370c;MUX_MutexDestroyedWhileWaiting;;12;../../fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3901;SPH_SemaphoreTimeout;;1;../../fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
|
||||
0x3902;SPH_SemaphoreNotOwned;;2;../../fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
|
||||
0x3903;SPH_SemaphoreInvalid;;3;../../fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
|
||||
0x2801;TC_InvalidTargetState;;1;../../fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
|
||||
0x28f1;TC_AboveOperationalLimit;;0xF1;../../fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
|
||||
0x28f2;TC_BelowOperationalLimit;;0xF2;../../fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
|
||||
0xc02;MS_InvalidEntry;;0x02;../../fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
|
||||
0xc03;MS_TooManyElements;;0x03;../../fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
|
||||
0xc04;MS_CantStoreEmpty;;0x04;../../fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
|
||||
0xd01;SS_SequenceAlreadyExists;;0x01;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd02;SS_TableAlreadyExists;;0x02;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd03;SS_TableDoesNotExist;;0x03;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd04;SS_TableOrSequenceLengthInvalid;;0x04;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd05;SS_SequenceDoesNotExist;;0x05;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd06;SS_TableContainsInvalidObjectId;;0x06;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd07;SS_FallbackSequenceDoesNotExist;;0x07;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd08;SS_NoTargetTable;;0x08;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd09;SS_SequenceOrTableTooLong;;0x09;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd0b;SS_IsFallbackSequence;;0x0B;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd0c;SS_AccessDenied;;0x0C;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd0e;SS_TableInUse;;0x0E;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xda1;SS_TargetTableNotReached;;0xA1;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xda2;SS_TableCheckFailed;;0xA2;../../fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xb01;SB_ChildNotFound;;0x01;../../fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0xb02;SB_ChildInfoUpdated;;0x02;../../fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0xb03;SB_ChildDoesntHaveModes;;0x03;../../fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0xb04;SB_CouldNotInsertChild;;0x04;../../fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0xb05;SB_TableContainsInvalidObjectId;;0x05;../../fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0x3c00;HKM_QueueOrDestinationInvalid;;0;../../fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c01;HKM_WrongHkPacketType;;1;../../fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c02;HKM_ReportingStatusUnchanged;;2;../../fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c03;HKM_PeriodicHelperInvalid;;3;../../fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c04;HKM_PoolobjectNotFound;;4;../../fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c05;HKM_DatasetNotFound;;5;../../fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3a00;LPIF_PoolEntryNotFound;;0x00;../../fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF
|
||||
0x3a01;LPIF_PoolEntryTypeConflict;;0x01;../../fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF
|
||||
0x3ba0;PVA_InvalidReadWriteMode;;0xA0;../../fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF
|
||||
0x3ba1;PVA_InvalidPoolEntry;;0xA1;../../fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF
|
||||
0x801;DPS_InvalidParameterDefinition;;1;../../fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x802;DPS_SetWasAlreadyRead;;2;../../fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x803;DPS_CommitingWithoutReading;;3;../../fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x804;DPS_DataSetUninitialised;;4;../../fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x805;DPS_DataSetFull;;5;../../fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x806;DPS_PoolVarNull;;6;../../fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x1000;TIM_UnsupportedTimeFormat;;0;../../fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1001;TIM_NotEnoughInformationForTargetFormat;;1;../../fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1002;TIM_LengthMismatch;;2;../../fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1003;TIM_InvalidTimeFormat;;3;../../fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1004;TIM_InvalidDayOfYear;;4;../../fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1005;TIM_TimeDoesNotFitFormat;;5;../../fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x3501;TSI_BadTimestamp;;1;../../fsfw/timemanager/TimeStamperIF.h;TIME_STAMPER_IF
|
||||
0x1d01;PUS_ActivityStarted;;1;../../fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1d02;PUS_InvalidSubservice;;2;../../fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1d03;PUS_IllegalApplicationData;;3;../../fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1d04;PUS_SendTmFailed;;4;../../fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1d05;PUS_Timeout;;5;../../fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1f01;CSB_ExecutionComplete;;1;../../fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f02;CSB_NoStepMessage;;2;../../fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f03;CSB_ObjectBusy;;3;../../fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f04;CSB_Busy;;4;../../fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f05;CSB_InvalidTc;;5;../../fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f06;CSB_InvalidObject;;6;../../fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f07;CSB_InvalidReply;;7;../../fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1101;AL_Full;;0x01;../../fsfw/container/ArrayList.h;ARRAY_LIST
|
||||
0x1801;FF_Full;;1;../../fsfw/container/FIFOBase.h;FIFO_CLASS
|
||||
0x1802;FF_Empty;;2;../../fsfw/container/FIFOBase.h;FIFO_CLASS
|
||||
0x1601;FMM_MapFull;;0x01;../../fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP
|
||||
0x1602;FMM_KeyDoesNotExist;;0x02;../../fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP
|
||||
0x1501;FM_KeyAlreadyExists;;0x01;../../fsfw/container/FixedMap.h;FIXED_MAP
|
||||
0x1502;FM_MapFull;;0x02;../../fsfw/container/FixedMap.h;FIXED_MAP
|
||||
0x1503;FM_KeyDoesNotExist;;0x03;../../fsfw/container/FixedMap.h;FIXED_MAP
|
||||
0x2401;EV_ListenerNotFound;;1;../../fsfw/events/EventManagerIF.h;EVENT_MANAGER_IF
|
||||
0x1701;HHI_ObjectNotHealthy;;1;../../fsfw/health/HasHealthIF.h;HAS_HEALTH_IF
|
||||
0x1702;HHI_InvalidHealthState;;2;../../fsfw/health/HasHealthIF.h;HAS_HEALTH_IF
|
||||
0x2f01;POS_InPowerTransition;;1;../../fsfw/power/PowerSwitcher.h;POWER_SWITCHER
|
||||
0x2f02;POS_SwitchStateMismatch;;2;../../fsfw/power/PowerSwitcher.h;POWER_SWITCHER
|
||||
0x501;PS_SwitchOn;;1;../../fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x500;PS_SwitchOff;;0;../../fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x502;PS_SwitchTimeout;;2;../../fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x503;PS_FuseOn;;3;../../fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x504;PS_FuseOff;;4;../../fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x1a01;TRC_NotEnoughSensors;;1;../../fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x1a02;TRC_LowestValueOol;;2;../../fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x1a03;TRC_HighestValueOol;;3;../../fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x1a04;TRC_BothValuesOol;;4;../../fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x1a05;TRC_DuplexOol;;5;../../fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x3001;LIM_Unchecked;;1;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3002;LIM_Invalid;;2;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3003;LIM_Unselected;;3;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3004;LIM_BelowLowLimit;;4;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3005;LIM_AboveHighLimit;;5;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3006;LIM_UnexpectedValue;;6;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3007;LIM_OutOfRange;;7;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30a0;LIM_FirstSample;;0xA0;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30e0;LIM_InvalidSize;;0xE0;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30e1;LIM_WrongType;;0xE1;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30e2;LIM_WrongPid;;0xE2;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30e3;LIM_WrongLimitId;;0xE3;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30ee;LIM_MonitorNotFound;;0xEE;../../fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x4000;FILS_GenericFileError;;0;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4001;FILS_IsBusy;;1;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4002;FILS_InvalidParameters;;2;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4005;FILS_FileDoesNotExist;;5;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4006;FILS_FileAlreadyExists;;6;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4007;FILS_FileLocked;;7;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x400a;FILS_DirectoryDoesNotExist;;10;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x400b;FILS_DirectoryAlreadyExists;;11;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x400c;FILS_DirectoryNotEmpty;;12;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x400f;FILS_SequencePacketMissingWrite;;15;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4010;FILS_SequencePacketMissingRead;;16;../../fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x601;PP_DoItMyself;;1;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x602;PP_PointsToVariable;;2;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x603;PP_PointsToMemory;;3;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x604;PP_ActivityCompleted;;4;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x605;PP_PointsToVectorUint8;;5;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x606;PP_PointsToVectorUint16;;6;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x607;PP_PointsToVectorUint32;;7;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x608;PP_PointsToVectorFloat;;8;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6a0;PP_DumpNotSupported;;0xA0;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e0;PP_InvalidSize;;0xE0;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e1;PP_InvalidAddress;;0xE1;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e2;PP_InvalidContent;;0xE2;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e3;PP_UnalignedAccess;;0xE3;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e4;PP_WriteProtected;;0xE4;../../fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x13e0;MH_UnknownCmd;;0xE0;../../fsfw/memory/MemoryHelper.h;MEMORY_HELPER
|
||||
0x13e1;MH_InvalidAddress;;0xE1;../../fsfw/memory/MemoryHelper.h;MEMORY_HELPER
|
||||
0x13e2;MH_InvalidSize;;0xE2;../../fsfw/memory/MemoryHelper.h;MEMORY_HELPER
|
||||
0x13e3;MH_StateMismatch;;0xE3;../../fsfw/memory/MemoryHelper.h;MEMORY_HELPER
|
||||
0x1201;AB_NeedSecondStep;;0x01;../../fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x1202;AB_NeedToReconfigure;;0x02;../../fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x1203;AB_ModeFallback;;0x03;../../fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x1204;AB_ChildNotCommandable;;0x04;../../fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x1205;AB_NeedToChangeHealth;;0x05;../../fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x12a1;AB_NotEnoughChildrenInCorrectState;;0xa1;../../fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x3a0;DHB_InvalidChannel;;0xA0;../../fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3b0;DHB_AperiodicReply;;0xB0;../../fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3b1;DHB_IgnoreReplyData;;0xB1;../../fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3b2;DHB_IgnoreFullPacket;;0xB2;../../fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3c0;DHB_NothingToSend;;0xC0;../../fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3c2;DHB_CommandMapError;;0xC2;../../fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3d0;DHB_NoSwitch;;0xD0;../../fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3e0;DHB_ChildTimeout;;0xE0;../../fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3e1;DHB_SwitchFailed;;0xE1;../../fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3301;DC_NoReplyReceived;;0x01;../../fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3302;DC_ProtocolError;;0x02;../../fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3303;DC_Nullpointer;;0x03;../../fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3304;DC_InvalidCookieType;;0x04;../../fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3305;DC_NotActive;;0x05;../../fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3306;DC_TooMuchData;;0x06;../../fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x26a0;DHI_NoCommandData;;0xA0;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a1;DHI_CommandNotSupported;;0xA1;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a2;DHI_CommandAlreadySent;;0xA2;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a3;DHI_CommandWasNotSent;;0xA3;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a4;DHI_CantSwitchAddress;;0xA4;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a5;DHI_WrongModeForCommand;;0xA5;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a6;DHI_Timeout;;0xA6;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a7;DHI_Busy;;0xA7;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a8;DHI_NoReplyExpected;;0xA8;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a9;DHI_NonOpTemperature;;0xA9;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26aa;DHI_CommandNotImplemented;;0xAA;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26b0;DHI_ChecksumError;;0xB0;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26b1;DHI_LengthMissmatch;;0xB1;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26b2;DHI_InvalidData;;0xB2;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26b3;DHI_ProtocolError;;0xB3;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26c0;DHI_DeviceDidNotExecute;;0xC0;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26c1;DHI_DeviceReportedError;;0xC1;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26c2;DHI_UnknownDeviceReply;;0xC2;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26c3;DHI_DeviceReplyInvalid;;0xC3;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26d0;DHI_InvalidCommandParameter;;0xD0;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26d1;DHI_InvalidNumberOrLengthOfParameters;;0xD1;../../fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x1401;SE_BufferTooShort;;1;../../fsfw/serialize/SerializeIF.h;SERIALIZE_IF
|
||||
0x1402;SE_StreamTooShort;;2;../../fsfw/serialize/SerializeIF.h;SERIALIZE_IF
|
||||
0x1403;SE_TooManyElements;;3;../../fsfw/serialize/SerializeIF.h;SERIALIZE_IF
|
||||
0x4aa1;HEATER_CommandNotSupported;;0xA1;../../linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x4aa2;HEATER_InitFailed;;0xA2;../../linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x4aa3;HEATER_InvalidSwitchNr;;0xA3;../../linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x4aa4;HEATER_MainSwitchSetTimeout;;0xA4;../../linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x4aa5;HEATER_CommandAlreadyWaiting;;0xA5;../../linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x4ea0;SUSS_ErrorUnlockMutex;;0xA0;../../linux/devices/SusHandler.h;SUS_HANDLER
|
||||
0x4ea1;SUSS_ErrorLockMutex;;0xA1;../../linux/devices/SusHandler.h;SUS_HANDLER
|
||||
0x57a0;SADPL_CommandNotSupported;;0xA0;../../linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x57a1;SADPL_DeploymentAlreadyExecuting;;0xA1;../../linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x57a2;SADPL_MainSwitchTimeoutFailure;;0xA2;../../linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x57a3;SADPL_SwitchingDeplSa1Failed;;0xA3;../../linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x57a4;SADPL_SwitchingDeplSa2Failed;;0xA4;../../linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x5e00;GOMS_PacketTooLong;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
|
||||
0x5e01;GOMS_InvalidTableId;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
|
||||
0x5e02;GOMS_InvalidAddress;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
|
||||
0x5e03;GOMS_InvalidParamSize;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
|
||||
0x5e04;GOMS_InvalidPayloadSize;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
|
||||
0x5e05;GOMS_UnknownReplyId;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
|
||||
0x50a0;IMTQ_InvalidCommandCode;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x50a1;IMTQ_ParameterMissing;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x50a2;IMTQ_ParameterInvalid;;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x50a3;IMTQ_CcUnavailable;;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x50a4;IMTQ_InternalProcessingError;;0xA4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x50a5;IMTQ_RejectedWithoutReason;;0xA5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x50a6;IMTQ_CmdErrUnknown;;0xA6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x50a7;IMTQ_UnexpectedSelfTestReply;The status reply to a self test command was received but no self test command has been sent. This should normally never happen.;0xA7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/IMTQHandler.h;IMTQ_HANDLER
|
||||
0x53a0;PLMP_CrcFailure;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocMPSoCHandler.h;PLOC_MPSOC_HANDLER
|
||||
0x53a1;PLMP_ReceivedAckFailure;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocMPSoCHandler.h;PLOC_MPSOC_HANDLER
|
||||
0x53a2;PLMP_ReceivedExeFailure;;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocMPSoCHandler.h;PLOC_MPSOC_HANDLER
|
||||
0x53a3;PLMP_InvalidApid;;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocMPSoCHandler.h;PLOC_MPSOC_HANDLER
|
||||
0x54a0;PLSV_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54a1;PLSV_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54a2;PLSV_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54a3;PLSV_InvalidApid;Received space packet with invalid APID from PLOC supervisor;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54a4;PLSV_GetTimeFailure;Failed to read current system time;0xA4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54a5;PLSV_InvalidUartComIf;Invalid communication interface specified;0xA5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54a6;PLSV_InvalidWatchdog;Received command with invalid watchdog parameter. Valid watchdogs are 0 for PS, 1 for PL and 2 for INT;0xA6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54a7;PLSV_InvalidWatchdogTimeout;Received watchdog timeout config command with invalid timeout. Valid timeouts must be in the range between 1000 and 360000 ms.;0xA7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54a8;PLSV_InvalidLatchupId;Received latchup config command with invalid latchup ID;0xA8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54a9;PLSV_SweepPeriodTooSmall;Received set adc sweep period command with invalid sweep period. Must be larger than 21.;0xA9;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54aa;PLSV_InvalidTestParam;Receive auto EM test command with invalid test param. Valid params are 1 and 2.;0xAA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54ab;PLSV_MramPacketParsingFailure;Returned when scanning for MRAM dump packets failed.;0xAB;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54ac;PLSV_InvalidMramAddresses;Returned when the start and stop addresses of the MRAM dump or MRAM wipe commands are invalid (e.g. start address bigger than stop address);0xAC;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x54ad;PLSV_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;0xAD;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
|
||||
0x57a0;PLUD_UpdaterBusy;Updater is already performing an update;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h;PLOC_UPDATER
|
||||
0x57a1;PLUD_NameTooLong;Received update command with invalid path string (too long).;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h;PLOC_UPDATER
|
||||
0x57a2;PLUD_SdNotMounted;Received command to initiate update but SD card with update image not mounted.;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h;PLOC_UPDATER
|
||||
0x57a3;PLUD_FileNotExists;Update file received with update command does not exist.;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/PlocUpdater.h;PLOC_UPDATER
|
||||
0x51b0;RWHA_SpiWriteFailure;;0xB0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;0xB1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;0xB2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;0xB3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;0xB4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;0xB5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51a0;RWHA_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000; 1000] or [1000; 65000];0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51a1;RWHA_InvalidRampTime;Action Message with invalid ramp time was received.;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51a2;RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51a3;RWHA_ExecutionFailed;Command execution failed;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x51a4;RWHA_CrcError;Reaction wheel reply has invalid crc;0xA4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/RwHandler.h;RW_HANDLER
|
||||
0x52b0;STRH_CrcFailure;Received reply with invalid CRC;0xB0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/StarTrackerHandler.h;STR_HANDLER
|
||||
0x52a0;STRH_TmReplyError;Result code of tm reply indicates an error;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/StarTrackerHandler.h;STR_HANDLER
|
||||
0x4fa0;SYRLINKS_CrcFailure;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4fa1;SYRLINKS_UartFraminOrParityErrorAck;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4fa2;SYRLINKS_BadCharacterAck;;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4fa3;SYRLINKS_BadParameterValueAck;;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4fa4;SYRLINKS_BadEndOfFrameAck;;0xA4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4fa5;SYRLINKS_UnknownCommandIdAck;;0xA5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4fa6;SYRLINKS_BadCrcAck;;0xA6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4fa7;SYRLINKS_ReplyWrongSize;;0xA7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4fa8;SYRLINKS_MissingStartFrameCharacter;;0xA8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
|
||||
0x4401;HGIO_UnknownGpioId;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
|
||||
0x4402;HGIO_DriveGpioFailure;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
|
||||
0x4403;HGIO_GpioTypeFailure;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
|
||||
0x4404;HGIO_GpioInvalidInstance;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
|
||||
0x4100;HSPI_HalTimeoutRetval;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/stm32h7/spi/spiDefinitions.h;HAL_SPI
|
||||
0x4101;HSPI_HalBusyRetval;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/stm32h7/spi/spiDefinitions.h;HAL_SPI
|
||||
0x4102;HSPI_HalErrorRetval;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/stm32h7/spi/spiDefinitions.h;HAL_SPI
|
||||
0x4201;HURT_UartReadFailure;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART
|
||||
0x4202;HURT_UartReadSizeMissmatch;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART
|
||||
0x4203;HURT_UartRxBufferTooSmall;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART
|
||||
0x3101;CF_ObjectHasNoFunctions;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF
|
||||
0x3102;CF_AlreadyCommanding;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF
|
||||
0x3201;HF_IsBusy;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
|
||||
0x3202;HF_InvalidParameters;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
|
||||
0x3203;HF_ExecutionFinished;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
|
||||
0x3204;HF_InvalidActionId;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
|
||||
0x1101;AL_Full;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/container/ArrayList.h;ARRAY_LIST
|
||||
0x1801;FF_Full;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS
|
||||
0x1802;FF_Empty;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS
|
||||
0x1501;FM_KeyAlreadyExists;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP
|
||||
0x1502;FM_MapFull;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP
|
||||
0x1503;FM_KeyDoesNotExist;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP
|
||||
0x1601;FMM_MapFull;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP
|
||||
0x1602;FMM_KeyDoesNotExist;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP
|
||||
0x36a1;SGP4_InvalidEccentricity;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a2;SGP4_InvalidMeanMotion;;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a3;SGP4_InvalidPerturbationElements;;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a4;SGP4_InvalidSemiLatusRectum;;0xA4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a5;SGP4_InvalidEpochElements;;0xA5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36a6;SGP4_SatelliteHasDecayed;;0xA6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36b1;SGP4_TleTooOld;;0xB1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x36b2;SGP4_TleNotInitialized;;0xB2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
|
||||
0x2b01;CCS_BcIsSetVrCommand;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2b02;CCS_BcIsUnlockCommand;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bb0;CCS_BcIllegalCommand;;0xB0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bb1;CCS_BoardReadingNotFinished;;0xB1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf0;CCS_NsPositiveW;;0xF0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf1;CCS_NsNegativeW;;0xF1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf2;CCS_NsLockout;;0xF2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf3;CCS_FarmInLockout;;0xF3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bf4;CCS_FarmInWait;;0xF4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be0;CCS_WrongSymbol;;0xE0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be1;CCS_DoubleStart;;0xE1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be2;CCS_StartSymbolMissed;;0xE2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be3;CCS_EndWithoutStart;;0xE3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be4;CCS_TooLarge;;0xE4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be5;CCS_TooShort;;0xE5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be6;CCS_WrongTfVersion;;0xE6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be7;CCS_WrongSpacecraftId;;0xE7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be8;CCS_NoValidFrameType;;0xE8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2be9;CCS_CrcFailed;;0xE9;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bea;CCS_VcNotFound;;0xEA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2beb;CCS_ForwardingFailed;;0xEB;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bec;CCS_ContentTooLarge;;0xEC;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bed;CCS_ResidualData;;0xED;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bee;CCS_DataCorrupted;;0xEE;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bef;CCS_IllegalSegmentationFlag;;0xEF;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bd0;CCS_IllegalFlagCombination;;0xD0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bd1;CCS_ShorterThanHeader;;0xD1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bd2;CCS_TooShortBlockedPacket;;0xD2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x2bd3;CCS_TooShortMapExtraction;;0xD3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
|
||||
0x801;DPS_InvalidParameterDefinition;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x802;DPS_SetWasAlreadyRead;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x803;DPS_CommitingWithoutReading;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x804;DPS_DataSetUninitialised;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x805;DPS_DataSetFull;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x806;DPS_PoolVarNull;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
|
||||
0x3ba0;PVA_InvalidReadWriteMode;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF
|
||||
0x3ba1;PVA_InvalidPoolEntry;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF
|
||||
0x3c00;HKM_QueueOrDestinationInvalid;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c01;HKM_WrongHkPacketType;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c02;HKM_ReportingStatusUnchanged;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c03;HKM_PeriodicHelperInvalid;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c04;HKM_PoolobjectNotFound;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3c05;HKM_DatasetNotFound;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
|
||||
0x3a00;LPIF_PoolEntryNotFound;;0x00;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF
|
||||
0x3a01;LPIF_PoolEntryTypeConflict;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF
|
||||
0x1201;AB_NeedSecondStep;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x1202;AB_NeedToReconfigure;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x1203;AB_ModeFallback;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x1204;AB_ChildNotCommandable;;0x04;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x1205;AB_NeedToChangeHealth;;0x05;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x12a1;AB_NotEnoughChildrenInCorrectState;;0xa1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
|
||||
0x3301;DC_NoReplyReceived;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3302;DC_ProtocolError;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3303;DC_Nullpointer;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3304;DC_InvalidCookieType;;0x04;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3305;DC_NotActive;;0x05;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3306;DC_TooMuchData;;0x06;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
|
||||
0x3a0;DHB_InvalidChannel;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3b0;DHB_AperiodicReply;;0xB0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3b1;DHB_IgnoreReplyData;;0xB1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3b2;DHB_IgnoreFullPacket;;0xB2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3c0;DHB_NothingToSend;;0xC0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3c2;DHB_CommandMapError;;0xC2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3d0;DHB_NoSwitch;;0xD0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3e0;DHB_ChildTimeout;;0xE0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x3e1;DHB_SwitchFailed;;0xE1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
|
||||
0x26a0;DHI_NoCommandData;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a1;DHI_CommandNotSupported;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a2;DHI_CommandAlreadySent;;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a3;DHI_CommandWasNotSent;;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a4;DHI_CantSwitchAddress;;0xA4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a5;DHI_WrongModeForCommand;;0xA5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a6;DHI_Timeout;;0xA6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a7;DHI_Busy;;0xA7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a8;DHI_NoReplyExpected;;0xA8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26a9;DHI_NonOpTemperature;;0xA9;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26aa;DHI_CommandNotImplemented;;0xAA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26b0;DHI_ChecksumError;;0xB0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26b1;DHI_LengthMissmatch;;0xB1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26b2;DHI_InvalidData;;0xB2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26b3;DHI_ProtocolError;;0xB3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26c0;DHI_DeviceDidNotExecute;;0xC0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26c1;DHI_DeviceReportedError;;0xC1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26c2;DHI_UnknownDeviceReply;;0xC2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26c3;DHI_DeviceReplyInvalid;;0xC3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26d0;DHI_InvalidCommandParameter;;0xD0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x26d1;DHI_InvalidNumberOrLengthOfParameters;;0xD1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
|
||||
0x2401;EV_ListenerNotFound;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/events/EventManagerIF.h;EVENT_MANAGER_IF
|
||||
0x2500;FDI_YourFault;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF
|
||||
0x2501;FDI_MyFault;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF
|
||||
0x2502;FDI_ConfirmLater;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF
|
||||
0x2301;MT_TooDetailedRequest;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x2302;MT_TooGeneralRequest;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x2303;MT_NoMatch;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x2304;MT_Full;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x2305;MT_NewNodeCreated;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
|
||||
0x2e01;ASC_TooLongForTargetType;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
|
||||
0x2e02;ASC_InvalidCharacters;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
|
||||
0x2e03;ASC_BufferTooSmall;;0x3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
|
||||
0x3d01;DLEE_StreamTooShort;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER
|
||||
0x3d02;DLEE_DecodingError;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER
|
||||
0x1701;HHI_ObjectNotHealthy;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF
|
||||
0x1702;HHI_InvalidHealthState;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF
|
||||
0xf01;CM_UnknownCommand;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/CommandMessageIF.h;COMMAND_MESSAGE
|
||||
0x3801;MQI_Empty;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
|
||||
0x3802;MQI_Full;No space left for more messages;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
|
||||
0x3803;MQI_NoReplyPartner;Returned if a reply method was called without partner;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
|
||||
0x3804;MQI_DestinationInvalid;Returned if the target destination is invalid.;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
|
||||
0x3701;MUX_NotEnoughResources;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3702;MUX_InsufficientMemory;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3703;MUX_NoPrivilege;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3704;MUX_WrongAttributeSetting;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3705;MUX_MutexAlreadyLocked;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3706;MUX_MutexNotFound;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3707;MUX_MutexMaxLocks;;7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3708;MUX_CurrThreadAlreadyOwnsMutex;;8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x3709;MUX_CurrThreadDoesNotOwnMutex;;9;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x370a;MUX_MutexTimeout;;10;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x370b;MUX_MutexInvalidId;;11;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x370c;MUX_MutexDestroyedWhileWaiting;;12;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
|
||||
0x4000;FILS_GenericFileError;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4001;FILS_IsBusy;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4002;FILS_InvalidParameters;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4005;FILS_FileDoesNotExist;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4006;FILS_FileAlreadyExists;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4007;FILS_FileLocked;;7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x400a;FILS_DirectoryDoesNotExist;;10;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x400b;FILS_DirectoryAlreadyExists;;11;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x400c;FILS_DirectoryNotEmpty;;12;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x400f;FILS_SequencePacketMissingWrite;;15;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x4010;FILS_SequencePacketMissingRead;;16;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
|
||||
0x601;PP_DoItMyself;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x602;PP_PointsToVariable;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x603;PP_PointsToMemory;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x604;PP_ActivityCompleted;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x605;PP_PointsToVectorUint8;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x606;PP_PointsToVectorUint16;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x607;PP_PointsToVectorUint32;;7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x608;PP_PointsToVectorFloat;;8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6a0;PP_DumpNotSupported;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e0;PP_InvalidSize;;0xE0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e1;PP_InvalidAddress;;0xE1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e2;PP_InvalidContent;;0xE2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e3;PP_UnalignedAccess;;0xE3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x6e4;PP_WriteProtected;;0xE4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
|
||||
0x13e0;MH_UnknownCmd;;0xE0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
|
||||
0x13e1;MH_InvalidAddress;;0xE1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
|
||||
0x13e2;MH_InvalidSize;;0xE2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
|
||||
0x13e3;MH_StateMismatch;;0xE3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
|
||||
0xe01;HM_InvalidMode;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
|
||||
0xe02;HM_TransNotAllowed;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
|
||||
0xe03;HM_InTransition;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
|
||||
0xe04;HM_InvalidSubmode;;0x04;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
|
||||
0x3001;LIM_Unchecked;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3002;LIM_Invalid;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3003;LIM_Unselected;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3004;LIM_BelowLowLimit;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3005;LIM_AboveHighLimit;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3006;LIM_UnexpectedValue;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x3007;LIM_OutOfRange;;7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30a0;LIM_FirstSample;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30e0;LIM_InvalidSize;;0xE0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30e1;LIM_WrongType;;0xE1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30e2;LIM_WrongPid;;0xE2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30e3;LIM_WrongLimitId;;0xE3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x30ee;LIM_MonitorNotFound;;0xEE;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
|
||||
0x1a01;TRC_NotEnoughSensors;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x1a02;TRC_LowestValueOol;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x1a03;TRC_HighestValueOol;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x1a04;TRC_BothValuesOol;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x1a05;TRC_DuplexOol;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
|
||||
0x201;OM_InsertionFailed;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
|
||||
0x202;OM_NotFound;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
|
||||
0x203;OM_ChildInitFailed;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
|
||||
0x204;OM_InternalErrReporterUninit;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
|
||||
0x2901;IEC_NoConfigurationTable;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2902;IEC_NoCpuTable;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2903;IEC_InvalidWorkspaceAddress;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2904;IEC_TooLittleWorkspace;;0x04;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2905;IEC_WorkspaceAllocation;;0x05;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2906;IEC_InterruptStackTooSmall;;0x06;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2907;IEC_ThreadExitted;;0x07;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2908;IEC_InconsistentMpInformation;;0x08;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2909;IEC_InvalidNode;;0x09;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290a;IEC_NoMpci;;0x0a;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290b;IEC_BadPacket;;0x0b;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290c;IEC_OutOfPackets;;0x0c;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290d;IEC_OutOfGlobalObjects;;0x0d;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290e;IEC_OutOfProxies;;0x0e;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x290f;IEC_InvalidGlobalId;;0x0f;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2910;IEC_BadStackHook;;0x10;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2911;IEC_BadAttributes;;0x11;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2912;IEC_ImplementationKeyCreateInconsistency;;0x12;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2913;IEC_ImplementationBlockingOperationCancel;;0x13;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2914;IEC_MutexObtainFromBadState;;0x14;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2915;IEC_UnlimitedAndMaximumIs0;;0x15;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
|
||||
0x2d01;HPA_InvalidIdentifierId;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
|
||||
0x2d02;HPA_InvalidDomainId;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
|
||||
0x2d03;HPA_InvalidValue;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
|
||||
0x2d05;HPA_ReadOnly;;0x05;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
|
||||
0x2c01;PAW_UnknownDatatype;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c02;PAW_DatatypeMissmatch;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c03;PAW_Readonly;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c04;PAW_TooBig;;0x04;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c05;PAW_SourceNotSet;;0x05;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c06;PAW_OutOfBounds;;0x06;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c07;PAW_NotSet;;0x07;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2c08;PAW_ColumnOrRowsZero;;0x08;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
|
||||
0x2f01;POS_InPowerTransition;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER
|
||||
0x2f02;POS_SwitchStateMismatch;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER
|
||||
0x501;PS_SwitchOn;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x500;PS_SwitchOff;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x502;PS_SwitchTimeout;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x503;PS_FuseOn;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x504;PS_FuseOff;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
|
||||
0x4e1;RMP_CommandNoDescriptorsAvailable;;0xE1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e2;RMP_CommandBufferFull;;0xE2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e3;RMP_CommandChannelOutOfRange;;0xE3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e6;RMP_CommandChannelDeactivated;;0xE6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e7;RMP_CommandPortOutOfRange;;0xE7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e8;RMP_CommandPortInUse;;0xE8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4e9;RMP_CommandNoChannel;;0xE9;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4ea;RMP_NoHwCrc;;0xEA;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d0;RMP_ReplyNoReply;;0xD0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d1;RMP_ReplyNotSent;;0xD1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d2;RMP_ReplyNotYetSent;;0xD2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d3;RMP_ReplyMissmatch;;0xD3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4d4;RMP_ReplyTimeout;;0xD4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4c0;RMP_ReplyInterfaceBusy;;0xC0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4c1;RMP_ReplyTransmissionError;;0xC1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4c2;RMP_ReplyInvalidData;;0xC2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4c3;RMP_ReplyNotSupported;;0xC3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f0;RMP_LinkDown;;0xF0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f1;RMP_SpwCredit;;0xF1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f2;RMP_SpwEscape;;0xF2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f3;RMP_SpwDisconnect;;0xF3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f4;RMP_SpwParity;;0xF4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f5;RMP_SpwWriteSync;;0xF5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f6;RMP_SpwInvalidAddress;;0xF6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f7;RMP_SpwEarlyEop;;0xF7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f8;RMP_SpwDma;;0xF8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x4f9;RMP_SpwLinkError;;0xF9;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x400;RMP_ReplyOk;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x401;RMP_ReplyGeneralErrorCode;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x402;RMP_ReplyUnusedPacketTypeOrCommandCode;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x403;RMP_ReplyInvalidKey;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x404;RMP_ReplyInvalidDataCrc;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x405;RMP_ReplyEarlyEop;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x406;RMP_ReplyTooMuchData;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x407;RMP_ReplyEep;;7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x408;RMP_ReplyReserved;;8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x409;RMP_ReplyVerifyBufferOverrun;;9;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x40a;RMP_ReplyCommandNotImplementedOrNotAuthorised;;10;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x40b;RMP_ReplyRmwDataLengthError;;11;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x40c;RMP_ReplyInvalidTargetLogicalAddress;;12;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
|
||||
0x1401;SE_BufferTooShort;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF
|
||||
0x1402;SE_StreamTooShort;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF
|
||||
0x1403;SE_TooManyElements;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF
|
||||
0x2701;SM_DataTooLarge;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2702;SM_DataStorageFull;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2703;SM_IllegalStorageId;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2704;SM_DataDoesNotExist;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2705;SM_IllegalAddress;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0x2706;SM_PoolTooLarge;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
|
||||
0xc02;MS_InvalidEntry;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
|
||||
0xc03;MS_TooManyElements;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
|
||||
0xc04;MS_CantStoreEmpty;;0x04;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
|
||||
0xd01;SS_SequenceAlreadyExists;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd02;SS_TableAlreadyExists;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd03;SS_TableDoesNotExist;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd04;SS_TableOrSequenceLengthInvalid;;0x04;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd05;SS_SequenceDoesNotExist;;0x05;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd06;SS_TableContainsInvalidObjectId;;0x06;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd07;SS_FallbackSequenceDoesNotExist;;0x07;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd08;SS_NoTargetTable;;0x08;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd09;SS_SequenceOrTableTooLong;;0x09;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd0b;SS_IsFallbackSequence;;0x0B;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd0c;SS_AccessDenied;;0x0C;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xd0e;SS_TableInUse;;0x0E;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xda1;SS_TargetTableNotReached;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xda2;SS_TableCheckFailed;;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
|
||||
0xb01;SB_ChildNotFound;;0x01;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0xb02;SB_ChildInfoUpdated;;0x02;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0xb03;SB_ChildDoesntHaveModes;;0x03;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0xb04;SB_CouldNotInsertChild;;0x04;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0xb05;SB_TableContainsInvalidObjectId;;0x05;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
|
||||
0x3901;SPH_SemaphoreTimeout;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
|
||||
0x3902;SPH_SemaphoreNotOwned;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
|
||||
0x3903;SPH_SemaphoreInvalid;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
|
||||
0x1c01;TCD_PacketLost;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
|
||||
0x1c02;TCD_DestinationNotFound;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
|
||||
0x1c03;TCD_ServiceIdAlreadyExists;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
|
||||
0x1b00;TCC_IllegalApid;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b01;TCC_IncompletePacket;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b02;TCC_IncorrectChecksum;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b03;TCC_IllegalPacketType;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b04;TCC_IllegalPacketSubtype;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b05;TCC_IncorrectPrimaryHeader;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x1b06;TCC_IncorrectSecondaryHeader;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tcdistribution/TcPacketCheck.h;TC_PACKET_CHECK
|
||||
0x2801;TC_InvalidTargetState;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
|
||||
0x28f1;TC_AboveOperationalLimit;;0xF1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
|
||||
0x28f2;TC_BelowOperationalLimit;;0xF2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
|
||||
0x1000;TIM_UnsupportedTimeFormat;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1001;TIM_NotEnoughInformationForTargetFormat;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1002;TIM_LengthMismatch;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1003;TIM_InvalidTimeFormat;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1004;TIM_InvalidDayOfYear;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x1005;TIM_TimeDoesNotFitFormat;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
|
||||
0x3501;TSI_BadTimestamp;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/timemanager/TimeStamperIF.h;TIME_STAMPER_IF
|
||||
0x2001;TMB_Busy;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2002;TMB_Full;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2003;TMB_Empty;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2004;TMB_NullRequested;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2005;TMB_TooLarge;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2006;TMB_NotReady;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2007;TMB_DumpError;;7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2008;TMB_CrcError;;8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2009;TMB_Timeout;;9;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200a;TMB_IdlePacketFound;;10;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200b;TMB_TelecommandFound;;11;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200c;TMB_NoPusATm;;12;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200d;TMB_TooSmall;;13;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200e;TMB_BlockNotFound;;14;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x200f;TMB_InvalidRequest;;15;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
|
||||
0x2101;TMF_Busy;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2102;TMF_LastPacketFound;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2103;TMF_StopFetch;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2104;TMF_Timeout;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2105;TMF_TmChannelFull;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2106;TMF_NotStored;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2107;TMF_AllDeleted;;7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2108;TMF_InvalidData;;8;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x2109;TMF_NotReady;;9;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
|
||||
0x1d01;PUS_ActivityStarted;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1d02;PUS_InvalidSubservice;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1d03;PUS_IllegalApplicationData;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1d04;PUS_SendTmFailed;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1d05;PUS_Timeout;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
|
||||
0x1f01;CSB_ExecutionComplete;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f02;CSB_NoStepMessage;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f03;CSB_ObjectBusy;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f04;CSB_Busy;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f05;CSB_InvalidTc;;5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f06;CSB_InvalidObject;;6;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x1f07;CSB_InvalidReply;;7;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
|
||||
0x6100;SCBU_KeyNotFound;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/memory/scratchApi.h;SCRATCH_BUFFER
|
||||
0x6000;SDMA_AlreadyOn;;0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
|
||||
0x6001;SDMA_UnknownGpioId;;1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/archive/gpio/LinuxLibgpioIF.h;SD_CARD_MANAGER
|
||||
0x6002;SDMA_DriveGpioFailure;;2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/archive/gpio/LinuxLibgpioIF.h;SD_CARD_MANAGER
|
||||
0x600a;SDMA_StatusFileNexists;;10;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
|
||||
0x600b;SDMA_StatusFileFormatInvalid;;11;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
|
||||
0x600c;SDMA_MountError;;12;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
|
||||
0x600d;SDMA_UnmountError;;13;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
|
||||
0x600e;SDMA_SystemCallError;;14;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
|
||||
0x6003;SDMA_GpioTypeFailure;;3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/archive/gpio/LinuxLibgpioIF.h;SD_CARD_MANAGER
|
||||
0x6004;SDMA_GpioInvalidInstance;;4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/archive/gpio/LinuxLibgpioIF.h;SD_CARD_MANAGER
|
||||
0x4ea1;HEATER_CommandNotSupported;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x4ea2;HEATER_InitFailed;;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x4ea3;HEATER_InvalidSwitchNr;;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x4ea4;HEATER_MainSwitchSetTimeout;;0xA4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x4ea5;HEATER_CommandAlreadyWaiting;;0xA5;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/HeaterHandler.h;HEATER_HANDLER
|
||||
0x5fa0;SADPL_CommandNotSupported;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x5fa1;SADPL_DeploymentAlreadyExecuting;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x5fa2;SADPL_MainSwitchTimeoutFailure;;0xA2;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x5fa3;SADPL_SwitchingDeplSa1Failed;;0xA3;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x5fa4;SADPL_SwitchingDeplSa2Failed;;0xA4;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
|
||||
0x55a0;SUSS_ErrorUnlockMutex;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/SusHandler.h;SUS_HANDLER
|
||||
0x55a1;SUSS_ErrorLockMutex;;0xA1;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/devices/SusHandler.h;SUS_HANDLER
|
||||
0x56a0;IPCI_PapbBusy;;0xA0;C:\Users\jakob\Work\EIVE\Q7S\Software\eive_obsw/linux/obc/CCSDSIPCoreBridge.h;CCSDS_IP_CORE_BRIDGE
|
||||
|
Can't render this file because it has a wrong number of fields in line 45.
|
@ -1,5 +1,10 @@
|
||||
import os
|
||||
import enum
|
||||
from pathlib import Path
|
||||
|
||||
PATH_VAR_ROOT = Path(os.path.abspath(os.curdir))
|
||||
ROOT_DIR = PATH_VAR_ROOT.absolute()
|
||||
OBSW_ROOT_DIR = PATH_VAR_ROOT.parent.absolute()
|
||||
DATABASE_NAME = "eive_mod.db"
|
||||
|
||||
|
||||
|
@ -1,23 +1,18 @@
|
||||
#! /usr/bin/python3
|
||||
"""
|
||||
@file event_parser.py
|
||||
@brief Part of the Mission Information Base Exporter for the SOURCE project by KSat.
|
||||
@details
|
||||
"""Part of the Mission Operation Database Exporter for the EVIE project.
|
||||
Event exporter.
|
||||
|
||||
To use MySQLdb, run pip install mysqlclient or install in IDE.
|
||||
On Windows, Build Tools installation might be necessary
|
||||
@data 21.11.2019
|
||||
"""
|
||||
import datetime
|
||||
import time
|
||||
|
||||
from fsfwgen.events.event_parser import handle_csv_export, handle_cpp_export, SubsystemDefinitionParser, EventParser
|
||||
from fsfwgen.events.event_parser import handle_csv_export, handle_cpp_export, \
|
||||
SubsystemDefinitionParser, EventParser
|
||||
from fsfwgen.parserbase.file_list_parser import FileListParser
|
||||
from fsfwgen.utility.printer import PrettyPrinter
|
||||
from fsfwgen.utility.file_management import copy_file, move_file
|
||||
from fsfwgen.core import get_console_logger
|
||||
from definitions import BspType, ROOT_DIR, OBSW_ROOT_DIR
|
||||
|
||||
from definitions import BspType
|
||||
|
||||
LOGGER = get_console_logger()
|
||||
DATE_TODAY = datetime.datetime.now()
|
||||
DATE_STRING_FULL = DATE_TODAY.strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
@ -30,56 +25,67 @@ MOVE_CSV_FILE = True
|
||||
|
||||
PARSE_HOST_BSP = True
|
||||
|
||||
CPP_FILENAME = "translateEvents.cpp"
|
||||
CPP_H_FILENAME = "translateEvents.h"
|
||||
CPP_FILENAME = f'{__package__}/translateEvents.cpp'
|
||||
CPP_H_FILENAME = f'{__package__}/translateEvents.h'
|
||||
|
||||
BSP_SELECT = BspType.BSP_Q7S
|
||||
|
||||
BSP_DIR_NAME = BSP_SELECT.value
|
||||
|
||||
CSV_FILENAME = f"{BSP_SELECT.value}_events.csv"
|
||||
CSV_MOVE_DESTINATION = "../"
|
||||
CSV_MOVE_DESTINATION = f'{ROOT_DIR}'
|
||||
|
||||
if BSP_SELECT == BspType.BSP_Q7S or BSP_SELECT == BspType.BSP_LINUX_BOARD:
|
||||
FSFW_CONFIG_ROOT = f"../../linux/fsfwconfig"
|
||||
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/linux/fsfwconfig"
|
||||
|
||||
else:
|
||||
FSFW_CONFIG_ROOT = f"../../{BSP_DIR_NAME}/fsfwconfig"
|
||||
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}/fsfwconfig"
|
||||
|
||||
CPP_COPY_DESTINATION = f"{FSFW_CONFIG_ROOT}/events/"
|
||||
|
||||
FILE_SEPARATOR = ";"
|
||||
SUBSYSTEM_DEFINITION_DESTINATIONS = [
|
||||
f"{FSFW_CONFIG_ROOT}/events/subsystemIdRanges.h",
|
||||
"../../fsfw/events/fwSubsystemIdRanges.h",
|
||||
f"../../common/config/commonSubsystemIds.h"
|
||||
f"{OBSW_ROOT_DIR}/fsfw/src/fsfw/events/fwSubsystemIdRanges.h",
|
||||
f"{OBSW_ROOT_DIR}/common/config/commonSubsystemIds.h"
|
||||
]
|
||||
HEADER_DEFINITION_DESTINATIONS = [
|
||||
f"{OBSW_ROOT_DIR}/mission/", f"{OBSW_ROOT_DIR}/fsfw/", f"{FSFW_CONFIG_ROOT}",
|
||||
f"{OBSW_ROOT_DIR}/test/"
|
||||
]
|
||||
HEADER_DEFINITION_DESTINATIONS = ["../../mission/", "../../fsfw/", f"{FSFW_CONFIG_ROOT}", "../../test/"]
|
||||
|
||||
|
||||
def main():
|
||||
print("EventParser: Parsing events: ")
|
||||
event_list = parse_events()
|
||||
if GENERATE_CSV:
|
||||
handle_csv_export(file_name=CSV_FILENAME, event_list=event_list, file_separator=FILE_SEPARATOR)
|
||||
if MOVE_CSV_FILE:
|
||||
move_file(file_name=CSV_FILENAME, destination=CSV_MOVE_DESTINATION)
|
||||
if GENERATE_CPP:
|
||||
def parse_events(
|
||||
generate_csv: bool = True, generate_cpp: bool = True, print_events: bool = True
|
||||
):
|
||||
LOGGER.info("EventParser: Parsing events: ")
|
||||
# Small delay for clean printout
|
||||
time.sleep(0.01)
|
||||
event_list = generate_event_list()
|
||||
if print_events:
|
||||
PrettyPrinter.pprint(event_list)
|
||||
# Delay for clean printout
|
||||
time.sleep(0.1)
|
||||
# xml_test()
|
||||
if generate_csv:
|
||||
handle_csv_export(
|
||||
file_name=CSV_FILENAME, event_list=event_list, file_separator=FILE_SEPARATOR
|
||||
)
|
||||
if generate_cpp:
|
||||
handle_cpp_export(
|
||||
event_list=event_list, date_string=DATE_STRING_FULL, file_name=CPP_FILENAME,
|
||||
generate_header=GENERATE_CPP_H, header_file_name=CPP_H_FILENAME
|
||||
)
|
||||
if COPY_CPP_FILE:
|
||||
print(f"EventParser: Copying file to {CPP_COPY_DESTINATION}")
|
||||
LOGGER.info(f'EventParser: Copying file to {CPP_COPY_DESTINATION}')
|
||||
copy_file(CPP_FILENAME, CPP_COPY_DESTINATION)
|
||||
copy_file(CPP_H_FILENAME, CPP_COPY_DESTINATION)
|
||||
print("")
|
||||
|
||||
|
||||
def parse_events():
|
||||
def generate_event_list() -> list:
|
||||
subsystem_parser = SubsystemDefinitionParser(SUBSYSTEM_DEFINITION_DESTINATIONS)
|
||||
subsystem_table = subsystem_parser.parse_files()
|
||||
print(f"Found {len(subsystem_table)} subsystem definitions.")
|
||||
LOGGER.info(f'Found {len(subsystem_table)} subsystem definitions.')
|
||||
PrettyPrinter.pprint(subsystem_table)
|
||||
event_header_parser = FileListParser(HEADER_DEFINITION_DESTINATIONS)
|
||||
event_headers = event_header_parser.parse_header_files(
|
||||
@ -90,11 +96,6 @@ def parse_events():
|
||||
event_parser = EventParser(event_headers, subsystem_table)
|
||||
event_parser.set_moving_window_mode(moving_window_size=7)
|
||||
event_table = event_parser.parse_files()
|
||||
list_items = sorted(event_table.items())
|
||||
print(f"Found {len(list_items)} entries:")
|
||||
PrettyPrinter.pprint(list_items)
|
||||
return list_items
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
event_list = sorted(event_table.items())
|
||||
LOGGER.info(f'Found {len(event_list)} entries')
|
||||
return event_list
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @brief Auto-generated event translation file. Contains 96 translations.
|
||||
* @brief Auto-generated event translation file. Contains 102 translations.
|
||||
* @details
|
||||
* Generated on: 2021-07-12 15:20:38
|
||||
* Generated on: 2021-08-07 18:11:16
|
||||
*/
|
||||
#include "translateEvents.h"
|
||||
|
||||
@ -101,6 +101,12 @@ const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_
|
||||
const char *SUPV_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE";
|
||||
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
||||
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
||||
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
||||
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
||||
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
||||
const char *UPDATE_TRANSFER_FAILED_STRING = "UPDATE_TRANSFER_FAILED";
|
||||
const char *UPDATE_VERIFY_FAILED_STRING = "UPDATE_VERIFY_FAILED";
|
||||
const char *UPDATE_FINISHED_STRING = "UPDATE_FINISHED";
|
||||
|
||||
const char * translateEvents(Event event) {
|
||||
switch( (event & 0xffff) ) {
|
||||
@ -296,6 +302,18 @@ const char * translateEvents(Event event) {
|
||||
return SUPV_EXE_FAILURE_STRING;
|
||||
case(11504):
|
||||
return SUPV_CRC_FAILURE_EVENT_STRING;
|
||||
case(11700):
|
||||
return UPDATE_FILE_NOT_EXISTS_STRING;
|
||||
case(11701):
|
||||
return ACTION_COMMANDING_FAILED_STRING;
|
||||
case(11702):
|
||||
return UPDATE_AVAILABLE_FAILED_STRING;
|
||||
case(11703):
|
||||
return UPDATE_TRANSFER_FAILED_STRING;
|
||||
case(11704):
|
||||
return UPDATE_VERIFY_FAILED_STRING;
|
||||
case(11705):
|
||||
return UPDATE_FINISHED_STRING;
|
||||
default:
|
||||
return "UNKNOWN_EVENT";
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef FSFWCONFIG_EVENTS_TRANSLATEEVENTS_H_
|
||||
#define FSFWCONFIG_EVENTS_TRANSLATEEVENTS_H_
|
||||
|
||||
#include <fsfw/events/Event.h>
|
||||
#include "fsfw/events/Event.h"
|
||||
|
||||
const char * translateEvents(Event event);
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 78e890f947f55a9417d390fea8d9bd5684d11730
|
||||
Subproject commit 636670f7a0075533974ca0a668efa9b623a52749
|
33
generators/fsfwgen.py
Executable file
33
generators/fsfwgen.py
Executable file
@ -0,0 +1,33 @@
|
||||
#!/usr/bin/env python3
|
||||
import time
|
||||
|
||||
from objects.objects import parse_objects
|
||||
from events.event_parser import parse_events
|
||||
from returnvalues.returnvalues_parser import parse_returnvalues
|
||||
from fsfwgen.core import return_generic_args_parser, init_printout, get_console_logger, ParserTypes
|
||||
|
||||
|
||||
LOGGER = get_console_logger()
|
||||
|
||||
|
||||
def main():
|
||||
init_printout(project_string='EIVE')
|
||||
parser = return_generic_args_parser()
|
||||
args = parser.parse_args()
|
||||
if args.type == 'objects':
|
||||
LOGGER.info(f'Generating objects data..')
|
||||
time.sleep(0.05)
|
||||
parse_objects()
|
||||
elif args.type == 'events':
|
||||
LOGGER.info(f'Generating event data')
|
||||
time.sleep(0.05)
|
||||
parse_events()
|
||||
elif args.type == 'returnvalues':
|
||||
LOGGER.info('Generating returnvalue data')
|
||||
time.sleep(0.05)
|
||||
parse_returnvalues()
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@ -1,22 +1,18 @@
|
||||
#! /usr/bin/env python3
|
||||
"""
|
||||
@file objects.py
|
||||
@brief Part of the Mission Information Base Exporter for the SOURCE project by KSat.
|
||||
@details
|
||||
"""Part of the Mission Information Base Exporter for the SOURCE project by KSat.
|
||||
Object exporter.
|
||||
To use MySQLdb, run pip install mysqlclient or install in IDE.
|
||||
On Windows, Build Tools installation might be necessary
|
||||
@data 21.11.2019
|
||||
"""
|
||||
import datetime
|
||||
|
||||
from fsfwgen.objects.objects import sql_object_exporter, ObjectDefinitionParser, write_translation_file, \
|
||||
from fsfwgen.core import get_console_logger
|
||||
from fsfwgen.objects.objects import sql_object_exporter, ObjectDefinitionParser, \
|
||||
write_translation_file, \
|
||||
export_object_file, write_translation_header_file
|
||||
from fsfwgen.utility.printer import PrettyPrinter
|
||||
from fsfwgen.utility.file_management import copy_file, move_file
|
||||
|
||||
from definitions import BspType, DATABASE_NAME
|
||||
from definitions import BspType, DATABASE_NAME, OBSW_ROOT_DIR, ROOT_DIR
|
||||
|
||||
LOGGER = get_console_logger()
|
||||
DATE_TODAY = datetime.datetime.now()
|
||||
DATE_STRING_FULL = DATE_TODAY.strftime("%Y-%m-%d %H:%M:%S")
|
||||
|
||||
@ -31,23 +27,23 @@ GENERATE_HEADER = True
|
||||
BSP_SELECT = BspType.BSP_Q7S
|
||||
BSP_DIR_NAME = BSP_SELECT.value
|
||||
if BSP_SELECT == BspType.BSP_Q7S or BSP_SELECT == BspType.BSP_LINUX_BOARD:
|
||||
FSFW_CONFIG_ROOT = f"../../linux/fsfwconfig"
|
||||
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/linux/fsfwconfig"
|
||||
else:
|
||||
FSFW_CONFIG_ROOT = f"../../{BSP_DIR_NAME}/fsfwconfig"
|
||||
FSFW_CONFIG_ROOT = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}/fsfwconfig"
|
||||
|
||||
EXPORT_TO_SQL = True
|
||||
|
||||
CPP_COPY_DESTINATION = f"{FSFW_CONFIG_ROOT}/objects/"
|
||||
CSV_MOVE_DESTINATION = "../"
|
||||
CPP_FILENAME = "translateObjects.cpp"
|
||||
CPP_H_FILENAME = "translateObjects.h"
|
||||
CSV_MOVE_DESTINATION = f"{ROOT_DIR}"
|
||||
CPP_FILENAME = f'{__package__}/translateObjects.cpp'
|
||||
CPP_H_FILENAME = f'{__package__}/translateObjects.h'
|
||||
CSV_OBJECT_FILENAME = f"{BSP_SELECT.value}_objects.csv"
|
||||
FILE_SEPARATOR = ";"
|
||||
|
||||
|
||||
OBJECTS_PATH = f"{FSFW_CONFIG_ROOT}/objects/systemObjectList.h"
|
||||
FRAMEWORK_OBJECT_PATH = "../../fsfw/objectmanager/frameworkObjects.h"
|
||||
COMMON_OBJECTS_PATH = "../../common/config/commonObjects.h"
|
||||
FRAMEWORK_OBJECT_PATH = f'{OBSW_ROOT_DIR}/fsfw/src/fsfw/objectmanager/frameworkObjects.h'
|
||||
COMMON_OBJECTS_PATH = f'{OBSW_ROOT_DIR}/common/config/commonObjects.h'
|
||||
OBJECTS_DEFINITIONS = [OBJECTS_PATH, FRAMEWORK_OBJECT_PATH, COMMON_OBJECTS_PATH]
|
||||
|
||||
SQL_DELETE_OBJECTS_CMD = """
|
||||
@ -68,33 +64,33 @@ VALUES(?,?)
|
||||
"""
|
||||
|
||||
|
||||
def main():
|
||||
print("Parsing objects: ")
|
||||
list_items = parse_objects()
|
||||
handle_file_export(list_items)
|
||||
if EXPORT_TO_SQL:
|
||||
print("ObjectParser: Exporting to SQL")
|
||||
sql_object_exporter(
|
||||
object_table=list_items, delete_cmd=SQL_DELETE_OBJECTS_CMD, insert_cmd=SQL_INSERT_INTO_OBJECTS_CMD,
|
||||
create_cmd=SQL_CREATE_OBJECTS_CMD, db_filename=f"../{DATABASE_NAME}"
|
||||
)
|
||||
|
||||
|
||||
def parse_objects():
|
||||
def parse_objects(print_object_list: bool = True):
|
||||
# fetch objects
|
||||
object_parser = ObjectDefinitionParser(OBJECTS_DEFINITIONS)
|
||||
subsystem_definitions = object_parser.parse_files()
|
||||
# id_subsystem_definitions.update(framework_subsystem_definitions)
|
||||
list_items = sorted(subsystem_definitions.items())
|
||||
LOGGER.info(f'ObjectParser: Number of objects: {len(list_items)}')
|
||||
|
||||
if print_object_list:
|
||||
PrettyPrinter.pprint(list_items)
|
||||
print("ObjectParser: Number of objects: ", len(list_items))
|
||||
return list_items
|
||||
|
||||
handle_file_export(list_items)
|
||||
if EXPORT_TO_SQL:
|
||||
LOGGER.info('ObjectParser: Exporting to SQL')
|
||||
sql_object_exporter(
|
||||
object_table=list_items, delete_cmd=SQL_DELETE_OBJECTS_CMD,
|
||||
insert_cmd=SQL_INSERT_INTO_OBJECTS_CMD,
|
||||
create_cmd=SQL_CREATE_OBJECTS_CMD, db_filename=f"{ROOT_DIR}/{DATABASE_NAME}"
|
||||
)
|
||||
|
||||
|
||||
def handle_file_export(list_items):
|
||||
if GENERATE_CPP:
|
||||
print("ObjectParser: Generating translation C++ file.")
|
||||
write_translation_file(filename=CPP_FILENAME, list_of_entries=list_items, date_string_full=DATE_STRING_FULL)
|
||||
LOGGER.info('ObjectParser: Generating translation C++ file')
|
||||
write_translation_file(
|
||||
filename=CPP_FILENAME, list_of_entries=list_items, date_string_full=DATE_STRING_FULL
|
||||
)
|
||||
if COPY_CPP:
|
||||
print("ObjectParser: Copying object file to " + CPP_COPY_DESTINATION)
|
||||
copy_file(CPP_FILENAME, CPP_COPY_DESTINATION)
|
||||
@ -103,10 +99,6 @@ def handle_file_export(list_items):
|
||||
copy_file(filename=CPP_H_FILENAME, destination=CPP_COPY_DESTINATION)
|
||||
if GENERATE_CSV:
|
||||
print("ObjectParser: Generating text export.")
|
||||
export_object_file(filename=CSV_OBJECT_FILENAME, object_list=list_items, file_separator=FILE_SEPARATOR)
|
||||
if MOVE_CSV:
|
||||
move_file(file_name=CSV_OBJECT_FILENAME, destination=CSV_MOVE_DESTINATION)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
export_object_file(
|
||||
filename=CSV_OBJECT_FILENAME, object_list=list_items, file_separator=FILE_SEPARATOR
|
||||
)
|
||||
|
@ -1,8 +1,8 @@
|
||||
/**
|
||||
* @brief Auto-generated object translation file.
|
||||
* @details
|
||||
* Contains 102 translations.
|
||||
* Generated on: 2021-07-10 16:22:55
|
||||
* Contains 104 translations.
|
||||
* Generated on: 2021-08-07 18:08:35
|
||||
*/
|
||||
#include "translateObjects.h"
|
||||
|
||||
@ -45,6 +45,7 @@ const char *PDU1_HANDLER_STRING = "PDU1_HANDLER";
|
||||
const char *PDU2_HANDLER_STRING = "PDU2_HANDLER";
|
||||
const char *ACU_HANDLER_STRING = "ACU_HANDLER";
|
||||
const char *RAD_SENSOR_STRING = "RAD_SENSOR";
|
||||
const char *PLOC_UPDATER_STRING = "PLOC_UPDATER";
|
||||
const char *PLOC_MPSOC_HANDLER_STRING = "PLOC_MPSOC_HANDLER";
|
||||
const char *PLOC_SUPERVISOR_HANDLER_STRING = "PLOC_SUPERVISOR_HANDLER";
|
||||
const char *SOLAR_ARRAY_DEPL_HANDLER_STRING = "SOLAR_ARRAY_DEPL_HANDLER";
|
||||
@ -76,8 +77,9 @@ const char *I2C_COM_IF_STRING = "I2C_COM_IF";
|
||||
const char *CSP_COM_IF_STRING = "CSP_COM_IF";
|
||||
const char *CCSDS_PACKET_DISTRIBUTOR_STRING = "CCSDS_PACKET_DISTRIBUTOR";
|
||||
const char *PUS_PACKET_DISTRIBUTOR_STRING = "PUS_PACKET_DISTRIBUTOR";
|
||||
const char *UDP_BRIDGE_STRING = "UDP_BRIDGE";
|
||||
const char *UDP_POLLING_TASK_STRING = "UDP_POLLING_TASK";
|
||||
const char *TMTC_BRIDGE_STRING = "TMTC_BRIDGE";
|
||||
const char *TMTC_POLLING_TASK_STRING = "TMTC_POLLING_TASK";
|
||||
const char *FILE_SYSTEM_HANDLER_STRING = "FILE_SYSTEM_HANDLER";
|
||||
const char *PUS_SERVICE_6_STRING = "PUS_SERVICE_6";
|
||||
const char *FSFW_OBJECTS_START_STRING = "FSFW_OBJECTS_START";
|
||||
const char *PUS_SERVICE_1_VERIFICATION_STRING = "PUS_SERVICE_1_VERIFICATION";
|
||||
@ -189,6 +191,8 @@ const char* translateObject(object_id_t object) {
|
||||
return ACU_HANDLER_STRING;
|
||||
case 0x443200A5:
|
||||
return RAD_SENSOR_STRING;
|
||||
case 0x44330000:
|
||||
return PLOC_UPDATER_STRING;
|
||||
case 0x44330015:
|
||||
return PLOC_MPSOC_HANDLER_STRING;
|
||||
case 0x44330016:
|
||||
@ -252,9 +256,11 @@ const char* translateObject(object_id_t object) {
|
||||
case 0x50000200:
|
||||
return PUS_PACKET_DISTRIBUTOR_STRING;
|
||||
case 0x50000300:
|
||||
return UDP_BRIDGE_STRING;
|
||||
return TMTC_BRIDGE_STRING;
|
||||
case 0x50000400:
|
||||
return UDP_POLLING_TASK_STRING;
|
||||
return TMTC_POLLING_TASK_STRING;
|
||||
case 0x50000500:
|
||||
return FILE_SYSTEM_HANDLER_STRING;
|
||||
case 0x51000500:
|
||||
return PUS_SERVICE_6_STRING;
|
||||
case 0x53000000:
|
||||
|
@ -9,13 +9,15 @@ Returnvalue exporter.
|
||||
To use MySQLdb, run pip install mysqlclient or install in IDE. On Windows, Build Tools installation might be necessary.
|
||||
:data: 21.11.2019
|
||||
"""
|
||||
from fsfwgen.core import get_console_logger
|
||||
from fsfwgen.parserbase.file_list_parser import FileListParser
|
||||
from fsfwgen.returnvalues.returnvalues_parser import InterfaceParser, ReturnValueParser
|
||||
from fsfwgen.utility.sql_writer import SqlWriter
|
||||
from fsfwgen.utility.file_management import move_file
|
||||
from fsfwgen.utility.printer import PrettyPrinter
|
||||
|
||||
from definitions import BspType, DATABASE_NAME
|
||||
from definitions import BspType, DATABASE_NAME, ROOT_DIR, OBSW_ROOT_DIR
|
||||
|
||||
LOGGER = get_console_logger()
|
||||
EXPORT_TO_FILE = True
|
||||
MOVE_CSV_FILE = True
|
||||
EXPORT_TO_SQL = True
|
||||
@ -27,28 +29,28 @@ MAX_STRING_LENGTH = 32
|
||||
|
||||
BSP_SELECT = BspType.BSP_Q7S
|
||||
BSP_DIR_NAME = BSP_SELECT.value
|
||||
CSV_RETVAL_FILENAME = f"{BSP_SELECT.value}_returnvalues.csv"
|
||||
CSV_MOVE_DESTINATION = "../"
|
||||
CSV_RETVAL_FILENAME = f'{BSP_SELECT.value}_returnvalues.csv'
|
||||
CSV_MOVE_DESTINATION = f'{ROOT_DIR}'
|
||||
ADD_LINUX_FOLDER = False
|
||||
|
||||
if BSP_SELECT == BspType.BSP_Q7S or BSP_SELECT == BspType.BSP_LINUX_BOARD:
|
||||
FSFW_CONFIG_ROOT = f"../../linux/fsfwconfig"
|
||||
FSFW_CONFIG_ROOT = f'{OBSW_ROOT_DIR}/linux/fsfwconfig'
|
||||
ADD_LINUX_FOLDER = True
|
||||
else:
|
||||
FSFW_CONFIG_ROOT = f"../../{BSP_DIR_NAME}/fsfwconfig"
|
||||
BSP_PATH = f"../../{BSP_DIR_NAME}"
|
||||
FSFW_CONFIG_ROOT = f'{OBSW_ROOT_DIR}/{BSP_DIR_NAME}/fsfwconfig'
|
||||
BSP_PATH = f"{OBSW_ROOT_DIR}/{BSP_DIR_NAME}"
|
||||
|
||||
INTERFACE_DEFINITION_FILES = [
|
||||
"../../fsfw/returnvalues/FwClassIds.h",
|
||||
"../../common/config/commonClassIds.h",
|
||||
f"{FSFW_CONFIG_ROOT}/returnvalues/classIds.h"
|
||||
f'{OBSW_ROOT_DIR}/fsfw/src/fsfw/returnvalues/FwClassIds.h',
|
||||
f'{OBSW_ROOT_DIR}/common/config/commonClassIds.h',
|
||||
f'{FSFW_CONFIG_ROOT}/returnvalues/classIds.h'
|
||||
]
|
||||
RETURNVALUE_DESTINATIONS = [
|
||||
"../../mission/", "../../fsfw/", f"{BSP_PATH}"
|
||||
RETURNVALUE_SOURCES = [
|
||||
f'{OBSW_ROOT_DIR}/mission/', f'{OBSW_ROOT_DIR}/fsfw/', f'{BSP_PATH}'
|
||||
]
|
||||
|
||||
if ADD_LINUX_FOLDER:
|
||||
RETURNVALUE_DESTINATIONS.append("../../linux")
|
||||
RETURNVALUE_SOURCES.append(f'{OBSW_ROOT_DIR}/linux')
|
||||
|
||||
SQL_DELETE_RETURNVALUES_CMD = """
|
||||
DROP TABLE IF EXISTS Returnvalues
|
||||
@ -71,42 +73,41 @@ VALUES(?,?,?,?,?)
|
||||
"""
|
||||
|
||||
|
||||
def main():
|
||||
returnvalue_table = parse_returnvalues()
|
||||
print("")
|
||||
def parse_returnvalues():
|
||||
returnvalue_table = generate_returnvalue_table()
|
||||
if EXPORT_TO_FILE:
|
||||
ReturnValueParser.export_to_file(CSV_RETVAL_FILENAME, returnvalue_table, FILE_SEPARATOR)
|
||||
if MOVE_CSV_FILE:
|
||||
move_file(file_name=CSV_RETVAL_FILENAME, destination=CSV_MOVE_DESTINATION)
|
||||
# if MOVE_CSV_FILE:
|
||||
# move_file(file_name=CSV_RETVAL_FILENAME, destination=CSV_MOVE_DESTINATION)
|
||||
if EXPORT_TO_SQL:
|
||||
print("ReturnvalueParser: Exporting to SQL")
|
||||
sql_retval_exporter(returnvalue_table=returnvalue_table, db_file_dest=f"../{DATABASE_NAME}")
|
||||
LOGGER.info('ReturnvalueParser: Exporting to SQL')
|
||||
sql_retval_exporter(returnvalue_table, db_filename=f"{ROOT_DIR}/{DATABASE_NAME}")
|
||||
|
||||
|
||||
def parse_returnvalues():
|
||||
def generate_returnvalue_table():
|
||||
""" Core function to parse for the return values """
|
||||
interface_parser = InterfaceParser(file_list=INTERFACE_DEFINITION_FILES, print_table=PRINT_TABLES)
|
||||
interface_parser = InterfaceParser(
|
||||
file_list=INTERFACE_DEFINITION_FILES, print_table=PRINT_TABLES
|
||||
)
|
||||
interfaces = interface_parser.parse_files()
|
||||
header_parser = FileListParser(RETURNVALUE_DESTINATIONS)
|
||||
header_parser = FileListParser(RETURNVALUE_SOURCES)
|
||||
header_list = header_parser.parse_header_files(True, "Parsing header file list: ")
|
||||
print("")
|
||||
returnvalue_parser = ReturnValueParser(interfaces, header_list, PRINT_TABLES)
|
||||
returnvalue_parser.set_moving_window_mode(moving_window_size=7)
|
||||
returnvalue_table = returnvalue_parser.parse_files(True)
|
||||
print(f"ReturnvalueParser: Found {len(returnvalue_table)} returnvalues.")
|
||||
LOGGER.info(f"ReturnvalueParser: Found {len(returnvalue_table)} returnvalues")
|
||||
return returnvalue_table
|
||||
|
||||
|
||||
def sql_retval_exporter(returnvalue_table, db_file_dest: str):
|
||||
sql_writer = SqlWriter(db_filename=db_file_dest)
|
||||
def sql_retval_exporter(returnvalue_table, db_filename: str):
|
||||
sql_writer = SqlWriter(db_filename=db_filename)
|
||||
sql_writer.open(SQL_CREATE_RETURNVALUES_CMD)
|
||||
for entry in returnvalue_table.items():
|
||||
sql_writer.write_entries(
|
||||
SQL_INSERT_RETURNVALUES_CMD,
|
||||
(entry[0], entry[1][2], entry[1][4], entry[1][3], entry[1][1]))
|
||||
SQL_INSERT_RETURNVALUES_CMD, (entry[0],
|
||||
entry[1][2],
|
||||
entry[1][4],
|
||||
entry[1][3],
|
||||
entry[1][1]))
|
||||
sql_writer.commit()
|
||||
sql_writer.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
@ -2,8 +2,8 @@
|
||||
#define TEST_TESTTASKS_LIBGPIODTEST_H_
|
||||
|
||||
#include "TestTask.h"
|
||||
#include <fsfw/hal/common/gpio/GpioIF.h>
|
||||
#include <fsfw/hal/common/gpio/GpioCookie.h>
|
||||
#include <fsfw_hal/common/gpio/GpioIF.h>
|
||||
#include <fsfw_hal/common/gpio/GpioCookie.h>
|
||||
#include <fsfw/objectmanager/SystemObject.h>
|
||||
|
||||
/**
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "SpiTestClass.h"
|
||||
#include "OBSWConfig.h"
|
||||
|
||||
#include "devices/gpioIds.h"
|
||||
|
||||
@ -7,10 +8,10 @@
|
||||
#include <fsfw/tasks/TaskFactory.h>
|
||||
#include <fsfw/timemanager/Stopwatch.h>
|
||||
|
||||
#include <fsfw/hal/linux/utility.h>
|
||||
#include <fsfw/hal/linux/UnixFileGuard.h>
|
||||
#include <fsfw/hal/common/gpio/gpioDefinitions.h>
|
||||
#include <fsfw/hal/common/gpio/GpioCookie.h>
|
||||
#include <fsfw_hal/linux/utility.h>
|
||||
#include <fsfw_hal/linux/UnixFileGuard.h>
|
||||
#include <fsfw_hal/common/gpio/gpioDefinitions.h>
|
||||
#include <fsfw_hal/common/gpio/GpioCookie.h>
|
||||
|
||||
#include <linux/spi/spidev.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -1,8 +1,8 @@
|
||||
#ifndef LINUX_BOARDTEST_SPITESTCLASS_H_
|
||||
#define LINUX_BOARDTEST_SPITESTCLASS_H_
|
||||
|
||||
#include <fsfw/hal/common/gpio/GpioIF.h>
|
||||
#include <fsfw/hal/linux/spi/SpiCookie.h>
|
||||
#include <fsfw_hal/common/gpio/GpioIF.h>
|
||||
#include <fsfw_hal/linux/spi/SpiCookie.h>
|
||||
#include <test/testtasks/TestTask.h>
|
||||
|
||||
#include <vector>
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
#include <fsfw/objectmanager/ObjectManager.h>
|
||||
#include <fsfw/ipc/QueueFactory.h>
|
||||
#include <fsfw/hal/common/gpio/GpioCookie.h>
|
||||
#include <fsfw_hal/common/gpio/GpioCookie.h>
|
||||
|
||||
HeaterHandler::HeaterHandler(object_id_t setObjectId_, object_id_t gpioDriverId_,
|
||||
CookieIF * gpioCookie_, object_id_t mainLineSwitcherObjectId_, uint8_t mainLineSwitch_) :
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include <fsfw/devicehandlers/DeviceHandlerIF.h>
|
||||
#include <fsfw/devicehandlers/CookieIF.h>
|
||||
#include <fsfw/timemanager/Countdown.h>
|
||||
#include <fsfw/hal/common/gpio/GpioIF.h>
|
||||
#include <fsfw_hal/common/gpio/GpioIF.h>
|
||||
#include <unordered_map>
|
||||
|
||||
/**
|
||||
@ -24,6 +24,13 @@ class HeaterHandler: public ExecutableObjectIF,
|
||||
public SystemObject,
|
||||
public HasActionsIF {
|
||||
public:
|
||||
static const uint8_t INTERFACE_ID = CLASS_ID::HEATER_HANDLER;
|
||||
|
||||
static const ReturnValue_t COMMAND_NOT_SUPPORTED = MAKE_RETURN_CODE(0xA1);
|
||||
static const ReturnValue_t INIT_FAILED = MAKE_RETURN_CODE(0xA2);
|
||||
static const ReturnValue_t INVALID_SWITCH_NR = MAKE_RETURN_CODE(0xA3);
|
||||
static const ReturnValue_t MAIN_SWITCH_SET_TIMEOUT = MAKE_RETURN_CODE(0xA4);
|
||||
static const ReturnValue_t COMMAND_ALREADY_WAITING = MAKE_RETURN_CODE(0xA5);
|
||||
|
||||
/** Device command IDs */
|
||||
static const DeviceCommandId_t SWITCH_HEATER = 0x0;
|
||||
@ -52,14 +59,6 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
static const uint8_t INTERFACE_ID = CLASS_ID::HEATER_HANDLER;
|
||||
|
||||
static const ReturnValue_t COMMAND_NOT_SUPPORTED = MAKE_RETURN_CODE(0xA1);
|
||||
static const ReturnValue_t INIT_FAILED = MAKE_RETURN_CODE(0xA2);
|
||||
static const ReturnValue_t INVALID_SWITCH_NR = MAKE_RETURN_CODE(0xA3);
|
||||
static const ReturnValue_t MAIN_SWITCH_SET_TIMEOUT = MAKE_RETURN_CODE(0xA4);
|
||||
static const ReturnValue_t COMMAND_ALREADY_WAITING = MAKE_RETURN_CODE(0xA5);
|
||||
|
||||
static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::HEATER_HANDLER;
|
||||
static const Event GPIO_PULL_HIGH_FAILED = MAKE_EVENT(0, severity::LOW);
|
||||
static const Event GPIO_PULL_LOW_FAILED = MAKE_EVENT(1, severity::LOW);
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include <devices/powerSwitcherList.h>
|
||||
#include <devices/gpioIds.h>
|
||||
|
||||
#include <fsfw/hal/common/gpio/GpioCookie.h>
|
||||
#include <fsfw_hal/common/gpio/GpioCookie.h>
|
||||
#include <fsfw/ipc/QueueFactory.h>
|
||||
#include <fsfw/objectmanager/ObjectManager.h>
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
#include <fsfw/devicehandlers/CookieIF.h>
|
||||
#include <fsfw/devicehandlers/DeviceHandlerIF.h>
|
||||
#include <fsfw/timemanager/Countdown.h>
|
||||
#include <fsfw/hal/common/gpio/GpioIF.h>
|
||||
#include <fsfw_hal/common/gpio/GpioIF.h>
|
||||
#include <unordered_map>
|
||||
|
||||
/**
|
||||
|
@ -2,7 +2,7 @@
|
||||
#include "OBSWConfig.h"
|
||||
|
||||
#include <fsfw/datapool/PoolReadGuard.h>
|
||||
#include <fsfw/hal/linux/spi/SpiComIF.h>
|
||||
#include <fsfw_hal/linux/spi/SpiComIF.h>
|
||||
|
||||
SusHandler::SusHandler(object_id_t objectId, object_id_t comIF, CookieIF * comCookie,
|
||||
LinuxLibgpioIF* gpioComIF, gpioId_t chipSelectId) :
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#include "devicedefinitions/SusDefinitions.h"
|
||||
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
|
||||
#include <fsfw/hal/linux/gpio/LinuxLibgpioIF.h>
|
||||
#include <fsfw_hal/linux/gpio/LinuxLibgpioIF.h>
|
||||
|
||||
/**
|
||||
* @brief This is the device handler class for the SUS sensor. The sensor is
|
||||
|
@ -6,6 +6,10 @@
|
||||
#ifndef FSFWCONFIG_OBSWCONFIG_H_
|
||||
#define FSFWCONFIG_OBSWCONFIG_H_
|
||||
|
||||
#cmakedefine RASPBERRY_Pi
|
||||
#cmakedefine XIPHOS_Q7S
|
||||
#cmakedefine BEAGLEBONEBLACK
|
||||
|
||||
#ifdef RASPBERRY_PI
|
||||
#include "rpiConfig.h"
|
||||
#elif defined(XIPHOS_Q7S)
|
||||
@ -17,6 +21,11 @@
|
||||
/* These defines should be disabled for mission code but are useful for
|
||||
debugging. */
|
||||
#define OBSW_VERBOSE_LEVEL 1
|
||||
|
||||
//! Timers can mess up the code when debugging
|
||||
//! TODO: Enable for mission code, disable for debug code
|
||||
#define OBSW_ENABLE_TIMERS 0
|
||||
|
||||
#define OBSW_PRINT_MISSED_DEADLINES 1
|
||||
#define OBSW_ADD_TEST_CODE 1
|
||||
#define OBSW_ADD_TEST_PST 1
|
||||
@ -71,6 +80,7 @@ namespace config {
|
||||
|
||||
/* Add mission configuration flags here */
|
||||
static constexpr uint32_t OBSW_FILESYSTEM_HANDLER_QUEUE_SIZE = 50;
|
||||
static constexpr uint32_t PLOC_UPDATER_QUEUE_SIZE = 50;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef FSFWCONFIG_DEVICES_GPIOIDS_H_
|
||||
#define FSFWCONFIG_DEVICES_GPIOIDS_H_
|
||||
|
||||
#include <fsfw/hal/common/gpio/GpioIF.h>
|
||||
#include <fsfw_hal/common/gpio/GpioIF.h>
|
||||
|
||||
namespace gpioIds {
|
||||
enum gpioId_t {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @brief Auto-generated event translation file. Contains 96 translations.
|
||||
* @brief Auto-generated event translation file. Contains 102 translations.
|
||||
* @details
|
||||
* Generated on: 2021-07-12 15:20:38
|
||||
* Generated on: 2021-08-07 18:11:16
|
||||
*/
|
||||
#include "translateEvents.h"
|
||||
|
||||
@ -101,6 +101,12 @@ const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_
|
||||
const char *SUPV_ACK_FAILURE_STRING = "SUPV_ACK_FAILURE";
|
||||
const char *SUPV_EXE_FAILURE_STRING = "SUPV_EXE_FAILURE";
|
||||
const char *SUPV_CRC_FAILURE_EVENT_STRING = "SUPV_CRC_FAILURE_EVENT";
|
||||
const char *UPDATE_FILE_NOT_EXISTS_STRING = "UPDATE_FILE_NOT_EXISTS";
|
||||
const char *ACTION_COMMANDING_FAILED_STRING = "ACTION_COMMANDING_FAILED";
|
||||
const char *UPDATE_AVAILABLE_FAILED_STRING = "UPDATE_AVAILABLE_FAILED";
|
||||
const char *UPDATE_TRANSFER_FAILED_STRING = "UPDATE_TRANSFER_FAILED";
|
||||
const char *UPDATE_VERIFY_FAILED_STRING = "UPDATE_VERIFY_FAILED";
|
||||
const char *UPDATE_FINISHED_STRING = "UPDATE_FINISHED";
|
||||
|
||||
const char * translateEvents(Event event) {
|
||||
switch( (event & 0xffff) ) {
|
||||
@ -296,6 +302,18 @@ const char * translateEvents(Event event) {
|
||||
return SUPV_EXE_FAILURE_STRING;
|
||||
case(11504):
|
||||
return SUPV_CRC_FAILURE_EVENT_STRING;
|
||||
case(11700):
|
||||
return UPDATE_FILE_NOT_EXISTS_STRING;
|
||||
case(11701):
|
||||
return ACTION_COMMANDING_FAILED_STRING;
|
||||
case(11702):
|
||||
return UPDATE_AVAILABLE_FAILED_STRING;
|
||||
case(11703):
|
||||
return UPDATE_TRANSFER_FAILED_STRING;
|
||||
case(11704):
|
||||
return UPDATE_VERIFY_FAILED_STRING;
|
||||
case(11705):
|
||||
return UPDATE_FINISHED_STRING;
|
||||
default:
|
||||
return "UNKNOWN_EVENT";
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef FSFWCONFIG_EVENTS_TRANSLATEEVENTS_H_
|
||||
#define FSFWCONFIG_EVENTS_TRANSLATEEVENTS_H_
|
||||
|
||||
#include <fsfw/events/Event.h>
|
||||
#include "fsfw/events/Event.h"
|
||||
|
||||
const char * translateEvents(Event event);
|
||||
|
||||
|
@ -62,7 +62,7 @@ enum sourceObjects: uint32_t {
|
||||
UART_TEST = 0x54000020,
|
||||
DUMMY_INTERFACE = 0x5400CAFE,
|
||||
DUMMY_HANDLER = 0x5400AFFE,
|
||||
P60DOCK_TEST_TASK = 0x00005060
|
||||
P60DOCK_TEST_TASK = 0x00005060,
|
||||
};
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user