diff --git a/README.md b/README.md index ebad1f6f5..f8b9e5e08 100644 --- a/README.md +++ b/README.md @@ -117,4 +117,4 @@ There are a number of fairly major features in the pipeline, with no particular - Report bugs and request features on the [GitHub Issues](https://github.com/ripplebiz/MeshCore/issues) page. - Find additional guides and components on [my site](https://buymeacoffee.com/ripplebiz). -- Join [MeshCore Discord](https://discord.gg/BMwCtwHj5V) to chat with the developers and get help from the community. +- Join [MeshCore Discord](https://meshcore.gg) to chat with the developers and get help from the community. diff --git a/arch/nrf52/extra_scripts/patch_bluefruit.py b/arch/nrf52/extra_scripts/patch_bluefruit.py deleted file mode 100644 index b43bffb5d..000000000 --- a/arch/nrf52/extra_scripts/patch_bluefruit.py +++ /dev/null @@ -1,198 +0,0 @@ -""" -Bluefruit BLE Patch Script - -Patches Bluefruit library to fix semaphore leak bug that causes device lockup -when BLE central disconnects unexpectedly (e.g., going out of range, supervision timeout). - -Patches applied: -1. BLEConnection.h: Add _hvn_qsize member to track semaphore queue size -2. BLEConnection.cpp: Store hvn_qsize and restore semaphore on disconnect - -Bug description: -- When a BLE central disconnects unexpectedly (reason=8 supervision timeout), - the BLE_GATTS_EVT_HVN_TX_COMPLETE event may never fire -- This leaves the _hvn_sem counting semaphore in a decremented state -- Since BLEConnection objects are reused (destructor never called), the - semaphore count is never restored -- Eventually all semaphore counts are exhausted and notify() blocks/fails - -""" - -from pathlib import Path - -Import("env") # pylint: disable=undefined-variable - - -def _patch_ble_connection_header(source: Path) -> bool: - """ - Add _hvn_qsize member variable to BLEConnection class. - - This is needed to restore the semaphore to its correct count on disconnect. - - Returns True if patch was applied or already applied, False on error. - """ - try: - content = source.read_text() - - # Check if already patched - if "_hvn_qsize" in content: - return True # Already patched - - # Find the location to insert - after _phy declaration - original_pattern = ''' uint8_t _phy; - - uint8_t _role;''' - - patched_pattern = ''' uint8_t _phy; - uint8_t _hvn_qsize; - - uint8_t _role;''' - - if original_pattern not in content: - print("Bluefruit patch: WARNING - BLEConnection.h pattern not found") - return False - - content = content.replace(original_pattern, patched_pattern) - source.write_text(content) - - # Verify - if "_hvn_qsize" not in source.read_text(): - return False - - return True - except Exception as e: - print(f"Bluefruit patch: ERROR patching BLEConnection.h: {e}") - return False - - -def _patch_ble_connection_source(source: Path) -> bool: - """ - Patch BLEConnection.cpp to: - 1. Store hvn_qsize in constructor - 2. Restore _hvn_sem semaphore to full count on disconnect - - Returns True if patch was applied or already applied, False on error. - """ - try: - content = source.read_text() - - # Check if already patched (look for the restore loop) - if "uxSemaphoreGetCount(_hvn_sem)" in content: - return True # Already patched - - # Patch 1: Store queue size in constructor - constructor_original = ''' _hvn_sem = xSemaphoreCreateCounting(hvn_qsize, hvn_qsize);''' - - constructor_patched = ''' _hvn_qsize = hvn_qsize; - _hvn_sem = xSemaphoreCreateCounting(hvn_qsize, hvn_qsize);''' - - if constructor_original not in content: - print("Bluefruit patch: WARNING - BLEConnection.cpp constructor pattern not found") - return False - - content = content.replace(constructor_original, constructor_patched) - - # Patch 2: Restore semaphore on disconnect - disconnect_original = ''' case BLE_GAP_EVT_DISCONNECTED: - // mark as disconnected - _connected = false; - break;''' - - disconnect_patched = ''' case BLE_GAP_EVT_DISCONNECTED: - // Restore notification semaphore to full count - // This fixes lockup when disconnect occurs with notifications in flight - while (uxSemaphoreGetCount(_hvn_sem) < _hvn_qsize) { - xSemaphoreGive(_hvn_sem); - } - // Release indication semaphore if waiting - if (_hvc_sem) { - _hvc_received = false; - xSemaphoreGive(_hvc_sem); - } - // mark as disconnected - _connected = false; - break;''' - - if disconnect_original not in content: - print("Bluefruit patch: WARNING - BLEConnection.cpp disconnect pattern not found") - return False - - content = content.replace(disconnect_original, disconnect_patched) - source.write_text(content) - - # Verify - verify_content = source.read_text() - if "uxSemaphoreGetCount(_hvn_sem)" not in verify_content: - return False - if "_hvn_qsize = hvn_qsize" not in verify_content: - return False - - return True - except Exception as e: - print(f"Bluefruit patch: ERROR patching BLEConnection.cpp: {e}") - return False - - -def _apply_bluefruit_patches(target, source, env): # pylint: disable=unused-argument - framework_path = env.get("PLATFORMFW_DIR") - if not framework_path: - framework_path = env.PioPlatform().get_package_dir("framework-arduinoadafruitnrf52") - - if not framework_path: - print("Bluefruit patch: ERROR - framework directory not found") - env.Exit(1) - return - - framework_dir = Path(framework_path) - bluefruit_lib = framework_dir / "libraries" / "Bluefruit52Lib" / "src" - patch_failed = False - - # Patch BLEConnection.h - conn_header = bluefruit_lib / "BLEConnection.h" - if conn_header.exists(): - before = conn_header.read_text() - success = _patch_ble_connection_header(conn_header) - after = conn_header.read_text() - - if success: - if before != after: - print("Bluefruit patch: OK - Applied BLEConnection.h fix (added _hvn_qsize member)") - else: - print("Bluefruit patch: OK - BLEConnection.h already patched") - else: - print("Bluefruit patch: FAILED - BLEConnection.h") - patch_failed = True - else: - print(f"Bluefruit patch: ERROR - BLEConnection.h not found at {conn_header}") - patch_failed = True - - # Patch BLEConnection.cpp - conn_source = bluefruit_lib / "BLEConnection.cpp" - if conn_source.exists(): - before = conn_source.read_text() - success = _patch_ble_connection_source(conn_source) - after = conn_source.read_text() - - if success: - if before != after: - print("Bluefruit patch: OK - Applied BLEConnection.cpp fix (restore semaphore on disconnect)") - else: - print("Bluefruit patch: OK - BLEConnection.cpp already patched") - else: - print("Bluefruit patch: FAILED - BLEConnection.cpp") - patch_failed = True - else: - print(f"Bluefruit patch: ERROR - BLEConnection.cpp not found at {conn_source}") - patch_failed = True - - if patch_failed: - print("Bluefruit patch: CRITICAL - Patch failed! Build aborted.") - env.Exit(1) - - -# Register the patch to run before build -bluefruit_action = env.VerboseAction(_apply_bluefruit_patches, "Applying Bluefruit BLE patches...") -env.AddPreAction("$BUILD_DIR/${PROGNAME}.elf", bluefruit_action) - -# Also run immediately to patch before any compilation -_apply_bluefruit_patches(None, None, env) diff --git a/docs/companion_protocol.md b/docs/companion_protocol.md index bbad1e40f..9cc610ff3 100644 --- a/docs/companion_protocol.md +++ b/docs/companion_protocol.md @@ -283,32 +283,110 @@ Bytes 7+: Message Text (UTF-8, variable length) ### 6. Send Channel Data Datagram -**Purpose**: Send binary datagram data to a channel. +**Purpose**: Send a binary datagram to a channel. Unlike channel text messages, datagrams carry no built-in sender identity and no timestamp — applications needing either must encode them inside the binary payload. **Command Format**: ``` -Byte 0: 0x3E -Bytes 1-2: Data Type (`data_type`, 16-bit little-endian) -Byte 3: Channel Index (0-7) -Bytes 4+: Binary payload bytes (variable length) +Byte 0: 0x3E +Byte 1: Channel Index (0-7) +Byte 2: Path Length (0xFF = flood, otherwise actual path length) +Bytes 3 .. 2+path_len: Path (omitted when path_len == 0xFF) +Next 2 bytes (little-endian): Data Type (`data_type`, uint16) +Remaining bytes: Binary payload (variable length) +``` + +**Example** (flood, `DATA_TYPE_DEV`, payload `A1 B2 C3`, channel 1): +``` +3E 01 FF FF FF A1 B2 C3 ``` **Data Type / Transport Mapping**: -- `0x0000` is invalid for this command. +- `0x0000` (`DATA_TYPE_RESERVED`) is invalid and rejected with `PACKET_ERROR`. - `0xFFFF` (`DATA_TYPE_DEV`) is the developer namespace for experimenting and developing apps. -- Other non-zero values can be used as assigned application/community namespaces. - -**Note**: Applications that need a timestamp should encode it inside the binary payload. +- Values `0x0001`–`0xFFFE` are available for registered application/community namespaces. See the [Registered data_type values](#registered-data_type-values) table below. **Limits**: -- Maximum payload length is `163` bytes. -- Larger payloads are rejected with `PACKET_ERROR`. +- Maximum payload length is `MAX_CHANNEL_DATA_LENGTH = MAX_FRAME_SIZE - 9 = 163` bytes. +- Larger payloads are rejected with `PACKET_ERROR` (`ERR_CODE_ILLEGAL_ARG`). -**Response**: `PACKET_OK` (0x00) on success +**Response**: `PACKET_OK` (0x00) on success, or `PACKET_ERROR` (0x01) with one of: +- `ERR_CODE_NOT_FOUND` (2) — unknown `channel_idx` +- `ERR_CODE_ILLEGAL_ARG` (6) — invalid `path_len`, reserved `data_type` (`0x0000`), or payload larger than `MAX_CHANNEL_DATA_LENGTH` +- `ERR_CODE_TABLE_FULL` (3) — outbound send queue is full; retry later + +**Inbound datagrams** are delivered to the host via `RESP_CODE_CHANNEL_DATA_RECV` (0x1B); see [Receive Channel Data Datagram](#receive-channel-data-datagram). + +#### Registered `data_type` values + +`data_type` is an **application identifier**, not a payload-format identifier. Each registered value identifies an application that owns its own internal payload schemas. The firmware does not inspect payload contents — `data_type` is transported opaquely. + +| Value | Constant | Purpose | +|-----------------|----------------------|--------------------------------------------------------------------------| +| 0x0000 | `DATA_TYPE_RESERVED` | Reserved; invalid on send | +| 0x0001 – 0x00FF | — | Reserved for internal use | +| 0x0100 – 0xFEFF | — | Registered application namespaces (see [number_allocations.md](number_allocations.md)) | +| 0xFF00 – 0xFFFE | — | Testing/development; no registration required | +| 0xFFFF | `DATA_TYPE_DEV` | Developer/experimental namespace | + +To register a new application, submit a PR adding a row to the table in [docs/number_allocations.md](number_allocations.md). Internal sub-formats within an allocated application ID are owned by that application and are not tracked in MeshCore firmware or this document. --- -### 6. Get Message +### Receive Channel Data Datagram + +Inbound group datagrams (radio-level `PAYLOAD_TYPE_GRP_DATA`, 0x06) are forwarded to the host as `RESP_CODE_CHANNEL_DATA_RECV` notifications. + +**Frame Format** (`RESP_CODE_CHANNEL_DATA_RECV`, 0x1B): +``` +Byte 0: 0x1B (packet type) +Byte 1: SNR (signed int8, scaled ×4 — divide by 4.0 to recover dB) +Bytes 2-3: Reserved (clients MUST ignore) +Byte 4: Channel Index (0-7) +Byte 5: Path Length (actual path length when flooded, otherwise 0xFF for direct) +Bytes 6-7: Data Type (uint16 little-endian) +Byte 8: Data Length +Bytes 9 .. 8+data_len: Payload +``` + +**Path bytes are not forwarded**: Only `path_len` is reported in the receive frame — the path itself is not copied to the host. There are no path bytes between byte 5 and the data_type field at bytes 6–7, regardless of `path_len`. + +**Path Length semantics differ between send and receive**: + +| Direction | `path_len = 0xFF` | `path_len ≠ 0xFF` | +|-----------|---------------------------------|-------------------------------------------------------------------------------------| +| Send | Flood the network | Direct route; the encoded path follows (low 6 bits = hash count, top 2 bits + 1 = hash size; on-wire byte count = `hash_count × hash_size`) | +| Receive | Packet arrived via direct route | Packet was flooded; this is the encoded `pkt->path_len` field as observed (no path bytes follow) | + +In other words, the meaning of `0xFF` is inverted between the two directions, and on receive the field carries metadata only — never a routable path. `path_len` is an encoded byte (see `Packet::isValidPathLen` / `Packet::writePath` in `src/Packet.cpp`), not a raw byte count. + +**Note**: The device may also emit `PACKET_MESSAGES_WAITING` (0x83) to notify the host that datagrams are queued; poll with `CMD_SYNC_NEXT_MESSAGE` (0x0A) to retrieve them. + +**Parsing Pseudocode**: +```python +def parse_channel_data_recv(data): + if len(data) < 9: + return None + snr_byte = data[1] + snr = (snr_byte if snr_byte < 128 else snr_byte - 256) / 4.0 + channel_idx = data[4] + path_len = data[5] + data_type = int.from_bytes(data[6:8], 'little') + data_len = data[8] + if 9 + data_len > len(data): + return None + payload = data[9:9 + data_len] + return { + 'snr': snr, + 'channel_idx': channel_idx, + 'path_len': path_len, + 'data_type': data_type, + 'payload': bytes(payload), + } +``` + +--- + +### 7. Get Message **Purpose**: Request the next queued message from the device. @@ -325,13 +403,14 @@ Byte 0: 0x0A **Response**: - `PACKET_CHANNEL_MSG_RECV` (0x08) or `PACKET_CHANNEL_MSG_RECV_V3` (0x11) for channel messages - `PACKET_CONTACT_MSG_RECV` (0x07) or `PACKET_CONTACT_MSG_RECV_V3` (0x10) for contact messages +- `PACKET_CHANNEL_DATA_RECV` (0x1B) for channel data datagrams - `PACKET_NO_MORE_MSGS` (0x0A) if no messages available **Note**: Poll this command periodically to retrieve queued messages. The device may also send `PACKET_MESSAGES_WAITING` (0x83) as a notification when messages are available. --- -### 7. Get Battery and Storage +### 8. Get Battery and Storage **Purpose**: Query device battery voltage and storage usage. @@ -527,6 +606,15 @@ Use the `SEND_CHANNEL_MESSAGE` command (see [Commands](#commands)). ## Response Parsing +### Terminology + +This document uses a spec-level naming convention (`PACKET_*`) for bytes the firmware sends back to the host. In the firmware source these same values are split across two `#define` families by purpose: + +- `RESP_CODE_*` — direct replies to a command (e.g. `RESP_CODE_CHANNEL_DATA_RECV` = `PACKET_CHANNEL_DATA_RECV` = 0x1B). +- `PUSH_CODE_*` — asynchronous notifications not tied to a specific command (e.g. `PUSH_CODE_MSG_WAITING` = `PACKET_MESSAGES_WAITING` = 0x83). + +Byte values are authoritative; names are aliases. When reading firmware source, `RESP_CODE_X` / `PUSH_CODE_X` correspond to this doc's `PACKET_X` of the same numeric value. + ### Packet Types | Value | Name | Description | @@ -547,6 +635,7 @@ Use the `SEND_CHANNEL_MESSAGE` command (see [Commands](#commands)). | 0x10 | PACKET_CONTACT_MSG_RECV_V3 | Contact message (V3 with SNR) | | 0x11 | PACKET_CHANNEL_MSG_RECV_V3 | Channel message (V3 with SNR) | | 0x12 | PACKET_CHANNEL_INFO | Channel information | +| 0x1B | PACKET_CHANNEL_DATA_RECV | Channel data datagram | | 0x80 | PACKET_ADVERTISEMENT | Advertisement packet | | 0x82 | PACKET_ACK | Acknowledgment | | 0x83 | PACKET_MESSAGES_WAITING | Messages waiting notification | @@ -718,22 +807,18 @@ Bytes 1-6: ACK Code (6 bytes, hex) ### Error Codes -**PACKET_ERROR** (0x01) may include an error code in byte 1: +`PACKET_ERROR` (0x01) carries a single-byte error code in byte 1. Values match the `ERR_CODE_*` constants defined in `examples/companion_radio/MyMesh.cpp`: -| Error Code | Description | -|------------|-------------| -| 0x00 | Generic error (no specific code) | -| 0x01 | Invalid command | -| 0x02 | Invalid parameter | -| 0x03 | Channel not found | -| 0x04 | Channel already exists | -| 0x05 | Channel index out of range | -| 0x06 | Secret mismatch | -| 0x07 | Message too long | -| 0x08 | Device busy | -| 0x09 | Not enough storage | +| Code | Constant (firmware) | Description | +|------|----------------------------|------------------------------------------------------------------------------| +| 1 | `ERR_CODE_UNSUPPORTED_CMD` | Unknown or unsupported command byte / sub-command | +| 2 | `ERR_CODE_NOT_FOUND` | Target not found (channel, contact, message, etc.) | +| 3 | `ERR_CODE_TABLE_FULL` | Internal queue or table is full — retry later | +| 4 | `ERR_CODE_BAD_STATE` | Operation not valid in current device state (e.g. iterator already running) | +| 5 | `ERR_CODE_FILE_IO_ERROR` | Filesystem or storage I/O failure | +| 6 | `ERR_CODE_ILLEGAL_ARG` | Invalid argument (bad length, out-of-range value, reserved field, etc.) | -**Note**: Error codes may vary by firmware version. Always check byte 1 of `PACKET_ERROR` response. +**Note**: Error codes may vary by firmware version. Always check byte 1 of `PACKET_ERROR` response, and treat unknown codes as generic errors. ### Frame Handling @@ -765,7 +850,8 @@ BLE implementations enqueue and deliver one protocol frame per BLE write/notific - `GET_CHANNEL` → `PACKET_CHANNEL_INFO` - `SET_CHANNEL` → `PACKET_OK` or `PACKET_ERROR` - `SEND_CHANNEL_MESSAGE` → `PACKET_MSG_SENT` - - `GET_MESSAGE` → `PACKET_CHANNEL_MSG_RECV`, `PACKET_CONTACT_MSG_RECV`, or `PACKET_NO_MORE_MSGS` + - `GET_MESSAGE` → `PACKET_CHANNEL_MSG_RECV`, `PACKET_CONTACT_MSG_RECV`, `PACKET_CHANNEL_DATA_RECV`, or `PACKET_NO_MORE_MSGS` + - `SEND_CHANNEL_DATA` → `PACKET_OK` or `PACKET_ERROR` - `GET_BATTERY` → `PACKET_BATTERY` 4. **Timeout Handling**: diff --git a/docs/faq.md b/docs/faq.md index 9fe1534a1..3edc0a695 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -194,7 +194,7 @@ Recently, as of October 2025, many regions have moved to the "narrow" setting, a After extensive testing, many regions have switched or about to switch over to BW62.5 and SF7, 8, or 9. Narrower bandwidth setting and lower SF setting allow MeshCore's radio signals to fit between interference in the ISM band, provide for a lower noise floor, better SNR, and faster transmissions. -If you have consensus from your community in your region to update your region's preset recommendation, please post your update request on the [#meshcore-app](https://discord.com/channels/1343693475589263471/1391681655911088241) channel on the [MeshCore Discord server ](https://discord.gg/cYtQNYCCRK) to let Liam Cottle know. +If you have consensus from your community in your region to update your region's preset recommendation, please post your update request on the [#meshcore-app](https://discord.com/channels/1343693475589263471/1391681655911088241) channel on the [MeshCore Discord server ](https://meshcore.gg) to let Liam Cottle know. @@ -526,7 +526,7 @@ The third character is the capital letter 'O', not zero `0` - Firmware repo: https://github.com/meshcore-dev/MeshCore ### 5.8. Q: How can I support MeshCore? -**A:** Provide your honest feedback on GitHub and on [MeshCore Discord server](https://discord.gg/BMwCtwHj5V). Spread the word of MeshCore to your friends and communities; help them get started with MeshCore. Support Scott's MeshCore development at . +**A:** Provide your honest feedback on GitHub and on [MeshCore Discord server](https://meshcore.gg). Spread the word of MeshCore to your friends and communities; help them get started with MeshCore. Support Scott's MeshCore development at . Support Liam Cottle's smartphone client development by unlocking the server administration wait gate with in-app purchase diff --git a/docs/number_allocations.md b/docs/number_allocations.md index 94ad1efda..c4715c5eb 100644 --- a/docs/number_allocations.md +++ b/docs/number_allocations.md @@ -15,6 +15,7 @@ Once you have a working app/project, you need to be able to demonstrate it exist | Data-Type range | App name | Contact | |-----------------|-----------------------------|------------------------------------------------------| | 0000 - 00FF | -reserved for internal use- | | +| 0100 | MeshCore Open | zsylvester@monitormx.com — https://github.com/zjs81/meshcore-open | | FF00 - FFFF | -reserved for testing/dev- | | (add rows, inside the range 0100 - FEFF for custom apps) diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index 94a8ee3ef..49c75a5b8 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/examples/companion_radio/ui-new/UITask.cpp @@ -57,13 +57,21 @@ public: int logoWidth = 128; display.drawXbm((display.width() - logoWidth) / 2, 3, meshcore_logo, logoWidth, 13); + // meshcore website + const char* website = "https://meshcore.io"; + display.setColor(DisplayDriver::LIGHT); + display.setTextSize(1); + uint16_t websiteWidth = display.getTextWidth(website); + display.setCursor((display.width() - websiteWidth) / 2, 22); + display.print(website); + // version info display.setColor(DisplayDriver::LIGHT); - display.setTextSize(2); - display.drawTextCentered(display.width()/2, 22, _version_info); + display.setTextSize(1); + display.drawTextCentered(display.width()/2, 35, _version_info); display.setTextSize(1); - display.drawTextCentered(display.width()/2, 42, FIRMWARE_BUILD_DATE); + display.drawTextCentered(display.width()/2, 48, FIRMWARE_BUILD_DATE); return 1000; } @@ -146,7 +154,7 @@ class HomeScreen : public UIScreen { bool sensors_scroll = false; int sensors_scroll_offset = 0; int next_sensors_refresh = 0; - + void refresh_sensors() { if (millis() > next_sensors_refresh) { sensors_lpp.reset(); @@ -170,7 +178,7 @@ class HomeScreen : public UIScreen { public: HomeScreen(UITask* task, mesh::RTCClock* rtc, SensorManager* sensors, NodePrefs* node_prefs) - : _task(task), _rtc(rtc), _sensors(sensors), _node_prefs(node_prefs), _page(0), + : _task(task), _rtc(rtc), _sensors(sensors), _node_prefs(node_prefs), _page(0), _shutdown_init(false), sensors_lpp(200) { } void poll() override { @@ -213,7 +221,7 @@ public: IPAddress ip = WiFi.localIP(); snprintf(tmp, sizeof(tmp), "IP: %d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); display.setTextSize(1); - display.drawTextCentered(display.width() / 2, 54, tmp); + display.drawTextCentered(display.width() / 2, 54, tmp); #endif if (_task->hasConnection()) { display.setColor(DisplayDriver::GREEN); @@ -241,10 +249,10 @@ public: } else { sprintf(tmp, "%dh", secs / (60*60)); } - + int timestamp_width = display.getTextWidth(tmp); int max_name_width = display.width() - timestamp_width - 1; - + char filtered_recent_name[sizeof(a->name)]; display.translateUTF8ToBlocks(filtered_recent_name, a->name, sizeof(filtered_recent_name)); display.drawTextEllipsized(0, y, max_name_width, filtered_recent_name); @@ -310,7 +318,7 @@ public: display.drawTextRightAlign(display.width()-1, y, buf); y = y + 12; display.drawTextLeftAlign(0, y, "pos"); - sprintf(buf, "%.4f %.4f", + sprintf(buf, "%.4f %.4f", nmea->getLatitude()/1000000., nmea->getLongitude()/1000000.); display.drawTextRightAlign(display.width()-1, y, buf); y = y + 12; @@ -741,7 +749,7 @@ void UITask::loop() { #endif #if defined(PIN_USER_BTN_ANA) if (abs(millis() - _analogue_pin_read_millis) > 10) { - ev = analog_btn.check(); + int ev = analog_btn.check(); if (ev == BUTTON_EVENT_CLICK) { c = checkDisplayOn(KEY_NEXT); } else if (ev == BUTTON_EVENT_LONG_PRESS) { @@ -878,7 +886,7 @@ bool UITask::getGPSState() { return !strcmp(_sensors->getSettingValue(i), "1"); } } - } + } return false; } diff --git a/examples/kiss_modem/main.cpp b/examples/kiss_modem/main.cpp index 350795929..bc7508a87 100644 --- a/examples/kiss_modem/main.cpp +++ b/examples/kiss_modem/main.cpp @@ -10,7 +10,10 @@ #include #elif defined(ESP32) #include +#else + #include #endif + #if defined(KISS_UART_RX) && defined(KISS_UART_TX) #include #endif @@ -29,7 +32,7 @@ void halt() { } void loadOrCreateIdentity() { -#if defined(NRF52_PLATFORM) +#if defined(NRF52_PLATFORM) || defined(STM32_PLATFORM) InternalFS.begin(); IdentityStore store(InternalFS, ""); #elif defined(ESP32) diff --git a/examples/simple_repeater/UITask.cpp b/examples/simple_repeater/UITask.cpp index acb463258..6a8514388 100644 --- a/examples/simple_repeater/UITask.cpp +++ b/examples/simple_repeater/UITask.cpp @@ -52,17 +52,25 @@ void UITask::renderCurrScreen() { int logoWidth = 128; _display->drawXbm((_display->width() - logoWidth) / 2, 3, meshcore_logo, logoWidth, 13); + // meshcore website + const char* website = "https://meshcore.io"; + _display->setColor(DisplayDriver::LIGHT); + _display->setTextSize(1); + uint16_t websiteWidth = _display->getTextWidth(website); + _display->setCursor((_display->width() - websiteWidth) / 2, 22); + _display->print(website); + // version info _display->setColor(DisplayDriver::LIGHT); _display->setTextSize(1); uint16_t versionWidth = _display->getTextWidth(_version_info); - _display->setCursor((_display->width() - versionWidth) / 2, 22); + _display->setCursor((_display->width() - versionWidth) / 2, 35); _display->print(_version_info); // node type const char* node_type = "< Repeater >"; uint16_t typeWidth = _display->getTextWidth(node_type); - _display->setCursor((_display->width() - typeWidth) / 2, 35); + _display->setCursor((_display->width() - typeWidth) / 2, 48); _display->print(node_type); } else { // home screen // node name diff --git a/examples/simple_room_server/UITask.cpp b/examples/simple_room_server/UITask.cpp index 42bc14d4a..640a1d2d1 100644 --- a/examples/simple_room_server/UITask.cpp +++ b/examples/simple_room_server/UITask.cpp @@ -52,17 +52,25 @@ void UITask::renderCurrScreen() { int logoWidth = 128; _display->drawXbm((_display->width() - logoWidth) / 2, 3, meshcore_logo, logoWidth, 13); + // meshcore website + const char* website = "https://meshcore.io"; + _display->setColor(DisplayDriver::LIGHT); + _display->setTextSize(1); + uint16_t websiteWidth = _display->getTextWidth(website); + _display->setCursor((_display->width() - websiteWidth) / 2, 22); + _display->print(website); + // version info _display->setColor(DisplayDriver::LIGHT); _display->setTextSize(1); uint16_t versionWidth = _display->getTextWidth(_version_info); - _display->setCursor((_display->width() - versionWidth) / 2, 22); + _display->setCursor((_display->width() - versionWidth) / 2, 35); _display->print(_version_info); // node type const char* node_type = "< Room Server >"; uint16_t typeWidth = _display->getTextWidth(node_type); - _display->setCursor((_display->width() - typeWidth) / 2, 35); + _display->setCursor((_display->width() - typeWidth) / 2, 48); _display->print(node_type); } else { // home screen // node name diff --git a/examples/simple_sensor/SensorMesh.h b/examples/simple_sensor/SensorMesh.h index ee5d5e025..424b16c17 100644 --- a/examples/simple_sensor/SensorMesh.h +++ b/examples/simple_sensor/SensorMesh.h @@ -34,11 +34,11 @@ #define PERM_RECV_ALERTS_HI (1 << 7) // high priority alerts #ifndef FIRMWARE_BUILD_DATE - #define FIRMWARE_BUILD_DATE "20 Mar 2026" + #define FIRMWARE_BUILD_DATE "19 Apr 2026" #endif #ifndef FIRMWARE_VERSION - #define FIRMWARE_VERSION "v1.14.1" + #define FIRMWARE_VERSION "v1.15.0" #endif #define FIRMWARE_ROLE "sensor" diff --git a/examples/simple_sensor/UITask.cpp b/examples/simple_sensor/UITask.cpp index 0e78fee00..757ea1dc6 100644 --- a/examples/simple_sensor/UITask.cpp +++ b/examples/simple_sensor/UITask.cpp @@ -52,17 +52,25 @@ void UITask::renderCurrScreen() { int logoWidth = 128; _display->drawXbm((_display->width() - logoWidth) / 2, 3, meshcore_logo, logoWidth, 13); + // meshcore website + const char* website = "https://meshcore.io"; + _display->setColor(DisplayDriver::LIGHT); + _display->setTextSize(1); + uint16_t websiteWidth = _display->getTextWidth(website); + _display->setCursor((_display->width() - websiteWidth) / 2, 22); + _display->print(website); + // version info _display->setColor(DisplayDriver::LIGHT); _display->setTextSize(1); uint16_t versionWidth = _display->getTextWidth(_version_info); - _display->setCursor((_display->width() - versionWidth) / 2, 22); + _display->setCursor((_display->width() - versionWidth) / 2, 35); _display->print(_version_info); // node type const char* node_type = "< Sensor >"; uint16_t typeWidth = _display->getTextWidth(node_type); - _display->setCursor((_display->width() - typeWidth) / 2, 35); + _display->setCursor((_display->width() - typeWidth) / 2, 48); _display->print(node_type); } else { // home screen // node name diff --git a/platformio.ini b/platformio.ini index 864e5e1ff..ba27abb9c 100644 --- a/platformio.ini +++ b/platformio.ini @@ -10,8 +10,8 @@ [platformio] extra_configs = - variants/*/platformio.ini - platformio.local.ini + variants/*/platformio.ini + platformio.local.ini [arduino_base] framework = arduino @@ -81,10 +81,11 @@ platform = https://github.com/pioarduino/platform-espressif32/releases/download/ extends = arduino_base platform = nordicnrf52 platform_packages = - framework-arduinoadafruitnrf52 @ 1.10700.0 -extra_scripts = - create-uf2.py - arch/nrf52/extra_scripts/patch_bluefruit.py + ; use internal fork that includes patch to ble stack to prevent firmware lockup during rapid connect/disconnect + ; https://github.com/meshcore-dev/MeshCore/pull/1177 + ; https://github.com/meshcore-dev/MeshCore/pull/1295 + framework-arduinoadafruitnrf52 @ https://github.com/meshcore-dev/Adafruit_nRF52_Arduino#d541301 +extra_scripts = create-uf2.py build_flags = ${arduino_base.build_flags} -D NRF52_PLATFORM -D LFS_NO_ASSERT=1 diff --git a/src/helpers/radiolib/CustomLLCC68Wrapper.h b/src/helpers/radiolib/CustomLLCC68Wrapper.h index fc0975cf6..793ba335b 100644 --- a/src/helpers/radiolib/CustomLLCC68Wrapper.h +++ b/src/helpers/radiolib/CustomLLCC68Wrapper.h @@ -20,6 +20,7 @@ public: int sf = ((CustomLLCC68 *)_radio)->spreadingFactor; return packetScoreInt(snr, sf, packet_len); } + uint8_t getSpreadingFactor() const override { return ((CustomLLCC68 *)_radio)->spreadingFactor; } void doResetAGC() override { sx126xResetAGC((SX126x *)_radio); } diff --git a/src/helpers/radiolib/CustomLR1110.h b/src/helpers/radiolib/CustomLR1110.h index 7c3685a11..4061c6b1a 100644 --- a/src/helpers/radiolib/CustomLR1110.h +++ b/src/helpers/radiolib/CustomLR1110.h @@ -36,4 +36,6 @@ class CustomLR1110 : public LR1110 { bool detected = ((irq & RADIOLIB_LR11X0_IRQ_SYNC_WORD_HEADER_VALID) || (irq & RADIOLIB_LR11X0_IRQ_PREAMBLE_DETECTED)); return detected; } + + uint8_t getSpreadingFactor() const { return spreadingFactor; } }; \ No newline at end of file diff --git a/src/helpers/radiolib/CustomLR1110Wrapper.h b/src/helpers/radiolib/CustomLR1110Wrapper.h index 42d364408..0445262b5 100644 --- a/src/helpers/radiolib/CustomLR1110Wrapper.h +++ b/src/helpers/radiolib/CustomLR1110Wrapper.h @@ -19,12 +19,14 @@ public: void onSendFinished() override { RadioLibWrapper::onSendFinished(); - _radio->setPreambleLength(16); // overcomes weird issues with small and big pkts + _radio->setPreambleLength(preambleLengthForSF(getSpreadingFactor())); // overcomes weird issues with small and big pkts } float getLastRSSI() const override { return ((CustomLR1110 *)_radio)->getRSSI(); } float getLastSNR() const override { return ((CustomLR1110 *)_radio)->getSNR(); } + uint8_t getSpreadingFactor() const override { return ((CustomLR1110 *)_radio)->getSpreadingFactor(); } + void setRxBoostedGainMode(bool en) override { ((CustomLR1110 *)_radio)->setRxBoostedGainMode(en); } diff --git a/src/helpers/radiolib/CustomSTM32WLxWrapper.h b/src/helpers/radiolib/CustomSTM32WLxWrapper.h index e3e520294..cccdc0437 100644 --- a/src/helpers/radiolib/CustomSTM32WLxWrapper.h +++ b/src/helpers/radiolib/CustomSTM32WLxWrapper.h @@ -21,6 +21,7 @@ public: int sf = ((CustomSTM32WLx *)_radio)->spreadingFactor; return packetScoreInt(snr, sf, packet_len); } + uint8_t getSpreadingFactor() const override { return ((CustomSTM32WLx *)_radio)->spreadingFactor; } void doResetAGC() override { sx126xResetAGC((SX126x *)_radio); } }; diff --git a/src/helpers/radiolib/CustomSX1262Wrapper.h b/src/helpers/radiolib/CustomSX1262Wrapper.h index 6499deb29..e13561a4a 100644 --- a/src/helpers/radiolib/CustomSX1262Wrapper.h +++ b/src/helpers/radiolib/CustomSX1262Wrapper.h @@ -24,6 +24,7 @@ public: int sf = ((CustomSX1262 *)_radio)->spreadingFactor; return packetScoreInt(snr, sf, packet_len); } + uint8_t getSpreadingFactor() const override { return ((CustomSX1262 *)_radio)->spreadingFactor; } virtual void powerOff() override { ((CustomSX1262 *)_radio)->sleep(false); } diff --git a/src/helpers/radiolib/CustomSX1268Wrapper.h b/src/helpers/radiolib/CustomSX1268Wrapper.h index 54c37ee8a..f24ab41ca 100644 --- a/src/helpers/radiolib/CustomSX1268Wrapper.h +++ b/src/helpers/radiolib/CustomSX1268Wrapper.h @@ -24,6 +24,7 @@ public: int sf = ((CustomSX1268 *)_radio)->spreadingFactor; return packetScoreInt(snr, sf, packet_len); } + uint8_t getSpreadingFactor() const override { return ((CustomSX1268 *)_radio)->spreadingFactor; } void doResetAGC() override { sx126xResetAGC((SX126x *)_radio); } diff --git a/src/helpers/radiolib/CustomSX1276Wrapper.h b/src/helpers/radiolib/CustomSX1276Wrapper.h index 5cde72f75..afe2cc044 100644 --- a/src/helpers/radiolib/CustomSX1276Wrapper.h +++ b/src/helpers/radiolib/CustomSX1276Wrapper.h @@ -23,4 +23,5 @@ public: int sf = ((CustomSX1276 *)_radio)->spreadingFactor; return packetScoreInt(snr, sf, packet_len); } + uint8_t getSpreadingFactor() const override { return ((CustomSX1276 *)_radio)->spreadingFactor; } }; diff --git a/src/helpers/radiolib/RadioLibWrappers.cpp b/src/helpers/radiolib/RadioLibWrappers.cpp index 2216ca8f3..85f3a935d 100644 --- a/src/helpers/radiolib/RadioLibWrappers.cpp +++ b/src/helpers/radiolib/RadioLibWrappers.cpp @@ -26,6 +26,8 @@ void setFlag(void) { void RadioLibWrapper::begin() { _radio->setPacketReceivedAction(setFlag); // this is also SentComplete interrupt + _preamble_sf = getSpreadingFactor(); + _radio->setPreambleLength(preambleLengthForSF(_preamble_sf)); // longer preamble for lower SF improves reliability state = STATE_IDLE; if (_board->getStartupReason() == BD_STARTUP_RX_PACKET) { // received a LoRa packet (while in deep sleep) diff --git a/src/helpers/radiolib/RadioLibWrappers.h b/src/helpers/radiolib/RadioLibWrappers.h index a42e060a4..ff951aaa4 100644 --- a/src/helpers/radiolib/RadioLibWrappers.h +++ b/src/helpers/radiolib/RadioLibWrappers.h @@ -11,6 +11,7 @@ protected: int16_t _noise_floor, _threshold; uint16_t _num_floor_samples; int32_t _floor_sample_sum; + uint8_t _preamble_sf; void idle(); void startRecv(); @@ -19,7 +20,7 @@ protected: virtual void doResetAGC(); public: - RadioLibWrapper(PhysicalLayer& radio, mesh::MainBoard& board) : _radio(&radio), _board(&board) { n_recv = n_sent = 0; } + RadioLibWrapper(PhysicalLayer& radio, mesh::MainBoard& board) : _radio(&radio), _board(&board), _preamble_sf(0) { n_recv = n_sent = 0; } void begin() override; virtual void powerOff() { _radio->sleep(); } @@ -38,6 +39,9 @@ public: } virtual float getCurrentRSSI() =0; + virtual uint8_t getSpreadingFactor() const { return LORA_SF; } + static uint16_t preambleLengthForSF(uint8_t sf) { return sf <= 8 ? 32 : 16; } + void updatePreamble(uint8_t sf) { _preamble_sf = sf; _radio->setPreambleLength(preambleLengthForSF(sf)); } int getNoiseFloor() const override { return _noise_floor; } void triggerNoiseFloorCalibrate(int threshold) override; diff --git a/variants/ebyte_eora_s3/platformio.ini b/variants/ebyte_eora_s3/platformio.ini index d807b9782..15fe761ba 100644 --- a/variants/ebyte_eora_s3/platformio.ini +++ b/variants/ebyte_eora_s3/platformio.ini @@ -135,3 +135,8 @@ build_src_filter = ${Ebyte_EoRa-S3.build_src_filter} lib_deps = ${Ebyte_EoRa-S3.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:Ebyte_EoRa-S3_kiss_modem] +extends = Ebyte_EoRa-S3 +build_src_filter = ${Ebyte_EoRa-S3.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/ebyte_eora_s3/target.cpp b/variants/ebyte_eora_s3/target.cpp index 501f560be..9e656cc2d 100644 --- a/variants/ebyte_eora_s3/target.cpp +++ b/variants/ebyte_eora_s3/target.cpp @@ -73,6 +73,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/gat562_30s_mesh_kit/platformio.ini b/variants/gat562_30s_mesh_kit/platformio.ini index 1467f0fa3..2baac2561 100644 --- a/variants/gat562_30s_mesh_kit/platformio.ini +++ b/variants/gat562_30s_mesh_kit/platformio.ini @@ -112,3 +112,7 @@ lib_deps = densaugeo/base64 @ ~1.4.0 end2endzone/NonBlockingRTTTL@^1.3.0 +[env:GAT562_30S_Mesh_Kit_kiss_modem] +extends = GAT562_30S_Mesh_Kit +build_src_filter = ${GAT562_30S_Mesh_Kit.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/gat562_mesh_evb_pro/platformio.ini b/variants/gat562_mesh_evb_pro/platformio.ini index cede9c97c..b3e894174 100644 --- a/variants/gat562_mesh_evb_pro/platformio.ini +++ b/variants/gat562_mesh_evb_pro/platformio.ini @@ -50,3 +50,8 @@ build_flags = ; -D MESH_DEBUG=1 build_src_filter = ${GAT562_Mesh_EVB_Pro.build_src_filter} +<../examples/simple_room_server> + +[env:GAT562_Mesh_EVB_Pro_kiss_modem] +extends = GAT562_Mesh_EVB_Pro +build_src_filter = ${GAT562_Mesh_EVB_Pro.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/gat562_mesh_tracker_pro/platformio.ini b/variants/gat562_mesh_tracker_pro/platformio.ini index 8a947bce7..af153b8fc 100644 --- a/variants/gat562_mesh_tracker_pro/platformio.ini +++ b/variants/gat562_mesh_tracker_pro/platformio.ini @@ -106,3 +106,7 @@ lib_deps = ${GAT562_Mesh_Tracker_Pro.lib_deps} densaugeo/base64 @ ~1.4.0 +[env:GAT562_Mesh_Tracker_Pro_kiss_modem] +extends = GAT562_Mesh_Tracker_Pro +build_src_filter = ${GAT562_Mesh_Tracker_Pro.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/gat562_mesh_watch13/platformio.ini b/variants/gat562_mesh_watch13/platformio.ini index ef30829d5..f3510b74a 100644 --- a/variants/gat562_mesh_watch13/platformio.ini +++ b/variants/gat562_mesh_watch13/platformio.ini @@ -87,3 +87,7 @@ lib_deps = ${GAT562_Mesh_Watch13.lib_deps} densaugeo/base64 @ ~1.4.0 +[env:GAT562_Mesh_Watch13_kiss_modem] +extends = GAT562_Mesh_Watch13 +build_src_filter = ${GAT562_Mesh_Watch13.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/generic-e22/platformio.ini b/variants/generic-e22/platformio.ini index 6b7bfd4ea..dfa2ff641 100644 --- a/variants/generic-e22/platformio.ini +++ b/variants/generic-e22/platformio.ini @@ -95,6 +95,11 @@ lib_deps = ${Generic_E22.lib_deps} ${esp32_ota.lib_deps} +[env:Generic_E22_kiss_modem] +extends = Generic_E22 +build_src_filter = ${Generic_E22.build_src_filter} + +<../examples/kiss_modem/> + [env:Generic_E22_sx1268_repeater] extends = Generic_E22 build_src_filter = ${Generic_E22.build_src_filter} diff --git a/variants/generic-e22/target.cpp b/variants/generic-e22/target.cpp index d4169b09b..ea9664fd5 100644 --- a/variants/generic-e22/target.cpp +++ b/variants/generic-e22/target.cpp @@ -36,6 +36,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_ct62/platformio.ini b/variants/heltec_ct62/platformio.ini index 910385ecd..0179d9658 100644 --- a/variants/heltec_ct62/platformio.ini +++ b/variants/heltec_ct62/platformio.ini @@ -150,3 +150,8 @@ build_src_filter = ${Heltec_ct62.build_src_filter} lib_deps = ${Heltec_ct62.lib_deps} ${esp32_ota.lib_deps} + +[env:Heltec_ct62_kiss_modem] +extends = Heltec_ct62 +build_src_filter = ${Heltec_ct62.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_ct62/target.cpp b/variants/heltec_ct62/target.cpp index 0d5e1b121..cd8bd5076 100644 --- a/variants/heltec_ct62/target.cpp +++ b/variants/heltec_ct62/target.cpp @@ -25,6 +25,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_e213/platformio.ini b/variants/heltec_e213/platformio.ini index 395e22ea5..123edd91c 100644 --- a/variants/heltec_e213/platformio.ini +++ b/variants/heltec_e213/platformio.ini @@ -166,3 +166,8 @@ lib_deps = ${Heltec_E213_base.lib_deps} ${esp32_ota.lib_deps} bakercp/CRC32 @ ^2.0.0 + +[env:Heltec_E213_kiss_modem] +extends = Heltec_E213_base +build_src_filter = ${Heltec_E213_base.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_e213/target.cpp b/variants/heltec_e213/target.cpp index 69c832fc6..859cd9fa8 100644 --- a/variants/heltec_e213/target.cpp +++ b/variants/heltec_e213/target.cpp @@ -42,6 +42,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_e290/platformio.ini b/variants/heltec_e290/platformio.ini index 475ae8680..6e0eaffc4 100644 --- a/variants/heltec_e290/platformio.ini +++ b/variants/heltec_e290/platformio.ini @@ -162,3 +162,8 @@ lib_deps = ${Heltec_E290_base.lib_deps} ${esp32_ota.lib_deps} bakercp/CRC32 @ ^2.0.0 + +[env:Heltec_E290_kiss_modem] +extends = Heltec_E290_base +build_src_filter = ${Heltec_E290_base.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_e290/target.cpp b/variants/heltec_e290/target.cpp index c2220b159..8196ff7d5 100644 --- a/variants/heltec_e290/target.cpp +++ b/variants/heltec_e290/target.cpp @@ -42,6 +42,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_mesh_solar/platformio.ini b/variants/heltec_mesh_solar/platformio.ini index 7bfbac85a..92d641a35 100644 --- a/variants/heltec_mesh_solar/platformio.ini +++ b/variants/heltec_mesh_solar/platformio.ini @@ -92,4 +92,9 @@ build_src_filter = ${Heltec_mesh_solar.build_src_filter} +<../examples/companion_radio/*.cpp> lib_deps = ${Heltec_mesh_solar.lib_deps} - densaugeo/base64 @ ~1.4.0 \ No newline at end of file + densaugeo/base64 @ ~1.4.0 + +[env:Heltec_mesh_solar_kiss_modem] +extends = Heltec_mesh_solar +build_src_filter = ${Heltec_mesh_solar.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_mesh_solar/target.cpp b/variants/heltec_mesh_solar/target.cpp index 1ea33e1f2..08d29e154 100644 --- a/variants/heltec_mesh_solar/target.cpp +++ b/variants/heltec_mesh_solar/target.cpp @@ -32,6 +32,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_t096/LoRaFEMControl.h b/variants/heltec_t096/LoRaFEMControl.h index fe61b7e44..2c50b7428 100644 --- a/variants/heltec_t096/LoRaFEMControl.h +++ b/variants/heltec_t096/LoRaFEMControl.h @@ -16,6 +16,6 @@ class LoRaFEMControl void setLnaCanControl(bool can_control) { lna_can_control = can_control; } private: - bool lna_enabled = true; + bool lna_enabled = false; bool lna_can_control = false; }; diff --git a/variants/heltec_t096/platformio.ini b/variants/heltec_t096/platformio.ini index 19b05f3ce..14155f5ea 100644 --- a/variants/heltec_t096/platformio.ini +++ b/variants/heltec_t096/platformio.ini @@ -92,7 +92,7 @@ build_src_filter = ${Heltec_t096.build_src_filter} [env:Heltec_t096_room_server] extends = Heltec_t096 build_src_filter = ${Heltec_t096.build_src_filter} - +<../examples/simple_room_server> + +<../examples/simple_room_server> build_flags = ${Heltec_t096.build_flags} -D ADVERT_NAME='"Heltec_t096 Room"' @@ -145,4 +145,9 @@ build_src_filter = ${Heltec_t096.build_src_filter} +<../examples/companion_radio/ui-new/*.cpp> lib_deps = ${Heltec_t096.lib_deps} - densaugeo/base64 @ ~1.4.0 \ No newline at end of file + densaugeo/base64 @ ~1.4.0 + +[env:Heltec_t096_kiss_modem] +extends = Heltec_t096 +build_src_filter = ${Heltec_t096.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_t114/platformio.ini b/variants/heltec_t114/platformio.ini index b985030f7..135babb1a 100644 --- a/variants/heltec_t114/platformio.ini +++ b/variants/heltec_t114/platformio.ini @@ -50,7 +50,6 @@ upload_protocol = nrfutil extends = Heltec_t114 build_src_filter = ${Heltec_t114.build_src_filter} +<../examples/simple_repeater> - build_flags = ${Heltec_t114.build_flags} -D ADVERT_NAME='"Heltec_T114 Repeater"' @@ -127,10 +126,6 @@ build_flags = -D DISPLAY_CLASS=NullDisplayDriver -D MAX_CONTACTS=350 -D MAX_GROUP_CHANNELS=40 -; -D BLE_PIN_CODE=123456 -; -D BLE_DEBUG_LOGGING=1 -; -D MESH_PACKET_LOGGING=1 -; -D MESH_DEBUG=1 build_src_filter = ${Heltec_t114.build_src_filter} + +<../examples/companion_radio/*.cpp> @@ -251,4 +246,9 @@ build_src_filter = ${Heltec_t114_with_display.build_src_filter} +<../examples/companion_radio/ui-new/*.cpp> lib_deps = ${Heltec_t114_with_display.lib_deps} - densaugeo/base64 @ ~1.4.0 \ No newline at end of file + densaugeo/base64 @ ~1.4.0 + +[env:Heltec_t114_kiss_modem] +extends = Heltec_t114 +build_src_filter = ${Heltec_t114.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_t114/target.cpp b/variants/heltec_t114/target.cpp index 6a30a4d18..365871779 100644 --- a/variants/heltec_t114/target.cpp +++ b/variants/heltec_t114/target.cpp @@ -52,6 +52,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_t190/platformio.ini b/variants/heltec_t190/platformio.ini index 4b0340328..411fee851 100644 --- a/variants/heltec_t190/platformio.ini +++ b/variants/heltec_t190/platformio.ini @@ -153,3 +153,8 @@ build_src_filter = ${Heltec_T190_base.build_src_filter} lib_deps = ${Heltec_T190_base.lib_deps} ${esp32_ota.lib_deps} + +[env:Heltec_T190_kiss_modem] +extends = Heltec_T190_base +build_src_filter = ${Heltec_T190_base.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_t190/target.cpp b/variants/heltec_t190/target.cpp index d22f8b8cf..c39ca35c5 100644 --- a/variants/heltec_t190/target.cpp +++ b/variants/heltec_t190/target.cpp @@ -42,6 +42,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_tracker/platformio.ini b/variants/heltec_tracker/platformio.ini index e0a8f5fab..69293d707 100644 --- a/variants/heltec_tracker/platformio.ini +++ b/variants/heltec_tracker/platformio.ini @@ -186,3 +186,8 @@ build_src_filter = ${Heltec_tracker_base.build_src_filter} lib_deps = ${Heltec_tracker_base.lib_deps} ${esp32_ota.lib_deps} + +[env:Heltec_Wireless_Tracker_kiss_modem] +extends = Heltec_tracker_base +build_src_filter = ${Heltec_tracker_base.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_tracker/target.cpp b/variants/heltec_tracker/target.cpp index f801bacb9..95cd9c9b8 100644 --- a/variants/heltec_tracker/target.cpp +++ b/variants/heltec_tracker/target.cpp @@ -46,6 +46,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_tracker_v2/LoRaFEMControl.h b/variants/heltec_tracker_v2/LoRaFEMControl.h index fe61b7e44..2c50b7428 100644 --- a/variants/heltec_tracker_v2/LoRaFEMControl.h +++ b/variants/heltec_tracker_v2/LoRaFEMControl.h @@ -16,6 +16,6 @@ class LoRaFEMControl void setLnaCanControl(bool can_control) { lna_can_control = can_control; } private: - bool lna_enabled = true; + bool lna_enabled = false; bool lna_can_control = false; }; diff --git a/variants/heltec_tracker_v2/platformio.ini b/variants/heltec_tracker_v2/platformio.ini index 956b1ec77..d57c2113f 100644 --- a/variants/heltec_tracker_v2/platformio.ini +++ b/variants/heltec_tracker_v2/platformio.ini @@ -187,7 +187,7 @@ build_flags = -D WIFI_DEBUG_LOGGING=1 -D WIFI_SSID='"myssid"' -D WIFI_PWD='"mypwd"' - -D OFFLINE_QUEUE_SIZE=256 + -D OFFLINE_QUEUE_SIZE=256 ; -D MESH_PACKET_LOGGING=1 ; -D MESH_DEBUG=1 build_src_filter = ${Heltec_tracker_v2.build_src_filter} @@ -217,3 +217,8 @@ build_src_filter = ${Heltec_tracker_v2.build_src_filter} lib_deps = ${Heltec_tracker_v2.lib_deps} ${esp32_ota.lib_deps} + +[env:heltec_tracker_v2_kiss_modem] +extends = Heltec_tracker_v2 +build_src_filter = ${Heltec_tracker_v2.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_tracker_v2/target.cpp b/variants/heltec_tracker_v2/target.cpp index a5aecabe8..6de866fbc 100644 --- a/variants/heltec_tracker_v2/target.cpp +++ b/variants/heltec_tracker_v2/target.cpp @@ -48,6 +48,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_v2/platformio.ini b/variants/heltec_v2/platformio.ini index 99f6f7e13..c103dd8d5 100644 --- a/variants/heltec_v2/platformio.ini +++ b/variants/heltec_v2/platformio.ini @@ -195,3 +195,8 @@ build_src_filter = ${Heltec_lora32_v2.build_src_filter} lib_deps = ${Heltec_lora32_v2.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:Heltec_v2_kiss_modem] +extends = Heltec_lora32_v2 +build_src_filter = ${Heltec_lora32_v2.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_v2/target.cpp b/variants/heltec_v2/target.cpp index 2dfb4c6e1..d327d78b5 100644 --- a/variants/heltec_v2/target.cpp +++ b/variants/heltec_v2/target.cpp @@ -41,6 +41,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_v3/platformio.ini b/variants/heltec_v3/platformio.ini index 803ee683e..a70a93a50 100644 --- a/variants/heltec_v3/platformio.ini +++ b/variants/heltec_v3/platformio.ini @@ -371,9 +371,5 @@ lib_deps = [env:Heltec_v3_kiss_modem] extends = Heltec_lora32_v3 -build_flags = - ${Heltec_lora32_v3.build_flags} build_src_filter = ${Heltec_lora32_v3.build_src_filter} +<../examples/kiss_modem/> -lib_deps = - ${Heltec_lora32_v3.lib_deps} \ No newline at end of file diff --git a/variants/heltec_v3/target.cpp b/variants/heltec_v3/target.cpp index 207962f34..563568336 100644 --- a/variants/heltec_v3/target.cpp +++ b/variants/heltec_v3/target.cpp @@ -48,6 +48,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_v4/LoRaFEMControl.h b/variants/heltec_v4/LoRaFEMControl.h index 754529650..13225bd56 100644 --- a/variants/heltec_v4/LoRaFEMControl.h +++ b/variants/heltec_v4/LoRaFEMControl.h @@ -23,7 +23,7 @@ class LoRaFEMControl LoRaFEMType getFEMType(void) const { return fem_type; } private: LoRaFEMType fem_type=OTHER_FEM_TYPES; - bool lna_enabled=true; + bool lna_enabled=false; bool lna_can_control=false; }; diff --git a/variants/heltec_v4/platformio.ini b/variants/heltec_v4/platformio.ini index 87632f32e..fabf38272 100644 --- a/variants/heltec_v4/platformio.ini +++ b/variants/heltec_v4/platformio.ini @@ -429,3 +429,8 @@ build_src_filter = ${heltec_v4_tft.build_src_filter} lib_deps = ${heltec_v4_tft.lib_deps} ${esp32_ota.lib_deps} + +[env:heltec_v4_kiss_modem] +extends = Heltec_lora32_v4 +build_src_filter = ${Heltec_lora32_v4.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_v4/target.cpp b/variants/heltec_v4/target.cpp index d9f53596b..e0b6a1d45 100644 --- a/variants/heltec_v4/target.cpp +++ b/variants/heltec_v4/target.cpp @@ -48,6 +48,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/heltec_wireless_paper/platformio.ini b/variants/heltec_wireless_paper/platformio.ini index c6fe657d4..48723d169 100644 --- a/variants/heltec_wireless_paper/platformio.ini +++ b/variants/heltec_wireless_paper/platformio.ini @@ -165,3 +165,8 @@ lib_deps = ${Heltec_Wireless_Paper_base.lib_deps} ${esp32_ota.lib_deps} bakercp/CRC32 @ ^2.0.0 + +[env:Heltec_Wireless_Paper_kiss_modem] +extends = Heltec_Wireless_Paper_base +build_src_filter = ${Heltec_Wireless_Paper_base.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/heltec_wireless_paper/target.cpp b/variants/heltec_wireless_paper/target.cpp index 83e73332c..52ef9fb59 100644 --- a/variants/heltec_wireless_paper/target.cpp +++ b/variants/heltec_wireless_paper/target.cpp @@ -41,6 +41,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/ikoka_handheld_nrf/platformio.ini b/variants/ikoka_handheld_nrf/platformio.ini index 9f48cd41d..51b602e40 100644 --- a/variants/ikoka_handheld_nrf/platformio.ini +++ b/variants/ikoka_handheld_nrf/platformio.ini @@ -86,8 +86,7 @@ build_src_filter = ${ikoka_handheld_nrf_ssd1306_companion.build_src_filter} [env:ikoka_handheld_nrf_e22_30dbm_repeater] extends = ikoka_handheld_nrf -build_flags = - ${ikoka_handheld_nrf.build_flags} +build_flags = ${ikoka_handheld_nrf.build_flags} -D ADVERT_NAME='"ikoka_handheld Repeater"' -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 @@ -99,8 +98,7 @@ build_src_filter = ${ikoka_handheld_nrf.build_src_filter} [env:ikoka_handheld_nrf_e22_30dbm_room_server] extends = ikoka_handheld_nrf -build_flags = - ${ikoka_handheld_nrf.build_flags} +build_flags = ${ikoka_handheld_nrf.build_flags} -D ADVERT_NAME='"ikoka_handheld Room"' -D ADVERT_LAT=0.0 -D ADVERT_LON=0.0 @@ -108,3 +106,10 @@ build_flags = -D LORA_TX_POWER=20 build_src_filter = ${ikoka_handheld_nrf.build_src_filter} +<../examples/simple_room_server/*.cpp> + +[env:ikoka_handheld_nrf_kiss_modem] +extends = ikoka_handheld_nrf +build_flags = ${ikoka_handheld_nrf.build_flags} + -D LORA_TX_POWER=20 +build_src_filter = ${ikoka_handheld_nrf.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/ikoka_handheld_nrf/target.cpp b/variants/ikoka_handheld_nrf/target.cpp index f1d00f89f..e23fd8d81 100644 --- a/variants/ikoka_handheld_nrf/target.cpp +++ b/variants/ikoka_handheld_nrf/target.cpp @@ -34,6 +34,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/ikoka_nano_nrf/platformio.ini b/variants/ikoka_nano_nrf/platformio.ini index d631174d9..e72f83ce0 100644 --- a/variants/ikoka_nano_nrf/platformio.ini +++ b/variants/ikoka_nano_nrf/platformio.ini @@ -279,3 +279,18 @@ build_flags = build_src_filter = ${ikoka_nano_nrf_room_server.build_src_filter} ${ikoka_nano_nrf_e22_33dbm.build_src_filter} + +[env:ikoka_nano_nrf_22dbm_kiss_modem] +extends = ikoka_nano_nrf_e22_22dbm +build_src_filter = ${ikoka_nano_nrf_e22_22dbm.build_src_filter} + +<../examples/kiss_modem/> + +[env:ikoka_nano_nrf_30dbm_kiss_modem] +extends = ikoka_nano_nrf_e22_30dbm +build_src_filter = ${ikoka_nano_nrf_e22_30dbm.build_src_filter} + +<../examples/kiss_modem/> + +[env:ikoka_nano_nrf_33dbm_kiss_modem] +extends = ikoka_nano_nrf_e22_33dbm +build_src_filter = ${ikoka_nano_nrf_e22_33dbm.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/ikoka_nano_nrf/target.cpp b/variants/ikoka_nano_nrf/target.cpp index c66bb23f3..00294d5a1 100644 --- a/variants/ikoka_nano_nrf/target.cpp +++ b/variants/ikoka_nano_nrf/target.cpp @@ -32,6 +32,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/ikoka_stick_nrf/platformio.ini b/variants/ikoka_stick_nrf/platformio.ini index e95c63750..06e39e84c 100644 --- a/variants/ikoka_stick_nrf/platformio.ini +++ b/variants/ikoka_stick_nrf/platformio.ini @@ -290,3 +290,18 @@ build_flags = build_src_filter = ${ikoka_stick_nrf_room_server.build_src_filter} ${ikoka_stick_nrf_e22_33dbm.build_src_filter} + +[env:ikoka_stick_nrf_22dbm_kiss_modem] +extends = ikoka_stick_nrf_e22_22dbm +build_src_filter = ${ikoka_stick_nrf_e22_22dbm.build_src_filter} + +<../examples/kiss_modem/> + +[env:ikoka_stick_nrf_30dbm_kiss_modem] +extends = ikoka_stick_nrf_e22_30dbm +build_src_filter = ${ikoka_stick_nrf_e22_30dbm.build_src_filter} + +<../examples/kiss_modem/> + +[env:ikoka_stick_nrf_33dbm_kiss_modem] +extends = ikoka_stick_nrf_e22_33dbm +build_src_filter = ${ikoka_stick_nrf_e22_33dbm.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/ikoka_stick_nrf/target.cpp b/variants/ikoka_stick_nrf/target.cpp index d9eab82e3..d07dc3451 100644 --- a/variants/ikoka_stick_nrf/target.cpp +++ b/variants/ikoka_stick_nrf/target.cpp @@ -32,6 +32,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/keepteen_lt1/platformio.ini b/variants/keepteen_lt1/platformio.ini index b82ceb7ea..27cf809e0 100644 --- a/variants/keepteen_lt1/platformio.ini +++ b/variants/keepteen_lt1/platformio.ini @@ -17,7 +17,7 @@ build_src_filter = ${nrf52_base.build_src_filter} + +<../variants/keepteen_lt1> lib_deps= ${nrf52_base.lib_deps} - adafruit/Adafruit SSD1306 @ ^2.5.13 + adafruit/Adafruit SSD1306 @ ^2.5.13 stevemarple/MicroNMEA @ ^2.0.6 [env:KeepteenLT1_repeater] @@ -99,4 +99,9 @@ build_src_filter = ${KeepteenLT1.build_src_filter} +<../examples/companion_radio/ui-new/*.cpp> lib_deps = ${KeepteenLT1.lib_deps} adafruit/RTClib @ ^2.1.3 - densaugeo/base64 @ ~1.4.0 \ No newline at end of file + densaugeo/base64 @ ~1.4.0 + +[env:KeepteenLT1_kiss_modem] +extends = KeepteenLT1 +build_src_filter = ${KeepteenLT1.build_src_filter} + +<../examples/kiss_modem/> \ No newline at end of file diff --git a/variants/keepteen_lt1/target.cpp b/variants/keepteen_lt1/target.cpp index 762419c35..71652b378 100644 --- a/variants/keepteen_lt1/target.cpp +++ b/variants/keepteen_lt1/target.cpp @@ -38,6 +38,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_t3s3/platformio.ini b/variants/lilygo_t3s3/platformio.ini index 1fefceceb..54990117c 100644 --- a/variants/lilygo_t3s3/platformio.ini +++ b/variants/lilygo_t3s3/platformio.ini @@ -173,3 +173,8 @@ build_src_filter = ${LilyGo_T3S3_sx1262.build_src_filter} lib_deps = ${LilyGo_T3S3_sx1262.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:LilyGo_T3S3_sx1262_kiss_modem] +extends = LilyGo_T3S3_sx1262 +build_src_filter = ${LilyGo_T3S3_sx1262.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_t3s3/target.cpp b/variants/lilygo_t3s3/target.cpp index a6a243694..73c19e062 100644 --- a/variants/lilygo_t3s3/target.cpp +++ b/variants/lilygo_t3s3/target.cpp @@ -36,6 +36,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_t3s3_sx1276/platformio.ini b/variants/lilygo_t3s3_sx1276/platformio.ini index 5a7ece2cb..5df632020 100644 --- a/variants/lilygo_t3s3_sx1276/platformio.ini +++ b/variants/lilygo_t3s3_sx1276/platformio.ini @@ -168,4 +168,9 @@ build_src_filter = ${LilyGo_T3S3_sx1276.build_src_filter} +<../examples/companion_radio/ui-new/*.cpp> lib_deps = ${LilyGo_T3S3_sx1276.lib_deps} - densaugeo/base64 @ ~1.4.0 \ No newline at end of file + densaugeo/base64 @ ~1.4.0 + +[env:LilyGo_T3S3_sx1276_kiss_modem] +extends = LilyGo_T3S3_sx1276 +build_src_filter = ${LilyGo_T3S3_sx1276.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_t3s3_sx1276/target.cpp b/variants/lilygo_t3s3_sx1276/target.cpp index e7fe07a0c..a62724fbd 100644 --- a/variants/lilygo_t3s3_sx1276/target.cpp +++ b/variants/lilygo_t3s3_sx1276/target.cpp @@ -42,6 +42,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_tbeam_1w/platformio.ini b/variants/lilygo_tbeam_1w/platformio.ini index 7c8453077..c7a595520 100644 --- a/variants/lilygo_tbeam_1w/platformio.ini +++ b/variants/lilygo_tbeam_1w/platformio.ini @@ -192,3 +192,8 @@ build_src_filter = ${LilyGo_TBeam_1W.build_src_filter} lib_deps = ${LilyGo_TBeam_1W.lib_deps} ${esp32_ota.lib_deps} + +[env:LilyGo_TBeam_1W_kiss_modem] +extends = LilyGo_TBeam_1W +build_src_filter = ${LilyGo_TBeam_1W.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_tbeam_1w/target.cpp b/variants/lilygo_tbeam_1w/target.cpp index 17733deb8..b6a102573 100644 --- a/variants/lilygo_tbeam_1w/target.cpp +++ b/variants/lilygo_tbeam_1w/target.cpp @@ -52,6 +52,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_tbeam_SX1262/platformio.ini b/variants/lilygo_tbeam_SX1262/platformio.ini index d3bc7c997..77b39304a 100644 --- a/variants/lilygo_tbeam_SX1262/platformio.ini +++ b/variants/lilygo_tbeam_SX1262/platformio.ini @@ -133,3 +133,8 @@ build_src_filter = ${LilyGo_TBeam_SX1262.build_src_filter} lib_deps = ${LilyGo_TBeam_SX1262.lib_deps} ${esp32_ota.lib_deps} + +[env:Tbeam_SX1262_kiss_modem] +extends = LilyGo_TBeam_SX1262 +build_src_filter = ${LilyGo_TBeam_SX1262.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_tbeam_SX1262/target.cpp b/variants/lilygo_tbeam_SX1262/target.cpp index 91a1ed9b8..943dcd650 100644 --- a/variants/lilygo_tbeam_SX1262/target.cpp +++ b/variants/lilygo_tbeam_SX1262/target.cpp @@ -43,6 +43,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_tbeam_SX1276/platformio.ini b/variants/lilygo_tbeam_SX1276/platformio.ini index 3562c40e9..6853a232b 100644 --- a/variants/lilygo_tbeam_SX1276/platformio.ini +++ b/variants/lilygo_tbeam_SX1276/platformio.ini @@ -131,3 +131,8 @@ build_src_filter = ${LilyGo_TBeam_SX1276.build_src_filter} lib_deps = ${LilyGo_TBeam_SX1276.lib_deps} ${esp32_ota.lib_deps} + +[env:Tbeam_SX1276_kiss_modem] +extends = LilyGo_TBeam_SX1276 +build_src_filter = ${LilyGo_TBeam_SX1276.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_tbeam_SX1276/target.cpp b/variants/lilygo_tbeam_SX1276/target.cpp index 495337b8e..b6733a4f3 100644 --- a/variants/lilygo_tbeam_SX1276/target.cpp +++ b/variants/lilygo_tbeam_SX1276/target.cpp @@ -48,6 +48,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_tbeam_supreme_SX1262/platformio.ini b/variants/lilygo_tbeam_supreme_SX1262/platformio.ini index ffee37a96..845dd4150 100644 --- a/variants/lilygo_tbeam_supreme_SX1262/platformio.ini +++ b/variants/lilygo_tbeam_supreme_SX1262/platformio.ini @@ -158,3 +158,8 @@ build_src_filter = ${T_Beam_S3_Supreme_SX1262.build_src_filter} lib_deps = ${T_Beam_S3_Supreme_SX1262.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:T_Beam_S3_Supreme_SX1262_kiss_modem] +extends = T_Beam_S3_Supreme_SX1262 +build_src_filter = ${T_Beam_S3_Supreme_SX1262.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_tbeam_supreme_SX1262/target.cpp b/variants/lilygo_tbeam_supreme_SX1262/target.cpp index c2aa50872..bebd4ed01 100644 --- a/variants/lilygo_tbeam_supreme_SX1262/target.cpp +++ b/variants/lilygo_tbeam_supreme_SX1262/target.cpp @@ -40,6 +40,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_tdeck/platformio.ini b/variants/lilygo_tdeck/platformio.ini index a8408afa4..745d8ff53 100644 --- a/variants/lilygo_tdeck/platformio.ini +++ b/variants/lilygo_tdeck/platformio.ini @@ -57,6 +57,7 @@ build_flags = build_src_filter = ${esp32_base.build_src_filter} +<../variants/lilygo_tdeck> + + + lib_deps = ${esp32_base.lib_deps} ${sensor_base.lib_deps} @@ -75,7 +76,6 @@ build_src_filter = ${LilyGo_TDeck.build_src_filter} + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> - + lib_deps = ${LilyGo_TDeck.lib_deps} densaugeo/base64 @ ~1.4.0 @@ -94,7 +94,6 @@ build_src_filter = ${LilyGo_TDeck.build_src_filter} + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> - + lib_deps = ${LilyGo_TDeck.lib_deps} densaugeo/base64 @ ~1.4.0 @@ -113,4 +112,9 @@ build_src_filter = ${LilyGo_TDeck.build_src_filter} + lib_deps = ${LilyGo_TDeck.lib_deps} - ${esp32_ota.lib_deps} \ No newline at end of file + ${esp32_ota.lib_deps} + +[env:LilyGo_TDeck_kiss_modem] +extends = LilyGo_TDeck +build_src_filter = ${LilyGo_TDeck.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_tdeck/target.cpp b/variants/lilygo_tdeck/target.cpp index 32586a163..c78d29739 100644 --- a/variants/lilygo_tdeck/target.cpp +++ b/variants/lilygo_tdeck/target.cpp @@ -43,6 +43,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_techo/platformio.ini b/variants/lilygo_techo/platformio.ini index e2172b1da..5df77f95c 100644 --- a/variants/lilygo_techo/platformio.ini +++ b/variants/lilygo_techo/platformio.ini @@ -126,3 +126,8 @@ build_src_filter = ${LilyGo_T-Echo.build_src_filter} lib_deps = ${LilyGo_T-Echo.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:LilyGo_T-Echo_kiss_modem] +extends = LilyGo_T-Echo +build_src_filter = ${LilyGo_T-Echo.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_techo/target.cpp b/variants/lilygo_techo/target.cpp index 1dfa91641..1807621d6 100644 --- a/variants/lilygo_techo/target.cpp +++ b/variants/lilygo_techo/target.cpp @@ -40,6 +40,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_techo_lite/platformio.ini b/variants/lilygo_techo_lite/platformio.ini index 886168582..d3408f95a 100644 --- a/variants/lilygo_techo_lite/platformio.ini +++ b/variants/lilygo_techo_lite/platformio.ini @@ -140,3 +140,8 @@ build_src_filter = ${nrf52_base.build_src_filter} lib_deps = ${LilyGo_T-Echo-Lite.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:LilyGo_T-Echo-Lite_kiss_modem] +extends = LilyGo_T-Echo-Lite +build_src_filter = ${LilyGo_T-Echo-Lite.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_techo_lite/target.cpp b/variants/lilygo_techo_lite/target.cpp index dbb61b19a..7a602c6fb 100644 --- a/variants/lilygo_techo_lite/target.cpp +++ b/variants/lilygo_techo_lite/target.cpp @@ -39,6 +39,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_tlora_c6/platformio.ini b/variants/lilygo_tlora_c6/platformio.ini index b06a0b7cb..3acfa7615 100644 --- a/variants/lilygo_tlora_c6/platformio.ini +++ b/variants/lilygo_tlora_c6/platformio.ini @@ -84,3 +84,8 @@ build_src_filter = ${tlora_c6.build_src_filter} lib_deps = ${tlora_c6.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:LilyGo_Tlora_C6_kiss_modem] +extends = tlora_c6 +build_src_filter = ${tlora_c6.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_tlora_c6/target.cpp b/variants/lilygo_tlora_c6/target.cpp index a73c1c99e..1f6cf9c3d 100644 --- a/variants/lilygo_tlora_c6/target.cpp +++ b/variants/lilygo_tlora_c6/target.cpp @@ -36,6 +36,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/lilygo_tlora_v2_1/platformio.ini b/variants/lilygo_tlora_v2_1/platformio.ini index 3641f1270..f710d0700 100644 --- a/variants/lilygo_tlora_v2_1/platformio.ini +++ b/variants/lilygo_tlora_v2_1/platformio.ini @@ -192,3 +192,8 @@ build_flags = lib_deps = ${LilyGo_TLora_V2_1_1_6.lib_deps} ${esp32_ota.lib_deps} + +[env:LilyGo_TLora_V2_1_1_6_kiss_modem] +extends = LilyGo_TLora_V2_1_1_6 +build_src_filter = ${LilyGo_TLora_V2_1_1_6.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/lilygo_tlora_v2_1/target.cpp b/variants/lilygo_tlora_v2_1/target.cpp index a82c13391..81b1d74cb 100644 --- a/variants/lilygo_tlora_v2_1/target.cpp +++ b/variants/lilygo_tlora_v2_1/target.cpp @@ -37,6 +37,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/m5stack_unit_c6l/UnitC6LBoard.cpp b/variants/m5stack_unit_c6l/UnitC6LBoard.cpp index 08c766604..5a70e9794 100644 --- a/variants/m5stack_unit_c6l/UnitC6LBoard.cpp +++ b/variants/m5stack_unit_c6l/UnitC6LBoard.cpp @@ -37,6 +37,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(uint8_t dbm) { diff --git a/variants/m5stack_unit_c6l/platformio.ini b/variants/m5stack_unit_c6l/platformio.ini index 84c6562af..94083eb48 100644 --- a/variants/m5stack_unit_c6l/platformio.ini +++ b/variants/m5stack_unit_c6l/platformio.ini @@ -105,3 +105,8 @@ lib_deps = ${M5Stack_Unit_C6L.lib_deps} densaugeo/base64 @ ~1.4.0 end2endzone/NonBlockingRTTTL@^1.3.0 + +[env:M5Stack_Unit_C6L_kiss_modem] +extends = M5Stack_Unit_C6L +build_src_filter = ${M5Stack_Unit_C6L.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/mesh_pocket/platformio.ini b/variants/mesh_pocket/platformio.ini index 015c2ca4b..52a0d8352 100644 --- a/variants/mesh_pocket/platformio.ini +++ b/variants/mesh_pocket/platformio.ini @@ -109,4 +109,9 @@ build_src_filter = ${Mesh_pocket.build_src_filter} +<../examples/companion_radio/ui-new/*.cpp> lib_deps = ${Mesh_pocket.lib_deps} - densaugeo/base64 @ ~1.4.0 \ No newline at end of file + densaugeo/base64 @ ~1.4.0 + +[env:Mesh_pocket_kiss_modem] +extends = Mesh_pocket +build_src_filter = ${Mesh_pocket.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/mesh_pocket/target.cpp b/variants/mesh_pocket/target.cpp index 3ca714634..22f14e790 100644 --- a/variants/mesh_pocket/target.cpp +++ b/variants/mesh_pocket/target.cpp @@ -32,6 +32,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/meshadventurer/platformio.ini b/variants/meshadventurer/platformio.ini index 18b64ac32..2006a1801 100644 --- a/variants/meshadventurer/platformio.ini +++ b/variants/meshadventurer/platformio.ini @@ -29,6 +29,7 @@ build_flags = build_src_filter = ${esp32_base.build_src_filter} +<../variants/meshadventurer> + + + lib_deps = ${esp32_base.lib_deps} stevemarple/MicroNMEA @ ^2.0.6 @@ -38,7 +39,6 @@ lib_deps = extends = Meshadventurer build_src_filter = ${Meshadventurer.build_src_filter} +<../examples/simple_repeater> - + build_flags = ${Meshadventurer.build_flags} -D RADIO_CLASS=CustomSX1262 @@ -60,7 +60,6 @@ lib_deps = ; build_src_filter = ${Meshadventurer.build_src_filter} ; + ; +<../examples/simple_repeater> -; + ; build_flags = ; ${Meshadventurer.build_flags} ; -D RADIO_CLASS=CustomSX1262 @@ -86,7 +85,6 @@ extends = Meshadventurer build_src_filter = ${Meshadventurer.build_src_filter} + +<../examples/simple_repeater> - + build_flags = ${Meshadventurer.build_flags} -D RADIO_CLASS=CustomSX1262 @@ -109,7 +107,6 @@ lib_deps = extends = Meshadventurer build_src_filter = ${Meshadventurer.build_src_filter} +<../examples/simple_repeater> - + build_flags = ${Meshadventurer.build_flags} -D RADIO_CLASS=CustomSX1268 @@ -157,7 +154,6 @@ extends = Meshadventurer build_src_filter = ${Meshadventurer.build_src_filter} + +<../examples/simple_repeater> - + build_flags = ${Meshadventurer.build_flags} -D RADIO_CLASS=CustomSX1268 @@ -179,8 +175,6 @@ lib_deps = [env:Meshadventurer_sx1262_companion_radio_usb] extends = Meshadventurer build_src_filter = ${Meshadventurer.build_src_filter} - +<../examples/companion_radio/*.cpp> - + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> build_flags = @@ -200,9 +194,7 @@ lib_deps = [env:Meshadventurer_sx1262_companion_radio_ble] extends = Meshadventurer build_src_filter = ${Meshadventurer.build_src_filter} - +<../examples/companion_radio/*.cpp> + - + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> build_flags = @@ -235,7 +227,6 @@ build_flags = ; -D MESH_DEBUG=1 build_src_filter = ${Meshadventurer.build_src_filter} +<../examples/simple_secure_chat/main.cpp> - + lib_deps = ${Meshadventurer.lib_deps} densaugeo/base64 @ ~1.4.0 @@ -256,7 +247,6 @@ build_flags = ; -D MESH_DEBUG=1 build_src_filter = ${Meshadventurer.build_src_filter} +<../examples/simple_room_server> - + lib_deps = ${Meshadventurer.lib_deps} ${esp32_ota.lib_deps} @@ -264,8 +254,6 @@ lib_deps = [env:Meshadventurer_sx1268_companion_radio_usb] extends = Meshadventurer build_src_filter = ${Meshadventurer.build_src_filter} - +<../examples/companion_radio/*.cpp> - + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> build_flags = @@ -285,9 +273,7 @@ lib_deps = [env:Meshadventurer_sx1268_companion_radio_ble] extends = Meshadventurer build_src_filter = ${Meshadventurer.build_src_filter} - +<../examples/companion_radio/*.cpp> + - + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> build_flags = @@ -320,7 +306,6 @@ build_flags = ; -D MESH_DEBUG=1 build_src_filter = ${Meshadventurer.build_src_filter} +<../examples/simple_secure_chat/main.cpp> - + lib_deps = ${Meshadventurer.lib_deps} densaugeo/base64 @ ~1.4.0 @@ -341,7 +326,24 @@ build_flags = ; -D MESH_DEBUG=1 build_src_filter = ${Meshadventurer.build_src_filter} +<../examples/simple_room_server> - + lib_deps = ${Meshadventurer.lib_deps} - ${esp32_ota.lib_deps} \ No newline at end of file + ${esp32_ota.lib_deps} + +[env:Meshadventurer_sx1262_kiss_modem] +extends = Meshadventurer +build_src_filter = ${Meshadventurer.build_src_filter} + +<../examples/kiss_modem/> +build_flags = ${Meshadventurer.build_flags} + -D RADIO_CLASS=CustomSX1262 + -D WRAPPER_CLASS=CustomSX1262Wrapper + -D LORA_TX_POWER=22 + +[env:Meshadventurer_sx1268_kiss_modem] +extends = Meshadventurer +build_src_filter = ${Meshadventurer.build_src_filter} + +<../examples/kiss_modem/> +build_flags = ${Meshadventurer.build_flags} + -D RADIO_CLASS=CustomSX1268 + -D WRAPPER_CLASS=CustomSX1268Wrapper + -D LORA_TX_POWER=22 diff --git a/variants/meshadventurer/target.cpp b/variants/meshadventurer/target.cpp index c79b0a6e6..d8ccbe2f6 100644 --- a/variants/meshadventurer/target.cpp +++ b/variants/meshadventurer/target.cpp @@ -39,6 +39,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/meshtiny/platformio.ini b/variants/meshtiny/platformio.ini index 0d5de517d..c5439c88f 100644 --- a/variants/meshtiny/platformio.ini +++ b/variants/meshtiny/platformio.ini @@ -67,3 +67,8 @@ build_src_filter = ${Meshtiny.build_src_filter} lib_deps = ${Meshtiny.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:Meshtiny_kiss_modem] +extends = Meshtiny +build_src_filter = ${Meshtiny.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/meshtiny/target.cpp b/variants/meshtiny/target.cpp index 953c8b3fe..c0f1b1fad 100644 --- a/variants/meshtiny/target.cpp +++ b/variants/meshtiny/target.cpp @@ -35,6 +35,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/minewsemi_me25ls01/platformio.ini b/variants/minewsemi_me25ls01/platformio.ini index 91e62243c..39d4252de 100644 --- a/variants/minewsemi_me25ls01/platformio.ini +++ b/variants/minewsemi_me25ls01/platformio.ini @@ -145,3 +145,7 @@ build_src_filter = ${me25ls01.build_src_filter} +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-orig/*.cpp> +[env:Minewsemi_me25ls01_kiss_modem] +extends = me25ls01 +build_src_filter = ${me25ls01.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/minewsemi_me25ls01/target.cpp b/variants/minewsemi_me25ls01/target.cpp index fcec19419..c67663d64 100644 --- a/variants/minewsemi_me25ls01/target.cpp +++ b/variants/minewsemi_me25ls01/target.cpp @@ -86,6 +86,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/muziworks_r1_neo/platformio.ini b/variants/muziworks_r1_neo/platformio.ini index 39ef8728f..3dbecf1e8 100644 --- a/variants/muziworks_r1_neo/platformio.ini +++ b/variants/muziworks_r1_neo/platformio.ini @@ -130,3 +130,8 @@ build_flags = -D MESH_DEBUG=1 build_src_filter = ${R1Neo.build_src_filter} +<../examples/simple_sensor> + +[env:R1Neo_kiss_modem] +extends = R1Neo +build_src_filter = ${R1Neo.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/nano_g2_ultra/platformio.ini b/variants/nano_g2_ultra/platformio.ini index 116a1f259..3cdc29ffb 100644 --- a/variants/nano_g2_ultra/platformio.ini +++ b/variants/nano_g2_ultra/platformio.ini @@ -1,20 +1,11 @@ -[nrf52840_g2_ultra] +[Nano_G2_Ultra] extends = nrf52_base -platform_packages = framework-arduinoadafruitnrf52 +board = nano-g2-ultra +board_build.ldscript = boards/nrf52840_s140_v6.ld build_flags = ${nrf52_base.build_flags} -I src/helpers/nrf52 -I lib/nrf52/s140_nrf52_6.1.1_API/include -I lib/nrf52/s140_nrf52_6.1.1_API/include/nrf52 -lib_deps = - ${nrf52_base.lib_deps} - rweather/Crypto @ ^0.4.0 - lewisxhe/PCF8563_Library@^1.0.1 - -[Nano_G2_Ultra] -extends = nrf52840_g2_ultra -board = nano-g2-ultra -board_build.ldscript = boards/nrf52840_s140_v6.ld -build_flags = ${nrf52840_g2_ultra.build_flags} -I variants/nano_g2_ultra -D NANO_G2_ULTRA -D RADIO_CLASS=CustomSX1262 @@ -23,11 +14,47 @@ build_flags = ${nrf52840_g2_ultra.build_flags} -D SX126X_CURRENT_LIMIT=140 -D SX126X_RX_BOOSTED_GAIN=1 -D PIN_USER_BTN=38 -build_src_filter = ${nrf52840_g2_ultra.build_src_filter} +build_src_filter = ${nrf52_base.build_src_filter} + +<../variants/nano_g2_ultra> debug_tool = jlink upload_protocol = nrfutil +lib_deps = ${nrf52_base.lib_deps} + adafruit/Adafruit SH110X @ ~2.1.13 + adafruit/Adafruit GFX Library @ ^1.12.1 + stevemarple/MicroNMEA @ ^2.0.6 + +[env:Nano_G2_Ultra_repeater] +extends = Nano_G2_Ultra +build_flags = + ${Nano_G2_Ultra.build_flags} + -D DISPLAY_CLASS=SH1106Display + -D ADVERT_NAME='"Nano G2 Repeater"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D MAX_NEIGHBOURS=50 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${Nano_G2_Ultra.build_src_filter} + + + +<../examples/simple_repeater> + +[env:Nano_G2_Ultra_room_server] +extends = Nano_G2_Ultra +build_flags = + ${Nano_G2_Ultra.build_flags} + -D DISPLAY_CLASS=SH1106Display + -D ADVERT_NAME='"Nano G2 Room"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D ROOM_PASSWORD='"hello"' +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${Nano_G2_Ultra.build_src_filter} + + + +<../examples/simple_room_server> [env:Nano_G2_Ultra_companion_radio_ble] extends = Nano_G2_Ultra @@ -54,12 +81,8 @@ build_src_filter = ${Nano_G2_Ultra.build_src_filter} + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${Nano_G2_Ultra.lib_deps} +lib_deps = ${Nano_G2_Ultra.lib_deps} densaugeo/base64 @ ~1.4.0 - adafruit/Adafruit SH110X @ ~2.1.13 - adafruit/Adafruit GFX Library @ ^1.12.1 - stevemarple/MicroNMEA @ ^2.0.6 end2endzone/NonBlockingRTTTL@^1.3.0 [env:Nano_G2_Ultra_companion_radio_usb] @@ -84,10 +107,11 @@ build_src_filter = ${Nano_G2_Ultra.build_src_filter} + +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-new/*.cpp> -lib_deps = - ${Nano_G2_Ultra.lib_deps} +lib_deps = ${Nano_G2_Ultra.lib_deps} densaugeo/base64 @ ~1.4.0 - adafruit/Adafruit SH110X @ ~2.1.13 - adafruit/Adafruit GFX Library @ ^1.12.1 - stevemarple/MicroNMEA @ ^2.0.6 end2endzone/NonBlockingRTTTL@^1.3.0 + +[env:Nano_G2_Ultra_kiss_modem] +extends = Nano_G2_Ultra +build_src_filter = ${Nano_G2_Ultra.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/nano_g2_ultra/target.cpp b/variants/nano_g2_ultra/target.cpp index 56245ea58..c5e7ebdf6 100644 --- a/variants/nano_g2_ultra/target.cpp +++ b/variants/nano_g2_ultra/target.cpp @@ -34,6 +34,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/nibble_screen_connect/platformio.ini b/variants/nibble_screen_connect/platformio.ini index 8a4e63cab..a496a2fe6 100644 --- a/variants/nibble_screen_connect/platformio.ini +++ b/variants/nibble_screen_connect/platformio.ini @@ -159,3 +159,8 @@ lib_deps = ${nibble_screen_connect_base.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:nibble_screen_connect_kiss_modem] +extends = nibble_screen_connect_base +build_src_filter = ${nibble_screen_connect_base.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/nibble_screen_connect/target.cpp b/variants/nibble_screen_connect/target.cpp index 5aadd8b26..248a788b9 100644 --- a/variants/nibble_screen_connect/target.cpp +++ b/variants/nibble_screen_connect/target.cpp @@ -36,6 +36,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/promicro/platformio.ini b/variants/promicro/platformio.ini index 317537a9e..5415e1586 100644 --- a/variants/promicro/platformio.ini +++ b/variants/promicro/platformio.ini @@ -27,7 +27,7 @@ build_src_filter = ${nrf52_base.build_src_filter} + +<../variants/promicro> lib_deps= ${nrf52_base.lib_deps} - adafruit/Adafruit SSD1306 @ ^2.5.13 + adafruit/Adafruit SSD1306 @ ^2.5.13 adafruit/Adafruit INA3221 Library @ ^1.0.1 adafruit/Adafruit INA219 @ ^1.2.3 adafruit/Adafruit AHTX0 @ ^2.0.5 @@ -171,3 +171,8 @@ build_src_filter = ${Promicro.build_src_filter} +<../examples/simple_sensor> lib_deps = ${Promicro.lib_deps} + +[env:ProMicro_kiss_modem] +extends = Promicro +build_src_filter = ${Promicro.build_src_filter} + +<../examples/kiss_modem/> \ No newline at end of file diff --git a/variants/promicro/target.cpp b/variants/promicro/target.cpp index 66c9031ac..ddcc2a53f 100644 --- a/variants/promicro/target.cpp +++ b/variants/promicro/target.cpp @@ -38,6 +38,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/rak11310/platformio.ini b/variants/rak11310/platformio.ini index d55376270..3019f9c55 100644 --- a/variants/rak11310/platformio.ini +++ b/variants/rak11310/platformio.ini @@ -132,3 +132,8 @@ build_src_filter = ${rak11310.build_src_filter} +<../examples/simple_secure_chat/main.cpp> lib_deps = ${rak11310.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:RAK_11310_kiss_modem] +extends = rak11310 +build_src_filter = ${rak11310.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/rak11310/target.cpp b/variants/rak11310/target.cpp index 3441a3160..c66a2e443 100644 --- a/variants/rak11310/target.cpp +++ b/variants/rak11310/target.cpp @@ -27,6 +27,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/rak3112/platformio.ini b/variants/rak3112/platformio.ini index b4165bb2b..9cd32c4b4 100644 --- a/variants/rak3112/platformio.ini +++ b/variants/rak3112/platformio.ini @@ -204,3 +204,8 @@ build_src_filter = ${rak3112.build_src_filter} lib_deps = ${rak3112.lib_deps} ${esp32_ota.lib_deps} + +[env:RAK_3112_kiss_modem] +extends = rak3112 +build_src_filter = ${rak3112.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/rak3112/target.cpp b/variants/rak3112/target.cpp index a4098601a..23be3ef86 100644 --- a/variants/rak3112/target.cpp +++ b/variants/rak3112/target.cpp @@ -48,6 +48,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/rak3401/platformio.ini b/variants/rak3401/platformio.ini index 3d2d4a3ec..7de3f176b 100644 --- a/variants/rak3401/platformio.ini +++ b/variants/rak3401/platformio.ini @@ -6,6 +6,7 @@ build_flags = ${nrf52_base.build_flags} ${sensor_base.build_flags} -I variants/rak3401 -D RAK_3401 + -D RAK_BOARD -D NRF52_POWER_MANAGEMENT -D RADIO_CLASS=CustomSX1262 -D WRAPPER_CLASS=CustomSX1262Wrapper @@ -63,6 +64,8 @@ board_upload.maximum_size = 712704 build_flags = ${rak3401.build_flags} -I examples/companion_radio/ui-new + -D PIN_USER_BTN_ANA=31 + -D PIN_GPS_EN=-1 -D DISPLAY_CLASS=SSD1306Display -D MAX_CONTACTS=350 -D MAX_GROUP_CHANNELS=40 @@ -82,6 +85,8 @@ board_upload.maximum_size = 712704 build_flags = ${rak3401.build_flags} -I examples/companion_radio/ui-new + -D PIN_USER_BTN_ANA=31 + -D PIN_GPS_EN=-1 -D DISPLAY_CLASS=SSD1306Display -D MAX_CONTACTS=350 -D MAX_GROUP_CHANNELS=40 @@ -126,3 +131,8 @@ build_flags = build_src_filter = ${rak3401.build_src_filter} + +<../examples/simple_sensor> + +[env:RAK_3401_kiss_modem] +extends = rak3401 +build_src_filter = ${rak3401.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/rak3401/target.cpp b/variants/rak3401/target.cpp index cf7d08ad6..b9cb1ecca 100644 --- a/variants/rak3401/target.cpp +++ b/variants/rak3401/target.cpp @@ -46,6 +46,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/rak3x72/platformio.ini b/variants/rak3x72/platformio.ini index 12ea413ab..f96678608 100644 --- a/variants/rak3x72/platformio.ini +++ b/variants/rak3x72/platformio.ini @@ -41,3 +41,8 @@ build_src_filter = ${rak3x72.build_src_filter} +<../examples/companion_radio/*.cpp> lib_deps = ${rak3x72.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:RAK_3x72_kiss_modem] +extends = rak3x72 +build_src_filter = ${rak3x72.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/rak3x72/target.cpp b/variants/rak3x72/target.cpp index 48e7f4228..161c0145e 100644 --- a/variants/rak3x72/target.cpp +++ b/variants/rak3x72/target.cpp @@ -64,6 +64,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/rak4631/target.cpp b/variants/rak4631/target.cpp index 016e39826..d2377c128 100644 --- a/variants/rak4631/target.cpp +++ b/variants/rak4631/target.cpp @@ -46,6 +46,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/rak_wismesh_tag/platformio.ini b/variants/rak_wismesh_tag/platformio.ini index 081cb0d07..29124daf4 100644 --- a/variants/rak_wismesh_tag/platformio.ini +++ b/variants/rak_wismesh_tag/platformio.ini @@ -118,4 +118,9 @@ build_flags = ; -D MESH_PACKET_LOGGING=1 -D MESH_DEBUG=1 build_src_filter = ${rak4631.build_src_filter} - +<../examples/simple_sensor> \ No newline at end of file + +<../examples/simple_sensor> + +[env:RAK_WisMesh_Tag_kiss_modem] +extends = rak_wismesh_tag +build_src_filter = ${rak_wismesh_tag.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/rak_wismesh_tag/target.cpp b/variants/rak_wismesh_tag/target.cpp index 7aa20c1d2..e52a12b2e 100644 --- a/variants/rak_wismesh_tag/target.cpp +++ b/variants/rak_wismesh_tag/target.cpp @@ -42,6 +42,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/rpi_picow/platformio.ini b/variants/rpi_picow/platformio.ini index 2d261b25a..9253d36f6 100644 --- a/variants/rpi_picow/platformio.ini +++ b/variants/rpi_picow/platformio.ini @@ -106,3 +106,8 @@ build_src_filter = ${rpi_picow.build_src_filter} +<../examples/simple_secure_chat/main.cpp> lib_deps = ${rpi_picow.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:PicoW_kiss_modem] +extends = rpi_picow +build_src_filter = ${rpi_picow.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/rpi_picow/target.cpp b/variants/rpi_picow/target.cpp index 1166dc469..568987ba6 100644 --- a/variants/rpi_picow/target.cpp +++ b/variants/rpi_picow/target.cpp @@ -27,6 +27,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/sensecap_solar/target.cpp b/variants/sensecap_solar/target.cpp index ff706a946..8b506cc6a 100644 --- a/variants/sensecap_solar/target.cpp +++ b/variants/sensecap_solar/target.cpp @@ -34,6 +34,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/station_g2/platformio.ini b/variants/station_g2/platformio.ini index 87e77152b..6432b5238 100644 --- a/variants/station_g2/platformio.ini +++ b/variants/station_g2/platformio.ini @@ -238,3 +238,8 @@ build_src_filter = ${Station_G2.build_src_filter} lib_deps = ${Station_G2.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:Station_G2_kiss_modem] +extends = Station_G2 +build_src_filter = ${Station_G2.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/station_g2/target.cpp b/variants/station_g2/target.cpp index 40fa80056..65cc388d1 100644 --- a/variants/station_g2/target.cpp +++ b/variants/station_g2/target.cpp @@ -49,6 +49,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/t1000-e/platformio.ini b/variants/t1000-e/platformio.ini index 429390c48..fb88e3347 100644 --- a/variants/t1000-e/platformio.ini +++ b/variants/t1000-e/platformio.ini @@ -117,3 +117,10 @@ lib_deps = ${t1000-e.lib_deps} densaugeo/base64 @ ~1.4.0 stevemarple/MicroNMEA @ ^2.0.6 end2endzone/NonBlockingRTTTL@^1.3.0 + +[env:t1000e_kiss_modem] +extends = t1000-e +build_src_filter = ${t1000-e.build_src_filter} + +<../examples/kiss_modem/> +lib_deps = ${t1000-e.lib_deps} + stevemarple/MicroNMEA @ ^2.0.6 diff --git a/variants/t1000-e/target.cpp b/variants/t1000-e/target.cpp index da8fa48bb..bbf453caf 100644 --- a/variants/t1000-e/target.cpp +++ b/variants/t1000-e/target.cpp @@ -83,6 +83,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/tenstar_c3/platformio.ini b/variants/tenstar_c3/platformio.ini index 183a56840..e79888236 100644 --- a/variants/tenstar_c3/platformio.ini +++ b/variants/tenstar_c3/platformio.ini @@ -161,3 +161,23 @@ build_flags = lib_deps = ${Tenstar_esp32_C3.lib_deps} ${esp32_ota.lib_deps} + +[env:Tenstar_C3_sx1262_kiss_modem] +extends = Tenstar_esp32_C3 +build_src_filter = ${Tenstar_esp32_C3.build_src_filter} + +<../examples/kiss_modem/> +build_flags = + ${Tenstar_esp32_C3.build_flags} + -D RADIO_CLASS=CustomSX1262 + -D WRAPPER_CLASS=CustomSX1262Wrapper + -D LORA_TX_POWER=22 + +[env:Tenstar_C3_sx1268_kiss_modem] +extends = Tenstar_esp32_C3 +build_src_filter = ${Tenstar_esp32_C3.build_src_filter} + +<../examples/kiss_modem/> +build_flags = + ${Tenstar_esp32_C3.build_flags} + -D RADIO_CLASS=CustomSX1268 + -D WRAPPER_CLASS=CustomSX1268Wrapper + -D LORA_TX_POWER=22 diff --git a/variants/tenstar_c3/target.cpp b/variants/tenstar_c3/target.cpp index 8a0f3f077..7a1794e69 100644 --- a/variants/tenstar_c3/target.cpp +++ b/variants/tenstar_c3/target.cpp @@ -36,6 +36,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/thinknode_m1/platformio.ini b/variants/thinknode_m1/platformio.ini index 397bf8e30..356edfee6 100644 --- a/variants/thinknode_m1/platformio.ini +++ b/variants/thinknode_m1/platformio.ini @@ -127,4 +127,9 @@ lib_deps = densaugeo/base64 @ ~1.4.0 zinggjm/GxEPD2 @ 1.6.2 bakercp/CRC32 @ ^2.0.0 - end2endzone/NonBlockingRTTTL@^1.3.0 \ No newline at end of file + end2endzone/NonBlockingRTTTL@^1.3.0 + +[env:ThinkNode_M1_kiss_modem] +extends = ThinkNode_M1 +build_src_filter = ${ThinkNode_M1.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/thinknode_m1/target.cpp b/variants/thinknode_m1/target.cpp index b2e162835..934040e1f 100644 --- a/variants/thinknode_m1/target.cpp +++ b/variants/thinknode_m1/target.cpp @@ -33,6 +33,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/thinknode_m2/platformio.ini b/variants/thinknode_m2/platformio.ini index a765d9c7e..990155017 100644 --- a/variants/thinknode_m2/platformio.ini +++ b/variants/thinknode_m2/platformio.ini @@ -209,3 +209,10 @@ build_src_filter = ${ThinkNode_M2.build_src_filter} lib_deps = ${ThinkNode_M2.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:ThinkNode_M2_kiss_modem] +extends = ThinkNode_M2 +build_flags = ${ThinkNode_M2.build_flags} + -UPIN_BUZZER +build_src_filter = ${ThinkNode_M2.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/thinknode_m2/target.cpp b/variants/thinknode_m2/target.cpp index 52afba9c4..a8919034d 100644 --- a/variants/thinknode_m2/target.cpp +++ b/variants/thinknode_m2/target.cpp @@ -44,6 +44,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/thinknode_m3/platformio.ini b/variants/thinknode_m3/platformio.ini index 88fd487aa..0a3d4eda9 100644 --- a/variants/thinknode_m3/platformio.ini +++ b/variants/thinknode_m3/platformio.ini @@ -17,11 +17,11 @@ build_flags = ${nrf52_base.build_flags} -D RF_SWITCH_TABLE -D RX_BOOSTED_GAIN=true -D P_LORA_BUSY=43 - -D P_LORA_SCLK=45 + -D P_LORA_SCLK=45 -D P_LORA_NSS=44 -D P_LORA_DIO_1=40 -D P_LORA_MISO=47 - -D P_LORA_MOSI=46 + -D P_LORA_MOSI=46 -D P_LORA_RESET=42 -D P_LORA_TX_LED=PIN_LED_BLUE -D P_LORA_TX_LED_ON=LOW @@ -119,3 +119,10 @@ lib_deps = ${ThinkNode_M3.lib_deps} densaugeo/base64 @ ~1.4.0 stevemarple/MicroNMEA @ ^2.0.6 end2endzone/NonBlockingRTTTL@^1.3.0 + +[env:ThinkNode_M3_kiss_modem] +extends = ThinkNode_M3 +build_src_filter = ${ThinkNode_M3.build_src_filter} + +<../examples/kiss_modem/> +lib_deps = ${ThinkNode_M3.lib_deps} + stevemarple/MicroNMEA @ ^2.0.6 diff --git a/variants/thinknode_m3/target.cpp b/variants/thinknode_m3/target.cpp index 7303eb4ca..63ecdf76a 100644 --- a/variants/thinknode_m3/target.cpp +++ b/variants/thinknode_m3/target.cpp @@ -87,6 +87,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/thinknode_m5/platformio.ini b/variants/thinknode_m5/platformio.ini index 16df472a2..8572d1ebe 100644 --- a/variants/thinknode_m5/platformio.ini +++ b/variants/thinknode_m5/platformio.ini @@ -227,3 +227,8 @@ lib_deps = ${ThinkNode_M5.lib_deps} densaugeo/base64 @ ~1.4.0 end2endzone/NonBlockingRTTTL@^1.3.0 + +[env:ThinkNode_M5_kiss_modem] +extends = ThinkNode_M5 +build_src_filter = ${ThinkNode_M5.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/thinknode_m5/target.cpp b/variants/thinknode_m5/target.cpp index f5f3ecd35..e5908fdf7 100644 --- a/variants/thinknode_m5/target.cpp +++ b/variants/thinknode_m5/target.cpp @@ -51,6 +51,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/thinknode_m6/platformio.ini b/variants/thinknode_m6/platformio.ini index 2bd34f318..6fe904366 100644 --- a/variants/thinknode_m6/platformio.ini +++ b/variants/thinknode_m6/platformio.ini @@ -116,4 +116,9 @@ build_src_filter = ${ThinkNode_M6.build_src_filter} lib_deps = ${ThinkNode_M6.lib_deps} densaugeo/base64 @ ~1.4.0 - end2endzone/NonBlockingRTTTL@^1.3.0 \ No newline at end of file + end2endzone/NonBlockingRTTTL@^1.3.0 + +[env:ThinkNode_M6_kiss_modem] +extends = ThinkNode_M6 +build_src_filter = ${ThinkNode_M6.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/thinknode_m6/target.cpp b/variants/thinknode_m6/target.cpp index b690df18b..01957362e 100644 --- a/variants/thinknode_m6/target.cpp +++ b/variants/thinknode_m6/target.cpp @@ -37,6 +37,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/tiny_relay/platformio.ini b/variants/tiny_relay/platformio.ini index ed1787275..82cb251fd 100644 --- a/variants/tiny_relay/platformio.ini +++ b/variants/tiny_relay/platformio.ini @@ -48,3 +48,8 @@ build_src_filter = ${Tiny_Relay.build_src_filter} +<../examples/companion_radio/*.cpp> lib_deps = ${Tiny_Relay.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:Tiny_Relay_kiss_modem] +extends = Tiny_Relay +build_src_filter = ${Tiny_Relay.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/tiny_relay/target.cpp b/variants/tiny_relay/target.cpp index 313dfaa94..c05f552ef 100644 --- a/variants/tiny_relay/target.cpp +++ b/variants/tiny_relay/target.cpp @@ -68,6 +68,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) diff --git a/variants/waveshare_rp2040_lora/platformio.ini b/variants/waveshare_rp2040_lora/platformio.ini index 880f238f2..36658d824 100644 --- a/variants/waveshare_rp2040_lora/platformio.ini +++ b/variants/waveshare_rp2040_lora/platformio.ini @@ -131,3 +131,8 @@ build_src_filter = ${waveshare_rp2040_lora.build_src_filter} +<../examples/simple_secure_chat/main.cpp> lib_deps = ${waveshare_rp2040_lora.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:waveshare_rp2040_lora_kiss_modem] +extends = waveshare_rp2040_lora +build_src_filter = ${waveshare_rp2040_lora.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/waveshare_rp2040_lora/target.cpp b/variants/waveshare_rp2040_lora/target.cpp index 459bf82c3..907a37f50 100644 --- a/variants/waveshare_rp2040_lora/target.cpp +++ b/variants/waveshare_rp2040_lora/target.cpp @@ -37,6 +37,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/wio-e5-dev/platformio.ini b/variants/wio-e5-dev/platformio.ini index d7e63c83e..22bdc3c83 100644 --- a/variants/wio-e5-dev/platformio.ini +++ b/variants/wio-e5-dev/platformio.ini @@ -5,6 +5,8 @@ board_upload.maximum_size = 229376 ; 32kb for FS build_flags = ${stm32_base.build_flags} -D RADIO_CLASS=CustomSTM32WLx -D WRAPPER_CLASS=CustomSTM32WLxWrapper + -D LORA_TX_POWER=22 + -D SX126X_CURRENT_LIMIT=140 -D SPI_INTERFACES_COUNT=0 -D RX_BOOSTED_GAIN=true -D PIN_SERIAL_RX=PB7 @@ -48,3 +50,8 @@ build_src_filter = ${lora_e5.build_src_filter} +<../examples/companion_radio/*.cpp> lib_deps = ${lora_e5.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:wio-e5_kiss_modem] +extends = lora_e5 +build_src_filter = ${lora_e5.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/wio-e5-dev/target.cpp b/variants/wio-e5-dev/target.cpp index 3e59b6cee..8d8069ebf 100644 --- a/variants/wio-e5-dev/target.cpp +++ b/variants/wio-e5-dev/target.cpp @@ -61,6 +61,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/wio-e5-mini/platformio.ini b/variants/wio-e5-mini/platformio.ini index f589ea032..82f01331b 100644 --- a/variants/wio-e5-mini/platformio.ini +++ b/variants/wio-e5-mini/platformio.ini @@ -7,6 +7,8 @@ build_flags = ${stm32_base.build_flags} -D WRAPPER_CLASS=CustomSTM32WLxWrapper -D SPI_INTERFACES_COUNT=0 -D RX_BOOSTED_GAIN=true + -D LORA_TX_POWER=22 + -D SX126X_CURRENT_LIMIT=140 -D P_LORA_TX_LED=LED_RED -D PIN_USER_BTN=USER_BTN -I variants/wio-e5-mini @@ -40,10 +42,15 @@ build_flags = ${lora_e5_mini.build_flags} -I examples/companion_radio/ui-orig -D LORA_TX_POWER=22 -D MAX_CONTACTS=100 - -D MAX_GROUP_CHANNELS=8 + -D MAX_GROUP_CHANNELS=8 -D DISPLAY_CLASS=NullDisplayDriver build_src_filter = ${lora_e5_mini.build_src_filter} +<../examples/companion_radio/*.cpp> +<../examples/companion_radio/ui-orig/*.cpp> lib_deps = ${lora_e5_mini.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:wio-e5-mini_kiss_modem] +extends = lora_e5_mini +build_src_filter = ${lora_e5_mini.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/wio-e5-mini/target.cpp b/variants/wio-e5-mini/target.cpp index 2e95ad6d1..338f398df 100644 --- a/variants/wio-e5-mini/target.cpp +++ b/variants/wio-e5-mini/target.cpp @@ -59,6 +59,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/wio-tracker-l1-eink/platformio.ini b/variants/wio-tracker-l1-eink/platformio.ini index 42c83477b..2c74baded 100644 --- a/variants/wio-tracker-l1-eink/platformio.ini +++ b/variants/wio-tracker-l1-eink/platformio.ini @@ -68,3 +68,8 @@ lib_deps = ${WioTrackerL1Eink.lib_deps} densaugeo/base64 @ ~1.4.0 end2endzone/NonBlockingRTTTL@^1.3.0 debug_tool=stlink + +[env:WioTrackerL1Eink_kiss_modem] +extends = WioTrackerL1Eink +build_src_filter = ${WioTrackerL1Eink.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/wio-tracker-l1/platformio.ini b/variants/wio-tracker-l1/platformio.ini index 6c1e8f634..7bb175bb9 100644 --- a/variants/wio-tracker-l1/platformio.ini +++ b/variants/wio-tracker-l1/platformio.ini @@ -111,3 +111,8 @@ lib_deps = ${WioTrackerL1.lib_deps} adafruit/RTClib @ ^2.1.3 densaugeo/base64 @ ~1.4.0 end2endzone/NonBlockingRTTTL@^1.3.0 + +[env:WioTrackerL1_kiss_modem] +extends = WioTrackerL1 +build_src_filter = ${WioTrackerL1.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/wio-tracker-l1/target.cpp b/variants/wio-tracker-l1/target.cpp index 896ead26d..766265519 100644 --- a/variants/wio-tracker-l1/target.cpp +++ b/variants/wio-tracker-l1/target.cpp @@ -42,6 +42,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/wio_wm1110/platformio.ini b/variants/wio_wm1110/platformio.ini index ec65e706b..a7eac916b 100644 --- a/variants/wio_wm1110/platformio.ini +++ b/variants/wio_wm1110/platformio.ini @@ -84,3 +84,8 @@ build_src_filter = ${wio_wm1110.build_src_filter} lib_deps = ${wio_wm1110.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:wio_wm1110_kiss_modem] +extends = wio_wm1110 +build_src_filter = ${wio_wm1110.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/wio_wm1110/target.cpp b/variants/wio_wm1110/target.cpp index 457d5bda2..9be3061c3 100644 --- a/variants/wio_wm1110/target.cpp +++ b/variants/wio_wm1110/target.cpp @@ -79,6 +79,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/xiao_c3/platformio.ini b/variants/xiao_c3/platformio.ini index c5254b46c..c0e8458d0 100644 --- a/variants/xiao_c3/platformio.ini +++ b/variants/xiao_c3/platformio.ini @@ -128,3 +128,8 @@ lib_deps = ${Xiao_esp32_C3.lib_deps} ${esp32_ota.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:Xiao_C3_kiss_modem] +extends = Xiao_esp32_C3 +build_src_filter = ${Xiao_esp32_C3.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/xiao_c3/target.cpp b/variants/xiao_c3/target.cpp index d6645f873..300ff60ea 100644 --- a/variants/xiao_c3/target.cpp +++ b/variants/xiao_c3/target.cpp @@ -44,6 +44,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/xiao_c6/XiaoC6Board.cpp b/variants/xiao_c6/XiaoC6Board.cpp index 5710c4ccb..dc62c20ec 100644 --- a/variants/xiao_c6/XiaoC6Board.cpp +++ b/variants/xiao_c6/XiaoC6Board.cpp @@ -37,6 +37,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/xiao_c6/platformio.ini b/variants/xiao_c6/platformio.ini index 717be7b9a..9f504b8ed 100644 --- a/variants/xiao_c6/platformio.ini +++ b/variants/xiao_c6/platformio.ini @@ -184,3 +184,8 @@ build_src_filter = ${WHY2025_badge.build_src_filter} lib_deps = ${WHY2025_badge.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:Xiao_C6_kiss_modem] +extends = Xiao_C6 +build_src_filter = ${Xiao_C6.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/xiao_nrf52/target.cpp b/variants/xiao_nrf52/target.cpp index 4d7d5912c..9efe00154 100644 --- a/variants/xiao_nrf52/target.cpp +++ b/variants/xiao_nrf52/target.cpp @@ -32,6 +32,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/xiao_rp2040/platformio.ini b/variants/xiao_rp2040/platformio.ini index e5d652c32..9a0fdaf4a 100644 --- a/variants/xiao_rp2040/platformio.ini +++ b/variants/xiao_rp2040/platformio.ini @@ -108,3 +108,8 @@ build_src_filter = ${Xiao_rp2040.build_src_filter} +<../examples/simple_secure_chat/main.cpp> lib_deps = ${Xiao_rp2040.lib_deps} densaugeo/base64 @ ~1.4.0 + +[env:Xiao_rp2040_kiss_modem] +extends = Xiao_rp2040 +build_src_filter = ${Xiao_rp2040.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/xiao_rp2040/target.cpp b/variants/xiao_rp2040/target.cpp index b37564801..67a09fcc7 100644 --- a/variants/xiao_rp2040/target.cpp +++ b/variants/xiao_rp2040/target.cpp @@ -37,6 +37,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) { diff --git a/variants/xiao_s3/XiaoS3Board.h b/variants/xiao_s3/XiaoS3Board.h new file mode 100644 index 000000000..288fcf626 --- /dev/null +++ b/variants/xiao_s3/XiaoS3Board.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +class XiaoS3Board : public ESP32Board { +public: + XiaoS3Board() { } + + const char* getManufacturerName() const override { + return "Xiao S3"; + } +}; diff --git a/variants/xiao_s3/platformio.ini b/variants/xiao_s3/platformio.ini new file mode 100644 index 000000000..bc0002204 --- /dev/null +++ b/variants/xiao_s3/platformio.ini @@ -0,0 +1,154 @@ +[Xiao_S3] +extends = esp32_base +board = seeed_xiao_esp32s3 +board_check = true +board_build.mcu = esp32s3 +build_flags = ${esp32_base.build_flags} + ${sensor_base.build_flags} + -I variants/xiao_s3 + -UENV_INCLUDE_GPS + -D SEEED_XIAO_S3 + -D PIN_VBAT_READ=1 ; D0 + -D P_LORA_DIO_1=2 ; D1 + -D P_LORA_NSS=5 ; D4 + -D P_LORA_RESET=3 ; D2 + -D P_LORA_BUSY=4 ; D3 + -D P_LORA_SCLK=7 ; D8 + -D P_LORA_MISO=8 ; D0 + -D P_LORA_MOSI=9 ; D10 + -D PIN_USER_BTN=-1 ; NC + -D PIN_STATUS_LED=21 ; Orange user led, LOW=On + -D PIN_BOARD_SDA=D6 ; D6=43 + -D PIN_BOARD_SCL=D7 ; D7=44 + -D SX126X_RXEN=6 ; D5 + -D SX126X_TXEN=RADIOLIB_NC + -D SX126X_DIO2_AS_RF_SWITCH=true + -D SX126X_DIO3_TCXO_VOLTAGE=1.8 + -D SX126X_CURRENT_LIMIT=140 + -D RADIO_CLASS=CustomSX1262 + -D WRAPPER_CLASS=CustomSX1262Wrapper + -D LORA_TX_POWER=22 + -D SX126X_RX_BOOSTED_GAIN=1 +build_src_filter = ${esp32_base.build_src_filter} + +<../variants/xiao_s3> + + +lib_deps = + ${esp32_base.lib_deps} + ${sensor_base.lib_deps} + +[env:Xiao_S3_repeater] +extends = Xiao_S3 +build_src_filter = ${Xiao_S3.build_src_filter} + +<../examples/simple_repeater/*.cpp> +build_flags = + ${Xiao_S3.build_flags} + -D ADVERT_NAME='"Xiao S3 Repeater"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D MAX_NEIGHBOURS=50 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +lib_deps = + ${Xiao_S3.lib_deps} + ${esp32_ota.lib_deps} + +[env:Xiao_S3_repeater_bridge_espnow] +extends = Xiao_S3 +build_src_filter = ${Xiao_S3.build_src_filter} + + + +<../examples/simple_repeater/*.cpp> +build_flags = + ${Xiao_S3.build_flags} + -D ADVERT_NAME='"ESPNow Bridge"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D MAX_NEIGHBOURS=50 + -D WITH_ESPNOW_BRIDGE=1 +; -D BRIDGE_DEBUG=1 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +lib_deps = + ${Xiao_S3.lib_deps} + ${esp32_ota.lib_deps} + +[env:Xiao_S3_room_server] +extends = Xiao_S3 +build_src_filter = ${Xiao_S3.build_src_filter} + +<../examples/simple_room_server> +build_flags = + ${Xiao_S3.build_flags} + -D ADVERT_NAME='"Xiao S3 Room"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' + -D ROOM_PASSWORD='"hello"' +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +lib_deps = + ${Xiao_S3.lib_deps} + ${esp32_ota.lib_deps} + +[env:Xiao_S3_companion_radio_ble] +extends = Xiao_S3 +build_flags = + ${Xiao_S3.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D BLE_PIN_CODE=123456 + -D DISPLAY_CLASS=SSD1306Display + -D OFFLINE_QUEUE_SIZE=256 +; -D BLE_DEBUG_LOGGING=1 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${Xiao_S3.build_src_filter} + + + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = + ${Xiao_S3.lib_deps} + densaugeo/base64 @ ~1.4.0 + adafruit/Adafruit SSD1306 @ ^2.5.13 + +[env:Xiao_S3_companion_radio_usb] +extends = Xiao_S3 +build_flags = + ${Xiao_S3.build_flags} + -I examples/companion_radio/ui-new + -D MAX_CONTACTS=350 + -D MAX_GROUP_CHANNELS=40 + -D DISPLAY_CLASS=SSD1306Display + -D OFFLINE_QUEUE_SIZE=256 +; -D BLE_DEBUG_LOGGING=1 +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +build_src_filter = ${Xiao_S3.build_src_filter} + + + + + + + +<../examples/companion_radio/*.cpp> + +<../examples/companion_radio/ui-new/*.cpp> +lib_deps = + ${Xiao_S3.lib_deps} + densaugeo/base64 @ ~1.4.0 + adafruit/Adafruit SSD1306 @ ^2.5.13 + +[env:Xiao_S3_sensor] +extends = Xiao_S3 +build_src_filter = ${Xiao_S3.build_src_filter} + +<../examples/simple_sensor> +build_flags = + ${Xiao_S3.build_flags} + -D ADVERT_NAME='"Xiao S3 Sensor"' + -D ADVERT_LAT=0.0 + -D ADVERT_LON=0.0 + -D ADMIN_PASSWORD='"password"' +; -D MESH_PACKET_LOGGING=1 +; -D MESH_DEBUG=1 +lib_deps = + ${Xiao_S3.lib_deps} + ${esp32_ota.lib_deps} \ No newline at end of file diff --git a/variants/xiao_s3/target.cpp b/variants/xiao_s3/target.cpp new file mode 100644 index 000000000..014b25529 --- /dev/null +++ b/variants/xiao_s3/target.cpp @@ -0,0 +1,56 @@ +#include +#include "target.h" + +XiaoS3Board board; + +#if defined(P_LORA_SCLK) + static SPIClass spi; + RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); +#else + RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY); +#endif + +WRAPPER_CLASS radio_driver(radio, board); + +ESP32RTCClock fallback_clock; +AutoDiscoverRTCClock rtc_clock(fallback_clock); +EnvironmentSensorManager sensors; + +#ifdef DISPLAY_CLASS + DISPLAY_CLASS display; + MomentaryButton user_btn(PIN_USER_BTN, 1000, true); +#endif + +bool radio_init() { + fallback_clock.begin(); + rtc_clock.begin(Wire); + pinMode(21, INPUT); + pinMode(48, OUTPUT); + + #if defined(P_LORA_SCLK) + spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI); + return radio.std_init(&spi); +#else + return radio.std_init(); +#endif +} + +uint32_t radio_get_rng_seed() { + return radio.random(0x7FFFFFFF); +} + +void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { + radio.setFrequency(freq); + radio.setSpreadingFactor(sf); + radio.setBandwidth(bw); + radio.setCodingRate(cr); +} + +void radio_set_tx_power(int8_t dbm) { + radio.setOutputPower(dbm); +} + +mesh::LocalIdentity radio_new_identity() { + RadioNoiseListener rng(radio); + return mesh::LocalIdentity(&rng); // create new random identity +} diff --git a/variants/xiao_s3/target.h b/variants/xiao_s3/target.h new file mode 100644 index 000000000..93b278629 --- /dev/null +++ b/variants/xiao_s3/target.h @@ -0,0 +1,30 @@ +#pragma once + +#define RADIOLIB_STATIC_ONLY 1 +#include +#include +#include +#include +#include +#include +#ifdef DISPLAY_CLASS + #include + #include +#endif +#include "XiaoS3Board.h" + +extern XiaoS3Board board; +extern WRAPPER_CLASS radio_driver; +extern AutoDiscoverRTCClock rtc_clock; +extern EnvironmentSensorManager sensors; + +#ifdef DISPLAY_CLASS + extern DISPLAY_CLASS display; + extern MomentaryButton user_btn; +#endif + +bool radio_init(); +uint32_t radio_get_rng_seed(); +void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); +void radio_set_tx_power(int8_t dbm); +mesh::LocalIdentity radio_new_identity(); diff --git a/variants/xiao_s3_wio/platformio.ini b/variants/xiao_s3_wio/platformio.ini index 13d406792..db8c5a948 100644 --- a/variants/xiao_s3_wio/platformio.ini +++ b/variants/xiao_s3_wio/platformio.ini @@ -234,3 +234,8 @@ build_flags = lib_deps = ${Xiao_S3_WIO.lib_deps} ${esp32_ota.lib_deps} + +[env:Xiao_S3_WIO_kiss_modem] +extends = Xiao_S3_WIO +build_src_filter = ${Xiao_S3_WIO.build_src_filter} + +<../examples/kiss_modem/> diff --git a/variants/xiao_s3_wio/target.cpp b/variants/xiao_s3_wio/target.cpp index 42356b0ee..ca824d38c 100644 --- a/variants/xiao_s3_wio/target.cpp +++ b/variants/xiao_s3_wio/target.cpp @@ -44,6 +44,7 @@ void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { radio.setSpreadingFactor(sf); radio.setBandwidth(bw); radio.setCodingRate(cr); + radio_driver.updatePreamble(sf); } void radio_set_tx_power(int8_t dbm) {