mirror of
https://github.com/alexhopeoconnor/firmware.git
synced 2026-10-21 10:42:35 +10:00
Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
502c5af524 | ||
|
|
05707079bd | ||
|
|
1c05633fcd | ||
|
|
fce419b335 | ||
|
|
1ae4a538f5 | ||
|
|
c756bbe2c1 | ||
|
|
4c3ba612bb | ||
|
|
59025e4820 |
@@ -8,17 +8,21 @@
|
|||||||
"features": {
|
"features": {
|
||||||
"ghcr.io/devcontainers/features/python:1": {
|
"ghcr.io/devcontainers/features/python:1": {
|
||||||
"installTools": true,
|
"installTools": true,
|
||||||
"version": "3.14"
|
"version": "3.13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"customizations": {
|
"customizations": {
|
||||||
"vscode": {
|
"vscode": {
|
||||||
"extensions": [
|
"extensions": [
|
||||||
"ms-vscode.cpptools",
|
"ms-vscode.cpptools",
|
||||||
"platformio.platformio-ide",
|
"Jason2866.esp-decoder",
|
||||||
|
"pioarduino.pioarduino-ide",
|
||||||
"Trunk.io"
|
"Trunk.io"
|
||||||
],
|
],
|
||||||
"unwantedRecommendations": ["ms-azuretools.vscode-docker"],
|
"unwantedRecommendations": [
|
||||||
|
"ms-azuretools.vscode-docker",
|
||||||
|
"platformio.platformio-ide"
|
||||||
|
],
|
||||||
"settings": {
|
"settings": {
|
||||||
"extensions.ignoreRecommendations": true
|
"extensions.ignoreRecommendations": true
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -4,11 +4,11 @@ cli:
|
|||||||
plugins:
|
plugins:
|
||||||
sources:
|
sources:
|
||||||
- id: trunk
|
- id: trunk
|
||||||
ref: v1.9.0
|
ref: v1.10.0
|
||||||
uri: https://github.com/trunk-io/plugins
|
uri: https://github.com/trunk-io/plugins
|
||||||
lint:
|
lint:
|
||||||
enabled:
|
enabled:
|
||||||
- checkov@3.2.528
|
- checkov@3.2.529
|
||||||
- renovate@43.150.0
|
- renovate@43.150.0
|
||||||
- prettier@3.8.3
|
- prettier@3.8.3
|
||||||
- trufflehog@3.95.3
|
- trufflehog@3.95.3
|
||||||
@@ -16,7 +16,7 @@ lint:
|
|||||||
- bandit@1.9.4
|
- bandit@1.9.4
|
||||||
- trivy@0.70.0
|
- trivy@0.70.0
|
||||||
- taplo@0.10.0
|
- taplo@0.10.0
|
||||||
- ruff@0.15.12
|
- ruff@0.15.13
|
||||||
- isort@8.0.1
|
- isort@8.0.1
|
||||||
- markdownlint@0.48.0
|
- markdownlint@0.48.0
|
||||||
- oxipng@10.1.1
|
- oxipng@10.1.1
|
||||||
|
|||||||
Vendored
+4
-4
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
|
||||||
// for the documentation about the extensions.json format
|
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
"platformio.platformio-ide"
|
"Jason2866.esp-decoder",
|
||||||
|
"pioarduino.pioarduino-ide"
|
||||||
],
|
],
|
||||||
"unwantedRecommendations": [
|
"unwantedRecommendations": [
|
||||||
"ms-vscode.cpptools-extension-pack"
|
"ms-vscode.cpptools-extension-pack",
|
||||||
|
"platformio.platformio-ide"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Station G3 motherboard with a Raspberry Pi Zero 2W as the MCU daughterboard.
|
||||||
|
# Verify spidev / I2C device paths for your OS — they may differ.
|
||||||
|
Meta:
|
||||||
|
name: Station G3
|
||||||
|
support: community
|
||||||
|
compatible:
|
||||||
|
- raspberry-pi
|
||||||
|
|
||||||
|
Lora:
|
||||||
|
Module: sx1262
|
||||||
|
IRQ: 22 # BCM pin — wiki spec
|
||||||
|
Reset: 16 # BCM pin — wiki spec
|
||||||
|
Busy: 24 # BCM pin — wiki spec
|
||||||
|
# CS: 8 # BCM 8 = SPI0 CE0 (default); uncomment only to override
|
||||||
|
DIO2_AS_RF_SWITCH: true
|
||||||
|
DIO3_TCXO_VOLTAGE: true
|
||||||
|
spidev: spidev0.0
|
||||||
|
# SX126X_MAX_POWER: 19 # matches Station G2 firmware cap; raise carefully per PA jumper mode
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "esp32s3_out.ld",
|
||||||
|
"memory_type": "qio_opi"
|
||||||
|
},
|
||||||
|
"core": "esp32",
|
||||||
|
"extra_flags": [
|
||||||
|
"-DBOARD_HAS_PSRAM",
|
||||||
|
"-DARDUINO_USB_CDC_ON_BOOT=1",
|
||||||
|
"-DARDUINO_USB_MODE=1",
|
||||||
|
"-DARDUINO_RUNNING_CORE=1",
|
||||||
|
"-DARDUINO_EVENT_RUNNING_CORE=0"
|
||||||
|
],
|
||||||
|
"f_cpu": "240000000L",
|
||||||
|
"f_flash": "80000000L",
|
||||||
|
"flash_mode": "qio",
|
||||||
|
"hwids": [["0x303A", "0x1001"]],
|
||||||
|
"mcu": "esp32s3",
|
||||||
|
"variant": "station-g3"
|
||||||
|
},
|
||||||
|
"connectivity": ["wifi", "bluetooth", "lora"],
|
||||||
|
"debug": {
|
||||||
|
"default_tool": "esp-builtin",
|
||||||
|
"onboard_tools": ["esp-builtin"],
|
||||||
|
"openocd_target": "esp32s3.cfg"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino", "espidf"],
|
||||||
|
"name": "BQ Station G3",
|
||||||
|
"upload": {
|
||||||
|
"flash_size": "16MB",
|
||||||
|
"maximum_ram_size": 327680,
|
||||||
|
"maximum_size": 16777216,
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"wait_for_upload_port": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"speed": 921600
|
||||||
|
},
|
||||||
|
"url": "",
|
||||||
|
"vendor": "BQ Consulting"
|
||||||
|
}
|
||||||
@@ -27,6 +27,12 @@ ScreenResolution determineScreenResolution(int16_t screenheight, int16_t screenw
|
|||||||
return ScreenResolution::UltraLow;
|
return ScreenResolution::UltraLow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DISPLAY_FORCE_SMALL_FONTS
|
||||||
|
if (screenwidth <= 160 && screenheight <= 80) {
|
||||||
|
return ScreenResolution::Low;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Standard OLED screens
|
// Standard OLED screens
|
||||||
if (screenwidth > 128 && screenheight <= 64) {
|
if (screenwidth > 128 && screenheight <= 64) {
|
||||||
return ScreenResolution::Low;
|
return ScreenResolution::Low;
|
||||||
|
|||||||
@@ -291,10 +291,8 @@ static int32_t reconnectWiFi()
|
|||||||
#endif
|
#endif
|
||||||
return 1000; // check once per second
|
return 1000; // check once per second
|
||||||
} else {
|
} else {
|
||||||
#ifdef ARCH_RP2040
|
onNetworkConnected(); // will only do anything once (guarded by APStartupComplete)
|
||||||
onNetworkConnected(); // will only do anything once
|
return 300000; // every 5 minutes
|
||||||
#endif
|
|
||||||
return 300000; // every 5 minutes
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,9 +341,6 @@ bool initWifi()
|
|||||||
const char *wifiPsw = config.network.wifi_psk;
|
const char *wifiPsw = config.network.wifi_psk;
|
||||||
|
|
||||||
#ifndef ARCH_RP2040
|
#ifndef ARCH_RP2040
|
||||||
#if !MESHTASTIC_EXCLUDE_WEBSERVER
|
|
||||||
createSSLCert(); // For WebServer
|
|
||||||
#endif
|
|
||||||
WiFi.persistent(false); // Disable flash storage for WiFi credentials
|
WiFi.persistent(false); // Disable flash storage for WiFi credentials
|
||||||
#endif
|
#endif
|
||||||
if (!*wifiPsw) // Treat empty password as no password
|
if (!*wifiPsw) // Treat empty password as no password
|
||||||
@@ -370,6 +365,9 @@ bool initWifi()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#ifdef ARCH_ESP32
|
#ifdef ARCH_ESP32
|
||||||
|
// Register WiFi event handler BEFORE createSSLCert() to prevent race condition:
|
||||||
|
// Without this, WiFi can auto-reconnect during cert generation and fire GOT_IP
|
||||||
|
// before the handler is registered, causing onNetworkConnected() to never run.
|
||||||
WiFi.onEvent(WiFiEvent);
|
WiFi.onEvent(WiFiEvent);
|
||||||
WiFi.setAutoReconnect(true);
|
WiFi.setAutoReconnect(true);
|
||||||
WiFi.setSleep(false);
|
WiFi.setSleep(false);
|
||||||
@@ -391,6 +389,12 @@ bool initWifi()
|
|||||||
wifiDisconnectReason = info.wifi_sta_disconnected.reason;
|
wifiDisconnectReason = info.wifi_sta_disconnected.reason;
|
||||||
},
|
},
|
||||||
WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
|
WiFiEvent_t::ARDUINO_EVENT_WIFI_STA_DISCONNECTED);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ARCH_RP2040
|
||||||
|
#if !MESHTASTIC_EXCLUDE_WEBSERVER
|
||||||
|
createSSLCert(); // For WebServer - called after WiFi.onEvent() to avoid race condition
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
LOG_DEBUG("JOINING WIFI soon: ssid=%s", wifiName);
|
LOG_DEBUG("JOINING WIFI soon: ssid=%s", wifiName);
|
||||||
wifiReconnect = new Periodic("WifiConnect", reconnectWiFi);
|
wifiReconnect = new Periodic("WifiConnect", reconnectWiFi);
|
||||||
|
|||||||
@@ -158,6 +158,8 @@
|
|||||||
#define HW_VENDOR meshtastic_HardwareModel_CHATTER_2
|
#define HW_VENDOR meshtastic_HardwareModel_CHATTER_2
|
||||||
#elif defined(STATION_G2)
|
#elif defined(STATION_G2)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_STATION_G2
|
#define HW_VENDOR meshtastic_HardwareModel_STATION_G2
|
||||||
|
#elif defined(STATION_G3)
|
||||||
|
#define HW_VENDOR meshtastic_HardwareModel_STATION_G3
|
||||||
#elif defined(UNPHONE)
|
#elif defined(UNPHONE)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_UNPHONE
|
#define HW_VENDOR meshtastic_HardwareModel_UNPHONE
|
||||||
#elif defined(WIPHONE)
|
#elif defined(WIPHONE)
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// Shared pin/feature defines for BQ Station G2 and G3.
|
||||||
|
// Boards differ only in PA output power (SX126X_MAX_POWER) and the wiki URL.
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Station G2/G3 may not have GPS installed, but have a GROVE GPS Socket for an optional GPS module
|
||||||
|
#define GPS_RX_PIN 7
|
||||||
|
#define GPS_TX_PIN 15
|
||||||
|
|
||||||
|
// 1.3 inch OLED Screen
|
||||||
|
#define USE_SH1107_128_64
|
||||||
|
|
||||||
|
#define I2C_SDA 5
|
||||||
|
#define I2C_SCL 6
|
||||||
|
|
||||||
|
#define BUTTON_PIN 38 // Program button
|
||||||
|
#define BUTTON_NEED_PULLUP
|
||||||
|
|
||||||
|
#define USE_SX1262
|
||||||
|
|
||||||
|
#define LORA_MISO 14
|
||||||
|
#define LORA_SCK 12
|
||||||
|
#define LORA_MOSI 13
|
||||||
|
#define LORA_CS 11
|
||||||
|
|
||||||
|
#define LORA_RESET 21
|
||||||
|
#define LORA_DIO1 48
|
||||||
|
|
||||||
|
#ifdef USE_SX1262
|
||||||
|
#define SX126X_CS LORA_CS // Compatibility alias; prefer LORA_CS in board definitions.
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY 47
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
|
||||||
|
// DIO2 controls an antenna switch and the TCXO voltage is controlled by DIO3
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
// NOTE: SX126X_MAX_POWER is intentionally NOT defined here — each board sets it.
|
||||||
|
#endif
|
||||||
@@ -26,6 +26,7 @@ build_flags =
|
|||||||
${esp32s3_base.build_flags}
|
${esp32s3_base.build_flags}
|
||||||
-D STATION_G2
|
-D STATION_G2
|
||||||
-I variants/esp32s3/station-g2
|
-I variants/esp32s3/station-g2
|
||||||
|
-I variants/esp32s3/station-common
|
||||||
-DBOARD_HAS_PSRAM
|
-DBOARD_HAS_PSRAM
|
||||||
-DSTATION_G2
|
-DSTATION_G2
|
||||||
-DARDUINO_USB_MODE=1
|
-DARDUINO_USB_MODE=1
|
||||||
|
|||||||
@@ -2,39 +2,9 @@
|
|||||||
Board Information: https://wiki.uniteng.com/en/meshtastic/station-g2
|
Board Information: https://wiki.uniteng.com/en/meshtastic/station-g2
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Station G2 may not have GPS installed, but it has a GROVE GPS Socket for Optional GPS Module
|
#include "station_common.h"
|
||||||
#define GPS_RX_PIN 7
|
|
||||||
#define GPS_TX_PIN 15
|
|
||||||
|
|
||||||
// Station G2 has 1.3 inch OLED Screen
|
|
||||||
#define USE_SH1107_128_64
|
|
||||||
|
|
||||||
#define I2C_SDA 5 // I2C pins for this board
|
|
||||||
#define I2C_SCL 6
|
|
||||||
|
|
||||||
#define BUTTON_PIN 38 // This is the Program Button
|
|
||||||
#define BUTTON_NEED_PULLUP
|
|
||||||
|
|
||||||
#define USE_SX1262
|
|
||||||
|
|
||||||
#define LORA_MISO 14
|
|
||||||
#define LORA_SCK 12
|
|
||||||
#define LORA_MOSI 13
|
|
||||||
#define LORA_CS 11
|
|
||||||
|
|
||||||
#define LORA_RESET 21
|
|
||||||
#define LORA_DIO1 48
|
|
||||||
|
|
||||||
#ifdef USE_SX1262
|
#ifdef USE_SX1262
|
||||||
#define SX126X_CS LORA_CS // FIXME - we really should define LORA_CS instead
|
|
||||||
#define SX126X_DIO1 LORA_DIO1
|
|
||||||
#define SX126X_BUSY 47
|
|
||||||
#define SX126X_RESET LORA_RESET
|
|
||||||
|
|
||||||
// DIO2 controlls an antenna switch and the TCXO voltage is controlled by DIO3
|
|
||||||
#define SX126X_DIO2_AS_RF_SWITCH
|
|
||||||
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
|
||||||
|
|
||||||
// Ensure the PA does not exceed the saturation output power. More
|
// Ensure the PA does not exceed the saturation output power. More
|
||||||
// Info:https://wiki.uniteng.com/en/meshtastic/station-g2#summary-for-lora-power-amplifier-conduction-test
|
// Info:https://wiki.uniteng.com/en/meshtastic/station-g2#summary-for-lora-power-amplifier-conduction-test
|
||||||
#define SX126X_MAX_POWER 19
|
#define SX126X_MAX_POWER 19
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#ifndef Pins_Arduino_h
|
||||||
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define USB_VID 0x303a
|
||||||
|
#define USB_PID 0x1001
|
||||||
|
|
||||||
|
// GPIO48 Reference: https://github.com/espressif/arduino-esp32/pull/8600
|
||||||
|
|
||||||
|
// The default Wire will be mapped to Screen and Sensors
|
||||||
|
static const uint8_t SDA = 5;
|
||||||
|
static const uint8_t SCL = 6;
|
||||||
|
|
||||||
|
// Default SPI will be mapped to Radio
|
||||||
|
static const uint8_t MISO = 14;
|
||||||
|
static const uint8_t SCK = 12;
|
||||||
|
static const uint8_t MOSI = 13;
|
||||||
|
static const uint8_t SS = 11;
|
||||||
|
|
||||||
|
#endif /* Pins_Arduino_h */
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
[env:station-g3]
|
||||||
|
custom_meshtastic_hw_model = 134
|
||||||
|
custom_meshtastic_hw_model_slug = STATION_G3
|
||||||
|
custom_meshtastic_architecture = esp32-s3
|
||||||
|
custom_meshtastic_actively_supported = true
|
||||||
|
custom_meshtastic_support_level = 2
|
||||||
|
custom_meshtastic_display_name = Station G3
|
||||||
|
custom_meshtastic_images = station-g3.svg
|
||||||
|
custom_meshtastic_tags = B&Q
|
||||||
|
custom_meshtastic_requires_dfu = true
|
||||||
|
custom_meshtastic_partition_scheme = 16MB
|
||||||
|
|
||||||
|
extends = esp32s3_base
|
||||||
|
board = station-g3
|
||||||
|
board_level = pr
|
||||||
|
board_check = true
|
||||||
|
board_build.partitions = default_16MB.csv
|
||||||
|
board_build.mcu = esp32s3
|
||||||
|
upload_protocol = esptool
|
||||||
|
;upload_port = /dev/ttyACM0
|
||||||
|
upload_speed = 921600
|
||||||
|
build_unflags =
|
||||||
|
${esp32s3_base.build_unflags}
|
||||||
|
-DARDUINO_USB_MODE=0
|
||||||
|
build_flags =
|
||||||
|
${esp32s3_base.build_flags}
|
||||||
|
-D STATION_G3
|
||||||
|
-I variants/esp32s3/station-g3
|
||||||
|
-I variants/esp32s3/station-common
|
||||||
|
-DBOARD_HAS_PSRAM
|
||||||
|
-DSTATION_G3
|
||||||
|
-DARDUINO_USB_MODE=1
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#include "station_common.h"
|
||||||
|
|
||||||
|
#ifdef USE_SX1262
|
||||||
|
// Station G3 reuses the same Fast-Transient DC-DC PA design as G2 (BQ35LORA900V1M).
|
||||||
|
// PA Operating Mode is set in hardware via the PA-PL1 / PA-PL2 jumpers.
|
||||||
|
// 19 matches the G2 cap (SX1262 19 dBm in → ~31 dBm PA out at Power Level 1, ISM compliant).
|
||||||
|
// Raise (max 22) only if running a higher PA Power Level and you can stay within local band limits.
|
||||||
|
#define SX126X_MAX_POWER 19
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
#define BATTERY_PIN 4 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage
|
||||||
|
#define ADC_CHANNEL ADC1_GPIO4_CHANNEL
|
||||||
|
#define ADC_MULTIPLIER 4
|
||||||
|
#define BATTERY_SENSE_SAMPLES 15 // Set the number of samples, It has an effect of increasing sensitivity.
|
||||||
|
#define BAT_FULLVOLT 8400
|
||||||
|
#define BAT_EMPTYVOLT 5000
|
||||||
|
#define BAT_CHARGINGVOLT 8400
|
||||||
|
#define BAT_NOBATVOLT 4460
|
||||||
|
#define CELL_TYPE_LION // same curve for liion/lipo
|
||||||
|
#define NUM_CELLS 2
|
||||||
|
*/
|
||||||
@@ -29,7 +29,7 @@ lib_deps =
|
|||||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||||
lovyan03/LovyanGFX@1.2.21
|
lovyan03/LovyanGFX@1.2.21
|
||||||
; # renovate: datasource=git-refs depName=libch341-spi-userspace packageName=https://github.com/pine64/libch341-spi-userspace gitBranch=main
|
; # renovate: datasource=git-refs depName=libch341-spi-userspace packageName=https://github.com/pine64/libch341-spi-userspace gitBranch=main
|
||||||
https://github.com/pine64/libch341-spi-userspace/archive/23c42319a69cffcb65868e3c72e6bed83974a393.zip
|
https://github.com/pine64/libch341-spi-userspace/archive/2e5ff751d0c39667993df672cb683740ed5c9394.zip
|
||||||
# renovate: datasource=custom.pio depName=adafruit/Adafruit seesaw Library packageName=adafruit/library/Adafruit seesaw Library
|
# renovate: datasource=custom.pio depName=adafruit/Adafruit seesaw Library packageName=adafruit/library/Adafruit seesaw Library
|
||||||
adafruit/Adafruit seesaw Library@1.7.9
|
adafruit/Adafruit seesaw Library@1.7.9
|
||||||
# renovate: datasource=git-refs depName=RAK12034-BMX160 packageName=https://github.com/RAKWireless/RAK12034-BMX160 gitBranch=main
|
# renovate: datasource=git-refs depName=RAK12034-BMX160 packageName=https://github.com/RAKWireless/RAK12034-BMX160 gitBranch=main
|
||||||
|
|||||||
Reference in New Issue
Block a user