Compare commits

...

9 Commits

Author SHA1 Message Date
Ben Meadors
331a1afc37 Update minor for new release 2023-03-06 16:17:31 -06:00
Ben Meadors
321e41a3aa Update protos 2023-03-06 16:17:09 -06:00
GUVWAF
3ca1e62b1f SX126x/8x: Add HEADER_VALID IRQ flag for actively receiving check (#2333)
* Add HEADER_VALID IRQ flag for SX126x/8x to detect actively receiving
Needs new RadioLib commit

* Update comments

* Use latest RadioLib release

---------

Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
2023-03-06 15:53:59 -06:00
Thomas Göttgens
5044169e8d fixes #2330 2023-03-06 14:12:24 +01:00
Thomas Göttgens
8e197fc35b fixes #2327 2023-03-06 12:50:05 +01:00
A. Rager
f63505038f add psram for lilygo t3 s3 2023-03-06 12:44:51 +01:00
Thomas Göttgens
4a0dfb5401 T3S3-1.1 SX1276 config (and cosmetic change for SX1280 in PA mode) 2023-03-04 18:39:19 +01:00
GUVWAF
eb4ab26e1f Check if packet is decrypted before searching node in DB (#2320)
* Check whether TraceRouteModule exists
In case in the future we don't enable it

* Check whether packet is decrypted before searching node in DB
2023-03-02 13:22:14 -06:00
github-actions[bot]
8c059a8a9e [create-pull-request] automated change (#2317)
Co-authored-by: thebentern <thebentern@users.noreply.github.com>
2023-03-02 08:34:00 -06:00
15 changed files with 60 additions and 55 deletions

View File

@@ -9,7 +9,8 @@
"-DARDUINO_USB_CDC_ON_BOOT=1", "-DARDUINO_USB_CDC_ON_BOOT=1",
"-DARDUINO_USB_MODE=0", "-DARDUINO_USB_MODE=0",
"-DARDUINO_RUNNING_CORE=1", "-DARDUINO_RUNNING_CORE=1",
"-DARDUINO_EVENT_RUNNING_CORE=1" "-DARDUINO_EVENT_RUNNING_CORE=1",
"-DBOARD_HAS_PSRAM"
], ],
"f_cpu": "240000000L", "f_cpu": "240000000L",
"f_flash": "80000000L", "f_flash": "80000000L",

View File

@@ -66,8 +66,7 @@ lib_deps =
https://github.com/meshtastic/ArduinoThread.git#72921ac222eed6f526ba1682023cee290d9aa1b3 https://github.com/meshtastic/ArduinoThread.git#72921ac222eed6f526ba1682023cee290d9aa1b3
nanopb/Nanopb@^0.4.6 nanopb/Nanopb@^0.4.6
erriez/ErriezCRC32@^1.0.1 erriez/ErriezCRC32@^1.0.1
; jgromes/RadioLib@^5.5.1 jgromes/RadioLib@^5.7.0
https://github.com/jgromes/RadioLib.git#1afa947030c5637f71f6563bc22aa75032e53a57
; Used for the code analysis in PIO Home / Inspect ; Used for the code analysis in PIO Home / Inspect
check_tool = cppcheck check_tool = cppcheck

View File

@@ -44,7 +44,8 @@ void FloodingRouter::sniffReceived(const meshtastic_MeshPacket *p, const meshtas
tosend->hop_limit--; // bump down the hop count tosend->hop_limit--; // bump down the hop count
// If it is a traceRoute request, update the route that it went via me // If it is a traceRoute request, update the route that it went via me
if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag && traceRouteModule->wantPacket(p)) { if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag && traceRouteModule &&
traceRouteModule->wantPacket(p)) {
traceRouteModule->updateRoute(tosend); traceRouteModule->updateRoute(tosend);
} }

View File

@@ -76,7 +76,7 @@ int MeshService::handleFromRadio(const meshtastic_MeshPacket *mp)
powerFSM.trigger(EVENT_PACKET_FOR_PHONE); // Possibly keep the node from sleeping powerFSM.trigger(EVENT_PACKET_FOR_PHONE); // Possibly keep the node from sleeping
nodeDB.updateFrom(*mp); // update our DB state based off sniffing every RX packet from the radio nodeDB.updateFrom(*mp); // update our DB state based off sniffing every RX packet from the radio
if (!nodeDB.getNode(mp->from)->has_user && nodeInfoModule) { if (mp->which_payload_variant == meshtastic_MeshPacket_decoded_tag && !nodeDB.getNode(mp->from)->has_user && nodeInfoModule) {
LOG_INFO("Heard a node we don't know, sending NodeInfo and asking for a response.\n"); LOG_INFO("Heard a node we don't know, sending NodeInfo and asking for a response.\n");
nodeInfoModule->sendOurNodeInfo(mp->from, true); nodeInfoModule->sendOurNodeInfo(mp->from, true);
} }

View File

@@ -281,7 +281,7 @@ void printPacket(const char *prefix, const meshtastic_MeshPacket *p)
if (p->priority != 0) if (p->priority != 0)
out += DEBUG_PORT.mt_sprintf(" priority=%d", p->priority); out += DEBUG_PORT.mt_sprintf(" priority=%d", p->priority);
out + ")\n"; out += ")\n";
LOG_DEBUG("%s", out.c_str()); LOG_DEBUG("%s", out.c_str());
} }

View File

@@ -212,9 +212,10 @@ template <typename T> void SX126xInterface<T>::startReceive()
setStandby(); setStandby();
// int err = lora.startReceive(); // We use a 16 bit preamble so this should save some power by letting radio sit in standby mostly.
int err = lora.startReceiveDutyCycleAuto(); // We use a 32 bit preamble so this should save some power by letting radio sit in // Furthermore, we need the HEADER_VALID IRQ flag to detect whether we are actively receiving
// standby mostly. int err =
lora.startReceiveDutyCycleAuto(preambleLength, 8, RADIOLIB_SX126X_IRQ_RX_DEFAULT | RADIOLIB_SX126X_IRQ_HEADER_VALID);
assert(err == RADIOLIB_ERR_NONE); assert(err == RADIOLIB_ERR_NONE);
isReceiving = true; isReceiving = true;
@@ -224,7 +225,7 @@ template <typename T> void SX126xInterface<T>::startReceive()
#endif #endif
} }
/** Could we send right now (i.e. either not actively receving or transmitting)? */ /** Is the channel currently active? */
template <typename T> bool SX126xInterface<T>::isChannelActive() template <typename T> bool SX126xInterface<T>::isChannelActive()
{ {
// check if we can detect a LoRa preamble on the current channel // check if we can detect a LoRa preamble on the current channel
@@ -245,17 +246,12 @@ template <typename T> bool SX126xInterface<T>::isActivelyReceiving()
{ {
// The IRQ status will be cleared when we start our read operation. Check if we've started a header, but haven't yet // The IRQ status will be cleared when we start our read operation. Check if we've started a header, but haven't yet
// received and handled the interrupt for reading the packet/handling errors. // received and handled the interrupt for reading the packet/handling errors.
// FIXME: it would be better to check for preamble, but we currently have our ISR not set to fire for packets that
// never even get a valid header, so we don't want preamble to get set and stay set due to noise on the network.
uint16_t irq = lora.getIrqStatus(); uint16_t irq = lora.getIrqStatus();
bool hasPreamble = (irq & RADIOLIB_SX126X_IRQ_HEADER_VALID); bool headerValid = (irq & RADIOLIB_SX126X_IRQ_HEADER_VALID);
// this is not correct - often always true - need to add an extra conditional // if (headerValid) LOG_DEBUG("rx headerValid\n");
// size_t bytesPending = lora.getPacketLength(); return headerValid;
// if (hasPreamble) LOG_DEBUG("rx hasPreamble\n");
return hasPreamble;
} }
template <typename T> bool SX126xInterface<T>::sleep() template <typename T> bool SX126xInterface<T>::sleep()

View File

@@ -203,7 +203,9 @@ template <typename T> void SX128xInterface<T>::startReceive()
digitalWrite(SX128X_TXEN, LOW); digitalWrite(SX128X_TXEN, LOW);
#endif #endif
int err = lora.startReceive(); // We use the HEADER_VALID IRQ flag to detect whether we are actively receiving
int err =
lora.startReceive(RADIOLIB_SX128X_RX_TIMEOUT_INF, RADIOLIB_SX128X_IRQ_RX_DEFAULT | RADIOLIB_SX128X_IRQ_HEADER_VALID);
assert(err == RADIOLIB_ERR_NONE); assert(err == RADIOLIB_ERR_NONE);
@@ -214,7 +216,7 @@ template <typename T> void SX128xInterface<T>::startReceive()
#endif #endif
} }
/** Could we send right now (i.e. either not actively receving or transmitting)? */ /** Is the channel currently active? */
template <typename T> bool SX128xInterface<T>::isChannelActive() template <typename T> bool SX128xInterface<T>::isChannelActive()
{ {
// check if we can detect a LoRa preamble on the current channel // check if we can detect a LoRa preamble on the current channel
@@ -234,8 +236,8 @@ template <typename T> bool SX128xInterface<T>::isChannelActive()
template <typename T> bool SX128xInterface<T>::isActivelyReceiving() template <typename T> bool SX128xInterface<T>::isActivelyReceiving()
{ {
uint16_t irq = lora.getIrqStatus(); uint16_t irq = lora.getIrqStatus();
bool hasPreamble = (irq & RADIOLIB_SX128X_IRQ_HEADER_VALID); bool hasHeader = (irq & RADIOLIB_SX128X_IRQ_HEADER_VALID);
return hasPreamble; return hasHeader;
} }
template <typename T> bool SX128xInterface<T>::sleep() template <typename T> bool SX128xInterface<T>::sleep()

View File

@@ -135,7 +135,7 @@ typedef struct _meshtastic_AdminMessage {
/* Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot) /* Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot)
Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth. */ Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth. */
int32_t reboot_ota_seconds; int32_t reboot_ota_seconds;
/* This message is only supported for the simulator porduino build. /* This message is only supported for the simulator Portduino build.
If received the simulator will exit successfully. */ If received the simulator will exit successfully. */
bool exit_simulator; bool exit_simulator;
/* Tell the node to reboot in this many seconds (or <0 to cancel reboot) */ /* Tell the node to reboot in this many seconds (or <0 to cancel reboot) */

View File

@@ -152,7 +152,7 @@ typedef enum _meshtastic_Config_LoRaConfig_RegionCode {
meshtastic_Config_LoRaConfig_RegionCode_US = 1, meshtastic_Config_LoRaConfig_RegionCode_US = 1,
/* European Union 433mhz */ /* European Union 433mhz */
meshtastic_Config_LoRaConfig_RegionCode_EU_433 = 2, meshtastic_Config_LoRaConfig_RegionCode_EU_433 = 2,
/* European Union 433mhz */ /* European Union 868mhz */
meshtastic_Config_LoRaConfig_RegionCode_EU_868 = 3, meshtastic_Config_LoRaConfig_RegionCode_EU_868 = 3,
/* China */ /* China */
meshtastic_Config_LoRaConfig_RegionCode_CN = 4, meshtastic_Config_LoRaConfig_RegionCode_CN = 4,
@@ -202,11 +202,11 @@ typedef enum _meshtastic_Config_LoRaConfig_ModemPreset {
} meshtastic_Config_LoRaConfig_ModemPreset; } meshtastic_Config_LoRaConfig_ModemPreset;
typedef enum _meshtastic_Config_BluetoothConfig_PairingMode { typedef enum _meshtastic_Config_BluetoothConfig_PairingMode {
/* Device generates a random pin that will be shown on the screen of the device for pairing */ /* Device generates a random PIN that will be shown on the screen of the device for pairing */
meshtastic_Config_BluetoothConfig_PairingMode_RANDOM_PIN = 0, meshtastic_Config_BluetoothConfig_PairingMode_RANDOM_PIN = 0,
/* Device requires a specified fixed pin for pairing */ /* Device requires a specified fixed PIN for pairing */
meshtastic_Config_BluetoothConfig_PairingMode_FIXED_PIN = 1, meshtastic_Config_BluetoothConfig_PairingMode_FIXED_PIN = 1,
/* Device requires no pin for pairing */ /* Device requires no PIN for pairing */
meshtastic_Config_BluetoothConfig_PairingMode_NO_PIN = 2 meshtastic_Config_BluetoothConfig_PairingMode_NO_PIN = 2
} meshtastic_Config_BluetoothConfig_PairingMode; } meshtastic_Config_BluetoothConfig_PairingMode;
@@ -364,7 +364,7 @@ typedef struct _meshtastic_Config_DisplayConfig {
/* Lora Config */ /* Lora Config */
typedef struct _meshtastic_Config_LoRaConfig { typedef struct _meshtastic_Config_LoRaConfig {
/* When enabled, the `modem_preset` fields will be adheared to, else the `bandwidth`/`spread_factor`/`coding_rate` /* When enabled, the `modem_preset` fields will be adhered to, else the `bandwidth`/`spread_factor`/`coding_rate`
will be taked from their respective manually defined fields */ will be taked from their respective manually defined fields */
bool use_preset; bool use_preset;
/* Either modem_config or bandwidth/spreading/coding will be specified - NOT BOTH. /* Either modem_config or bandwidth/spreading/coding will be specified - NOT BOTH.
@@ -395,12 +395,12 @@ typedef struct _meshtastic_Config_LoRaConfig {
/* Disable TX from the LoRa radio. Useful for hot-swapping antennas and other tests. /* Disable TX from the LoRa radio. Useful for hot-swapping antennas and other tests.
Defaults to false */ Defaults to false */
bool tx_enabled; bool tx_enabled;
/* If zero then, use default max legal continuous power (ie. something that won't /* If zero, then use default max legal continuous power (ie. something that won't
burn out the radio hardware) burn out the radio hardware)
In most cases you should use zero here. In most cases you should use zero here.
Units are in dBm. */ Units are in dBm. */
int8_t tx_power; int8_t tx_power;
/* This is controlling the actual hardware frequency the radio is transmitting on. /* This controls the actual hardware frequency the radio transmits on.
Most users should never need to be exposed to this field/concept. Most users should never need to be exposed to this field/concept.
A channel number between 1 and NUM_CHANNELS (whatever the max is in the current region). A channel number between 1 and NUM_CHANNELS (whatever the max is in the current region).
If ZERO then the rule is "use the old channel name hash based If ZERO then the rule is "use the old channel name hash based
@@ -422,7 +422,7 @@ typedef struct _meshtastic_Config_LoRaConfig {
float override_frequency; float override_frequency;
/* For testing it is useful sometimes to force a node to never listen to /* For testing it is useful sometimes to force a node to never listen to
particular other nodes (simulating radio out of range). All nodenums listed particular other nodes (simulating radio out of range). All nodenums listed
in ignore_incoming will have packets they send droped on receive (by router.cpp) */ in ignore_incoming will have packets they send dropped on receive (by router.cpp) */
pb_size_t ignore_incoming_count; pb_size_t ignore_incoming_count;
uint32_t ignore_incoming[3]; uint32_t ignore_incoming[3];
} meshtastic_Config_LoRaConfig; } meshtastic_Config_LoRaConfig;
@@ -432,7 +432,7 @@ typedef struct _meshtastic_Config_BluetoothConfig {
bool enabled; bool enabled;
/* Determines the pairing strategy for the device */ /* Determines the pairing strategy for the device */
meshtastic_Config_BluetoothConfig_PairingMode mode; meshtastic_Config_BluetoothConfig_PairingMode mode;
/* Specified pin for PairingMode.FixedPin */ /* Specified PIN for PairingMode.FixedPin */
uint32_t fixed_pin; uint32_t fixed_pin;
} meshtastic_Config_BluetoothConfig; } meshtastic_Config_BluetoothConfig;

View File

@@ -27,9 +27,9 @@ typedef struct _meshtastic_WifiConnectionStatus {
/* Connection status */ /* Connection status */
bool has_status; bool has_status;
meshtastic_NetworkConnectionStatus status; meshtastic_NetworkConnectionStatus status;
/* WiFi access point ssid */ /* WiFi access point SSID */
char ssid[33]; char ssid[33];
/* Rssi of wireless connection */ /* RSSI of wireless connection */
int32_t rssi; int32_t rssi;
} meshtastic_WifiConnectionStatus; } meshtastic_WifiConnectionStatus;
@@ -42,9 +42,9 @@ typedef struct _meshtastic_EthernetConnectionStatus {
/* Bluetooth connection status */ /* Bluetooth connection status */
typedef struct _meshtastic_BluetoothConnectionStatus { typedef struct _meshtastic_BluetoothConnectionStatus {
/* The pairing pin for bluetooth */ /* The pairing PIN for bluetooth */
uint32_t pin; uint32_t pin;
/* Rssi of bluetooth connection */ /* RSSI of bluetooth connection */
int32_t rssi; int32_t rssi;
/* Whether the device has an active connection or not */ /* Whether the device has an active connection or not */
bool is_connected; bool is_connected;
@@ -52,7 +52,7 @@ typedef struct _meshtastic_BluetoothConnectionStatus {
/* Serial connection status */ /* Serial connection status */
typedef struct _meshtastic_SerialConnectionStatus { typedef struct _meshtastic_SerialConnectionStatus {
/* The serial baud rate */ /* Serial baud rate */
uint32_t baud; uint32_t baud;
/* Whether the device has an active connection or not */ /* Whether the device has an active connection or not */
bool is_connected; bool is_connected;

View File

@@ -54,7 +54,7 @@ typedef struct _meshtastic_DeviceState {
/* Used only during development. /* Used only during development.
Indicates developer is testing and changes should never be saved to flash. */ Indicates developer is testing and changes should never be saved to flash. */
bool no_save; bool no_save;
/* Some GPSes seem to have bogus settings from the factory, so we always do one factory reset. */ /* Some GPS receivers seem to have bogus settings from the factory, so we always do one factory reset. */
bool did_gps_reset; bool did_gps_reset;
} meshtastic_DeviceState; } meshtastic_DeviceState;
@@ -72,13 +72,13 @@ typedef struct _meshtastic_ChannelFile {
typedef PB_BYTES_ARRAY_T(2048) meshtastic_OEMStore_oem_icon_bits_t; typedef PB_BYTES_ARRAY_T(2048) meshtastic_OEMStore_oem_icon_bits_t;
typedef PB_BYTES_ARRAY_T(32) meshtastic_OEMStore_oem_aes_key_t; typedef PB_BYTES_ARRAY_T(32) meshtastic_OEMStore_oem_aes_key_t;
/* This can be used for customizing the firmware distribution. If populated, /* This can be used for customizing the firmware distribution. If populated,
show a secondary bootup screen with cuatom logo and text for 2.5 seconds. */ show a secondary bootup screen with custom logo and text for 2.5 seconds. */
typedef struct _meshtastic_OEMStore { typedef struct _meshtastic_OEMStore {
/* The Logo width in Px */ /* The Logo width in Px */
uint32_t oem_icon_width; uint32_t oem_icon_width;
/* The Logo height in Px */ /* The Logo height in Px */
uint32_t oem_icon_height; uint32_t oem_icon_height;
/* The Logo in xbm bytechar format */ /* The Logo in XBM bytechar format */
meshtastic_OEMStore_oem_icon_bits_t oem_icon_bits; meshtastic_OEMStore_oem_icon_bits_t oem_icon_bits;
/* Use this font for the OEM text. */ /* Use this font for the OEM text. */
meshtastic_ScreenFonts oem_font; meshtastic_ScreenFonts oem_font;

View File

@@ -30,12 +30,14 @@ class MQTT : private concurrency::OSThread
#if HAS_ETHERNET #if HAS_ETHERNET
EthernetClient mqttClient; EthernetClient mqttClient;
#endif #endif
#if !defined(DEBUG_HEAP_MQTT)
PubSubClient pubSub; PubSubClient pubSub;
// instead we supress sleep from our runOnce() callback
// CallbackObserver<MQTT, void *> preflightSleepObserver = CallbackObserver<MQTT, void *>(this, &MQTT::preflightSleepCb);
public: public:
#else
public:
PubSubClient pubSub;
#endif
MQTT(); MQTT();
/** /**

View File

@@ -28,26 +28,30 @@
#define RF95_MISO 3 #define RF95_MISO 3
#define RF95_MOSI 6 #define RF95_MOSI 6
#define RF95_NSS 7 #define RF95_NSS 7
#define LORA_RESET 8 #define LORA_RESET 8
#define LORA_DIO0 9
#define LORA_DIO1 9
#define LORA_DIO2 33 // SX1262 BUSY
#define LORA_DIO3 34 // Not connected on PCB, but internally on the TTGO SX1262, if DIO3 is high the TXCO is enabled
// per SX1276_Receive_Interrupt/utilities.h
#define LORA_DIO0 9
#define LORA_DIO1 33 // TCXO_EN ?
#define LORA_DIO2 34
#define LORA_RXEN 21
#define LORA_TXEN 10
// per SX1262_Receive_Interrupt/utilities.h
#ifdef USE_SX1262 #ifdef USE_SX1262
#define SX126X_CS RF95_NSS // FIXME - we really should define LORA_CS instead #define SX126X_CS RF95_NSS
#define SX126X_DIO1 33 #define SX126X_DIO1 33
#define SX126X_BUSY 34 #define SX126X_BUSY 34
#define SX126X_RESET LORA_RESET #define SX126X_RESET LORA_RESET
//#define SX126X_RXEN 21
//#define SX126X_TXEN 10
#define SX126X_E22 #define SX126X_E22
#endif #endif
// per SX128x_Receive_Interrupt/utilities.h
#ifdef USE_SX1280 #ifdef USE_SX1280
#define SX128X_CS RF95_NSS #define SX128X_CS RF95_NSS
#define SX128X_DIO1 LORA_DIO1 #define SX128X_DIO1 9
#define SX128X_DIO2 33
#define SX128X_DIO3 34
#define SX128X_BUSY 36 #define SX128X_BUSY 36
#define SX128X_RESET LORA_RESET #define SX128X_RESET LORA_RESET
#define SX128X_RXEN 21 #define SX128X_RXEN 21

View File

@@ -1,4 +1,4 @@
[VERSION] [VERSION]
major = 2 major = 2
minor = 0 minor = 1
build = 23 build = 0