From 57f678240d346c7d651f8e0ed66966272464bb28 Mon Sep 17 00:00:00 2001 From: Austin Date: Sat, 6 Jun 2026 08:43:49 -0400 Subject: [PATCH] Add 1.25 Meter '125cm' amateur radio region support (#10638) --- src/graphics/draw/MenuHandler.cpp | 1 + .../niche/InkHUD/Applets/System/Menu/MenuAction.h | 1 + .../niche/InkHUD/Applets/System/Menu/MenuApplet.cpp | 5 +++++ src/mesh/MeshRadio.h | 1 + src/mesh/RadioInterface.cpp | 12 ++++++++++++ 5 files changed, 20 insertions(+) diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp index 45ac110bd..8403b3b7c 100644 --- a/src/graphics/draw/MenuHandler.cpp +++ b/src/graphics/draw/MenuHandler.cpp @@ -209,6 +209,7 @@ void menuHandler::LoraRegionPicker(uint32_t duration) {"ITU1_2M (144-146)", OptionsAction::Select, meshtastic_Config_LoRaConfig_RegionCode_ITU1_2M}, {"ITU2_2M (144-148)", OptionsAction::Select, meshtastic_Config_LoRaConfig_RegionCode_ITU2_2M}, {"ITU3_2M (144-148)", OptionsAction::Select, meshtastic_Config_LoRaConfig_RegionCode_ITU3_2M}, + {"ITU2_125CM (220-225)", OptionsAction::Select, meshtastic_Config_LoRaConfig_RegionCode_ITU2_125CM}, }; diff --git a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuAction.h b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuAction.h index fb1365290..564afa558 100644 --- a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuAction.h +++ b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuAction.h @@ -69,6 +69,7 @@ enum MenuAction { SET_REGION_ITU1_2M, SET_REGION_ITU2_2M, SET_REGION_ITU3_2M, + SET_REGION_ITU2_125CM, // Device Roles SET_ROLE_CLIENT, SET_ROLE_CLIENT_MUTE, diff --git a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuApplet.cpp b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuApplet.cpp index 187381473..f588cb28b 100644 --- a/src/graphics/niche/InkHUD/Applets/System/Menu/MenuApplet.cpp +++ b/src/graphics/niche/InkHUD/Applets/System/Menu/MenuApplet.cpp @@ -796,6 +796,10 @@ void InkHUD::MenuApplet::execute(MenuItem item) applyLoRaRegion(meshtastic_Config_LoRaConfig_RegionCode_ITU3_2M); break; + case SET_REGION_ITU2_125CM: + applyLoRaRegion(meshtastic_Config_LoRaConfig_RegionCode_ITU2_125CM); + break; + // Roles case SET_ROLE_CLIENT: applyDeviceRole(meshtastic_Config_DeviceConfig_Role_CLIENT); @@ -1500,6 +1504,7 @@ void InkHUD::MenuApplet::showPage(MenuPage page) items.push_back(MenuItem("ITU1_2M (144-146)", MenuAction::SET_REGION_ITU1_2M, MenuPage::EXIT)); items.push_back(MenuItem("ITU2_2M (144-148)", MenuAction::SET_REGION_ITU2_2M, MenuPage::EXIT)); items.push_back(MenuItem("ITU3_2M (144-148)", MenuAction::SET_REGION_ITU3_2M, MenuPage::EXIT)); + items.push_back(MenuItem("ITU2_125CM (220-225)", MenuAction::SET_REGION_ITU2_125CM, MenuPage::EXIT)); items.push_back(MenuItem("Exit", MenuPage::EXIT)); break; diff --git a/src/mesh/MeshRadio.h b/src/mesh/MeshRadio.h index 553230250..6d914c489 100644 --- a/src/mesh/MeshRadio.h +++ b/src/mesh/MeshRadio.h @@ -45,6 +45,7 @@ extern const RegionProfile PROFILE_UNDEF; extern const RegionProfile PROFILE_LITE; extern const RegionProfile PROFILE_NARROW; extern const RegionProfile PROFILE_HAM_20KHZ; +extern const RegionProfile PROFILE_HAM_100KHZ; // Map from old region names to new region enums struct RegionInfo { diff --git a/src/mesh/RadioInterface.cpp b/src/mesh/RadioInterface.cpp index 6529dc35f..5bd87b30b 100644 --- a/src/mesh/RadioInterface.cpp +++ b/src/mesh/RadioInterface.cpp @@ -60,6 +60,8 @@ const RegionProfile PROFILE_LITE = {PRESETS_LITE, 0.4, 0.0375f, false, false, 0, const RegionProfile PROFILE_NARROW = {PRESETS_NARROW, 0, 0.0104f, true, false, 0, 1, 1}; // Ham '20kHz' profile. 15.6kHz bandwidth coerced to 20kHz via padding. const RegionProfile PROFILE_HAM_20KHZ = {PRESETS_TINY, 0, 0.0022f, false, true, 0, 2, 2}; +// Ham '100kHz' profile. 62.5kHz bandwidth coerced to 100kHz via padding. +const RegionProfile PROFILE_HAM_100KHZ = {PRESETS_NARROW, 0, 0.01875f, false, true, 0, 1, 1}; #define RDEF(name, freq_start, freq_end, duty_cycle, power_limit, frequency_switching, wide_lora, profile_ptr, default_preset, \ override_slot) \ @@ -259,6 +261,16 @@ const RegionInfo regions[] = { */ RDEF(ITU3_2M, 144.0f, 148.0f, 100, 30, false, false, PROFILE_HAM_20KHZ, PRESET(TINY_FAST), 33), + /* + ITU Region 2 (Americas) amateur 1.25m '125cm' allocation: 220.000 - 225.000 MHz. + Typical admin rules (e.g. US FCC Part 97) allow well above 30 dBm for licensed operators. + Note: Some countries do not allocate 220-222 MHz (e.g. USA, Canada). Check local law! + + Default slot: 37 (223.650 MHz) + https://www.arrl.org/band-plan + */ + RDEF(ITU2_125CM, 220.0f, 225.0f, 100, 30, false, false, PROFILE_HAM_100KHZ, PRESET(NARROW_SLOW), 37), + /* 2.4 GHZ WLAN Band equivalent. Only for SX128x chips. */