Skip to content

Commit

Permalink
Merge branch 'master' into use-ina-currentflow-for-charging-detection
Browse files Browse the repository at this point in the history
  • Loading branch information
fifieldt authored Dec 21, 2024
2 parents 70ffa37 + fa1a1fd commit bfe5568
Show file tree
Hide file tree
Showing 22 changed files with 252 additions and 76 deletions.
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ USER root
# trunk-ignore(hadolint/DL3008): Use latest version of packages for buildchain
RUN apt-get update && apt-get install --no-install-recommends -y wget python3 python3-pip python3-wheel python3-venv g++ zip git \
ca-certificates libgpiod-dev libyaml-cpp-dev libbluetooth-dev \
libulfius-dev liborcania-dev libssl-dev pkg-config && \
libusb-1.0-0-dev libulfius-dev liborcania-dev libssl-dev pkg-config && \
apt-get clean && rm -rf /var/lib/apt/lists/* && mkdir /tmp/firmware

RUN groupadd -g 1000 mesh && useradd -ml -u 1000 -g 1000 mesh && chown mesh:mesh /tmp/firmware
Expand All @@ -37,7 +37,7 @@ ENV TZ=Etc/UTC

# trunk-ignore(terrascan/AC_DOCKER_0002): Known terrascan issue
# trunk-ignore(hadolint/DL3008): Use latest version of packages for buildchain
RUN apt-get update && apt-get --no-install-recommends -y install libc-bin libc6 libgpiod2 libyaml-cpp0.7 libulfius2.7 liborcania2.3 libssl3 && \
RUN apt-get update && apt-get --no-install-recommends -y install libc-bin libc6 libgpiod2 libyaml-cpp0.7 libulfius2.7 libusb-1.0-0-dev liborcania2.3 libssl3 && \
apt-get clean && rm -rf /var/lib/apt/lists/*

RUN groupadd -g 1000 mesh && useradd -ml -u 1000 -g 1000 mesh
Expand All @@ -51,4 +51,4 @@ VOLUME /home/mesh/data

CMD [ "sh", "-cx", "./meshtasticd -d /home/mesh/data --hwid=${HWID:-$RANDOM}" ]

HEALTHCHECK NONE
HEALTHCHECK NONE
4 changes: 3 additions & 1 deletion arch/portduino/portduino.ini
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ build_flags =
-Isrc/platform/portduino
-DRADIOLIB_EEPROM_UNSUPPORTED
-DPORTDUINO_LINUX_HARDWARE
-lpthread
-lstdc++fs
-lbluetooth
-lgpiod
-lyaml-cpp
-lyaml-cpp
-std=c++17

This file was deleted.

16 changes: 0 additions & 16 deletions bin/config.d/femtofox/femtofox_EByte-E22-900MM22S.yaml

This file was deleted.

This file was deleted.

20 changes: 20 additions & 0 deletions bin/config.d/femtofox/femtofox_LR1121_TCXO.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
Lora:
## Ebyte E80-900M22S
## This is a bit experimental
##
##
Module: lr1121
gpiochip: 1 # subtract 32 from the gpio numbers
DIO3_TCXO_VOLTAGE: 1.8
CS: 16 #pin6 / GPIO48 1C0
IRQ: 23 #pin17 / GPIO55 1C7
Busy: 22 #pin16 / GPIO54 1C6
Reset: 25 #pin13 / GPIO57 1D1


spidev: spidev0.0 #pins are (CS=16, CLK=17, MOSI=18, MISO=19)
spiSpeed: 2000000

General:
MACAddressSource: eth0
21 changes: 21 additions & 0 deletions bin/config.d/femtofox/femtofox_SX1262_TCXO.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
Lora:
## Ebyte E22-900M30S, E22-900M22S with or without external RF switching setup
## HT-RA62 (Has internal switching, but whatever)
## Seeed WIO SX1262 (already has TXEN-DIO2 link, but needs RXEN)
## Will work with any module with or without RF switching, and with TCXO
Module: sx1262
gpiochip: 1 # subtract 32 from the gpio numbers
DIO2_AS_RF_SWITCH: true
DIO3_TCXO_VOLTAGE: true
CS: 16 #pin6 / GPIO48 1C0
IRQ: 23 #pin17 / GPIO55 1C7
Busy: 22 #pin16 / GPIO54 1C6
Reset: 25 #pin13 / GPIO57 1D1
RXen: 24 #pin12 / GPIO56 1D0 # Not strictly needed for auto-switching, but why complicate things?
# TXen: bridge to DIO2 on E22 module
spidev: spidev0.0 #pins are (CS=16, CLK=17, MOSI=18, MISO=19)
spiSpeed: 2000000

General:
MACAddressSource: eth0
21 changes: 21 additions & 0 deletions bin/config.d/femtofox/femtofox_SX1262_XTAL.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
Lora:
## Ebyte E22-900MM22S with no external RF switching setup
## Waveshare SX126X XXXM, AI Thinker RA-01SH
## Will work with any module with or without RF switching and no TCXO

Module: sx1262
gpiochip: 1 # subtract 32 from the gpio numbers
DIO2_AS_RF_SWITCH: true
DIO3_TCXO_VOLTAGE: false
CS: 16 #pin6 / GPIO48 1C0
IRQ: 23 #pin17 / GPIO55 1C7
Busy: 22 #pin16 / GPIO54 1C6
Reset: 25 #pin13 / GPIO57 1D1
RXen: 24 #pin12 / GPIO56 1D0 # Not strictly needed for auto-switching, but why complicate things?
# TXen: bridge to DIO2 on E22 module
spidev: spidev0.0 #pins are (CS=16, CLK=17, MOSI=18, MISO=19)
spiSpeed: 2000000

General:
MACAddressSource: eth0

This file was deleted.

41 changes: 41 additions & 0 deletions boards/esp32-s3-zero.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"build": {
"arduino": {
"partitions": "default.csv",
"memory_type": "qio_qspi"
},
"core": "esp32",
"extra_flags": [
"-DARDUINO_ESP32S3_DEV",
"-DARDUINO_RUNNING_CORE=1",
"-DARDUINO_EVENT_RUNNING_CORE=1",
"-DARDUINO_USB_CDC_ON_BOOT=1",
"-DBOARD_HAS_PSRAM"
],
"f_cpu": "240000000L",
"f_flash": "80000000L",
"flash_mode": "qio",
"psram_type": "qio",
"hwids": [["0x303A", "0x1001"]],
"mcu": "esp32s3",
"variant": "esp32s3"
},
"connectivity": ["wifi", "bluetooth"],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": ["esp-builtin"],
"openocd_target": "esp32s3.cfg"
},
"frameworks": ["arduino", "espidf"],
"platforms": ["espressif32"],
"name": "Espressif ESP32-S3-FH4R2 (4 MB QD, 2MB PSRAM)",
"upload": {
"flash_size": "4MB",
"maximum_ram_size": 327680,
"maximum_size": 4194304,
"require_upload_port": true,
"speed": 921600
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1.html",
"vendor": "Espressif"
}
30 changes: 20 additions & 10 deletions src/mqtt/MQTT.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@
#include <WiFi.h>
#endif
#include "Default.h"
#if !defined(ARCH_NRF52) || NRF52_USE_JSON
#include "serialization/JSON.h"
#include "serialization/MeshPacketSerializer.h"
#endif
#include <Throttle.h>
#include <assert.h>
#include <pb_decode.h>
Expand Down Expand Up @@ -119,6 +121,7 @@ inline void onReceiveProto(char *topic, byte *payload, size_t length)
router->enqueueReceivedMessage(p.release());
}

#if !defined(ARCH_NRF52) || NRF52_USE_JSON
// returns true if this is a valid JSON envelope which we accept on downlink
inline bool isValidJsonEnvelope(JSONObject &json)
{
Expand Down Expand Up @@ -204,6 +207,7 @@ inline void onReceiveJson(byte *payload, size_t length)
LOG_DEBUG("JSON ignore downlink message with unsupported type");
}
}
#endif

/// Determines if the given IPAddress is a private IPv4 address, i.e. not routable on the public internet.
bool isPrivateIpAddress(const IPAddress &ip)
Expand All @@ -228,14 +232,21 @@ bool isPrivateIpAddress(const IPAddress &ip)
return false;
}

std::pair<std::string, uint16_t> parseHostAndPort(std::string address, uint16_t port = 0)
// Separate a <host>[:<port>] string. Returns a pair containing the parsed host and port. If the port is
// not present in the input string, or is invalid, the value of the `port` argument will be returned.
std::pair<String, uint16_t> parseHostAndPort(String server, uint16_t port = 0)
{
const size_t delimIndex = address.find_first_of(':');
const int delimIndex = server.indexOf(':');
if (delimIndex > 0) {
port = std::stoul(address.substr(delimIndex + 1, address.length()));
address.resize(delimIndex);
const long parsedPort = server.substring(delimIndex + 1, server.length()).toInt();
if (parsedPort < 1 || parsedPort > UINT16_MAX) {
LOG_WARN("Invalid MQTT port %d: %s", parsedPort, server.c_str());
} else {
port = parsedPort;
}
server[delimIndex] = 0;
}
return std::make_pair(std::move(address), port);
return std::make_pair(std::move(server), port);
}
} // namespace

Expand All @@ -258,6 +269,7 @@ void MQTT::onReceive(char *topic, byte *payload, size_t length)

// check if this is a json payload message by comparing the topic start
if (moduleConfig.mqtt.json_enabled && (strncmp(topic, jsonTopic.c_str(), jsonTopic.length()) == 0)) {
#if !defined(ARCH_NRF52) || NRF52_USE_JSON
// parse the channel name from the topic string
// the topic has been checked above for having jsonTopic prefix, so just move past it
char *channelName = topic + jsonTopic.length();
Expand All @@ -271,6 +283,7 @@ void MQTT::onReceive(char *topic, byte *payload, size_t length)
return;
}
onReceiveJson(payload, length);
#endif
return;
}

Expand Down Expand Up @@ -429,7 +442,7 @@ void MQTT::reconnect()
pubSub.setClient(mqttClient);
#endif

std::pair<std::string, uint16_t> hostAndPort = parseHostAndPort(serverAddr, serverPort);
std::pair<String, uint16_t> hostAndPort = parseHostAndPort(serverAddr, serverPort);
serverAddr = hostAndPort.first.c_str();
serverPort = hostAndPort.second;
pubSub.setServer(serverAddr, serverPort);
Expand All @@ -444,9 +457,6 @@ void MQTT::reconnect()
enabled = true; // Start running background process again
runASAP = true;
reconnectCount = 0;
#if !defined(ARCH_PORTDUINO)
isMqttServerAddressPrivate = isPrivateIpAddress(mqttClient.remoteIP());
#endif

publishNodeInfo();
sendSubscriptions();
Expand Down Expand Up @@ -754,4 +764,4 @@ void MQTT::perhapsReportToMap()

// Update the last report time
last_report_to_map = millis();
}
}
4 changes: 3 additions & 1 deletion src/mqtt/MQTT.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
#include "concurrency/OSThread.h"
#include "mesh/Channels.h"
#include "mesh/generated/meshtastic/mqtt.pb.h"
#if !defined(ARCH_NRF52) || NRF52_USE_JSON
#include "serialization/JSON.h"
#endif
#if HAS_WIFI
#include <WiFiClient.h>
#if !defined(ARCH_PORTDUINO)
Expand Down Expand Up @@ -127,4 +129,4 @@ class MQTT : private concurrency::OSThread

void mqttInit();

extern MQTT *mqtt;
extern MQTT *mqtt;
2 changes: 2 additions & 0 deletions src/platform/rp2xx0/architecture.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,6 @@
#define HW_VENDOR meshtastic_HardwareModel_RP2040_LORA
#elif defined(RP2040_FEATHER_RFM95)
#define HW_VENDOR meshtastic_HardwareModel_RP2040_FEATHER_RFM95
#elif defined(PRIVATE_HW)
#define HW_VENDOR meshtastic_HardwareModel_PRIVATE_HW
#endif
6 changes: 6 additions & 0 deletions variants/nibble_esp32/platformio.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[env:nibble-esp32]
extends = esp32s3_base
board = esp32-s3-zero
board_level = extra
build_flags =
${esp32_base.build_flags} -D PRIVATE_HW -I variants/nibble_esp32
18 changes: 18 additions & 0 deletions variants/nibble_esp32/variant.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#define I2C_SDA 11 // I2C pins for this board
#define I2C_SCL 10

#define LED_PIN 1 // If defined we will blink this LED

#define BUTTON_PIN 0 // If defined, this will be used for user button presses
#define BUTTON_NEED_PULLUP

#define USE_RF95
#define LORA_SCK 6
#define LORA_MISO 7
#define LORA_MOSI 8
#define LORA_CS 9
#define LORA_DIO0 5 // a No connect on the SX1262 module
#define LORA_RESET 4

#define LORA_DIO1 RADIOLIB_NC
#define LORA_DIO2 RADIOLIB_NC
17 changes: 17 additions & 0 deletions variants/nibble_rp2040/platformio.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
[env:nibble-rp2040]
extends = rp2040_base
board = rpipico
board_level = extra
upload_protocol = picotool

# add our variants files to the include and src paths
build_flags = ${rp2040_base.build_flags}
-DPRIVATE_HW
-Ivariants/nibble_rp2040
-DDEBUG_RP2040_PORT=Serial
-DHW_SPI1_DEVICE
-L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m0plus"
lib_deps =
${rp2040_base.lib_deps}
debug_build_flags = ${rp2040_base.build_flags}, -g
debug_tool = cmsis-dap ; for e.g. Picotool
18 changes: 18 additions & 0 deletions variants/nibble_rp2040/variant.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#define ARDUINO_ARCH_AVR

#define BUTTON_PIN -1 // Pin 17 used for antenna switching via DIO4

#define LED_PIN 1

#define HAS_CPU_SHUTDOWN 1

#define USE_RFM95
#define LORA_SCK 10
#define LORA_MISO 12
#define LORA_MOSI 11
#define LORA_CS 13

#define LORA_DIO0 14
#define LORA_RESET 15
#define LORA_DIO1 RADIOLIB_NC
#define LORA_DIO2 RADIOLIB_NC
Loading

0 comments on commit bfe5568

Please sign in to comment.