mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-11-12 06:37:36 +00:00
Add safe M33S module variants across supported carrier wiring
Add 59 role recipes and 19 release aliases with an 8 dBm startup default and hard drive ceiling. Keep 400 MHz SX1268 images at 433 MHz through USA/Cascade presets, retain separate application OTA identities, and reuse only matching MCU bootloaders. Validate all new resolved profiles, startup writes, saved-setting clamps, picker and packaging contracts, and representative Companion/Repeater/Room firmware builds. Keep a fixed compression benchmark alongside full live OTA-catalog round trips.
This commit is contained in:
1 parent
7724fad719
commit
51672f99ae
33 files changed
+1901
-562
No files matched your search
@@ -175,10 +175,27 @@
|
||||
profiles: profiles, unavailableProfiles: unavailableProfiles };
|
||||
}
|
||||
|
||||
// Only the MCU, flash wiring and application layout are shared here.
|
||||
// Firmware/OTA hardware identities and PA drive limits stay distinct.
|
||||
const BOOTLOADER_HARDWARE = Object.freeze({
|
||||
ProMicro_m33s: "ProMicro",
|
||||
ProMicro_400m33s: "ProMicro",
|
||||
Xiao_nrf52_m33s: "Xiao_nrf52",
|
||||
Xiao_nrf52_400m33s: "Xiao_nrf52",
|
||||
ikoka_handheld_nrf_e22_33dbm: "Xiao_nrf52",
|
||||
ikoka_handheld_nrf_e22_33dbm_096: "Xiao_nrf52",
|
||||
ikoka_handheld_nrf_e22_400m33s: "Xiao_nrf52",
|
||||
ikoka_handheld_nrf_e22_400m33s_096: "Xiao_nrf52",
|
||||
ikoka_nano_nrf_400m33s: "Xiao_nrf52",
|
||||
ikoka_stick_nrf_400m33s: "Xiao_nrf52",
|
||||
solarxiao_400M33S: "Xiao_nrf52",
|
||||
});
|
||||
|
||||
function bootloaderForHardware(catalog, hardware, chipFamily) {
|
||||
if (!catalog || chipFamily !== "nrf52" || !hardware) return null;
|
||||
const bootHardware = BOOTLOADER_HARDWARE[hardware] || hardware;
|
||||
const matches = catalog.profiles.filter(function (profile) {
|
||||
return profile.meshcoreHardware.includes(hardware);
|
||||
return profile.meshcoreHardware.includes(bootHardware);
|
||||
});
|
||||
return matches.length === 1 ? matches[0] : null;
|
||||
}
|
||||
@@ -228,7 +245,10 @@
|
||||
"xiao_nrf52", "ikoka_handheld_nrf_e22_30dbm",
|
||||
"ikoka_nano_nrf_22dbm", "ikoka_nano_nrf_30dbm", "ikoka_nano_nrf_33dbm",
|
||||
"ikoka_stick_nrf_22dbm", "ikoka_stick_nrf_30dbm", "ikoka_stick_nrf_33dbm",
|
||||
"solarxiao_30s", "solarxiao_33s", "lilygo_t-echo-lite",
|
||||
"solarxiao_30s", "solarxiao_33s", "solarxiao_400m33s", "lilygo_t-echo-lite",
|
||||
"xiao_nrf52_m33s", "xiao_nrf52_400m33s",
|
||||
"ikoka_handheld_nrf_e22_33dbm", "ikoka_handheld_nrf_e22_400m33s",
|
||||
"ikoka_nano_nrf_400m33s", "ikoka_stick_nrf_400m33s",
|
||||
].concat(QSPI_REPEATER_ALIAS_HARDWARE));
|
||||
|
||||
let pickerInstanceCount = 0;
|
||||
@@ -841,7 +861,9 @@
|
||||
["Tbeam", ["Tbeam_SX1262", "Tbeam_SX1276"]],
|
||||
["LilyGo_T3S3", ["LilyGo_T3S3_sx1262", "LilyGo_T3S3_sx1276"]],
|
||||
["Generic_E22", ["Generic_E22_sx1262", "Generic_E22_sx1268"]],
|
||||
["Generic_E22_m33s", []],
|
||||
["Meshadventurer", ["Meshadventurer_sx1262", "Meshadventurer_sx1268"]],
|
||||
["Meshadventurer_m33s", []],
|
||||
["Tenstar_C3", ["Tenstar_C3_sx1262", "Tenstar_C3_sx1268"]],
|
||||
["muzi_base", ["muzi_base_uno", "muzi_base_duo", "muzi_base_uno_superIO", "muzi_base_duo_superIO"], "NRF52_PLATFORM"],
|
||||
];
|
||||
@@ -2087,6 +2109,14 @@
|
||||
const target = targetWithoutBootloader(profile.target);
|
||||
const info = profile.controls || {};
|
||||
const notes = [];
|
||||
const moduleHardware = String(profile && profile.hardware || "").toLowerCase();
|
||||
if (/(?:m33s|_33dbm|solarxiao_33s)/.test(moduleHardware)) {
|
||||
const drive = /^ikoka_(?:nano|stick)_nrf_33dbm$/.test(moduleHardware) ? "9" : "8";
|
||||
notes.push("M33S amplifier profile: " + drive + " dBm maximum chip drive, not RF output. Match the fitted module; ordinary 22 dBm or M30S firmware is unsuitable.");
|
||||
}
|
||||
if (moduleHardware.includes("400m33s")) {
|
||||
notes.push("E22-400M33S / SX1268: starts at 433 MHz. The USA 900 MHz preset is incompatible; keep the matching low-band module and application identity.");
|
||||
}
|
||||
if (autoRadioProfile(profile)) {
|
||||
notes.push("This image detects the fitted radio at startup. Choose the board and role; a separate radio-chip image is unnecessary.");
|
||||
notes.push(profile.hardware === "muzi_base"
|
||||
|
||||
Reference in new issue
Block a user