From 9baccc80d8b06466d76a3a48ac0e1325af91abb7 Mon Sep 17 00:00:00 2001
From: Oleksandr Podolchak
Date: Wed, 24 Apr 2024 16:41:01 +0300
Subject: [PATCH] Add SX1268 modules support for linux-native (#3702)
* Add portduino Ebyte E22 XXXM30S/XXXM33S (sx1268) module support
* Add Ebyte E22 XXXM3XS module config
* Update comment for sx1268 module
* Address review comments
---------
Co-authored-by: Ben Meadors
---
bin/config-dist.yaml | 9 +++++++++
src/main.cpp | 15 +++++++++++++++
src/platform/portduino/PortduinoGlue.cpp | 3 +++
src/platform/portduino/PortduinoGlue.h | 1 +
4 files changed, 28 insertions(+)
diff --git a/bin/config-dist.yaml b/bin/config-dist.yaml
index f02c2a2c2..05b4a7b0a 100644
--- a/bin/config-dist.yaml
+++ b/bin/config-dist.yaml
@@ -38,6 +38,15 @@ Lora:
# Busy: 20
# Reset: 18
+# Module: sx1268 # SX1268-based modules, tested with Ebyte E22 400M33S
+# CS: 21
+# IRQ: 16
+# Busy: 20
+# Reset: 18
+# TXen: 6
+# RXen: 12
+# DIO3_TCXO_VOLTAGE: true
+
# DIO3_TCXO_VOLTAGE: true # the Waveshare Core1262 and others are known to need this setting
# TXen: x # TX and RX enable pins
diff --git a/src/main.cpp b/src/main.cpp
index deaa60f3a..4a663a8a0 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -770,6 +770,21 @@ void setup()
LOG_INFO("SX1280 Radio init succeeded, using SX1280 radio\n");
}
}
+ } else if (settingsMap[use_sx1268]) {
+ if (!rIf) {
+ LOG_DEBUG("Attempting to activate sx1268 radio on SPI port %s\n", settingsStrings[spidev].c_str());
+ LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(*LoraSPI, spiSettings);
+ rIf = new SX1268Interface((LockingArduinoHal *)RadioLibHAL, settingsMap[cs], settingsMap[irq], settingsMap[reset],
+ settingsMap[busy]);
+ if (!rIf->init()) {
+ LOG_ERROR("Failed to find SX1268 radio\n");
+ delete rIf;
+ rIf = NULL;
+ exit(EXIT_FAILURE);
+ } else {
+ LOG_INFO("SX1268 Radio init succeeded, using SX1268 radio\n");
+ }
+ }
}
#elif defined(HW_SPI1_DEVICE)
diff --git a/src/platform/portduino/PortduinoGlue.cpp b/src/platform/portduino/PortduinoGlue.cpp
index a8c473887..d86ac6677 100644
--- a/src/platform/portduino/PortduinoGlue.cpp
+++ b/src/platform/portduino/PortduinoGlue.cpp
@@ -136,6 +136,7 @@ void portduinoSetup()
settingsMap[use_sx1262] = false;
settingsMap[use_rf95] = false;
settingsMap[use_sx1280] = false;
+ settingsMap[use_sx1268] = false;
if (yamlConfig["Lora"]["Module"] && yamlConfig["Lora"]["Module"].as("") == "sx1262") {
settingsMap[use_sx1262] = true;
@@ -143,6 +144,8 @@ void portduinoSetup()
settingsMap[use_rf95] = true;
} else if (yamlConfig["Lora"]["Module"] && yamlConfig["Lora"]["Module"].as("") == "sx1280") {
settingsMap[use_sx1280] = true;
+ } else if (yamlConfig["Lora"]["Module"] && yamlConfig["Lora"]["Module"].as("") == "sx1268") {
+ settingsMap[use_sx1268] = true;
}
settingsMap[dio2_as_rf_switch] = yamlConfig["Lora"]["DIO2_AS_RF_SWITCH"].as(false);
settingsMap[dio3_tcxo_voltage] = yamlConfig["Lora"]["DIO3_TCXO_VOLTAGE"].as(false);
diff --git a/src/platform/portduino/PortduinoGlue.h b/src/platform/portduino/PortduinoGlue.h
index 4d2bcc262..94cdbf2f8 100644
--- a/src/platform/portduino/PortduinoGlue.h
+++ b/src/platform/portduino/PortduinoGlue.h
@@ -13,6 +13,7 @@ enum configNames {
dio3_tcxo_voltage,
use_rf95,
use_sx1280,
+ use_sx1268,
user,
gpiochip,
spidev,