diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1786f1af..e0b00d30 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -19,6 +19,8 @@ if(NOT OS_FSFW)
set(OS_FSFW host CACHE STRING "OS for the FSFW.")
endif()
+set_property(CACHE OS_FSFW PROPERTY STRINGS host linux)
+
# Perform steps like loading toolchain files where applicable.
include(${CMAKE_SCRIPT_PATH}/PreProjectConfig.cmake)
pre_project_config()
@@ -44,6 +46,8 @@ set(FSFW_PATH fsfw)
set(MISSION_PATH mission)
set(CSPLIB_PATH libcsp)
+set(WARNING_SHADOW_LOCAL FALSE)
+
# Analyse different OS and architecture/target options, determine BSP_PATH,
# display information about compiler etc.
include (${CMAKE_SCRIPT_PATH}/HardwareOsPreConfig.cmake)
@@ -110,7 +114,6 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(WARNING_FLAGS
-Wall
-Wextra
- -Wshadow=local
-Wimplicit-fallthrough=1
-Wno-unused-parameter
-Wno-psabi
diff --git a/README.md b/README.md
index f4d5c5f5..0dd496c5 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
Target systems:
-* OBC
+* OBC with Linux OS
* Xiphos Q7S
* Based on Zynq-7020 SoC (xc7z020clg484-2)
* Dual-core ARM Cortex-A9
@@ -12,16 +12,19 @@ Target systems:
* Artix-7 FPGA (85K pogrammable logic cells)
* Datasheet at https://eive-cloud.irs.uni-stuttgart.de/index.php/apps/files/?dir=/EIVE_IRS/Arbeitsdaten/08_Used%20Components/Q7S&fileid=340648
* Also a lot of informatin about the Q7S can be found on the xiphos trac platform: https://trac.xiphos.com/trac/eive-q7/wiki/Q7RevB
-* Linux OS
- * Built with Yocto 2.5
+ * Linux OS built with Yocto 2.5
* Linux Kernel https://github.com/XiphosSystemsCorp/linux-xlnx.git
* Host System
* Generic software components which are not dependant on hardware can also
be run. All host code is contained in the hosted folder
* Tested for Linux (Ubuntu 20.04) and Windows 10
+* Raspberry Pi
+ * EIVE OBC can be built for Raspberry Pi as well (either directly on Raspberry Pi or by installing a cross compiler)
+The steps in the primary README are related to the main OBC target Q7S.
## Setting up development environment
+
* 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 the Vivado Design Suite - HLx Editions - 2018.2 Full Product Installation instead of the updates. It is recommended to use the installer
* Install settings. In the Devices selection, it is sufficient to pick SoC → Zynq-7000:
@@ -133,65 +136,76 @@ git submodule update
## Debugging the software via Flatsat PC
Open SSH connection to flatsat PC:
-````
+
+```sh
ssh eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5
-````
+```
+
To access the console of the Q7S run the following:
```sh
picocom -b 115200 /dev/ttyUSB0
```
+
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 localhost.
-````
+
+```sh
ssh -L 1534:192.168.133.10:1534 eive@2001:7c0:2018:1099:babe:0:e1fe:f1a5
-````
+```
+
This forwards any requests to localhost:1534 to the port 1534 of the Q7S with the IP address 192.168.133.10.
-Note: When now setting up a debug session in the Xilinx SDK, the host must be set to localhost instead of the IP address
- of the Q7S.
-
+Note: When now setting up a debug session in the Xilinx SDK, the host must be set to localhost instead of the IP address of the Q7S.
## Launching an application after boot
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 current loaded root partition.
1. Disable write protection of the desired root partition
-````
-writeprotect 0 0 0 # unlocks nominal image on nor-flash 0
-````
+
+ ```sh
+ writeprotect 0 0 0 # unlocks nominal image on nor-flash 0
+ ```
+
2. Mount the root partition
-````
-xsc_mount_copy 0 0 # Mounts the nominal image from nor-flash 0
-````
+
+ ```sh
+ xsc_mount_copy 0 0 # Mounts the nominal image from nor-flash 0
+ ```
3. Copy the executable to /bin/usr
4. Make sure the permissions to execute the application are set
-````
-chmod +x application
-````
+ ```sh
+ chmod +x application
+ ```
+
5. Create systemd service in /lib/systemd/system. The following shows an example service.
-````
-cat > example.service
-[Unit]
-Description=Example Service
-StartLimitIntervalSec=0
+ ```sh
+ cat > example.service
+ [Unit]
+ Description=Example Service
+ StartLimitIntervalSec=0
-[Service]
-Type=simple
-Restart=always
-RestartSec=1
-User=root
-ExecStart=/usr/bin/application
+ [Service]
+ Type=simple
+ Restart=always
+ RestartSec=1
+ User=root
+ ExecStart=/usr/bin/application
-[Install]
-WantedBy=multi-user.target
-````
+ [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.
````
diff --git a/bsp_rpi/CMakeLists.txt b/bsp_rpi/CMakeLists.txt
index 8dd8e6f1..7885ca28 100644
--- a/bsp_rpi/CMakeLists.txt
+++ b/bsp_rpi/CMakeLists.txt
@@ -5,6 +5,7 @@ target_sources(${TARGET_NAME} PUBLIC
)
add_subdirectory(boardconfig)
+add_subdirectory(boardtest)
diff --git a/bsp_rpi/boardtest/CMakeLists.txt b/bsp_rpi/boardtest/CMakeLists.txt
new file mode 100644
index 00000000..768fc52f
--- /dev/null
+++ b/bsp_rpi/boardtest/CMakeLists.txt
@@ -0,0 +1,7 @@
+target_sources(${TARGET_NAME} PRIVATE
+ SpiTest.cpp
+)
+
+
+
+
diff --git a/bsp_rpi/boardtest/SpiTest.cpp b/bsp_rpi/boardtest/SpiTest.cpp
new file mode 100644
index 00000000..91939714
--- /dev/null
+++ b/bsp_rpi/boardtest/SpiTest.cpp
@@ -0,0 +1,43 @@
+#include "SpiTest.h"
+
+#include
+
+#include
+#include
+#include
+
+SpiTest::SpiTest(object_id_t objectId): SystemObject(objectId) {
+ wiringPiSetupGpio();
+
+ int spiFd = open(spiDeviceName.c_str(), O_RDWR);
+ if (spiFd < 0){
+ sif::error << "Could not open SPI device!" << std::endl;
+ }
+
+ spiMode = SPI_MODE_3;
+ int ret = ioctl(spiFd, SPI_IOC_WR_MODE, &spiMode);
+ if(ret < 0) {
+ sif::error << "Could not set write mode!" << std::endl;
+ }
+
+ /* Datenrate setzen */
+ ret = ioctl(spiFd, SPI_IOC_WR_MAX_SPEED_HZ, &spiSpeed);
+ if(ret < 0) {
+ sif::error << "Could not SPI speed!" << std::endl;
+ }
+}
+
+ReturnValue_t SpiTest::performOperation(uint8_t opCode) {
+ if(oneShot) {
+
+ }
+ return HasReturnvaluesIF::RETURN_OK;
+}
+
+ReturnValue_t SpiTest::initialize() {
+ //transferHandle.rx_buf = reinterpret_cast<__u64>(receiveBuffer);
+ //transferHandle.tx_buf = reinterpret_cast<__u64>(sendBuffer);
+ //transferHandle.speed_hz = 976000;
+ //transferHandle.len = 2;
+ return HasReturnvaluesIF::RETURN_OK;
+}
\ No newline at end of file
diff --git a/bsp_rpi/boardtest/SpiTest.h b/bsp_rpi/boardtest/SpiTest.h
new file mode 100644
index 00000000..9bdb8f25
--- /dev/null
+++ b/bsp_rpi/boardtest/SpiTest.h
@@ -0,0 +1,31 @@
+#ifndef BSP_LINUX_TEST_SPITEST_H_
+#define BSP_LINUX_TEST_SPITEST_H_
+
+#include
+#include
+#include
+#include
+
+class SpiTest: public ExecutableObjectIF, SystemObject {
+public:
+ SpiTest(object_id_t objectId);
+
+ ReturnValue_t performOperation(uint8_t opCode) override;
+ ReturnValue_t initialize() override;
+private:
+ const std::string spiDeviceName = "/dev/spidev0.0";
+ int spiFd = 0;
+
+ uint8_t spiMode = SPI_MODE_3;
+ uint32_t spiSpeed = 976000;
+
+ uint8_t sendBuffer[32];
+ uint8_t receiveBuffer[32];
+ struct spi_ioc_transfer transferHandle;
+
+ bool oneShot = true;
+
+};
+
+
+#endif /* BSP_LINUX_TEST_SPITEST_H_ */
diff --git a/fsfw b/fsfw
index 8ef6283b..1ac2479b 160000
--- a/fsfw
+++ b/fsfw
@@ -1 +1 @@
-Subproject commit 8ef6283bf4f5cf5d12131c48365a753825fea637
+Subproject commit 1ac2479b28c1114b0876123e0db4155abfbf06fe
diff --git a/libcsp/include/CMakeLists.txt b/libcsp/include/CMakeLists.txt
index cc80ebb5..196e26f3 100644
--- a/libcsp/include/CMakeLists.txt
+++ b/libcsp/include/CMakeLists.txt
@@ -1,7 +1,5 @@
target_include_directories(${LIB_CSP_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_CURRENT_SOURCE_DIR}/csp
- ${CMAKE_CURRENT_SOURCE_DIR}/csp/crypto
)
target_include_directories(${LIB_CSP_NAME} INTERFACE