mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-12 08:19:39 +00:00
Merge branch 'master' into rak_wismeshtag
This commit is contained in:
commit
1c2b3a41f3
@ -49,7 +49,7 @@ lib_deps =
|
|||||||
${environmental_extra.lib_deps}
|
${environmental_extra.lib_deps}
|
||||||
${radiolib_base.lib_deps}
|
${radiolib_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-esp32_https_server packageName=https://github.com/meshtastic/esp32_https_server gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-esp32_https_server packageName=https://github.com/meshtastic/esp32_https_server gitBranch=master
|
||||||
https://github.com/meshtastic/esp32_https_server/archive/896f1771ceb5979987a0b41028bf1b4e7aad419b.zip
|
https://github.com/meshtastic/esp32_https_server/archive/3223704846752e6d545139204837bdb2a55459ca.zip
|
||||||
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
|
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
|
||||||
h2zero/NimBLE-Arduino@^1.4.3
|
h2zero/NimBLE-Arduino@^1.4.3
|
||||||
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
|
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
|
||||||
|
@ -22,5 +22,5 @@ Input:
|
|||||||
TrackballLeft: 5
|
TrackballLeft: 5
|
||||||
TrackballRight: 26
|
TrackballRight: 26
|
||||||
TrackballPress: 13
|
TrackballPress: 13
|
||||||
|
TrackballDirection: FALLING
|
||||||
# User: 21
|
# User: 21
|
||||||
|
@ -30,6 +30,18 @@ Flash image file to device, leave existing system intact."
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check for --change-mode and remove it from arguments
|
||||||
|
NEW_ARGS=""
|
||||||
|
for arg in "$@"; do
|
||||||
|
if [ "$arg" = "--change-mode" ]; then
|
||||||
|
CHANGE_MODE=true
|
||||||
|
else
|
||||||
|
NEW_ARGS="$NEW_ARGS \"\$arg\""
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Reset positional parameters to filtered list
|
||||||
|
eval set -- $NEW_ARGS
|
||||||
|
|
||||||
while getopts ":hp:P:f:" opt; do
|
while getopts ":hp:P:f:" opt; do
|
||||||
case "${opt}" in
|
case "${opt}" in
|
||||||
@ -43,9 +55,6 @@ while getopts ":hp:P:f:" opt; do
|
|||||||
;;
|
;;
|
||||||
f) FILENAME=${OPTARG}
|
f) FILENAME=${OPTARG}
|
||||||
;;
|
;;
|
||||||
--change-mode)
|
|
||||||
CHANGE_MODE=true
|
|
||||||
;;
|
|
||||||
*)
|
*)
|
||||||
echo "Invalid flag."
|
echo "Invalid flag."
|
||||||
show_help >&2
|
show_help >&2
|
||||||
@ -55,7 +64,7 @@ while getopts ":hp:P:f:" opt; do
|
|||||||
done
|
done
|
||||||
shift "$((OPTIND-1))"
|
shift "$((OPTIND-1))"
|
||||||
|
|
||||||
if [[ $CHANGE_MODE == true ]]; then
|
if [ "$CHANGE_MODE" = true ]; then
|
||||||
$ESPTOOL_CMD --baud 1200 --after no_reset read_flash_status
|
$ESPTOOL_CMD --baud 1200 --after no_reset read_flash_status
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
@ -7,7 +7,10 @@
|
|||||||
"cpu": "cortex-m4",
|
"cpu": "cortex-m4",
|
||||||
"extra_flags": "-DARDUINO_MDBT50Q_RX -DNRF52840_XXAA",
|
"extra_flags": "-DARDUINO_MDBT50Q_RX -DNRF52840_XXAA",
|
||||||
"f_cpu": "64000000L",
|
"f_cpu": "64000000L",
|
||||||
"hwids": [["0x2886", "0x1668"]],
|
"hwids": [
|
||||||
|
["0x2886", "0x1668"],
|
||||||
|
["0x2886", "0x1667"]
|
||||||
|
],
|
||||||
"usb_product": "TRACKER L1",
|
"usb_product": "TRACKER L1",
|
||||||
"mcu": "nrf52840",
|
"mcu": "nrf52840",
|
||||||
"variant": "seeed_wio_tracker_L1",
|
"variant": "seeed_wio_tracker_L1",
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 386fa53c1596c8dfc547521f08df107f4cb3a275
|
Subproject commit 584f0a3a359103acf0bfce506c1b1fc32c639841
|
@ -99,10 +99,17 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *ti
|
|||||||
|
|
||||||
// === Battery State ===
|
// === Battery State ===
|
||||||
int chargePercent = powerStatus->getBatteryChargePercent();
|
int chargePercent = powerStatus->getBatteryChargePercent();
|
||||||
bool isCharging = powerStatus->getIsCharging() == meshtastic::OptionalBool::OptTrue;
|
bool isCharging = powerStatus->getIsCharging();
|
||||||
if (chargePercent == 100) {
|
bool usbPowered = powerStatus->getHasUSB();
|
||||||
|
|
||||||
|
if (chargePercent >= 100) {
|
||||||
isCharging = false;
|
isCharging = false;
|
||||||
}
|
}
|
||||||
|
if (chargePercent == 101) {
|
||||||
|
usbPowered = true; // Forcing this flag on for the express purpose that some devices have no concept of having a USB cable
|
||||||
|
// plugged in
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t now = millis();
|
uint32_t now = millis();
|
||||||
|
|
||||||
#ifndef USE_EINK
|
#ifndef USE_EINK
|
||||||
@ -115,48 +122,63 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *ti
|
|||||||
bool useHorizontalBattery = (isHighResolution && screenW >= screenH);
|
bool useHorizontalBattery = (isHighResolution && screenW >= screenH);
|
||||||
const int textY = y + (highlightHeight - FONT_HEIGHT_SMALL) / 2;
|
const int textY = y + (highlightHeight - FONT_HEIGHT_SMALL) / 2;
|
||||||
|
|
||||||
|
int batteryX = 1;
|
||||||
|
int batteryY = HEADER_OFFSET_Y + 1;
|
||||||
|
|
||||||
// === Battery Icons ===
|
// === Battery Icons ===
|
||||||
if (useHorizontalBattery) {
|
if (usbPowered && !isCharging) { // This is a basic check to determine USB Powered is flagged but not charging
|
||||||
int batteryX = 2;
|
batteryX += 1;
|
||||||
int batteryY = HEADER_OFFSET_Y + 3;
|
batteryY += 2;
|
||||||
display->drawXbm(batteryX, batteryY, 9, 13, batteryBitmap_h_bottom);
|
if (isHighResolution) {
|
||||||
display->drawXbm(batteryX + 9, batteryY, 9, 13, batteryBitmap_h_top);
|
display->drawXbm(batteryX, batteryY, 19, 12, imgUSB_HighResolution);
|
||||||
if (isCharging && isBoltVisibleShared)
|
batteryX += 20; // Icon + 1 pixel
|
||||||
display->drawXbm(batteryX + 4, batteryY, 9, 13, lightning_bolt_h);
|
} else {
|
||||||
else {
|
display->drawXbm(batteryX, batteryY, 10, 8, imgUSB);
|
||||||
display->drawLine(batteryX + 5, batteryY, batteryX + 10, batteryY);
|
batteryX += 11; // Icon + 1 pixel
|
||||||
display->drawLine(batteryX + 5, batteryY + 12, batteryX + 10, batteryY + 12);
|
|
||||||
int fillWidth = 14 * chargePercent / 100;
|
|
||||||
display->fillRect(batteryX + 1, batteryY + 1, fillWidth, 11);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int batteryX = 1;
|
if (useHorizontalBattery) {
|
||||||
int batteryY = HEADER_OFFSET_Y + 1;
|
batteryX += 1;
|
||||||
|
batteryY += 2;
|
||||||
|
display->drawXbm(batteryX, batteryY, 9, 13, batteryBitmap_h_bottom);
|
||||||
|
display->drawXbm(batteryX + 9, batteryY, 9, 13, batteryBitmap_h_top);
|
||||||
|
if (isCharging && isBoltVisibleShared)
|
||||||
|
display->drawXbm(batteryX + 4, batteryY, 9, 13, lightning_bolt_h);
|
||||||
|
else {
|
||||||
|
display->drawLine(batteryX + 5, batteryY, batteryX + 10, batteryY);
|
||||||
|
display->drawLine(batteryX + 5, batteryY + 12, batteryX + 10, batteryY + 12);
|
||||||
|
int fillWidth = 14 * chargePercent / 100;
|
||||||
|
display->fillRect(batteryX + 1, batteryY + 1, fillWidth, 11);
|
||||||
|
}
|
||||||
|
batteryX += 18; // Icon + 2 pixels
|
||||||
|
} else {
|
||||||
#ifdef USE_EINK
|
#ifdef USE_EINK
|
||||||
batteryY += 2;
|
batteryY += 2;
|
||||||
#endif
|
#endif
|
||||||
display->drawXbm(batteryX, batteryY, 7, 11, batteryBitmap_v);
|
display->drawXbm(batteryX, batteryY, 7, 11, batteryBitmap_v);
|
||||||
if (isCharging && isBoltVisibleShared)
|
if (isCharging && isBoltVisibleShared)
|
||||||
display->drawXbm(batteryX + 1, batteryY + 3, 5, 5, lightning_bolt_v);
|
display->drawXbm(batteryX + 1, batteryY + 3, 5, 5, lightning_bolt_v);
|
||||||
else {
|
else {
|
||||||
display->drawXbm(batteryX - 1, batteryY + 4, 8, 3, batteryBitmap_sidegaps_v);
|
display->drawXbm(batteryX - 1, batteryY + 4, 8, 3, batteryBitmap_sidegaps_v);
|
||||||
int fillHeight = 8 * chargePercent / 100;
|
int fillHeight = 8 * chargePercent / 100;
|
||||||
int fillY = batteryY - fillHeight;
|
int fillY = batteryY - fillHeight;
|
||||||
display->fillRect(batteryX + 1, fillY + 10, 5, fillHeight);
|
display->fillRect(batteryX + 1, fillY + 10, 5, fillHeight);
|
||||||
|
}
|
||||||
|
batteryX += 9; // Icon + 2 pixels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// === Battery % Display ===
|
if (chargePercent != 101) {
|
||||||
char chargeStr[4];
|
// === Battery % Display ===
|
||||||
snprintf(chargeStr, sizeof(chargeStr), "%d", chargePercent);
|
char chargeStr[4];
|
||||||
int chargeNumWidth = display->getStringWidth(chargeStr);
|
snprintf(chargeStr, sizeof(chargeStr), "%d", chargePercent);
|
||||||
const int batteryOffset = useHorizontalBattery ? 19 : 9;
|
int chargeNumWidth = display->getStringWidth(chargeStr);
|
||||||
const int percentX = x + batteryOffset;
|
display->drawString(batteryX, textY, chargeStr);
|
||||||
display->drawString(percentX, textY, chargeStr);
|
display->drawString(batteryX + chargeNumWidth - 1, textY, "%");
|
||||||
display->drawString(percentX + chargeNumWidth - 1, textY, "%");
|
if (isBold) {
|
||||||
if (isBold) {
|
display->drawString(batteryX + 1, textY, chargeStr);
|
||||||
display->drawString(percentX + 1, textY, chargeStr);
|
display->drawString(batteryX + chargeNumWidth, textY, "%");
|
||||||
display->drawString(percentX + chargeNumWidth, textY, "%");
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// === Time and Right-aligned Icons ===
|
// === Time and Right-aligned Icons ===
|
||||||
|
@ -283,6 +283,9 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1
|
|||||||
xOffset += (isHighResolution) ? 32 : 18;
|
xOffset += (isHighResolution) ? 32 : 18;
|
||||||
}
|
}
|
||||||
int yOffset = (isHighResolution) ? 3 : 1;
|
int yOffset = (isHighResolution) ? 3 : 1;
|
||||||
|
#ifdef SENSECAP_INDICATOR
|
||||||
|
yOffset -= 3;
|
||||||
|
#endif
|
||||||
if (config.display.use_12h_clock) {
|
if (config.display.use_12h_clock) {
|
||||||
display->drawString(startingHourMinuteTextX + xOffset, (display->getHeight() - hourMinuteTextY) - yOffset - 2,
|
display->drawString(startingHourMinuteTextX + xOffset, (display->getHeight() - hourMinuteTextY) - yOffset - 2,
|
||||||
isPM ? "pm" : "am");
|
isPM ? "pm" : "am");
|
||||||
|
@ -48,12 +48,14 @@ void menuHandler::LoraRegionPicker(uint32_t duration)
|
|||||||
"PH_433",
|
"PH_433",
|
||||||
"PH_868",
|
"PH_868",
|
||||||
"PH_915",
|
"PH_915",
|
||||||
"ANZ_433"};
|
"ANZ_433",
|
||||||
|
"KZ_433",
|
||||||
|
"KZ_863"};
|
||||||
BannerOverlayOptions bannerOptions;
|
BannerOverlayOptions bannerOptions;
|
||||||
bannerOptions.message = "Set the LoRa region";
|
bannerOptions.message = "Set the LoRa region";
|
||||||
bannerOptions.durationMs = duration;
|
bannerOptions.durationMs = duration;
|
||||||
bannerOptions.optionsArrayPtr = optionsArray;
|
bannerOptions.optionsArrayPtr = optionsArray;
|
||||||
bannerOptions.optionsCount = 23;
|
bannerOptions.optionsCount = 25;
|
||||||
bannerOptions.InitialSelected = 0;
|
bannerOptions.InitialSelected = 0;
|
||||||
bannerOptions.bannerCallback = [](int selected) -> void {
|
bannerOptions.bannerCallback = [](int selected) -> void {
|
||||||
if (selected != 0 && config.lora.region != _meshtastic_Config_LoRaConfig_RegionCode(selected)) {
|
if (selected != 0 && config.lora.region != _meshtastic_Config_LoRaConfig_RegionCode(selected)) {
|
||||||
@ -352,8 +354,8 @@ void menuHandler::systemBaseMenu()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum optionsNumbers { Back, Beeps, Brightness, Reboot, Color, MUI, Test };
|
enum optionsNumbers { Back, Beeps, Brightness, Reboot, Color, MUI, Test };
|
||||||
static const char *optionsArray[6] = {"Back"};
|
static const char *optionsArray[7] = {"Back"};
|
||||||
static int optionsEnumArray[6] = {Back};
|
static int optionsEnumArray[7] = {Back};
|
||||||
int options = 1;
|
int options = 1;
|
||||||
|
|
||||||
optionsArray[options] = "Beeps Action";
|
optionsArray[options] = "Beeps Action";
|
||||||
@ -602,39 +604,34 @@ void menuHandler::BuzzerModeMenu()
|
|||||||
|
|
||||||
void menuHandler::BrightnessPickerMenu()
|
void menuHandler::BrightnessPickerMenu()
|
||||||
{
|
{
|
||||||
static const char *optionsArray[] = {"Back", "Low", "Medium", "High", "Very High"};
|
static const char *optionsArray[] = {"Back", "Low", "Medium", "High"};
|
||||||
|
|
||||||
// Get current brightness level to set initial selection
|
// Get current brightness level to set initial selection
|
||||||
int currentSelection = 1; // Default to Low
|
int currentSelection = 1; // Default to Medium
|
||||||
if (uiconfig.screen_brightness >= 255) {
|
if (uiconfig.screen_brightness >= 255) {
|
||||||
currentSelection = 4; // Very High
|
currentSelection = 3; // Very High
|
||||||
} else if (uiconfig.screen_brightness >= 128) {
|
} else if (uiconfig.screen_brightness >= 128) {
|
||||||
currentSelection = 3; // High
|
currentSelection = 2; // High
|
||||||
} else if (uiconfig.screen_brightness >= 64) {
|
|
||||||
currentSelection = 2; // Medium
|
|
||||||
} else {
|
} else {
|
||||||
currentSelection = 1; // Low
|
currentSelection = 1; // Medium
|
||||||
}
|
}
|
||||||
|
|
||||||
BannerOverlayOptions bannerOptions;
|
BannerOverlayOptions bannerOptions;
|
||||||
bannerOptions.message = "Brightness";
|
bannerOptions.message = "Brightness";
|
||||||
bannerOptions.optionsArrayPtr = optionsArray;
|
bannerOptions.optionsArrayPtr = optionsArray;
|
||||||
bannerOptions.optionsCount = 5;
|
bannerOptions.optionsCount = 4;
|
||||||
bannerOptions.bannerCallback = [](int selected) -> void {
|
bannerOptions.bannerCallback = [](int selected) -> void {
|
||||||
if (selected == 1) { // Low
|
if (selected == 1) { // Medium
|
||||||
uiconfig.screen_brightness = 1;
|
|
||||||
} else if (selected == 2) { // Medium
|
|
||||||
uiconfig.screen_brightness = 64;
|
uiconfig.screen_brightness = 64;
|
||||||
} else if (selected == 3) { // High
|
} else if (selected == 2) { // High
|
||||||
uiconfig.screen_brightness = 128;
|
uiconfig.screen_brightness = 128;
|
||||||
} else if (selected == 4) { // Very High
|
} else if (selected == 3) { // Very High
|
||||||
uiconfig.screen_brightness = 255;
|
uiconfig.screen_brightness = 255;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected != 0) { // Not "Back"
|
if (selected != 0) { // Not "Back"
|
||||||
// Apply brightness immediately
|
// Apply brightness immediately
|
||||||
#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || defined(HELTEC_VISION_MASTER_E213) || \
|
#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190)
|
||||||
defined(HELTEC_VISION_MASTER_E290)
|
|
||||||
// For HELTEC devices, use analogWrite to control backlight
|
// For HELTEC devices, use analogWrite to control backlight
|
||||||
analogWrite(VTFT_LEDA, uiconfig.screen_brightness);
|
analogWrite(VTFT_LEDA, uiconfig.screen_brightness);
|
||||||
#elif defined(ST7789_CS)
|
#elif defined(ST7789_CS)
|
||||||
|
@ -12,7 +12,10 @@ const uint8_t imgSatellite[] PROGMEM = {
|
|||||||
0b00000000, 0b00000000, 0b00000000, 0b00011000, 0b11011011, 0b11111111, 0b11011011, 0b00011000,
|
0b00000000, 0b00000000, 0b00000000, 0b00011000, 0b11011011, 0b11111111, 0b11011011, 0b00011000,
|
||||||
};
|
};
|
||||||
|
|
||||||
const uint8_t imgUSB[] PROGMEM = {0x60, 0x60, 0x30, 0x18, 0x18, 0x18, 0x24, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x24, 0x24, 0x24, 0x3C};
|
const uint8_t imgUSB[] PROGMEM = {0x00, 0xfc, 0xf0, 0xfc, 0x88, 0xff, 0x86, 0xfe, 0x85, 0xfe, 0x89, 0xff, 0xf1, 0xfc, 0x00, 0xfc};
|
||||||
|
const uint8_t imgUSB_HighResolution[] PROGMEM = {0x00, 0x3e, 0xf8, 0x80, 0x43, 0xf8, 0xc0, 0xc2, 0xff, 0x60, 0x42, 0xfc,
|
||||||
|
0x3c, 0xc2, 0xff, 0x22, 0x42, 0xf8, 0x3d, 0x42, 0xf8, 0x22, 0xc2, 0xff,
|
||||||
|
0x61, 0x42, 0xfc, 0xc0, 0xc2, 0xff, 0x80, 0x43, 0xf8, 0x00, 0x3e, 0xf8};
|
||||||
const uint8_t imgPower[] PROGMEM = {0x40, 0x40, 0x40, 0x58, 0x48, 0x08, 0x08, 0x08,
|
const uint8_t imgPower[] PROGMEM = {0x40, 0x40, 0x40, 0x58, 0x48, 0x08, 0x08, 0x08,
|
||||||
0x1C, 0x22, 0x22, 0x41, 0x7F, 0x22, 0x22, 0x22};
|
0x1C, 0x22, 0x22, 0x41, 0x7F, 0x22, 0x22, 0x22};
|
||||||
const uint8_t imgUser[] PROGMEM = {0x3C, 0x42, 0x99, 0xA5, 0xA5, 0x99, 0x42, 0x3C};
|
const uint8_t imgUser[] PROGMEM = {0x3C, 0x42, 0x99, 0xA5, 0xA5, 0x99, 0x42, 0x3C};
|
||||||
|
@ -52,6 +52,40 @@ void InkHUD::LogoApplet::onRender()
|
|||||||
setTextColor(WHITE);
|
setTextColor(WHITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USERPREFS_OEM_IMAGE_DATA // Custom boot screen, if defined in userPrefs.jsonc
|
||||||
|
|
||||||
|
// Only show the custom screen at startup
|
||||||
|
// This allows us to draw the usual Meshtastic logo at shutdown
|
||||||
|
// The effect is similar to the two-stage userPrefs boot screen used by BaseUI
|
||||||
|
if (millis() < 10 * 1000UL) {
|
||||||
|
|
||||||
|
// Draw the custom logo
|
||||||
|
const uint8_t logo[] = USERPREFS_OEM_IMAGE_DATA;
|
||||||
|
drawXBitmap(logoCX - (USERPREFS_OEM_IMAGE_WIDTH / 2), // Left
|
||||||
|
logoCY - (USERPREFS_OEM_IMAGE_HEIGHT / 2), // Top
|
||||||
|
logo, // XBM data
|
||||||
|
USERPREFS_OEM_IMAGE_WIDTH, // Width
|
||||||
|
USERPREFS_OEM_IMAGE_HEIGHT, // Height
|
||||||
|
inverted ? WHITE : BLACK // Color
|
||||||
|
);
|
||||||
|
|
||||||
|
// Select the largest font which will still comfortably fit the custom text
|
||||||
|
setFont(fontLarge);
|
||||||
|
if (getTextWidth(USERPREFS_OEM_TEXT) > 0.8 * width())
|
||||||
|
setFont(fontMedium);
|
||||||
|
if (getTextWidth(USERPREFS_OEM_TEXT) > 0.8 * width())
|
||||||
|
setFont(fontSmall);
|
||||||
|
|
||||||
|
// Draw custom text below logo
|
||||||
|
int16_t logoB = logoCY + (USERPREFS_OEM_IMAGE_HEIGHT / 2); // Bottom of the logo
|
||||||
|
printAt(X(0.5), logoB + Y(0.1), USERPREFS_OEM_TEXT, CENTER, TOP);
|
||||||
|
|
||||||
|
// Don't draw the normal boot screen, we've already drawn our custom version
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
drawLogo(logoCX, logoCY, logoW, logoH, inverted ? WHITE : BLACK);
|
drawLogo(logoCX, logoCY, logoW, logoH, inverted ? WHITE : BLACK);
|
||||||
|
|
||||||
if (!textLeft.empty()) {
|
if (!textLeft.empty()) {
|
||||||
|
@ -4,8 +4,13 @@
|
|||||||
#include "mesh/NodeDB.h"
|
#include "mesh/NodeDB.h"
|
||||||
|
|
||||||
#ifndef TB_DIRECTION
|
#ifndef TB_DIRECTION
|
||||||
|
#if ARCH_PORTDUINO
|
||||||
|
#include "PortduinoGlue.h"
|
||||||
|
#define TB_DIRECTION (PinStatus) settingsMap[tbDirection]
|
||||||
|
#else
|
||||||
#define TB_DIRECTION RISING
|
#define TB_DIRECTION RISING
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
class TrackballInterruptBase : public Observable<const InputEvent *>, public concurrency::OSThread
|
class TrackballInterruptBase : public Observable<const InputEvent *>, public concurrency::OSThread
|
||||||
{
|
{
|
||||||
|
@ -161,6 +161,14 @@ const RegionInfo regions[] = {
|
|||||||
RDEF(PH_433, 433.0f, 434.7f, 100, 0, 10, true, false, false), RDEF(PH_868, 868.0f, 869.4f, 100, 0, 14, true, false, false),
|
RDEF(PH_433, 433.0f, 434.7f, 100, 0, 10, true, false, false), RDEF(PH_868, 868.0f, 869.4f, 100, 0, 14, true, false, false),
|
||||||
RDEF(PH_915, 915.0f, 918.0f, 100, 0, 24, true, false, false),
|
RDEF(PH_915, 915.0f, 918.0f, 100, 0, 24, true, false, false),
|
||||||
|
|
||||||
|
/*
|
||||||
|
Kazakhstan
|
||||||
|
433.075 - 434.775 MHz <10 mW EIRP, Low Powered Devices (LPD)
|
||||||
|
863 - 868 MHz <25 mW EIRP, 500kHz channels allowed, must not be used at airfields
|
||||||
|
https://github.com/meshtastic/firmware/issues/7204
|
||||||
|
*/
|
||||||
|
RDEF(KZ_433, 433.075f, 434.775f, 100, 0, 10, true, false, false), RDEF(KZ_863, 863.0f, 868.0f, 100, 0, 30, true, false, true),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
2.4 GHZ WLAN Band equivalent. Only for SX128x chips.
|
2.4 GHZ WLAN Band equivalent. Only for SX128x chips.
|
||||||
*/
|
*/
|
||||||
@ -681,4 +689,4 @@ size_t RadioInterface::beginSending(meshtastic_MeshPacket *p)
|
|||||||
|
|
||||||
sendingPacket = p;
|
sendingPacket = p;
|
||||||
return p->encrypted.size + sizeof(PacketHeader);
|
return p->encrypted.size + sizeof(PacketHeader);
|
||||||
}
|
}
|
||||||
|
@ -285,7 +285,11 @@ typedef enum _meshtastic_Config_LoRaConfig_RegionCode {
|
|||||||
/* Philippines 915mhz */
|
/* Philippines 915mhz */
|
||||||
meshtastic_Config_LoRaConfig_RegionCode_PH_915 = 21,
|
meshtastic_Config_LoRaConfig_RegionCode_PH_915 = 21,
|
||||||
/* Australia / New Zealand 433MHz */
|
/* Australia / New Zealand 433MHz */
|
||||||
meshtastic_Config_LoRaConfig_RegionCode_ANZ_433 = 22
|
meshtastic_Config_LoRaConfig_RegionCode_ANZ_433 = 22,
|
||||||
|
/* Kazakhstan 433MHz */
|
||||||
|
meshtastic_Config_LoRaConfig_RegionCode_KZ_433 = 23,
|
||||||
|
/* Kazakhstan 863MHz */
|
||||||
|
meshtastic_Config_LoRaConfig_RegionCode_KZ_863 = 24
|
||||||
} meshtastic_Config_LoRaConfig_RegionCode;
|
} meshtastic_Config_LoRaConfig_RegionCode;
|
||||||
|
|
||||||
/* Standard predefined channel settings
|
/* Standard predefined channel settings
|
||||||
@ -681,8 +685,8 @@ extern "C" {
|
|||||||
#define _meshtastic_Config_DisplayConfig_CompassOrientation_ARRAYSIZE ((meshtastic_Config_DisplayConfig_CompassOrientation)(meshtastic_Config_DisplayConfig_CompassOrientation_DEGREES_270_INVERTED+1))
|
#define _meshtastic_Config_DisplayConfig_CompassOrientation_ARRAYSIZE ((meshtastic_Config_DisplayConfig_CompassOrientation)(meshtastic_Config_DisplayConfig_CompassOrientation_DEGREES_270_INVERTED+1))
|
||||||
|
|
||||||
#define _meshtastic_Config_LoRaConfig_RegionCode_MIN meshtastic_Config_LoRaConfig_RegionCode_UNSET
|
#define _meshtastic_Config_LoRaConfig_RegionCode_MIN meshtastic_Config_LoRaConfig_RegionCode_UNSET
|
||||||
#define _meshtastic_Config_LoRaConfig_RegionCode_MAX meshtastic_Config_LoRaConfig_RegionCode_ANZ_433
|
#define _meshtastic_Config_LoRaConfig_RegionCode_MAX meshtastic_Config_LoRaConfig_RegionCode_KZ_863
|
||||||
#define _meshtastic_Config_LoRaConfig_RegionCode_ARRAYSIZE ((meshtastic_Config_LoRaConfig_RegionCode)(meshtastic_Config_LoRaConfig_RegionCode_ANZ_433+1))
|
#define _meshtastic_Config_LoRaConfig_RegionCode_ARRAYSIZE ((meshtastic_Config_LoRaConfig_RegionCode)(meshtastic_Config_LoRaConfig_RegionCode_KZ_863+1))
|
||||||
|
|
||||||
#define _meshtastic_Config_LoRaConfig_ModemPreset_MIN meshtastic_Config_LoRaConfig_ModemPreset_LONG_FAST
|
#define _meshtastic_Config_LoRaConfig_ModemPreset_MIN meshtastic_Config_LoRaConfig_ModemPreset_LONG_FAST
|
||||||
#define _meshtastic_Config_LoRaConfig_ModemPreset_MAX meshtastic_Config_LoRaConfig_ModemPreset_SHORT_TURBO
|
#define _meshtastic_Config_LoRaConfig_ModemPreset_MAX meshtastic_Config_LoRaConfig_ModemPreset_SHORT_TURBO
|
||||||
|
@ -630,6 +630,7 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c)
|
|||||||
#if USERPREFS_EVENT_MODE
|
#if USERPREFS_EVENT_MODE
|
||||||
// If we're in event mode, nobody is a Router or Repeater
|
// If we're in event mode, nobody is a Router or Repeater
|
||||||
if (config.device.role == meshtastic_Config_DeviceConfig_Role_ROUTER ||
|
if (config.device.role == meshtastic_Config_DeviceConfig_Role_ROUTER ||
|
||||||
|
config.device.role == meshtastic_Config_DeviceConfig_Role_ROUTER_LATE ||
|
||||||
config.device.role == meshtastic_Config_DeviceConfig_Role_REPEATER) {
|
config.device.role == meshtastic_Config_DeviceConfig_Role_REPEATER) {
|
||||||
config.device.role = meshtastic_Config_DeviceConfig_Role_CLIENT;
|
config.device.role = meshtastic_Config_DeviceConfig_Role_CLIENT;
|
||||||
}
|
}
|
||||||
|
@ -642,6 +642,11 @@ bool loadConfig(const char *configPath)
|
|||||||
settingsMap[tbLeftPin] = yamlConfig["Input"]["TrackballLeft"].as<int>(RADIOLIB_NC);
|
settingsMap[tbLeftPin] = yamlConfig["Input"]["TrackballLeft"].as<int>(RADIOLIB_NC);
|
||||||
settingsMap[tbRightPin] = yamlConfig["Input"]["TrackballRight"].as<int>(RADIOLIB_NC);
|
settingsMap[tbRightPin] = yamlConfig["Input"]["TrackballRight"].as<int>(RADIOLIB_NC);
|
||||||
settingsMap[tbPressPin] = yamlConfig["Input"]["TrackballPress"].as<int>(RADIOLIB_NC);
|
settingsMap[tbPressPin] = yamlConfig["Input"]["TrackballPress"].as<int>(RADIOLIB_NC);
|
||||||
|
if (yamlConfig["Input"]["TrackballDirection"].as<std::string>("RISING") == "RISING") {
|
||||||
|
settingsMap[tbDirection] = 4;
|
||||||
|
} else if (yamlConfig["Input"]["TrackballDirection"].as<std::string>("RISING") == "FALLING") {
|
||||||
|
settingsMap[tbDirection] = 3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (yamlConfig["Webserver"]) {
|
if (yamlConfig["Webserver"]) {
|
||||||
|
@ -63,6 +63,7 @@ enum configNames {
|
|||||||
tbLeftPin,
|
tbLeftPin,
|
||||||
tbRightPin,
|
tbRightPin,
|
||||||
tbPressPin,
|
tbPressPin,
|
||||||
|
tbDirection,
|
||||||
spidev,
|
spidev,
|
||||||
spiSpeed,
|
spiSpeed,
|
||||||
i2cdev,
|
i2cdev,
|
||||||
|
Loading…
Reference in New Issue
Block a user