From 709330db4d8d9f01e75bce48b881dcd1dd029f2e Mon Sep 17 00:00:00 2001
From: Davide Mor <davide.mor@skywarder.eu>
Date: Mon, 17 Jul 2023 19:18:14 +0200
Subject: [PATCH] [sx1278] Updated entrypoints to use new gs target

---
 .vscode/c_cpp_properties.json                 | 23 +++++++
 CMakeLists.txt                                | 14 +++-
 src/shared/drivers/i2c/I2CDriver-f7.cpp       |  1 +
 src/tests/radio/sx1278/sx1278-init.h          | 69 +++++++++----------
 .../radio/sx1278/test-sx1278-bench-serial.cpp |  9 ++-
 5 files changed, 76 insertions(+), 40 deletions(-)

diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
index b03da947b..895903d93 100644
--- a/.vscode/c_cpp_properties.json
+++ b/.vscode/c_cpp_properties.json
@@ -339,6 +339,29 @@
                 "${workspaceFolder}/libs/miosix-kernel/miosix/config/arch/cortexM7_stm32f7/stm32f767zi_compute_unit"
             ]
         },
+        {
+            "name": "stm32f767zi_gemini_gs",
+            "cStandard": "c11",
+            "cppStandard": "c++14",
+            "compilerPath": "/opt/arm-miosix-eabi/bin/arm-miosix-eabi-g++",
+            "defines": [
+                "{defaultDefines}",
+                "_MIOSIX_BOARDNAME=stm32f767zi_gemini_gs",
+                "_BOARD_STM32F767ZI_GEMINI_GS",
+                "_ARCH_CORTEXM7_STM32F7",
+                "STM32F769xx",
+                "HSE_VALUE=25000000",
+                "SYSCLK_FREQ_216MHz=216000000",
+                "__ENABLE_XRAM",
+                "V_DDA_VOLTAGE=3.3f"
+            ],
+            "includePath": [
+                "${defaultIncludePaths}",
+                "${workspaceFolder}/libs/miosix-kernel/miosix/arch/cortexM7_stm32f7/common",
+                "${workspaceFolder}/libs/miosix-kernel/miosix/arch/cortexM7_stm32f7/stm32f767zi_gemini_gs",
+                "${workspaceFolder}/libs/miosix-kernel/miosix/config/arch/cortexM7_stm32f7/stm32f767zi_gemini_gs"
+            ]
+        },
         {
             "name": "stm32f756zg_nucleo",
             "cStandard": "c11",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index aa77eb3c6..f68982e70 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -294,11 +294,19 @@ sbs_target(test-sx1278fsk-bidir stm32f429zi_skyward_groundstation_v2)
 
 add_executable(test-sx1278fsk-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
 target_compile_definitions(test-sx1278fsk-tx PRIVATE DISABLE_RX)
-sbs_target(test-sx1278fsk-tx stm32f767zi_compute_unit)
+sbs_target(test-sx1278fsk-tx stm32f767zi_gemini_gs)
 
 add_executable(test-sx1278fsk-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
 target_compile_definitions(test-sx1278fsk-rx PRIVATE DISABLE_TX)
-sbs_target(test-sx1278fsk-rx stm32f767zi_compute_unit)
+sbs_target(test-sx1278fsk-rx stm32f429zi_skyward_groundstation_v2)
+
+# add_executable(test-sx1278fsk-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
+# target_compile_definitions(test-sx1278fsk-tx PRIVATE DISABLE_RX)
+# sbs_target(test-sx1278fsk-tx stm32f429zi_skyward_groundstation_v2)
+# 
+# add_executable(test-sx1278fsk-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
+# target_compile_definitions(test-sx1278fsk-rx PRIVATE DISABLE_TX)
+# sbs_target(test-sx1278fsk-rx stm32f767zi_gemini_gs)
 
 add_executable(test-sx1278fsk-gui-tx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp)
 target_compile_definitions(test-sx1278fsk-gui-tx PRIVATE DISABLE_RX)
@@ -330,7 +338,7 @@ sbs_target(test-sx1278lora-simple-tx stm32f429zi_skyward_groundstation_v2)
 
 add_executable(test-sx1278lora-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
 target_compile_definitions(test-sx1278lora-tx PRIVATE DISABLE_RX SX1278_IS_LORA)
-sbs_target(test-sx1278lora-tx stm32f429zi_skyward_groundstation_v2)
+sbs_target(test-sx1278lora-tx stm32f767zi_compute_unit)
 
 add_executable(test-sx1278lora-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
 target_compile_definitions(test-sx1278lora-rx PRIVATE DISABLE_TX SX1278_IS_LORA)
diff --git a/src/shared/drivers/i2c/I2CDriver-f7.cpp b/src/shared/drivers/i2c/I2CDriver-f7.cpp
index 23678afbd..7c25dca9f 100644
--- a/src/shared/drivers/i2c/I2CDriver-f7.cpp
+++ b/src/shared/drivers/i2c/I2CDriver-f7.cpp
@@ -77,6 +77,7 @@ I2CTimings calculateTimings(uint32_t f, uint32_t fi2c)
 #if defined(_BOARD_STM32F756ZG_NUCLEO)
     const uint16_t correction = 10;
 #elif defined(_BOARD_STM32F767ZI_COMPUTE_UNIT) || \
+    defined(_BOARD_STM32F767ZI_GEMINI_GS) || \
     defined(_BOARD_STM32F767ZI_NUCLEO)
     const uint16_t correction = 7;
 #else
diff --git a/src/tests/radio/sx1278/sx1278-init.h b/src/tests/radio/sx1278/sx1278-init.h
index 36fc26a28..9f26bf079 100644
--- a/src/tests/radio/sx1278/sx1278-init.h
+++ b/src/tests/radio/sx1278/sx1278-init.h
@@ -86,7 +86,8 @@ using rxen                         = miosix::radio::rxEn;
 #define SX1278_IRQ_DIO1 EXTI12_IRQHandlerImpl
 #define SX1278_IRQ_DIO3 EXTI13_IRQHandlerImpl
 
-#elif defined _BOARD_STM32F767ZI_COMPUTE_UNIT
+#elif defined _BOARD_STM32F767ZI_GEMINI_GS
+#include "interfaces-impl/hwmapping.h"
 
 #define SX1278_IS_SKYWARD433
 
@@ -94,41 +95,41 @@ using rxen                         = miosix::radio::rxEn;
 // #define SX1278_1
 
 #ifdef SX1278_1
-using cs   = miosix::Gpio<GPIOA_BASE, 4>;
-using dio0 = miosix::Gpio<GPIOC_BASE, 6>;
-using dio1 = miosix::Gpio<GPIOD_BASE, 4>;
-using dio3 = miosix::Gpio<GPIOD_BASE, 5>;
+using cs   = miosix::radio1::cs;
+using dio0 = miosix::radio1::dio0;
+using dio1 = miosix::radio1::dio1;
+using dio3 = miosix::radio1::dio3;
 
-using sck  = miosix::Gpio<GPIOA_BASE, 5>;
-using miso = miosix::Gpio<GPIOA_BASE, 6>;
-using mosi = miosix::Gpio<GPIOA_BASE, 7>;
+using sck  = miosix::radio1::spi::sck;
+using miso = miosix::radio1::spi::miso;
+using mosi = miosix::radio1::spi::mosi;
 
 #define SX1278_NRST
-using rst = miosix::Gpio<GPIOA_BASE, 0>;
+using rst = miosix::radio1::nrst;
 
-#define SX1278_SPI SPI1
+#define SX1278_SPI MIOSIX_RADIO1_SPI
 
-#define SX1278_IRQ_DIO0 EXTI6_IRQHandlerImpl
-#define SX1278_IRQ_DIO1 EXTI4_IRQHandlerImpl
-#define SX1278_IRQ_DIO3 EXTI5_IRQHandlerImpl
+#define SX1278_IRQ_DIO0 MIOSIX_RADIO1_DIO0_IRQ
+#define SX1278_IRQ_DIO1 MIOSIX_RADIO1_DIO1_IRQ
+#define SX1278_IRQ_DIO3 MIOSIX_RADIO1_DIO3_IRQ
 #else
-using cs   = miosix::Gpio<GPIOA_BASE, 15>;
-using dio0 = miosix::Gpio<GPIOC_BASE, 8>;
-using dio1 = miosix::Gpio<GPIOC_BASE, 10>;
-using dio3 = miosix::Gpio<GPIOC_BASE, 12>;
+using cs   = miosix::radio2::cs;
+using dio0 = miosix::radio2::dio0;
+using dio1 = miosix::radio2::dio1;
+using dio3 = miosix::radio2::dio3;
 
-using sck  = miosix::Gpio<GPIOB_BASE, 3>;
-using miso = miosix::Gpio<GPIOB_BASE, 4>;
-using mosi = miosix::Gpio<GPIOD_BASE, 6>;
+using sck  = miosix::radio2::spi::sck;
+using miso = miosix::radio2::spi::miso;
+using mosi = miosix::radio2::spi::mosi;
 
 #define SX1278_NRST
-using rst = miosix::Gpio<GPIOA_BASE, 3>;
+using rst = miosix::radio2::nrst;
 
-#define SX1278_SPI SPI3
+#define SX1278_SPI MIOSIX_RADIO2_SPI
 
-#define SX1278_IRQ_DIO0 EXTI8_IRQHandlerImpl
-#define SX1278_IRQ_DIO1 EXTI10_IRQHandlerImpl
-#define SX1278_IRQ_DIO3 EXTI12_IRQHandlerImpl
+#define SX1278_IRQ_DIO0 MIOSIX_RADIO2_DIO0_IRQ
+#define SX1278_IRQ_DIO1 MIOSIX_RADIO2_DIO1_IRQ
+#define SX1278_IRQ_DIO3 MIOSIX_RADIO2_DIO3_IRQ
 #endif
 
 #else
@@ -143,9 +144,14 @@ static constexpr size_t SX1278_MTU = Boardcore::SX1278Fsk::MTU;
 Boardcore::SX1278Fsk *sx1278       = nullptr;
 #endif
 
+volatile int dio0_cnt = 0;
+volatile int dio1_cnt = 0;
+volatile int dio3_cnt = 0;
+
 #ifdef SX1278_IRQ_DIO0
 void __attribute__((used)) SX1278_IRQ_DIO0()
 {
+    dio0_cnt++;
     if (sx1278)
         sx1278->handleDioIRQ();
 }
@@ -154,6 +160,7 @@ void __attribute__((used)) SX1278_IRQ_DIO0()
 #ifdef SX1278_IRQ_DIO1
 void __attribute__((used)) SX1278_IRQ_DIO1()
 {
+    dio1_cnt++;
     if (sx1278)
         sx1278->handleDioIRQ();
 }
@@ -162,22 +169,14 @@ void __attribute__((used)) SX1278_IRQ_DIO1()
 #ifdef SX1278_IRQ_DIO3
 void __attribute__((used)) SX1278_IRQ_DIO3()
 {
+    dio3_cnt++;
     if (sx1278)
         sx1278->handleDioIRQ();
 }
 #endif
 
 void initBoard()
-{   
-    // sck::mode(miosix::Mode::ALTERNATE);
-    // sck::alternateFunction(6);
-    // miso::mode(miosix::Mode::ALTERNATE);
-    // miso::alternateFunction(6);
-    // mosi::mode(miosix::Mode::ALTERNATE);
-    // mosi::alternateFunction(5);
-    // cs::mode(miosix::Mode::OUTPUT);
-    // cs::high();
-
+{
 #ifdef SX1278_IS_EBYTE
     rxen::mode(miosix::Mode::OUTPUT);
     txen::mode(miosix::Mode::OUTPUT);
diff --git a/src/tests/radio/sx1278/test-sx1278-bench-serial.cpp b/src/tests/radio/sx1278/test-sx1278-bench-serial.cpp
index bd1da2674..0453afc31 100644
--- a/src/tests/radio/sx1278/test-sx1278-bench-serial.cpp
+++ b/src/tests/radio/sx1278/test-sx1278-bench-serial.cpp
@@ -46,10 +46,15 @@ int main()
             "Corrupted packets: %d\n"
             "RSSI:              %.2f dBm\n"
             "FEI:               %.2f Hz\n"
-            "SNR:               %.2f\n",
+            "SNR:               %.2f\n"
+            "%d %d %d\n",
             static_cast<float>(stats.txBitrate()) / 1000.0f, stats.sent_count,
             static_cast<float>(stats.rxBitrate()) / 1000.0f, stats.recv_count,
-            stats.corrupted_count, stats.rssi, stats.fei, stats.snr);
+            stats.corrupted_count, stats.rssi, stats.fei, stats.snr, dio0_cnt, dio1_cnt, dio3_cnt);
+        dio0_cnt = 0;
+        dio1_cnt = 0;
+        dio3_cnt = 0;
+
 
         miosix::Thread::sleep(2000);
     }
-- 
GitLab