diff --git a/config.yaml.example b/config.yaml.example index 504aa81..36579e8 100644 --- a/config.yaml.example +++ b/config.yaml.example @@ -374,7 +374,7 @@ radio: coding_rate: 8 # Preamble length in symbols - preamble_length: 17 + preamble_length: 32 # Use implicit header mode implicit_header: false diff --git a/radio-settings.json b/radio-settings.json index 49452e3..96f4dc0 100644 --- a/radio-settings.json +++ b/radio-settings.json @@ -13,7 +13,7 @@ "txled_pin": -1, "rxled_pin": -1, "tx_power": 22, - "preamble_length": 17, + "preamble_length": 32, "is_waveshare": true }, "uconsole_aiov1": { @@ -29,7 +29,7 @@ "txled_pin": -1, "rxled_pin": -1, "tx_power": 22, - "preamble_length": 17 + "preamble_length": 32 }, "uconsole_aio_v2": { "name": "uConsole LoRa Module aio v2", @@ -44,7 +44,7 @@ "txled_pin": -1, "rxled_pin": -1, "tx_power": 22, - "preamble_length": 17, + "preamble_length": 32, "use_dio3_tcxo": true, "use_dio2_rf": true }, @@ -62,7 +62,7 @@ "rxled_pin": -1, "tx_power": 22, "use_dio3_tcxo": true, - "preamble_length": 17 + "preamble_length": 32 }, "pimesh-1w-v2": { "name": "PiMesh-1W (V2)", @@ -80,7 +80,7 @@ "tx_power": 22, "use_dio3_tcxo": true, "use_dio2_rf": true, - "preamble_length": 17 + "preamble_length": 32 }, "meshadv-mini": { "name": "MeshAdv Mini", @@ -95,7 +95,7 @@ "txled_pin": -1, "rxled_pin": -1, "tx_power": 22, - "preamble_length": 17 + "preamble_length": 32 }, "meshadv": { "name": "MeshAdv", @@ -111,7 +111,7 @@ "rxled_pin": -1, "tx_power": 22, "use_dio3_tcxo": true, - "preamble_length": 17 + "preamble_length": 32 }, "zebra": { "name": "ZebraHat-1W", @@ -128,7 +128,7 @@ "tx_power": 18, "use_dio3_tcxo": true, "use_dio2_rf": true, - "preamble_length": 17 + "preamble_length": 32 }, "femtofox-1W-SX": { "name": "FemtoFox SX1262 (1W)", @@ -146,7 +146,7 @@ "rxled_pin": -1, "tx_power": 30, "use_dio3_tcxo": true, - "preamble_length": 17 + "preamble_length": 32 }, "femtofox-2W-SX": { "name": "FemtoFox SX1262 (2W)", @@ -181,7 +181,7 @@ "tx_power": 8, "use_dio3_tcxo": true, "use_dio2_rf": true, - "preamble_length": 17 + "preamble_length": 32 }, "nebra-duo-hat": { "name": "NebraDuo-E22P-1W", @@ -198,7 +198,7 @@ "tx_power": 18, "use_dio3_tcxo": true, "use_dio2_rf": true, - "preamble_length": 17 + "preamble_length": 32 }, "ch341-usb-sx1262": { "name": "CH341 USB-SPI + SX1262 (example)", @@ -221,7 +221,7 @@ "use_dio2_rf": true, "use_dio3_tcxo": true, "dio3_tcxo_voltage": 1.8, - "preamble_length": 17, + "preamble_length": 32, "is_waveshare": false }, "ultrapeater-e22": { @@ -239,7 +239,7 @@ "tx_power": 22, "use_dio2_rf": false, "use_dio3_tcxo": true, - "preamble_length": 17, + "preamble_length": 32, "use_gpiod_backend": true, "gpio_chip": 1 }, @@ -259,7 +259,7 @@ "tx_power": 22, "use_dio2_rf": false, "use_dio3_tcxo": true, - "preamble_length": 17, + "preamble_length": 32, "use_gpiod_backend": true, "gpio_chip": 1 }, @@ -280,7 +280,7 @@ "use_dio2_rf": true, "use_dio3_tcxo": true, "dio3_tcxo_voltage": 1.8, - "preamble_length": 17, + "preamble_length": 32, "use_gpiod_backend": true, "gpio_chip": 1 }, @@ -301,7 +301,7 @@ "use_dio2_rf": true, "use_dio3_tcxo": true, "dio3_tcxo_voltage": 1.8, - "preamble_length": 17, + "preamble_length": 32, "use_gpiod_backend": true, "gpio_chip": 1 }, @@ -321,7 +321,7 @@ "tx_power": 22, "use_dio2_rf": false, "use_dio3_tcxo": true, - "preamble_length": 17 + "preamble_length": 32 }, "ultrapeaterzero-e22p": { "name": "Zindello Industries UltraPeaterZero E22P", @@ -339,7 +339,7 @@ "tx_power": 22, "use_dio2_rf": false, "use_dio3_tcxo": true, - "preamble_length": 17 + "preamble_length": 32 }, "pymc_usb": { "name": "pymc_usb modem (USB-CDC)", @@ -347,7 +347,7 @@ "connection_type": "usb", "radio_type": "pymc_usb", "tx_power": 22, - "preamble_length": 16 + "preamble_length": 32 }, "pymc_tcp": { "name": "pymc_tcp modem (Wi-Fi / Ethernet)", @@ -355,7 +355,7 @@ "connection_type": "network", "radio_type": "pymc_tcp", "tx_power": 22, - "preamble_length": 16 + "preamble_length": 32 }, "kiss": { "name": "KISS modem (serial)", @@ -363,7 +363,7 @@ "connection_type": "usb", "radio_type": "kiss", "tx_power": 14, - "preamble_length": 17 + "preamble_length": 32 } } } \ No newline at end of file diff --git a/repeater/config.py b/repeater/config.py index 541235d..c297db0 100644 --- a/repeater/config.py +++ b/repeater/config.py @@ -541,6 +541,7 @@ def get_radio_for_board(board_config: dict): "spreading_factor": int(radio_cfg.get("spreading_factor", 8)), "coding_rate": int(radio_cfg.get("coding_rate", 8)), "tx_power": int(radio_cfg.get("tx_power", 14)), + "preamble_length": int(radio_cfg.get("preamble_length", 32)), } radio = KissModemWrapper( port=port, diff --git a/repeater/engine.py b/repeater/engine.py index f0c1abc..8e4fb6c 100644 --- a/repeater/engine.py +++ b/repeater/engine.py @@ -92,7 +92,7 @@ class RepeaterHandler(BaseHandler): "spreading_factor": getattr(radio, "spreading_factor", 8), "bandwidth": getattr(radio, "bandwidth", 125000), "coding_rate": getattr(radio, "coding_rate", 8), - "preamble_length": getattr(radio, "preamble_length", 17), + "preamble_length": getattr(radio, "preamble_length", 32), "frequency": getattr(radio, "frequency", 915000000), "tx_power": getattr(radio, "tx_power", 14), } diff --git a/repeater/web/api_endpoints.py b/repeater/web/api_endpoints.py index ff998bc..39a7b30 100644 --- a/repeater/web/api_endpoints.py +++ b/repeater/web/api_endpoints.py @@ -1220,7 +1220,7 @@ class APIEndpoints: tx_power_preset if tx_power_preset is not None else 14 ) if "preamble_length" not in config_yaml["radio"]: - config_yaml["radio"]["preamble_length"] = 17 + config_yaml["radio"]["preamble_length"] = 32 elif hardware_key == "pymc_usb": # pymc_usb modem: external SX1262 board over USB-CDC. # Accept pymc_usb_port / pymc_usb_baudrate from the request body @@ -1240,7 +1240,7 @@ class APIEndpoints: elif "tx_power" in hw_config: config_yaml["radio"]["tx_power"] = hw_config.get("tx_power", 22) if "preamble_length" in hw_config: - config_yaml["radio"]["preamble_length"] = hw_config.get("preamble_length", 16) + config_yaml["radio"]["preamble_length"] = hw_config.get("preamble_length", 32) elif hardware_key == "pymc_tcp": # pymc_tcp modem: external SX1262 board exposed as TCP over Wi-Fi/Ethernet. # 'host' has no sensible default — must be the modem's LAN address or @@ -1267,7 +1267,7 @@ class APIEndpoints: elif "tx_power" in hw_config: config_yaml["radio"]["tx_power"] = hw_config.get("tx_power", 22) if "preamble_length" in hw_config: - config_yaml["radio"]["preamble_length"] = hw_config.get("preamble_length", 16) + config_yaml["radio"]["preamble_length"] = hw_config.get("preamble_length", 32) else: # SX1262 / sx1262_ch341: radio_type and optional CH341 from hw_config if "radio_type" in hw_config: @@ -1293,7 +1293,7 @@ class APIEndpoints: elif "tx_power" in hw_config: config_yaml["radio"]["tx_power"] = hw_config.get("tx_power", 22) if "preamble_length" in hw_config: - config_yaml["radio"]["preamble_length"] = hw_config.get("preamble_length", 17) + config_yaml["radio"]["preamble_length"] = hw_config.get("preamble_length", 32) if "sx1262" not in config_yaml: config_yaml["sx1262"] = {}