Compare commits

..

24 Commits

Author SHA1 Message Date
Thomas Göttgens
395db3a81e Merge branch 'master' into usbhost 2025-07-13 18:13:21 +02:00
Thomas Göttgens
c91030362c Merge branch 'master' into usbhost 2025-06-25 19:29:04 +02:00
Thomas Göttgens
44be39cef3 Merge branch 'master' into usbhost 2025-06-05 14:28:02 +02:00
Thomas Göttgens
b4cb6f2eb2 Merge branch 'master' into usbhost 2025-04-07 09:19:31 +02:00
Thomas Göttgens
311899e356 Merge branch 'master' into usbhost 2025-03-31 11:36:34 +02:00
Thomas Göttgens
5768d73c12 Merge branch 'master' into usbhost 2025-03-02 12:00:06 +01:00
Thomas Göttgens
d49ca18736 Merge branch 'master' into usbhost 2025-02-19 14:27:37 +01:00
Thomas Göttgens
f5b9343132 Merge branch 'master' into usbhost 2025-02-19 13:22:24 +01:00
Thomas Göttgens
c58a80377f Merge branch 'master' into usbhost 2025-01-18 14:11:30 +01:00
Thomas Göttgens
1158fa46f1 Merge branch 'master' into usbhost 2024-12-29 22:31:25 +01:00
Thomas Göttgens
8cc56ea2af Merge branch 'master' into usbhost 2024-11-24 15:51:03 +01:00
Thomas Göttgens
c4644936bb Merge branch 'master' into usbhost 2024-11-02 16:44:29 +01:00
Thomas Göttgens
b40ad76261 Merge branch 'master' into usbhost 2024-10-26 12:24:34 +02:00
Thomas Göttgens
f3344bf72d Merge branch 'master' into usbhost 2024-10-16 12:41:14 +02:00
Thomas Göttgens
bb921be19d Merge branch 'master' into usbhost 2024-10-08 14:13:28 +02:00
Thomas Göttgens
0c4f331002 Merge branch 'master' into usbhost 2024-09-04 14:45:21 +02:00
Thomas Göttgens
a84c69f171 Merge branch 'master' into usbhost 2024-07-23 19:48:20 +02:00
Thomas Göttgens
9b940e9f50 Merge branch 'master' into usbhost 2024-06-16 11:54:59 +02:00
Thomas Göttgens
fe7738d361 Merge branch 'master' into usbhost 2024-05-12 16:36:22 +02:00
Thomas Göttgens
5131e2b1e5 ESP32-C3 is not supported for USBHOST 2024-05-11 19:26:06 +02:00
Thomas Göttgens
477fa85318 fix compilation 2024-05-11 18:55:23 +02:00
Thomas Göttgens
dd98a07aa0 Merge branch 'master' into usbhost 2024-05-11 16:18:42 +02:00
Thomas Göttgens
4558f70769 Merge branch 'master' into usbhost 2024-04-23 13:04:41 +02:00
Thomas Göttgens
15790fff73 USB Host support stub. Doesn't work. 2024-02-23 11:13:33 +01:00
29 changed files with 178 additions and 238 deletions

View File

@@ -17,3 +17,6 @@ lib_ignore =
${esp32_base.lib_ignore} ${esp32_base.lib_ignore}
NimBLE-Arduino NimBLE-Arduino
libpax libpax
lib_deps = ${esp32_base.lib_deps}
tanakamasayuki/EspUsbHost@^1.0.2

View File

@@ -3,3 +3,6 @@ extends = esp32_base
custom_esp32_kind = esp32s3 custom_esp32_kind = esp32s3
monitor_speed = 115200 monitor_speed = 115200
lib_deps = ${esp32_base.lib_deps}
tanakamasayuki/EspUsbHost@^1.0.2

View File

@@ -26,7 +26,6 @@ build_flags = -Wno-missing-field-initializers
-DUSE_THREAD_NAMES -DUSE_THREAD_NAMES
-DTINYGPS_OPTION_NO_CUSTOM_FIELDS -DTINYGPS_OPTION_NO_CUSTOM_FIELDS
-DPB_ENABLE_MALLOC=1 -DPB_ENABLE_MALLOC=1
-DRADIOLIB_LOW_LEVEL=1
-DRADIOLIB_EXCLUDE_CC1101=1 -DRADIOLIB_EXCLUDE_CC1101=1
-DRADIOLIB_EXCLUDE_NRF24=1 -DRADIOLIB_EXCLUDE_NRF24=1
-DRADIOLIB_EXCLUDE_RF69=1 -DRADIOLIB_EXCLUDE_RF69=1

72
src/input/kbUsbBase.cpp Normal file
View File

@@ -0,0 +1,72 @@
#include "kbUsbBase.h"
#include "configuration.h"
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S2
KbUsbBase::KbUsbBase(const char *name) : concurrency::OSThread(name)
{
this->_originName = name;
}
int32_t KbUsbBase::runOnce()
{
if (firstTime) {
// This is the first time the OSThread library has called this function, so init the USB HID routines
begin();
firstTime = 0;
} else {
task();
}
return 100;
}
void KbUsbBase::onKeyboardKey(uint8_t ascii, uint8_t keycode, uint8_t modifier)
{
if (ascii != 0) {
LOG_DEBUG("Key 0x%x Code 0x%x Mod 0x%x pressed\n", ascii, keycode, modifier);
// reset shift now that we have a keypress
InputEvent e;
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE;
e.source = this->_originName;
switch (ascii) {
case 0x1b: // ESC
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL;
break;
case 0x08: // Back
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_BACK;
e.kbchar = ascii;
break;
case 0xb5: // Up
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_UP;
break;
case 0xb6: // Down
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_DOWN;
break;
case 0xb4: // Left
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_LEFT;
e.kbchar = ascii;
break;
case 0xb7: // Right
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT;
e.kbchar = ascii;
break;
case 0x0d: // Enter
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_SELECT;
break;
case 0x00: // nopress
e.inputEvent = meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE;
break;
default: // all other keys
e.inputEvent = ANYKEY;
e.kbchar = ascii;
break;
}
if (e.inputEvent != meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_NONE) {
this->notifyObservers(&e);
}
}
}
#endif

21
src/input/kbUsbBase.h Normal file
View File

@@ -0,0 +1,21 @@
#pragma once
#include "InputBroker.h"
#include "concurrency/OSThread.h"
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S2
#include "EspUsbHost.h"
class KbUsbBase : public Observable<const InputEvent *>, public concurrency::OSThread, public EspUsbHost
{
public:
explicit KbUsbBase(const char *name);
protected:
virtual int32_t runOnce() override;
private:
void onKeyboardKey(uint8_t ascii, uint8_t keycode, uint8_t modifier);
const char *_originName;
bool firstTime = 1;
};
#endif

15
src/input/kbUsbImpl.cpp Normal file
View File

@@ -0,0 +1,15 @@
#include "kbUsbImpl.h"
#include "InputBroker.h"
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S2
KbUsbImpl *kbUsbImpl;
KbUsbImpl::KbUsbImpl() : KbUsbBase("usbKB") {}
void KbUsbImpl::init()
{
inputBroker->registerSource(this);
}
#endif // INPUTBROKER_MATRIX_TYPE

23
src/input/kbUsbImpl.h Normal file
View File

@@ -0,0 +1,23 @@
#pragma once
#include "kbUsbBase.h"
#include "main.h"
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S2
/**
* @brief The idea behind this class to have static methods for the event handlers.
* Check attachInterrupt() at RotaryEncoderInteruptBase.cpp
* Technically you can have as many rotary encoders hardver attached
* to your device as you wish, but you always need to have separate event
* handlers, thus you need to have a RotaryEncoderInterrupt implementation.
*/
class KbUsbImpl : public KbUsbBase
{
public:
KbUsbImpl();
void init();
};
extern KbUsbImpl *kbUsbImpl;
#endif

View File

@@ -214,8 +214,6 @@ bool pauseBluetoothLogging = false;
bool pmu_found; bool pmu_found;
uint8_t pa_fan_percentage = 50;
#if !MESHTASTIC_EXCLUDE_I2C #if !MESHTASTIC_EXCLUDE_I2C
// Array map of sensor types with i2c address and wire as we'll find in the i2c scan // Array map of sensor types with i2c address and wire as we'll find in the i2c scan
std::pair<uint8_t, TwoWire *> nodeTelemetrySensorsMap[_meshtastic_TelemetrySensorType_MAX + 1] = {}; std::pair<uint8_t, TwoWire *> nodeTelemetrySensorsMap[_meshtastic_TelemetrySensorType_MAX + 1] = {};
@@ -1377,36 +1375,16 @@ void setup()
mqttInit(); mqttInit();
#endif #endif
#ifdef RADIO_FAN_EN #ifdef RF95_FAN_EN
// Ability to disable FAN if PIN has been set with RADIO_FAN_EN. // Ability to disable FAN if PIN has been set with RF95_FAN_EN.
// Make sure LoRa has been started before disabling FAN. // Make sure LoRa has been started before disabling FAN.
#ifdef RADIO_FAN_PWM if (config.lora.pa_fan_disabled)
#if defined(ARCH_ESP32) digitalWrite(RF95_FAN_EN, LOW ^ 0);
// Set up PWM at Channel 1 at 25KHz, using 8-bit resolution
// Turn ON/OFF fan to the specified value if enabled by config.
// code by https://github.com/gjelsoe/
if (ledcSetup(1, 25000, 8)) {
ledcAttachPin(RADIO_FAN_EN, 1);
LOG_INFO("PWM init C1 P%d\n", RADIO_FAN_EN);
// Set PWM duty cycle based on fan disabled state
ledcWrite(1, config.lora.pa_fan_disabled ? 0 : (pa_fan_percentage * 2.55));
} else {
LOG_WARN("PWM init fail P%d\n", RADIO_FAN_EN);
}
#elif defined(ARCH_NRF52)
pinMode(RADIO_FAN_EN, OUTPUT);
analogWrite(RADIO_FAN_EN, config.lora.pa_fan_disabled ? 0 : (pa_fan_percentage * 2.55));
#endif
#else
// Set up as ON/OFF switch of fan
pinMode(RADIO_FAN_EN, OUTPUT);
digitalWrite(RADIO_FAN_EN, LOW ^ 0);
#endif
#endif #endif
#ifndef ARCH_PORTDUINO #ifndef ARCH_PORTDUINO
// Initialize Wifi // Initialize Wifi
#if HAS_WIFI #if HAS_WIFI
initWifi(); initWifi();
#endif #endif

View File

@@ -78,8 +78,6 @@ extern uint32_t shutdownAtMsec;
extern uint32_t serialSinceMsec; extern uint32_t serialSinceMsec;
extern uint8_t pa_fan_percentage;
// If a thread does something that might need for it to be rescheduled ASAP it can set this flag // If a thread does something that might need for it to be rescheduled ASAP it can set this flag
// This will suppress the current delay and instead try to run ASAP. // This will suppress the current delay and instead try to run ASAP.
extern bool runASAP; extern bool runASAP;

View File

@@ -3,7 +3,6 @@
#include "Throttle.h" #include "Throttle.h"
#include "configuration.h" #include "configuration.h"
#include "error.h" #include "error.h"
#include "main.h"
#include "mesh/NodeDB.h" #include "mesh/NodeDB.h"
#ifdef LR11X0_DIO_AS_RF_SWITCH #ifdef LR11X0_DIO_AS_RF_SWITCH
#include "rfswitch.h" #include "rfswitch.h"
@@ -55,8 +54,6 @@ template <typename T> bool LR11x0Interface<T>::init()
digitalWrite(LR11X0_POWER_EN, HIGH); digitalWrite(LR11X0_POWER_EN, HIGH);
#endif #endif
enableFan();
#if ARCH_PORTDUINO #if ARCH_PORTDUINO
float tcxoVoltage = (float)settingsMap[dio3_tcxo_voltage] / 1000; float tcxoVoltage = (float)settingsMap[dio3_tcxo_voltage] / 1000;
// FIXME: correct logic to default to not using TCXO if no voltage is specified for LR11x0_DIO3_TCXO_VOLTAGE // FIXME: correct logic to default to not using TCXO if no voltage is specified for LR11x0_DIO3_TCXO_VOLTAGE

View File

@@ -154,7 +154,10 @@ bool RF95Interface::init()
digitalWrite(RF95_TXEN, 0); digitalWrite(RF95_TXEN, 0);
#endif #endif
enableFan(); #ifdef RF95_FAN_EN
pinMode(RF95_FAN_EN, OUTPUT);
digitalWrite(RF95_FAN_EN, 1);
#endif
#ifdef RF95_RXEN #ifdef RF95_RXEN
pinMode(RF95_RXEN, OUTPUT); pinMode(RF95_RXEN, OUTPUT);
@@ -327,7 +330,10 @@ bool RF95Interface::sleep()
// put chipset into sleep mode // put chipset into sleep mode
setStandby(); // First cancel any active receiving/sending setStandby(); // First cancel any active receiving/sending
lora->sleep(); lora->sleep();
disableFan();
#ifdef RF95_FAN_EN
digitalWrite(RF95_FAN_EN, 0);
#endif
return true; return true;
} }

View File

@@ -532,36 +532,3 @@ bool RadioLibInterface::startSend(meshtastic_MeshPacket *txp)
return res == RADIOLIB_ERR_NONE; return res == RADIOLIB_ERR_NONE;
} }
} }
void RadioLibInterface::enableFan()
{
#ifdef RADIO_FAN_EN
#ifdef RADIO_FAN_PWM
#if defined(ARCH_ESP32)
ledcWrite(1, config.lora.pa_fan_disabled ? 0 : (pa_fan_percentage * 2.55));
#elif defined(ARCH_NRF52)
analogWrite(RADIO_FAN_EN, config.lora.pa_fan_disabled ? 0 : (pa_fan_percentage * 2.55));
#endif
#else
pinMode(RADIO_FAN_EN, OUTPUT);
digitalWrite(RADIO_FAN_EN, 1);
#endif
#endif
}
void RadioLibInterface::disableFan()
{
#ifdef RADIO_FAN_EN
#ifdef RADIO_FAN_PWM
#if defined(ARCH_ESP32)
ledcWrite(1, 0);
#elif defined(ARCH_NRF52)
analogWrite(RADIO_FAN_EN, 0);
#endif
#else
pinMode(RADIO_FAN_EN, OUTPUT);
digitalWrite(RADIO_FAN_EN, 0);
#endif
#endif
}

View File

@@ -146,9 +146,6 @@ class RadioLibInterface : public RadioInterface, protected concurrency::Notified
/** Attempt to find a packet in the TxQueue. Returns true if the packet was found. */ /** Attempt to find a packet in the TxQueue. Returns true if the packet was found. */
virtual bool findInTxQueue(NodeNum from, PacketId id) override; virtual bool findInTxQueue(NodeNum from, PacketId id) override;
void enableFan();
void disableFan();
private: private:
/** if we have something waiting to send, start a short (random) timer so we can come check for collision before actually /** if we have something waiting to send, start a short (random) timer so we can come check for collision before actually
* doing the transmit */ * doing the transmit */

View File

@@ -52,8 +52,6 @@ template <typename T> bool SX126xInterface<T>::init()
pinMode(SX126X_POWER_EN, OUTPUT); pinMode(SX126X_POWER_EN, OUTPUT);
#endif #endif
enableFan();
#if ARCH_PORTDUINO #if ARCH_PORTDUINO
tcxoVoltage = (float)settingsMap[dio3_tcxo_voltage] / 1000; tcxoVoltage = (float)settingsMap[dio3_tcxo_voltage] / 1000;
if (settingsMap[sx126x_ant_sw_pin] != RADIOLIB_NC) { if (settingsMap[sx126x_ant_sw_pin] != RADIOLIB_NC) {

View File

@@ -35,7 +35,10 @@ template <typename T> bool SX128xInterface<T>::init()
digitalWrite(SX128X_POWER_EN, HIGH); digitalWrite(SX128X_POWER_EN, HIGH);
#endif #endif
enableFan(); #ifdef RF95_FAN_EN
pinMode(RF95_FAN_EN, OUTPUT);
digitalWrite(RF95_FAN_EN, 1);
#endif
#if ARCH_PORTDUINO #if ARCH_PORTDUINO
if (settingsMap[rxen_pin] != RADIOLIB_NC) { if (settingsMap[rxen_pin] != RADIOLIB_NC) {

View File

@@ -706,21 +706,13 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c)
requiresReboot = false; requiresReboot = false;
} }
#ifdef RADIO_FAN_EN #ifdef RF95_FAN_EN
#ifdef RADIO_FAN_PWM
#if defined(ARCH_ESP32)
ledcWrite(1, c.payload_variant.lora.pa_fan_disabled ? 0 : (pa_fan_percentage * 2.55));
#elif defined(ARCH_NFR52)
analogWrite(RADIO_FAN_EN, c.payload_variant.lora.pa_fan_disabled ? 0 : (pa_fan_percentage * 2.55));
#endif
#else
// Turn PA off if disabled by config // Turn PA off if disabled by config
if (c.payload_variant.lora.pa_fan_disabled) { if (c.payload_variant.lora.pa_fan_disabled) {
digitalWrite(RADIO_FAN_EN, LOW ^ 0); digitalWrite(RF95_FAN_EN, LOW ^ 0);
} else { } else {
digitalWrite(RADIO_FAN_EN, HIGH ^ 0); digitalWrite(RF95_FAN_EN, HIGH ^ 0);
} }
#endif
#endif #endif
config.lora = c.payload_variant.lora; config.lora = c.payload_variant.lora;
// If we're setting region for the first time, init the region // If we're setting region for the first time, init the region

View File

@@ -12,6 +12,7 @@
#include "input/cardKbI2cImpl.h" #include "input/cardKbI2cImpl.h"
#endif #endif
#include "input/kbMatrixImpl.h" #include "input/kbMatrixImpl.h"
#include "input/kbUsbImpl.h"
#endif #endif
#if !MESHTASTIC_EXCLUDE_PKI #if !MESHTASTIC_EXCLUDE_PKI
#include "KeyVerificationModule.h" #include "KeyVerificationModule.h"
@@ -181,10 +182,14 @@ void setupModules()
kbMatrixImpl = new KbMatrixImpl(); kbMatrixImpl = new KbMatrixImpl();
kbMatrixImpl->init(); kbMatrixImpl->init();
#endif // INPUTBROKER_MATRIX_TYPE #endif // INPUTBROKER_MATRIX_TYPE
#if CONFIG_IDF_TARGET_ESP32S3 || CONFIG_IDF_TARGET_ESP32S2
kbUsbImpl = new KbUsbImpl();
kbUsbImpl->init();
#endif
#ifdef INPUTBROKER_SERIAL_TYPE #ifdef INPUTBROKER_SERIAL_TYPE
aSerialKeyboardImpl = new SerialKeyboardImpl(); aSerialKeyboardImpl = new SerialKeyboardImpl();
aSerialKeyboardImpl->init(); aSerialKeyboardImpl->init();
#endif // INPUTBROKER_MATRIX_TYPE #endif // INPUTBROKER_SERIAL_TYPE
} }
#endif // HAS_BUTTON #endif // HAS_BUTTON
#if ARCH_PORTDUINO #if ARCH_PORTDUINO

View File

@@ -12,7 +12,7 @@
#define LORA_MISO 19 #define LORA_MISO 19
#define LORA_MOSI 23 #define LORA_MOSI 23
#define LORA_CS 5 #define LORA_CS 5
#define RADIO_FAN_EN 17 #define RF95_FAN_EN 17
// #define LED_PIN 16 // This is a LED_WS2812 not a standard LED // #define LED_PIN 16 // This is a LED_WS2812 not a standard LED
#define HAS_NEOPIXEL // Enable the use of neopixels #define HAS_NEOPIXEL // Enable the use of neopixels

View File

@@ -8,7 +8,7 @@ board_level = extra
upload_protocol = esptool upload_protocol = esptool
;upload_port = /dev/ttyACM2 ;upload_port = /dev/ttyACM2
lib_deps = lib_deps =
${esp32_base.lib_deps} ${esp32s3_base.lib_deps}
caveman99/ESP32 Codec2@^1.0.1 caveman99/ESP32 Codec2@^1.0.1
build_flags = build_flags =
${esp32_base.build_flags} -D PRIVATE_HW -I variants/bpi_picow_esp32_s3 ${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/bpi_picow_esp32_s3

View File

@@ -2,7 +2,7 @@
extends = esp32c3_base extends = esp32c3_base
board = esp32-c3-devkitm-1 board = esp32-c3-devkitm-1
build_flags = build_flags =
${esp32_base.build_flags} ${esp32c3_base.build_flags}
-D HELTEC_HT62 -D HELTEC_HT62
-I variants/heltec_esp32c3 -I variants/heltec_esp32c3
monitor_speed = 115200 monitor_speed = 115200

View File

@@ -3,7 +3,7 @@ extends = esp32c3_base
board = esp32-c3-devkitm-1 board = esp32-c3-devkitm-1
board_level = extra board_level = extra
build_flags = build_flags =
${esp32_base.build_flags} ${esp32c3_base.build_flags}
-D PRIVATE_HW -D PRIVATE_HW
-I variants/m5stack-stamp-c3 -I variants/m5stack-stamp-c3
monitor_speed = 115200 monitor_speed = 115200

View File

@@ -11,15 +11,15 @@ upload_speed = 921600
platform_packages = platform_packages =
platformio/tool-esptoolpy@^1.40801.0 platformio/tool-esptoolpy@^1.40801.0
lib_deps = lib_deps =
${esp32_base.lib_deps} ${esp32s3_base.lib_deps}
zinggjm/GxEPD2@^1.6.2 zinggjm/GxEPD2@^1.6.2
adafruit/Adafruit NeoPixel @ ^1.12.0 adafruit/Adafruit NeoPixel @ ^1.12.0
build_unflags = build_unflags =
${esp32s3_base.build_unflags} ${esp32s3_base.build_unflags}
-DARDUINO_USB_MODE=1 -DARDUINO_USB_MODE=1
build_flags = build_flags =
;${esp32_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_eink ;${esp32s3_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_eink
${esp32_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_eink ${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_eink
-Dmy -Dmy
-DEINK_DISPLAY_MODEL=GxEPD2_290_T5D -DEINK_DISPLAY_MODEL=GxEPD2_290_T5D
-DEINK_WIDTH=296 -DEINK_WIDTH=296

View File

@@ -11,14 +11,14 @@ upload_speed = 921600
platform_packages = platform_packages =
platformio/tool-esptoolpy@^1.40801.0 platformio/tool-esptoolpy@^1.40801.0
lib_deps = lib_deps =
${esp32_base.lib_deps} ${esp32s3_base.lib_deps}
adafruit/Adafruit NeoPixel @ ^1.12.0 adafruit/Adafruit NeoPixel @ ^1.12.0
build_unflags = build_unflags =
${esp32s3_base.build_unflags} ${esp32s3_base.build_unflags}
-DARDUINO_USB_MODE=1 -DARDUINO_USB_MODE=1
build_flags = build_flags =
;${esp32_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_oled ;${esp32s3_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_oled
${esp32_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_oled ${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_oled
-DBOARD_HAS_PSRAM -DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-issue
-DARDUINO_USB_MODE=0 -DARDUINO_USB_MODE=0

View File

@@ -46,8 +46,7 @@
FAN is active at 250mW on it's ExpressLRS Firmware. FAN is active at 250mW on it's ExpressLRS Firmware.
This FAN has TACHO signal on Pin 27 for use with PWM. This FAN has TACHO signal on Pin 27 for use with PWM.
*/ */
#define RADIO_FAN_EN 2 #define RF95_FAN_EN 2
#define RADIO_FAN_PWM
/* /*
LED PIN setup and it has a NeoPixel LED. LED PIN setup and it has a NeoPixel LED.

View File

@@ -32,7 +32,7 @@
This unit has a FAN built-in. This unit has a FAN built-in.
FAN is active at 250mW on it's ExpressLRS Firmware. FAN is active at 250mW on it's ExpressLRS Firmware.
*/ */
#define RADIO_FAN_EN 2 #define RF95_FAN_EN 2
/* /*
LED PIN setup. LED PIN setup.

View File

@@ -1,20 +0,0 @@
[env:radiomaster_nomad_gemini]
extends = esp32_base
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}
-DRADIOMASTER_NOMAD_GEMINI
-DPRIVATE_HW
-DVTABLES_IN_FLASH=1
-DCONFIG_DISABLE_HAL_LOCKS=1
-O2
-Ivariants/radiomaster_nomad_gemini
-DMESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR=1
-DMESHTASTIC_EXCLUDE_I2C=1
-DRADIOLIB_EXCLUDE_SX128X=1
-DRADIOLIB_EXCLUDE_SX127X=1
-DRADIOLIB_EXCLUDE_SX126X=1
board_build.f_cpu = 240000000L
upload_protocol = esptool
lib_deps =
${esp32_base.lib_deps}

View File

@@ -1,56 +0,0 @@
#include "RadioLib.h"
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_LR11X0_DIO7,
RADIOLIB_LR11X0_DIO8, RADIOLIB_NC};
static const Module::RfSwitchMode_t rfswitch_table[] = {
// mode DIO5 DIO6 DIO7 DIO8
{LR11x0::MODE_STBY, {LOW, LOW, LOW, LOW}}, {LR11x0::MODE_RX, {LOW, LOW, HIGH, LOW}},
{LR11x0::MODE_TX, {LOW, LOW, LOW, HIGH}}, {LR11x0::MODE_TX_HP, {LOW, LOW, LOW, HIGH}},
{LR11x0::MODE_TX_HF, {LOW, HIGH, LOW, LOW}}, {LR11x0::MODE_GNSS, {LOW, LOW, LOW, LOW}},
{LR11x0::MODE_WIFI, {HIGH, LOW, LOW, LOW}}, END_OF_MODE_TABLE,
};
/*
DIO5: RXEN 2.4GHz
DIO6: TXEN 2.4GHz
DIO7: RXEN 900MHz
DIO8: TXEN 900MHz
"radio_dcdc": true,
"radio_rfo_hf": true,
"power_apc2": 26,
"power_min": 0,
"power_high": 6,
"power_max": 6,
"power_default": 3,
"power_control": 3, POWER_OUTPUT_DACWRITE // use internal dacWrite function to set value on GPIO_PIN_RFamp_APC2
[0, 1, 2, 3, 4, 5, 6 ] // 0-6
"power_values": [120, 120, 120, 120, 120, 120, 95] // DAC Value
"power_values2": [-17, -16, -14, -11, -7, -3, 5 ] // 900M
"power_values_dual": [-18, -14, -8, -6, -2, 3, 5 ] // 2.4G
// default value 0 means direct!
#define POWER_OUTPUT_DACWRITE (hardware_int(HARDWARE_power_control)==3)
#define POWER_OUTPUT_VALUES hardware_i16_array(HARDWARE_power_values)
#define POWER_OUTPUT_VALUES_COUNT hardware_int(HARDWARE_power_values_count)
#define POWER_OUTPUT_VALUES2 hardware_i16_array(HARDWARE_power_values2)
#define POWER_OUTPUT_VALUES_DUAL hardware_i16_array(HARDWARE_power_values_dual)
#define POWER_OUTPUT_VALUES_DUAL_COUNT hardware_int(HARDWARE_power_values_dual_count)
#define GPIO_PIN_FAN_EN hardware_pin(HARDWARE_misc_fan_en)
case PWR_10mW: return 10;
case PWR_25mW: return 14;
case PWR_50mW: return 17;
case PWR_100mW: return 20;
case PWR_250mW: return 24;
case PWR_500mW: return 27;
case PWR_1000mW: return 30;
95 -> +25dBm
120 -> +24dBm
*/

View File

@@ -1,60 +0,0 @@
#define HAS_SCREEN 0
#define HAS_WIRE 0
#define HAS_GPS 0
#undef GPS_RX_PIN
#undef GPS_TX_PIN
#define PIN_SPI_MISO 33
#define PIN_SPI_MOSI 32
#define PIN_SPI_SCK 25
#define PIN_SPI_NSS 27
#define LORA_RESET 15
#define LORA_DIO1 37
#define LORA_DIO2 36
#define LORA_SCK PIN_SPI_SCK
#define LORA_MISO PIN_SPI_MISO
#define LORA_MOSI PIN_SPI_MOSI
#define LORA_CS PIN_SPI_NSS
// supported modules list
#define USE_LR1121
#define LR1121_IRQ_PIN LORA_DIO1
#define LR1121_NRESET_PIN LORA_RESET
#define LR1121_BUSY_PIN LORA_DIO2
#define LR1121_SPI_NSS_PIN LORA_CS
#define LR1121_SPI_SCK_PIN LORA_SCK
#define LR1121_SPI_MOSI_PIN LORA_MOSI
#define LR1121_SPI_MISO_PIN LORA_MISO
// this is correct and sets the cap for the Sub-GHz part
#define LR1110_MAX_POWER 5
// 2.4G Part
#define LR1120_MAX_POWER 5
#define POWER_SHIFT -20
// not yet implemented
#define JANUS_RADIO
#define LR1121_IRQ2_PIN 34
#define LR1121_NRESET2_PIN 21
#define LR1121_BUSY2_PIN 39
#define LR1121_SPI_NSS2_PIN 13
// TODO: check if this is correct
// #define LR11X0_DIO3_TCXO_VOLTAGE 1.6
#define LR11X0_DIO_AS_RF_SWITCH
#define HAS_NEOPIXEL // Enable the use of neopixels
#define NEOPIXEL_COUNT 2 // How many neopixels are connected
#define NEOPIXEL_DATA 22 // GPIO pin used to send data to the neopixels
#define NEOPIXEL_TYPE (NEO_GRB + NEO_KHZ800) // Type of neopixels in use
#define ENABLE_AMBIENTLIGHTING // Turn on Ambient Lighting
#define BUTTON_PIN 34
#define BUTTON_NEED_PULLUP
#undef EXT_NOTIFY_OUT
#define RADIO_FAN_EN 2

View File

@@ -5,5 +5,5 @@ board_check = true
upload_protocol = esptool upload_protocol = esptool
build_flags = build_flags =
${esp32_base.build_flags} -D TLORA_T3S3_V1 -I variants/tlora_t3s3_v1 ${esp32s3_base.build_flags} -D TLORA_T3S3_V1 -I variants/tlora_t3s3_v1
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely. -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.