Compare commits
No files matched your search
@@ -16,10 +16,12 @@ USB) and the [GitHub releases](https://github.com/ALLFATHER-BV/wadamesh/releases
|
||||
| Elecrow ThinkNode M9 | ESP32-S3, LR1110 | 2.4" 240x320 (no touch), I2C QWERTY + d-pad | Web flasher | Beta (new in beta_38) | Hardware-complete community port by ded (#138): GPS, microSD, buzzer, lock screen, d-pad navigation |
|
||||
| Elecrow CrowPanel Advance 3.5 | ESP32-S3, external SX1262 | 3.5" ILI9488 480x320 touch (GT911) | Web flasher (beta) | Beta, hardware validation pending | Requires an SX1262 module in the LoRa expansion slot; not for other CrowPanel models |
|
||||
| Elecrow CrowPanel Advance 5.0 | ESP32-S3, external SX1262 | 5" ST7262 RGB 800x480 touch (GT911) | Web flasher (beta) | Beta, hardware-tested (display, touch, radio) | V1.1+ boards; SX1262 in the wireless slot with the function DIP switch on the wireless module; no SD, GPS or battery gauge |
|
||||
| Seeed SenseCAP Indicator D1L | ESP32-S3, SX1262 | 4" 480x480 touch (FT6336) | Development build only | Experimental | Hardware-tested (display, touch, radio); USB-powered, no battery; the RP2040's buzzer and microSD are not used |
|
||||
| RAK WisMesh Tap V2 (RAK3312) | ESP32-S3, SX1262 | Touch display (LovyanGFX, 30+ fps) | Web flasher | Beta (new in beta_38) | Early community port by Ethac.chen (#136); core mesh, chat and map working |
|
||||
| LilyGo T-Lora Pager | ESP32-S3, LR1121 or SX1262 | 2.33" IPS LCD, 480x222 (no touch), QWERTY + rotary encoder | Web flasher (pick the build matching your radio) | Beta (new in beta_45) | Fully supported; keyboard-first navigation, microSD, map tile packs |
|
||||
| Heltec V4-R8 + Expansion Kit V2 | ESP32-S3 (8 MB octal PSRAM), SX1262 | 2.4" touch (CHSC6x) | Web flasher | Beta (new in beta_45) | As the V4 plus microSD and the Expansion Kit sensors; buzzer supported |
|
||||
| LilyGo T-Display P4 | ESP32-P4 + ESP32-C6, SX1262 or LR2021 | AMOLED or TFT-LCD, touch | Web flasher | Beta (new in beta_45) | Four panel/radio builds; AMOLED + SX1262 hardware-tested, the other combinations need validation |
|
||||
| Elecrow CrowPanel Advanced 10.1 | ESP32-P4 + ESP32-C6, external SX1262 | 10.1" EK79007 MIPI-DSI 1024x600 touch (GT911) | Web flasher (beta) | Experimental (new in beta_97), not yet tested on hardware | One image per board revision (V1.0, V1.1, V1.2); SX1262 in the wireless slot; no battery reading, sound or GPS |
|
||||
| Attaky Mesh Series | ESP32-S3, SX1262 | Touch display + front D-pad | Web flasher | Beta (new in beta_47) | Community port by attakygit (#158/#169); detachable keyboard supported; the front D-pad + SELECT navigate the UI |
|
||||
|
||||
## Feature notes per board
|
||||
@@ -164,6 +166,14 @@ USB) and the [GitHub releases](https://github.com/ALLFATHER-BV/wadamesh/releases
|
||||
full install and an on-device update, whose long flash erases the panel
|
||||
recovers from. Select it in
|
||||
the upload helper with `scripts/build-upload-monitor.sh --crowpanel-50`.
|
||||
- **SenseCAP Indicator D1L**: `sensecap_indicator_companion_radio_touch` drives
|
||||
the 480x480 ST7701S RGB panel, the FT6336 touch controller and the SX1262,
|
||||
whose control lines sit on a TCA9535 I/O expander. It is USB-powered with no
|
||||
battery, so the battery readouts and Power off are hidden. The RP2040
|
||||
peripherals (buzzer, microSD, Grove, D1Pro sensors) are not used, and without
|
||||
storage there are no map tiles. The D1Pro shares the ESP32 side and is expected
|
||||
to run the same image, but is untested. See
|
||||
[variants/sensecap_indicator/PORT.md](variants/sensecap_indicator/PORT.md).
|
||||
|
||||
## Requested boards
|
||||
|
||||
@@ -172,7 +182,6 @@ Open hardware requests, roughly in demand order. Ports are welcome, see
|
||||
PRs.
|
||||
|
||||
- LilyGo T-Deck Pro hardware validation / T-Deck Max variants: [#62](https://github.com/ALLFATHER-BV/wadamesh/issues/62)
|
||||
- SenseCAP Indicator D1L: [#14](https://github.com/ALLFATHER-BV/wadamesh/issues/14)
|
||||
|
||||
## Channels
|
||||
|
||||
|
||||
@@ -68,9 +68,10 @@ catalog is the third.
|
||||
min_api, boards allow-list, icon glyph, description) on the active storage
|
||||
root (SD where adopted, internal FS otherwise) — same resolution as chat
|
||||
history.
|
||||
- Catalog: `https://firmware.wadamesh.com/apps/apps.json` + one `.lua` +
|
||||
`.json` per app in `apps/<id>/<version>/`. Served like firmware: VPS rsync,
|
||||
immutable per-version paths, mutable index. Device store page = fetch
|
||||
- Catalog: `http://meshinfo.ru/firmware/apps/apps.json` + one `.lua` +
|
||||
`.json` per app in `apps/<id>/<version>/`. Served by nginx from
|
||||
`/var/www/meshinfo/firmware/apps` over plain HTTP for the device (and HTTPS
|
||||
for browsers), immutable per-version paths, mutable index. Device store page = fetch
|
||||
index → list → install (download 2 files) → appears in the drawer.
|
||||
Uninstall = delete 2 files. Update = version compare against the index.
|
||||
- The Store page also lists the **built-in removable apps** (Snake, Airtime,
|
||||
|
||||
@@ -88,7 +88,16 @@ driver, variants/tdisplay_p4/P4Audio.cpp)
|
||||
Espressif's public es8311.c/es8311_reg.h; P4Audio.cpp additionally
|
||||
re-bases the esp-bsp init flow onto Arduino Wire.
|
||||
|
||||
LovyanGFX (RAK WisMesh Tap V2 display backend)
|
||||
ST7701S panel init list (SenseCAP Indicator display driver,
|
||||
variants/sensecap_indicator/IndicatorDisplay.cpp)
|
||||
Copyright (c) Meshtastic
|
||||
GPL-3.0 License — https://github.com/meshtastic/device-ui
|
||||
The panel's second init command list (MADCTL vertical flip, SDIR
|
||||
horizontal flip) is taken from Meshtastic device-ui's
|
||||
include/graphics/LGFX/LGFX_INDICATOR.h (Panel_Indicator::getInitCommands).
|
||||
The rest of the driver is original code on LovyanGFX's Panel_ST7701.
|
||||
|
||||
LovyanGFX (display backend: RAK WisMesh Tap V2, SenseCAP Indicator and others)
|
||||
Copyright (c) lovyan03 — FreeBSD License — https://github.com/lovyan03/LovyanGFX
|
||||
|
||||
Camillia-MT (CrowPanel Advance 3.5 software-SPI microSD backend)
|
||||
|
||||
@@ -1,3 +1,42 @@
|
||||
# WADAMESH — форк MeshInfo
|
||||
|
||||
Этот репозиторий — форк [ALLFATHER-BV/wadamesh](https://github.com/ALLFATHER-BV/wadamesh),
|
||||
адаптированный под российскую MeshCore-сеть и хостинг MeshInfo. База — **beta_98**
|
||||
(Repeater Admin, браузерный клиент, Glass tiles, SenseCAP/CrowPanel/P4) плюс
|
||||
локальные доработки. Ниже перечислены ключевые отличия от upstream; оригинальный
|
||||
README начинается после горизонтальной линии.
|
||||
|
||||
## Ключевые отличия от оригинала
|
||||
|
||||
- **Store и языки — на `meshinfo.ru`.** Прошивка скачивает `apps.json`, `langs.json`,
|
||||
`.lua` и `.lang` с `http://meshinfo.ru/firmware/apps/...`, а не с
|
||||
`firmware.wadamesh.com`. Причина переноса: с оригинального хоста файлы
|
||||
скачивались нестабильно, а Cloudflare, по наблюдениям, блокировал нашу локацию.
|
||||
Nginx отдаёт `/firmware/` по HTTP без редиректа на HTTPS (устройство не умеет
|
||||
TLS), остальной сайт `meshinfo.ru` остаётся на HTTPS. Скрипт публикации —
|
||||
`scripts/deploy-apps.sh` — по умолчанию пишет в
|
||||
`/var/www/meshinfo/firmware/apps`.
|
||||
- **Русская локализация.** `deploy/apps/lang/ru.lang` версии 33: переведены
|
||||
missing/blank-строки, английские заглушки и helper-подписи настроек
|
||||
(`setCard`, `setSwitchRow`, `setField` и т.п.). Аудит
|
||||
`scripts/build/audit-lang.py` даёт 0 непереведённых строк и 0 несовпадений
|
||||
формата.
|
||||
- **Часовые пояса России.** 11 российских зон (UTC+2…UTC+12) без DST, UTC и
|
||||
«Свой сдвиг UTC»; Москва — по умолчанию. US/Канада/Бразилия/Индия/Китай/Япония/
|
||||
Австралия убраны.
|
||||
- **Радио-пресеты России.** 50 городских пресетов с [meshcoretel.ru](https://meshcoretel.ru)
|
||||
(частота, полоса, SF, CR) вместо глобального списка Australia/US/EU. Остался
|
||||
только `Custom (manual)`.
|
||||
- **Устойчивость загрузок.** Range-докачка оборванных `.lua`/`.lang` с места
|
||||
обрыва; отключена фоновая автозагрузка языка при старте; стек задачи
|
||||
`tile_fetch` увеличен до 10 КБ; таблицы разделов переведены в ASCII, чтобы
|
||||
`checkprogsize` не падал на русской Windows.
|
||||
- **Сборка.** T-Deck Plus: `pio run -e LilyGo_TDeck_companion_radio_touch`;
|
||||
merged-образ для прошивки по `0x0` собирается в `out/` командой
|
||||
`pio run -e LilyGo_TDeck_companion_radio_touch -t mergebin`.
|
||||
|
||||
---
|
||||
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="assets/wadamesh-readme-dark.svg">
|
||||
@@ -28,6 +67,8 @@ per-board status.
|
||||
- LilyGo T-Lora Pager: envs `tlora_pager_lr1121_companion_radio_touch` / `tlora_pager_sx1262_companion_radio_touch` (beta); [keyboard shortcuts](TLORA_PAGER_SHORTCUTS.md)
|
||||
- Heltec V4-R8 + Expansion Kit V2: env `heltec_v4_r8_tft_companion_radio_usb_tcp_touch` (beta)
|
||||
- LilyGo T-Display P4: built from `tdisplay_p4/` (ESP-IDF); AMOLED + SX1262 by default, with `WADA_P4_LCD=1` for TFT-LCD and `WADA_P4_LR2021=1` for LR2021 (beta)
|
||||
- Seeed SenseCAP Indicator D1L: env `sensecap_indicator_companion_radio_touch` (experimental, community port, PR #682)
|
||||
- Elecrow CrowPanel Advanced 10.1 (ESP32-P4): built from `crowpanel_p4_101/` (ESP-IDF), one image per board revision with `WADA_CP_REV=1.0|1.1|1.2` (experimental, not yet tested on hardware; requires an SX1262 in the wireless slot)
|
||||
- Attaky Mesh Series: env `attaky_mesh_series_companion_radio_touch` (beta)
|
||||
- Elecrow CrowPanel Advance 3.5: env `crowpanel_35_companion_radio_touch` (beta, hardware validation pending; requires an SX1262 in the expansion slot)
|
||||
- Elecrow CrowPanel Advance 5.0: env `crowpanel_50_companion_radio_touch` (beta, hardware validation pending; requires an SX1262 in the wireless slot and the DIP switch set to it)
|
||||
|
||||
@@ -84,6 +84,15 @@ select OSM, and enable **Tiles from SD card**. See the
|
||||
[offline map tile guide](README.md#offline-map-tiles) for the QGIS export steps
|
||||
and map-provider policy requirements.
|
||||
|
||||
## Web pages
|
||||
|
||||
In the Web browser, **Up** and **Down** read the page: each press moves the
|
||||
highlight to the next link already on screen, or, when there is none, scrolls
|
||||
the text by about two-thirds of a screen. If the highlighted link scrolls out
|
||||
of view, the highlight moves to a link coming into view. Only at the top or
|
||||
bottom of the page does focus leave for the address bar or the toolbar.
|
||||
**OK** opens the highlighted link.
|
||||
|
||||
## Typing & editing
|
||||
|
||||
Inside a text field the left/right arrows move the caret, and when the caret
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"build": {
|
||||
"arduino": {
|
||||
"ldscript": "esp32s3_out.ld",
|
||||
"partitions": "default_8MB.csv",
|
||||
"memory_type": "qio_opi"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": [
|
||||
"-DBOARD_HAS_PSRAM",
|
||||
"-DARDUINO_RUNNING_CORE=1",
|
||||
"-DARDUINO_EVENT_RUNNING_CORE=1"
|
||||
],
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
"psram_type": "opi",
|
||||
"mcu": "esp32s3",
|
||||
"variant": "esp32s3"
|
||||
},
|
||||
"connectivity": ["wifi", "bluetooth", "lora"],
|
||||
"debug": {
|
||||
"default_tool": "esp-builtin",
|
||||
"onboard_tools": ["esp-builtin"],
|
||||
"openocd_target": "esp32s3.cfg"
|
||||
},
|
||||
"frameworks": ["arduino", "espidf"],
|
||||
"name": "Seeed SenseCAP Indicator D1L (8 MB FLASH, 8 MB PSRAM)",
|
||||
"upload": {
|
||||
"flash_size": "8MB",
|
||||
"maximum_ram_size": 8388608,
|
||||
"maximum_size": 8388608,
|
||||
"require_upload_port": true,
|
||||
"speed": 921600
|
||||
},
|
||||
"url": "",
|
||||
"vendor": "Seeed Studio"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
# build output + component manager cache (project-local ESP-IDF comes in via the ../tanmatsu symlinks)
|
||||
build/
|
||||
managed_components/
|
||||
sdkconfig
|
||||
sdkconfig.old
|
||||
dependencies.lock
|
||||
# flashable images produced by build.sh merge
|
||||
*.bin
|
||||
@@ -0,0 +1,3 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
project(application)
|
||||
@@ -0,0 +1,245 @@
|
||||
#!/usr/bin/env bash
|
||||
# wadamesh / Elecrow CrowPanel Advanced 10.1" ESP32-P4 HMI build wrapper. EXPERIMENTAL.
|
||||
# Standalone ESP-IDF app modelled on tdisplay_p4/build.sh: reuses the Tanmatsu's project-local
|
||||
# ESP-IDF 5.5.1 (esp32p4) via the ../tanmatsu symlinks and the shared P4 components.
|
||||
# ./build.sh build # board revision V1.2 (default, newest)
|
||||
# WADA_CP_REV=1.1 ./build.sh build # V1.1 (SX1262 DIO1/RST on GPIO53/54)
|
||||
# WADA_CP_REV=1.0 ./build.sh build # V1.0 (same LoRa pins as V1.1, reversed 1-bit C6 SDIO)
|
||||
# ./build.sh merge # build + one flashable image at 0x0 (build/<target>/*-merged.bin)
|
||||
# ./build.sh flash -p /dev/cu.usbserial-XXXX
|
||||
# ./build.sh fullclean # remove this revision's build tree only
|
||||
set -e
|
||||
|
||||
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
CP_REV="${WADA_CP_REV:-1.2}"
|
||||
case "$CP_REV" in
|
||||
1.2) CP_SDIO_FRAG="sdio_v11" ;;
|
||||
1.1) CP_SDIO_FRAG="sdio_v11" ;;
|
||||
1.0) CP_SDIO_FRAG="sdio_v10" ;;
|
||||
*) echo "[build.sh] WADA_CP_REV must be 1.0, 1.1 or 1.2 (got '$CP_REV')" >&2; exit 1 ;;
|
||||
esac
|
||||
export WADA_CP_REV="$CP_REV"
|
||||
P4_BUILD_TARGET="crowpanel_p4_101_v${CP_REV/./}"
|
||||
P4_BUILD_DIR="$PROJECT_DIR/build/$P4_BUILD_TARGET"
|
||||
|
||||
# This project intentionally applies compatibility fixes inside managed_components
|
||||
# before every build. ESP-IDF's stock fullclean also runs remove_managed_components,
|
||||
# which rejects those expected hash changes and aborts. A P4 full clean therefore
|
||||
# removes only the generated CMake/Ninja tree; dependencies stay in place and the
|
||||
# idempotent patches below remain valid.
|
||||
if [ "$#" -eq 1 ] && [ "$1" = "fullclean" ]; then
|
||||
# Plain rm -rf: cmake is not on PATH before export.sh. Each revision has its own build tree
|
||||
# (and its own sdkconfig inside it), so this removes only the selected one.
|
||||
if [ -d "$P4_BUILD_DIR" ]; then
|
||||
rm -rf "${P4_BUILD_DIR:?}" || { echo "[build.sh] FAILED to remove $P4_BUILD_DIR" >&2; exit 1; }
|
||||
fi
|
||||
if [ -d "$P4_BUILD_DIR" ]; then
|
||||
echo "[build.sh] FAILED to remove $P4_BUILD_DIR" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "[build.sh] removed build/$P4_BUILD_TARGET (patched managed components preserved)"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Keep the baked-in translation + Lua app tables in step with deploy/apps/.
|
||||
# Same for the seeded Lua apps. The PlatformIO envs get this from a pre: hook;
|
||||
# the IDF builds need it here or the P4 boards ship stale copies.
|
||||
python3 "$(cd "$(dirname "$0")/.." && pwd)/scripts/build/pre_gen_baked.py"
|
||||
# LVGL is vendored (gitignored) by fetch-deps.sh, so a copy vendored before the
|
||||
# anim_timer use-after-free fix (#428) still needs it. Idempotent; fails on drift.
|
||||
python3 "$(cd "$(dirname "$0")/.." && pwd)/scripts/build/patch_lvgl_anim_uaf.py" \
|
||||
--patch-file "$(cd "$(dirname "$0")" && pwd)/components/lvgl/upstream/src/misc/lv_anim.c"
|
||||
python3 "$(cd "$(dirname "$0")/.." && pwd)/scripts/build/patch_lvgl_arabic.py" \
|
||||
--patch-file "$(cd "$(dirname "$0")" && pwd)/components/lvgl/upstream/src/misc/lv_txt_ap.c"
|
||||
cd "$PROJECT_DIR"
|
||||
export IDF_TOOLS_PATH="$PWD/esp-idf-tools"
|
||||
# VS Code may launch this wrapper from PlatformIO's virtualenv. Pin the
|
||||
# project-local IDF environment before export.sh inspects that unrelated Python.
|
||||
if [ -z "${IDF_PYTHON_ENV_PATH:-}" ]; then
|
||||
for idf_py_env in "$IDF_TOOLS_PATH"/python_env/idf5.5_py*_env; do
|
||||
if [ -x "$idf_py_env/bin/python" ]; then
|
||||
export IDF_PYTHON_ENV_PATH="$idf_py_env"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
unset VIRTUAL_ENV CONDA_PREFIX
|
||||
# shellcheck disable=SC1091
|
||||
source esp-idf/export.sh >/dev/null 2>&1
|
||||
|
||||
WADA_FW_TAG="${WADA_FW_TAG:-$(git describe --tags --match 'beta_*' --always 2>/dev/null || echo dev)}"
|
||||
WADA_FW_DATE="$(date '+%-d %b %Y')"
|
||||
IDF_ARGS=(-B "build/$P4_BUILD_TARGET" \
|
||||
-DDEVICE=crowpanel_p4_101 \
|
||||
-DSDKCONFIG="$P4_BUILD_DIR/sdkconfig" \
|
||||
-DSDKCONFIG_DEFAULTS="sdkconfigs/general;sdkconfigs/wadamesh;sdkconfigs/crowpanel_p4_101;sdkconfigs/$CP_SDIO_FRAG" \
|
||||
-DWADA_FW_TAG="$WADA_FW_TAG" -DWADA_FW_DATE="$WADA_FW_DATE" \
|
||||
-DIDF_TARGET=esp32p4)
|
||||
|
||||
# A fresh clone has no managed_components yet. Configure once to download them,
|
||||
# then apply the compatibility patches below before the first compilation.
|
||||
if [ ! -f managed_components/espressif__libsodium/CMakeLists.txt ]; then
|
||||
idf.py "${IDF_ARGS[@]}" reconfigure
|
||||
fi
|
||||
|
||||
# --- Build-time patch: libsodium forced includes in paths with spaces -----------------------------
|
||||
# The managed component emits `SHELL:-include <absolute path>`. CMake leaves that
|
||||
# path unquoted in Ninja, so a checkout such as "T7 Shield" reaches GCC as two
|
||||
# input files. GCC accepts the joined -include<path> form, which cannot split.
|
||||
SODIUM_CMAKE="managed_components/espressif__libsodium/CMakeLists.txt"
|
||||
if [ -f "$SODIUM_CMAKE" ] && grep -q 'SHELL:-include' "$SODIUM_CMAKE"; then
|
||||
sed -i '' -e 's|SHELL:-include ${CMAKE_CURRENT_SOURCE_DIR}|-include${CMAKE_CURRENT_SOURCE_DIR}|g' \
|
||||
-e 's|SHELL:-include${CMAKE_CURRENT_SOURCE_DIR}|-include${CMAKE_CURRENT_SOURCE_DIR}|g' "$SODIUM_CMAKE"
|
||||
echo "[build.sh] patched libsodium forced includes (space-safe paths)"
|
||||
fi
|
||||
|
||||
# --- Build-time patch: SD_MMC internal pull-ups (P4 boards) ------------------------------------------
|
||||
# The board has no external pull-ups on the SD data lines; the IDF sdmmc host explicitly FLOATS the
|
||||
# pads unless SDMMC_SLOT_FLAG_INTERNAL_PULLUP is set (so pre-begin gpio_pullup_en gets undone).
|
||||
# Meck-P4's working SD init sets the flag; Arduino's SD_MMC never does and has no API for it. Patch
|
||||
# the P4's own managed copy. Idempotent.
|
||||
SDMMC_C="managed_components/espressif__arduino-esp32/libraries/SD_MMC/src/SD_MMC.cpp"
|
||||
if [ -f "$SDMMC_C" ] && ! grep -q 'wadamesh P4: internal pullups' "$SDMMC_C"; then
|
||||
sed -i '' 's|sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();|sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();\n slot_config.flags \|= SDMMC_SLOT_FLAG_INTERNAL_PULLUP; // wadamesh P4: internal pullups (no external ones on the SD lines)|' "$SDMMC_C"
|
||||
echo "[build.sh] patched arduino SD_MMC.cpp (internal pull-ups on the SD slot)"
|
||||
fi
|
||||
# --- Build-time patch: a dead C6 must not spin the SDIO rx task -----------------------------------
|
||||
# With CONFIG_ESP_HOSTED_TRANSPORT_RESTART_ON_FAILURE=n (see sdkconfigs/tdisplay_p4 for why it is
|
||||
# off), sdio_read_task posts ESP_HOSTED_EVENT_TRANSPORT_FAILURE and then `continue`s: straight back
|
||||
# into a register read that is going to fail again. On a unit whose C6 runs factory ESP-AT the
|
||||
# transport NEVER comes up, so that is an unbounded retry storm: measured at ~16 failed reads per
|
||||
# second, forever, with the whole transport re-initialising on top of it. It floods the USB-CDC the
|
||||
# companion app talks over and keeps a task busy for the life of the session.
|
||||
#
|
||||
# Turning the restart back on is not the answer: that is the boot loop this board had before.
|
||||
# Both are the same mistake: a co-processor that cannot be reached is a permanent condition, and
|
||||
# the driver treats it as transient. Park the task instead. The failure event has already been
|
||||
# posted, Wi-Fi and BLE are simply unavailable, and everything else on the device keeps running.
|
||||
# Idempotent.
|
||||
HOSTED_SDIO="managed_components/nicolaielectronics__esp-hosted-tanmatsu/host/drivers/transport/sdio/sdio_drv.c"
|
||||
if [ -f "$HOSTED_SDIO" ] && ! grep -q 'wadamesh: park instead of spinning' "$HOSTED_SDIO"; then
|
||||
python3 - "$HOSTED_SDIO" <<'PYEOF'
|
||||
import re, sys
|
||||
p = sys.argv[1]
|
||||
s = open(p).read()
|
||||
# Both failure arms look identical apart from the log line: event post, optional restart, continue.
|
||||
old = """#if H_TRANSPORT_RESTART_ON_FAILURE
|
||||
ESP_LOGI(TAG, "Host is resetting itself, to avoid any sdio race condition");
|
||||
g_h.funcs->_h_restart_host();
|
||||
#endif
|
||||
continue;"""
|
||||
new = """#if H_TRANSPORT_RESTART_ON_FAILURE
|
||||
ESP_LOGI(TAG, "Host is resetting itself, to avoid any sdio race condition");
|
||||
g_h.funcs->_h_restart_host();
|
||||
#else
|
||||
/* wadamesh: park instead of spinning. The transport is down and we are
|
||||
* not allowed to reboot the host, so retrying can only fail again at
|
||||
* full speed. The failure event is already posted; stop here and let the
|
||||
* rest of the device run without Wi-Fi/BLE. */
|
||||
ESP_LOGE(TAG, "transport down, host restart disabled: parking rx task (Wi-Fi/BLE unavailable)");
|
||||
while (1) g_h.funcs->_h_msleep(60000);
|
||||
#endif
|
||||
continue;"""
|
||||
n = s.count(old)
|
||||
if n == 0:
|
||||
sys.exit("esp-hosted sdio_drv.c: failure arm not found; patch needs updating")
|
||||
s = s.replace(old, new)
|
||||
open(p, "w").write(s)
|
||||
print(" patched %d failure arm(s)" % n)
|
||||
PYEOF
|
||||
echo "[build.sh] patched esp-hosted sdio_drv.c (park the rx task on a dead transport)"
|
||||
fi
|
||||
|
||||
# ⚠️ The P4/slot-0 branch REBUILDS slot_config from scratch with `.flags = 0`, silently discarding
|
||||
# the flag added above (that's the branch that actually runs with BOARD_SDMMC_SLOT=0): so patch that
|
||||
# struct literal too. Without the flag the IDF host explicitly FLOATS the pads -> deterministic 0x109
|
||||
# CRC at the first data read regardless of card/frequency.
|
||||
if [ -f "$SDMMC_C" ] && ! grep -q 'wadamesh P4: slot0 pullups' "$SDMMC_C"; then
|
||||
sed -i '' 's|^ .flags = 0,$| .flags = SDMMC_SLOT_FLAG_INTERNAL_PULLUP, // wadamesh P4: slot0 pullups (struct rebuilt here; the earlier flag is discarded)|' "$SDMMC_C"
|
||||
echo "[build.sh] patched arduino SD_MMC.cpp (slot-0 struct pull-up flag)"
|
||||
fi
|
||||
|
||||
# --- Build-time patch: the generic esp32p4 variant's SD power pin is THIS board's touch SDA ---------
|
||||
# Arduino's esp32p4 variant (the Espressif P4 Function EV board) defines BOARD_SDMMC_POWER_PIN 45, so
|
||||
# SD_MMC.begin() does pinMode(45, OUTPUT) + a 200 ms power toggle, leaves it driven LOW, and
|
||||
# SD_MMC.end() clears the pin again. On the CrowPanel GPIO45 is I2C0 SDA (GT911, codec, HY2.0 port):
|
||||
# the pinMode makes the peripheral manager detach I2C0 (i2cDeinit), so every Wire call afterwards
|
||||
# failed with "bus is not initialized" and touch never came up (beta_97, tester V1.0 log). The card
|
||||
# here is powered straight from VDD_3V3 (no switch), so the block has no job on this board at all.
|
||||
# main/CMakeLists.txt defines WADA_SDMMC_NO_POWER_PIN; the guard below makes SD_MMC honour it. Fails
|
||||
# the build if the upstream lines change, because touch depends on it. Idempotent.
|
||||
if [ -f "$SDMMC_C" ] && ! grep -q 'WADA_SDMMC_NO_POWER_PIN' "$SDMMC_C"; then
|
||||
if [ "$(grep -c '^#if defined(BOARD_SDMMC_POWER_PIN)$' "$SDMMC_C")" -lt 2 ]; then
|
||||
echo "[build.sh] SD_MMC.cpp: BOARD_SDMMC_POWER_PIN blocks not found; the GPIO45 patch needs updating" >&2
|
||||
exit 1
|
||||
fi
|
||||
sed -i '' 's|^#if defined(BOARD_SDMMC_POWER_PIN)$|#if defined(BOARD_SDMMC_POWER_PIN) \&\& !defined(WADA_SDMMC_NO_POWER_PIN) // wadamesh CrowPanel P4: GPIO45 is I2C SDA|' "$SDMMC_C"
|
||||
echo "[build.sh] patched arduino SD_MMC.cpp (no SD power pin: GPIO45 stays I2C SDA)"
|
||||
fi
|
||||
|
||||
# --- Build-time patch: remember the C6's esp-hosted version from its init event ---------------------
|
||||
# The slave reports its firmware version in the transport INIT event; the host only compares it
|
||||
# (major.minor) and logs a warning. Keep the raw value so main.cpp can say plainly which C6
|
||||
# firmware is fitted. Asking for it over RPC instead (esp_hosted_get_coprocessor_fwversion) is what
|
||||
# an old co-processor may not answer. The variable is defined in variants/crowpanel_p4_101/target.cpp.
|
||||
HOSTED_TDRV="managed_components/nicolaielectronics__esp-hosted-tanmatsu/host/drivers/transport/transport_drv.c"
|
||||
if [ -f "$HOSTED_TDRV" ] && ! grep -q 'wadamesh_c6_fw_version' "$HOSTED_TDRV"; then
|
||||
python3 - "$HOSTED_TDRV" <<'PYEOF'
|
||||
import sys
|
||||
p = sys.argv[1]
|
||||
s = open(p).read()
|
||||
old = "\t// if ESP_PRIV_FIRMWARE_VERSION was not received, slave version will be 0.0.0\n\tcompare_fw_version(slave_fw_version);\n"
|
||||
new = ("\t// if ESP_PRIV_FIRMWARE_VERSION was not received, slave version will be 0.0.0\n"
|
||||
"\t{ extern volatile uint32_t wadamesh_c6_fw_version; extern volatile int wadamesh_c6_fw_known;\n"
|
||||
"\t wadamesh_c6_fw_version = slave_fw_version; wadamesh_c6_fw_known = 1; } /* wadamesh: C6 version for the boot log */\n"
|
||||
"\tcompare_fw_version(slave_fw_version);\n")
|
||||
if s.count(old) != 1:
|
||||
sys.exit("esp-hosted transport_drv.c: version compare not found; patch needs updating")
|
||||
open(p, "w").write(s.replace(old, new))
|
||||
PYEOF
|
||||
echo "[build.sh] patched esp-hosted transport_drv.c (keep the C6 firmware version)"
|
||||
fi
|
||||
|
||||
# --- Build-time patch: this board's C6 ships esp-hosted, so Arduino's hostedInit() must be the real
|
||||
# one. A managed_components tree copied from a legacy ESP-AT T-Display build may carry the stub.
|
||||
HOSTED_C="managed_components/espressif__arduino-esp32/cores/esp32/esp32-hal-hosted.c"
|
||||
if [ -f "$HOSTED_C" ] && grep -q 'wadamesh P4: never start esp_hosted' "$HOSTED_C"; then
|
||||
sed -i '' 's|^static bool hostedInit() { return false; // wadamesh P4: never start esp_hosted.*$|static bool hostedInit() {|' "$HOSTED_C"
|
||||
echo "[build.sh] restored arduino hostedInit() (hosted C6 build)"
|
||||
fi
|
||||
BLEDEV_CPP="managed_components/espressif__arduino-esp32/libraries/BLE/src/BLEDevice.cpp"
|
||||
if [ -f "$BLEDEV_CPP" ] && grep -q 'int rc = ble_gap_read_local_irk(irk);' "$BLEDEV_CPP"; then
|
||||
sed -i '' 's|int rc = ble_gap_read_local_irk(irk);|int rc = 0; (void)irk; // wadamesh: arduino BLE unused; symbol renamed in IDF 5.5 NimBLE|' "$BLEDEV_CPP"
|
||||
echo "[build.sh] patched arduino BLEDevice.cpp (stub renamed ble_gap_read_local_irk)"
|
||||
fi
|
||||
|
||||
# --- Build-time patch: neutralize esp-hosted's auto-init constructor (P4-ONLY) --------------------
|
||||
# Initialization must not run before app_main: the C6 is brought up lazily through Arduino
|
||||
# hostedInit() after the UI, so a C6 that does not answer can only cost Wi-Fi/BLE.
|
||||
# Two copies get pulled in (espressif__esp_hosted via arduino-esp32, and the nicolaielectronics__
|
||||
# esp-hosted-tanmatsu fork via tanmatsu-wifi/badge-bsp). The build actually links the fork, so patch
|
||||
# BOTH so whichever is linked never grabs the SDIO.
|
||||
for HDIR in espressif__esp_hosted nicolaielectronics__esp-hosted-tanmatsu; do
|
||||
HINIT_C="managed_components/$HDIR/host/port/esp/freertos/src/port_esp_hosted_host_init.c"
|
||||
if [ -f "$HINIT_C" ] && grep -q 'ESP_ERROR_CHECK(esp_hosted_init());' "$HINIT_C"; then
|
||||
sed -i '' 's|ESP_ERROR_CHECK(esp_hosted_init());|/* wadamesh P4: C6 initialized lazily via hostedInit() after the UI */|' "$HINIT_C"
|
||||
echo "[build.sh] neutralized $HDIR auto-init constructor (defer until board power)"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$#" -eq 1 ] && [ "$1" = "merge" ]; then
|
||||
idf.py "${IDF_ARGS[@]}" build
|
||||
OUT="$P4_BUILD_DIR/wadamesh-crowpanel-p4-101-v${CP_REV/./}-merged.bin"
|
||||
# Same offsets and flash settings as scripts/build/p4-release.sh (bootloader 0x2000 on the P4).
|
||||
python -m esptool --chip esp32p4 merge_bin --flash_mode dio --flash_size 16MB --flash_freq 80m \
|
||||
-o "$OUT" \
|
||||
0x2000 "$P4_BUILD_DIR/bootloader/bootloader.bin" \
|
||||
0x8000 "$P4_BUILD_DIR/partition_table/partition-table.bin" \
|
||||
0xf000 "$P4_BUILD_DIR/ota_data_initial.bin" \
|
||||
0x20000 "$P4_BUILD_DIR/application.bin"
|
||||
echo "[build.sh] merged image: $OUT (flash at 0x0)"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
exec idf.py "${IDF_ARGS[@]}" "$@"
|
||||
@@ -0,0 +1 @@
|
||||
../../tdisplay_p4/components/RadioLib
|
||||
@@ -0,0 +1 @@
|
||||
../../tanmatsu/components/ardlibs
|
||||
@@ -0,0 +1 @@
|
||||
../../tanmatsu/components/esp_hosted
|
||||
@@ -0,0 +1 @@
|
||||
../../tanmatsu/components/lvgl
|
||||
@@ -0,0 +1 @@
|
||||
../../tdisplay_p4/components/meshcore
|
||||
@@ -0,0 +1,22 @@
|
||||
# The wadamesh app layer (MyMesh + DataStore + helpers + transports + the LVGL UITask), compiled from
|
||||
# the repo's src/ plus variants/crowpanel_p4_101/. Mirrors tdisplay_p4/components/wadamesh_app, minus
|
||||
# the ESP-AT c6_at component (this board's C6 ships esp-hosted firmware).
|
||||
set(REPO "${CMAKE_CURRENT_LIST_DIR}/../../..")
|
||||
set(APP "${REPO}/src")
|
||||
file(GLOB_RECURSE APP_SRCS "${APP}/*.cpp" "${APP}/*.c" "${REPO}/variants/crowpanel_p4_101/*.cpp" "${REPO}/variants/crowpanel_p4_101/*.c")
|
||||
list(FILTER APP_SRCS EXCLUDE REGEX "/main\\.cpp$")
|
||||
list(FILTER APP_SRCS EXCLUDE REGEX "/helpers/input/(HeltecV4CapTouch|TDeckKeyboard|TDeckTouch|TDeckTrackball|RakTapV2Touch)\\.cpp$")
|
||||
|
||||
file(GLOB LUA_SRCS "${REPO}/lib/lua/src/*.c")
|
||||
|
||||
idf_component_register(
|
||||
SRCS ${APP_SRCS} ${LUA_SRCS}
|
||||
INCLUDE_DIRS "${APP}" "${APP}/ui-touch" "${REPO}/include" "${REPO}/variants/crowpanel_p4_101" "${REPO}/lib/lua/src"
|
||||
REQUIRES espressif__arduino-esp32 meshcore lvgl ardlibs RadioLib nvs_flash esp_lcd fatfs
|
||||
esp_driver_i2c esp_driver_gpio esp_driver_ledc esp_hosted h2zero__esp-nimble-cpp bt
|
||||
soc esp_hw_support app_update driver esp_timer esp_partition spi_flash esp_adc esp_pm espcoredump
|
||||
espressif__esp_lcd_ek79007 esp_mm # esp_mm: esp_cache_msync (framebuffer clear)
|
||||
WHOLE_ARCHIVE
|
||||
)
|
||||
target_compile_options(${COMPONENT_LIB} PRIVATE -w
|
||||
-include "${REPO}/variants/tdisplay_p4/tdisplay_p4_compat.h") # adcAttachPin() shim (arduino 3.x dropped it)
|
||||
@@ -0,0 +1 @@
|
||||
../tanmatsu/esp-idf
|
||||
@@ -0,0 +1 @@
|
||||
../tanmatsu/esp-idf-tools
|
||||
@@ -0,0 +1,98 @@
|
||||
idf_build_get_property(idf_target IDF_TARGET)
|
||||
|
||||
idf_component_register(
|
||||
SRCS
|
||||
"main.cpp"
|
||||
PRIV_REQUIRES
|
||||
esp_lcd # MIPI-DSI (EK79007)
|
||||
esp_driver_i2c
|
||||
esp_driver_gpio
|
||||
fatfs # SD_MMC storage
|
||||
nvs_flash
|
||||
bt # NimBLE companion (BLE over the C6)
|
||||
espressif__arduino-esp32
|
||||
esp_hosted # ESP32-C6 Wi-Fi/BLE over SDIO slot 1
|
||||
meshcore
|
||||
lvgl
|
||||
RadioLib # target.h (included by main.cpp) pulls <RadioLib.h>
|
||||
wadamesh_app
|
||||
INCLUDE_DIRS
|
||||
"."
|
||||
)
|
||||
|
||||
# Same warning policy as tdisplay_p4/main: vendored code must not fail the build on warnings.
|
||||
idf_build_set_property(COMPILE_OPTIONS "-Wno-error=unused-variable" APPEND)
|
||||
idf_build_set_property(COMPILE_OPTIONS "-Wno-error=unused-const-variable" APPEND)
|
||||
idf_build_set_property(COMPILE_OPTIONS "-Wno-error=stringop-truncation" APPEND)
|
||||
idf_build_set_property(COMPILE_OPTIONS "-Wno-error=stringop-overflow" APPEND)
|
||||
idf_build_set_property(COMPILE_OPTIONS "-Wno-error=array-bounds" APPEND)
|
||||
idf_build_set_property(COMPILE_OPTIONS "-Wno-error=restrict" APPEND)
|
||||
idf_build_set_property(COMPILE_OPTIONS "-Wno-error=maybe-uninitialized" APPEND)
|
||||
idf_build_get_property(_co COMPILE_OPTIONS)
|
||||
list(REMOVE_ITEM _co "-Werror=all")
|
||||
idf_build_set_property(COMPILE_OPTIONS "${_co}")
|
||||
|
||||
# ---- Elecrow CrowPanel Advanced 10.1" ESP32-P4 (EXPERIMENTAL) app define set. -------------------
|
||||
# Pins: Elecrow schematics V1.0/V1.1/V1.2 + their ESP-IDF lessons; per-pin status and sources in
|
||||
# the pin table at the top of variants/crowpanel_p4_101/target.h.
|
||||
#
|
||||
# Board revision (build.sh WADA_CP_REV=1.0|1.1|1.2, default 1.2). Only two things differ:
|
||||
# - the SX1262 DIO1/NRST pair (J9.1 / J11.1): GPIO53/54 on V1.0 + V1.1, GPIO27/28 on V1.2;
|
||||
# - the C6 SDIO data-pin order (sdkconfig fragment, build.sh).
|
||||
if(NOT DEFINED ENV{WADA_CP_REV} OR "$ENV{WADA_CP_REV}" STREQUAL "1.2")
|
||||
set(CP_REV_DEFS CP_REV=12 P_LORA_DIO_1=27 P_LORA_RESET=28)
|
||||
message(STATUS "wadamesh: CrowPanel P4 10.1 board revision V1.2")
|
||||
elseif("$ENV{WADA_CP_REV}" STREQUAL "1.1")
|
||||
set(CP_REV_DEFS CP_REV=11 P_LORA_DIO_1=53 P_LORA_RESET=54)
|
||||
message(STATUS "wadamesh: CrowPanel P4 10.1 board revision V1.1")
|
||||
elseif("$ENV{WADA_CP_REV}" STREQUAL "1.0")
|
||||
set(CP_REV_DEFS CP_REV=10 P_LORA_DIO_1=53 P_LORA_RESET=54)
|
||||
message(STATUS "wadamesh: CrowPanel P4 10.1 board revision V1.0")
|
||||
else()
|
||||
message(FATAL_ERROR "WADA_CP_REV must be 1.0, 1.1 or 1.2 (got '$ENV{WADA_CP_REV}')")
|
||||
endif()
|
||||
|
||||
set(WADA_DEFS
|
||||
HAS_CROWPANEL_P4_101=1 ESP32_PLATFORM MC_VENDORED_TOUCH_APP UI_LVGL=1 HAS_TOUCH_UI=1
|
||||
${CP_REV_DEFS}
|
||||
USE_SX1262 RADIO_CLASS=CustomSX1262 WRAPPER_CLASS=CustomSX1262Wrapper
|
||||
SX126X_RX_BOOSTED_GAIN=1 SX126X_CURRENT_LIMIT=140
|
||||
SX126X_DIO2_AS_RF_SWITCH=true SX126X_DIO3_TCXO_VOLTAGE=1.6f # Elecrow Lesson14: RadioLib defaults + 1.6 V TCXO
|
||||
MULTI_TRANSPORT_COMPANION TCP_PORT=5000 WS_PORT=8765 BLE_PIN_CODE=123456
|
||||
LORA_FREQ=869.618 LORA_BW=62.5 LORA_SF=8 # EU 868 default like the other P4 boards; region is a setting
|
||||
LORA_TX_POWER=22 MAX_LORA_TX_POWER=22
|
||||
MAX_CONTACTS=2000 MAX_GROUP_CHANNELS=40 # 32 MB PSRAM
|
||||
ENABLE_PRIVATE_KEY_IMPORT=1 ENABLE_PRIVATE_KEY_EXPORT=1
|
||||
|
||||
# --- SX1262 on the external wireless header J9/J11 (SPI3). DIO1/NRST from the revision block. ---
|
||||
P_LORA_NSS=10 P_LORA_BUSY=9 P_LORA_SCLK=8 P_LORA_MISO=7 P_LORA_MOSI=6
|
||||
|
||||
# --- Display: EK79007 1024x600 MIPI-DSI, native landscape, LVGL at native resolution. ---
|
||||
DISPLAY_CLASS=EK79007Display SCREEN_WIDTH=1024 SCREEN_HEIGHT=600
|
||||
|
||||
# --- Touch GT911 + shared board I2C0 (codec, HY2.0 port). Wire is begun by ESP32Board::begin. ---
|
||||
PIN_BOARD_SDA=45 PIN_BOARD_SCL=46 PIN_TOUCH_SDA=45 PIN_TOUCH_SCL=46 PIN_TOUCH_RST=40 PIN_TOUCH_INT=42
|
||||
|
||||
# --- microSD: SDMMC slot 0, 1-bit (only D0 is wired): CLK43 / CMD44 / D0 39. C6 is slot 1. ---
|
||||
BOARD_HAS_SDMMC=1 BOARD_SDMMC_SLOT=0
|
||||
# The generic esp32p4 Arduino variant names GPIO45 as an SD power switch (BOARD_SDMMC_POWER_PIN);
|
||||
# here 45 is the touch/codec I2C SDA and the card has no power switch. build.sh makes SD_MMC.cpp
|
||||
# skip that pin when this is defined; without it every SD_MMC.begin()/end() tore down I2C0.
|
||||
WADA_SDMMC_NO_POWER_PIN=1
|
||||
)
|
||||
foreach(_d ${WADA_DEFS})
|
||||
idf_build_set_property(COMPILE_OPTIONS "-D${_d}" APPEND)
|
||||
endforeach()
|
||||
|
||||
# Firmware version/tag (build.sh passes WADA_FW_TAG/-DATE from git describe + date).
|
||||
if(NOT WADA_FW_TAG)
|
||||
set(WADA_FW_TAG "dev")
|
||||
endif()
|
||||
if(NOT WADA_FW_DATE)
|
||||
set(WADA_FW_DATE "")
|
||||
endif()
|
||||
idf_build_set_property(COMPILE_OPTIONS "-DFIRMWARE_RELEASE_TAG=\"${WADA_FW_TAG}\"" APPEND)
|
||||
idf_build_set_property(COMPILE_OPTIONS "-DFIRMWARE_BUILD_DATE=\"${WADA_FW_DATE}\"" APPEND)
|
||||
idf_build_set_property(COMPILE_OPTIONS "-DFIRMWARE_VERSION=\"wadamesh ${WADA_FW_TAG}\"" APPEND)
|
||||
# NOTE: no FIRMWARE_OTA_ENV on purpose. This is an experimental board with no release artifact on
|
||||
# firmware.wadamesh.com yet, so the on-device update UI stays hidden (CAP_OTA 0 in device_caps.h).
|
||||
@@ -0,0 +1,12 @@
|
||||
dependencies:
|
||||
idf: ">=5.5.1"
|
||||
# Same component set as the T-Display P4 (esp-hosted 2.12.3 fork via tanmatsu-wifi, arduino-esp32
|
||||
# for the shared Arduino src/, esp-nimble-cpp for BLE over the C6). badge-bsp is not initialised on
|
||||
# this board; it is here because tanmatsu-wifi depends on it.
|
||||
badgeteam/badge-bsp: "^0.9.9"
|
||||
nicolaielectronics/tanmatsu-wifi: "^1.1.2"
|
||||
nicolaielectronics/tanmatsu-lora: "^0.3.0"
|
||||
espressif/arduino-esp32: "3.3.10"
|
||||
h2zero/esp-nimble-cpp: "^2.3.0"
|
||||
# EK79007 MIPI-DSI panel driver (Elecrow's lessons pin ^1.0.2).
|
||||
espressif/esp_lcd_ek79007: "^1.0.2"
|
||||
@@ -0,0 +1,277 @@
|
||||
// wadamesh on the Elecrow CrowPanel Advanced 10.1" ESP32-P4 HMI (1024x600). EXPERIMENTAL.
|
||||
//
|
||||
// Standalone ESP-IDF app, modelled on tdisplay_p4/main/main.cpp (same P4 + C6 esp-hosted pairing,
|
||||
// same storage law: hot store on the internal LittleFS 'storage' partition, the microSD for tiles and
|
||||
// bulk). The board has no I/O expander, so bring-up is: on-chip LDO rails -> EK79007 panel -> radio
|
||||
// -> storage -> UI, and the C6 last. Board globals + radio_init() live in
|
||||
// variants/crowpanel_p4_101/target.cpp. Pin map: the table in variants/crowpanel_p4_101/target.h.
|
||||
#include "../../variants/tdisplay_p4/tdisplay_p4_compat.h" // adcAttachPin() shim, BEFORE target.h
|
||||
#include <Arduino.h>
|
||||
#include <Mesh.h>
|
||||
#include "MyMesh.h"
|
||||
#include <new>
|
||||
#include "esp_heap_caps.h"
|
||||
#include "UITask.h"
|
||||
#include "target.h"
|
||||
#include <LittleFS.h>
|
||||
#include <SD_MMC.h>
|
||||
#include <WiFi.h>
|
||||
#include "../../src/helpers/esp32/MultiTransportCompanionInterface.h"
|
||||
#include <helpers/esp32/WifiRuntimeStore.h>
|
||||
#include <helpers/esp32/TouchPrefsStore.h>
|
||||
#include "../../src/helpers/esp32/BootTimeSync.h"
|
||||
#include "esp_hosted.h"
|
||||
#include "esp_netif.h"
|
||||
#include "esp_event.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "lvgl.h"
|
||||
|
||||
#ifndef TCP_PORT
|
||||
#define TCP_PORT 5000
|
||||
#endif
|
||||
#ifndef WS_PORT
|
||||
#define WS_PORT 8765
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_BT_NIMBLE_TRANSPORT_UART)
|
||||
#error "CrowPanel P4 C6 requires NimBLE hosted HCI; disable CONFIG_BT_NIMBLE_TRANSPORT_UART"
|
||||
#endif
|
||||
|
||||
extern "C" bool hostedInitBLE(); // arduino-esp32 BLE controller bring-up over esp-hosted
|
||||
extern "C" bool hostedSetPins(int8_t clk, int8_t cmd, int8_t d0, int8_t d1, int8_t d2, int8_t d3, int8_t rst);
|
||||
|
||||
// C6 SDIO pin set. Arduino's hostedInit() does NOT take these from sdkconfig: it passes the generic
|
||||
// esp32p4 variant's BOARD_SDIO_ESP_HOSTED_* (CLK18 CMD19 D0-D3 = 14,15,16,17, RST 54) to
|
||||
// esp_hosted_sdio_set_config(), which overrides Kconfig. That order happens to match the T-Display
|
||||
// P4 and the CrowPanel V1.0, but V1.1/V1.2 route D0..D3 to GPIO17..14, and C6_EN is GPIO32 on every
|
||||
// revision. Must run before anything can start esp-hosted (Wi-Fi, BLE, boot time sync).
|
||||
// The bus width (4-bit, or 1-bit on V1.0) still comes from the sdkconfig fragment.
|
||||
// Say once, plainly, which esp-hosted firmware the C6 runs (known once the transport is up). A C6
|
||||
// older than the host (V1.0 units have shipped with 2.3.0 against this 2.12.x host) can leave RPCs
|
||||
// unanswered, each costing the 5 s RPC timeout on the calling task, so Wi-Fi reconnects are spaced
|
||||
// out further on such a C6 rather than stalling the UI loop every 10 s.
|
||||
static int s_c6_state = -1; // -1 unknown, 0 matches the host, 1 older than the host
|
||||
static void crowpanelC6ReportOnce(const char* when) {
|
||||
static bool s_done = false;
|
||||
if (s_done) return;
|
||||
char line[200];
|
||||
const int st = crowpanelC6Describe(line, sizeof line);
|
||||
if (st < 0) return;
|
||||
s_done = true;
|
||||
s_c6_state = st;
|
||||
printf("[C6] %s (seen at %s)\n", line, when);
|
||||
if (st == 1) printf("[C6] old co-processor: Wi-Fi reconnect attempts every 60 s instead of 10 s\n");
|
||||
}
|
||||
|
||||
static void crowpanelC6Pins() {
|
||||
#if CP_REV == 10
|
||||
const bool ok = hostedSetPins(18, 19, 14, 15, 16, 17, 32);
|
||||
#else
|
||||
const bool ok = hostedSetPins(18, 19, 17, 16, 15, 14, 32);
|
||||
#endif
|
||||
printf("[BOOT] C6 SDIO pins set for V%d.%d: %s\n", CP_REV / 10, CP_REV % 10, ok ? "ok" : "FAILED");
|
||||
}
|
||||
|
||||
// Boot-trace hooks the shared code defines on the S3 boards (src/main.cpp, excluded here).
|
||||
volatile int g_boot_phase = 0;
|
||||
extern "C" void set_boot_phase(int phase) { g_boot_phase = phase; }
|
||||
|
||||
// App globals: src/main.cpp declares these on the S3 boards; this build owns them.
|
||||
DataStore store(LittleFS, rtc_clock);
|
||||
bool g_fs_ok = false; // internal 'storage' (LittleFS) mounted
|
||||
bool g_sd_ok = false; // microSD mounted
|
||||
bool g_sd_no_card_at_boot = false; // boot probe: no card answered (UITask's first lazy mount skips)
|
||||
MultiTransportCompanionInterface serial_interface;
|
||||
StdRNG fast_rng;
|
||||
SimpleMeshTables tables;
|
||||
UITask ui_task(&board, &serial_interface);
|
||||
static MyMesh& makeTheMesh() {
|
||||
void* mem = heap_caps_malloc(sizeof(MyMesh), MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
|
||||
if (!mem) mem = malloc(sizeof(MyMesh));
|
||||
return *new (mem) MyMesh(radio_driver, fast_rng, rtc_clock, tables, store, &ui_task);
|
||||
}
|
||||
MyMesh& the_mesh = makeTheMesh();
|
||||
|
||||
static void wadameshSetup() {
|
||||
Serial.begin(115200);
|
||||
delay(150);
|
||||
printf("[BOOT] wadamesh / CrowPanel P4 10.1 (board revision V%d.%d, EXPERIMENTAL)\n", CP_REV / 10, CP_REV % 10);
|
||||
|
||||
// 1. On-chip LDO rails (DSI PHY + the 3.3 V pad domain of touch/LCD-reset/SD), backlight + amp off.
|
||||
crowpanelP4PowerOn();
|
||||
|
||||
// 2. Shared I2C0 (GT911, codec, HY2.0 port) on 45/46.
|
||||
board.begin();
|
||||
|
||||
// 3. EK79007 panel, before LVGL flushes to it.
|
||||
if (!display.begin()) printf("[BOOT] EK79007 display init FAILED\n");
|
||||
|
||||
// 4. lwIP/tcpip + default event loop before any Wi-Fi/netif call (esp_wifi_remote needs it).
|
||||
esp_netif_init();
|
||||
esp_event_loop_create_default();
|
||||
crowpanelC6Pins();
|
||||
printf("[BOOT] C6 = esp-hosted (lazy Wi-Fi/BLE initialization)\n");
|
||||
|
||||
// 5. Radio (SX1262 on J9/J11).
|
||||
if (!radio_init()) printf("[BOOT] radio_init FAILED\n");
|
||||
|
||||
DisplayDriver* disp = &display;
|
||||
|
||||
// 6. Storage: internal LittleFS 'storage' = the hot store; the microSD = tiles, backups, bulk.
|
||||
g_fs_ok = LittleFS.begin(true, "/lfs", 10, "storage");
|
||||
printf("[storage] LittleFS(storage) = %s\n", g_fs_ok ? "OK" : "FAILED");
|
||||
if (g_fs_ok) { LittleFS.mkdir("/identity"); LittleFS.mkdir("/bl"); }
|
||||
// microSD on SDMMC slot 0, 1-bit: the J5 slot only has D0 routed (CLK43 / CMD44 / D0 39), as in
|
||||
// Elecrow's Lesson08. Pad power is LDO4, which crowpanelP4PowerOn() already holds, so SD_MMC must
|
||||
// not try to claim it again (-1 = external power; the card itself is on VDD_3V3 with no switch).
|
||||
// The card has pull-ups on CMD/D0 (R27/R28); the build also enables the internal ones (build.sh
|
||||
// patch), as Elecrow does. DAT1-DAT3 are not connected to the P4 (schematic V1.0-V1.2), so the slot
|
||||
// can only run 1-bit. V1.0 also shows a 10k pull-down on the card's DAT3 (R33, with the pull-up
|
||||
// R29 marked "10K/NC"); a card that sees DAT3 low at its first command enters SPI mode and never
|
||||
// answers in SD mode, which would look exactly like an empty slot (unverified on hardware).
|
||||
SD_MMC.setPowerChannel(-1);
|
||||
SD_MMC.setPins(43, 44, 39);
|
||||
for (int p : {44, 39}) gpio_pullup_en((gpio_num_t)p);
|
||||
// Quiet presence check first: an empty slot (or a card that never answers the first command) is
|
||||
// reported once, instead of three IDF + Arduino error pairs from the mount ladder below. The
|
||||
// ladder only runs when a card answered, which is when a lower clock can actually help.
|
||||
const esp_err_t sd_probe = crowpanelSdProbe();
|
||||
if (sd_probe == ESP_ERR_TIMEOUT) {
|
||||
g_sd_no_card_at_boot = true;
|
||||
sdMountDiagBegin();
|
||||
sdMountDiagAttempt(400000u, false, false);
|
||||
sdMountDiagSetMounted(false, 0);
|
||||
printf("[storage] SD_MMC = no card or not responding (1-bit slot, no answer at 400 kHz)\n");
|
||||
} else {
|
||||
if (sd_probe != ESP_OK)
|
||||
printf("[storage] SD_MMC probe: card answered but init failed (%s); trying the mount ladder\n",
|
||||
esp_err_to_name(sd_probe));
|
||||
struct { int khz; const char* tag; } tries[] = {
|
||||
{ SDMMC_FREQ_DEFAULT, "1-bit 20MHz" },
|
||||
{ 10000, "1-bit 10MHz (Elecrow)" },
|
||||
{ 5000, "1-bit 5MHz" },
|
||||
};
|
||||
sdMountDiagBegin();
|
||||
uint32_t mounted_hz = 0;
|
||||
for (auto& t : tries) {
|
||||
const bool begin_ok = SD_MMC.begin("/sdcard", true, false, t.khz);
|
||||
g_sd_ok = begin_ok && SD_MMC.cardType() != CARD_NONE;
|
||||
sdMountDiagAttempt((uint32_t)t.khz * 1000u, begin_ok, g_sd_ok);
|
||||
printf("[storage] SD_MMC try %s -> %s\n", t.tag, g_sd_ok ? "OK" : "fail");
|
||||
if (g_sd_ok) { mounted_hz = (uint32_t)t.khz * 1000u; break; }
|
||||
SD_MMC.end();
|
||||
delay(120);
|
||||
}
|
||||
sdMountDiagSetMounted(g_sd_ok, mounted_hz);
|
||||
printf("[storage] SD_MMC = %s\n", g_sd_ok ? "OK" : "card present but mount failed");
|
||||
}
|
||||
store.begin(); // internal LittleFS is the DataStore root (P4 storage law)
|
||||
|
||||
the_mesh.begin(disp != NULL);
|
||||
|
||||
wifiConfigBegin(); // NVS only, no radio
|
||||
|
||||
serial_interface.begin(Serial, TCP_PORT, WS_PORT);
|
||||
serial_interface.setBroadcastResponses(true);
|
||||
the_mesh.startInterface(serial_interface);
|
||||
|
||||
sensors.begin();
|
||||
ui_task.begin(disp, &sensors, the_mesh.getNodePrefs());
|
||||
board.onBootComplete();
|
||||
printf("[BOOT] setup done\n");
|
||||
|
||||
// ---- C6 bring-up, AFTER the UI ----------------------------------------------------------------
|
||||
// A C6 that does not answer (wrong firmware, wrong SDIO pin set for the revision) must cost Wi-Fi
|
||||
// and BLE only: display, touch and LoRa are already up by now.
|
||||
#if defined(BLE_PIN_CODE)
|
||||
char* nm = the_mesh.getNodePrefs()->node_name;
|
||||
serial_interface.prepareBle("wadamesh-", nm, the_mesh.getBLEPin());
|
||||
if (wifiConfigGetBleEnabled()) {
|
||||
if (hostedInitBLE()) serial_interface.beginBle("wadamesh-", nm, the_mesh.getBLEPin());
|
||||
else printf("[BOOT] hostedInitBLE FAILED (BLE unavailable; LoRa, touch and the UI keep running)\n");
|
||||
crowpanelC6ReportOnce("BLE start");
|
||||
} else {
|
||||
printf("[BOOT] BLE off in settings: C6 not started for it\n");
|
||||
}
|
||||
#endif
|
||||
{
|
||||
uint32_t synced_epoch = 0;
|
||||
const BootTimeSyncResult r = bootTimeSyncRun(rtc_clock.timeIsCurrent(), synced_epoch);
|
||||
if (r == BootTimeSyncResult::Ok) {
|
||||
rtc_clock.setCurrentTime(synced_epoch);
|
||||
printf("[BOOT] cold-boot time sync ok: %lu\n", (unsigned long)synced_epoch);
|
||||
} else if (r != BootTimeSyncResult::Skipped) {
|
||||
printf("[BOOT] cold-boot time sync: %s\n", bootTimeSyncResultName(r));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void app_main(void) {
|
||||
crowpanelP4InstallFullRestart(); // before anything else registers a shutdown handler
|
||||
initArduino();
|
||||
wadameshSetup();
|
||||
|
||||
// Wi-Fi state machine + SNTP + TCP/WS companion server, as in tdisplay_p4/main/main.cpp
|
||||
// (esp-hosted backend: Arduino's real WiFi over esp_wifi_remote).
|
||||
bool wifi_started = false, wifi_radio_prev = true, wifi_radio_inited = false;
|
||||
bool sntp_kicked = false, sntp_pushed = false, modem_sleep_set = false;
|
||||
uint32_t last_wifi_retry_ms = 0;
|
||||
const uint32_t WIFI_RETRY_INTERVAL_MS = 10000;
|
||||
const uint32_t WIFI_RETRY_INTERVAL_OLD_C6_MS = 60000; // see crowpanelC6ReportOnce()
|
||||
|
||||
for (;;) {
|
||||
ui_task.loop();
|
||||
|
||||
bool wifi_radio_en = wifiConfigWantsWifi();
|
||||
if (!wifi_radio_inited) {
|
||||
wifi_radio_inited = true;
|
||||
wifi_radio_prev = wifi_radio_en;
|
||||
} else if (wifi_radio_en != wifi_radio_prev) {
|
||||
wifi_radio_prev = wifi_radio_en;
|
||||
if (!wifi_radio_en) { WiFi.disconnect(true); delay(50); WiFi.mode(WIFI_OFF); }
|
||||
wifi_started = false;
|
||||
}
|
||||
if (wifiConfigConsumeApplyRequest()) {
|
||||
if (wifi_started) {
|
||||
if (!wifi_radio_en) { WiFi.disconnect(true); delay(50); WiFi.mode(WIFI_OFF); }
|
||||
else { WiFi.disconnect(false, false); delay(50); }
|
||||
}
|
||||
wifi_started = false; last_wifi_retry_ms = 0;
|
||||
}
|
||||
if (wifi_radio_en) {
|
||||
if (!wifi_started) {
|
||||
wifi_started = true;
|
||||
WiFi.mode(WIFI_STA);
|
||||
if (wifiConfigHasRuntime()) {
|
||||
char ssid[WIFI_CONFIG_SSID_MAX], pwd[WIFI_CONFIG_PWD_MAX];
|
||||
wifiConfigGetSsid(ssid, sizeof(ssid)); wifiConfigGetPwd(pwd, sizeof(pwd));
|
||||
if (strlen(ssid) > 0) { WiFi.begin(ssid, pwd[0] ? pwd : nullptr); last_wifi_retry_ms = millis(); }
|
||||
}
|
||||
}
|
||||
if (wifiConfigHasRuntime() && WiFi.status() != WL_CONNECTED) {
|
||||
uint32_t now = millis();
|
||||
crowpanelC6ReportOnce("Wi-Fi start");
|
||||
const uint32_t retry_ms = (s_c6_state == 1) ? WIFI_RETRY_INTERVAL_OLD_C6_MS : WIFI_RETRY_INTERVAL_MS;
|
||||
if ((uint32_t)(now - last_wifi_retry_ms) >= retry_ms) {
|
||||
last_wifi_retry_ms = now;
|
||||
char ssid[WIFI_CONFIG_SSID_MAX], pwd[WIFI_CONFIG_PWD_MAX];
|
||||
wifiConfigGetSsid(ssid, sizeof(ssid)); wifiConfigGetPwd(pwd, sizeof(pwd));
|
||||
if (strlen(ssid) > 0) { WiFi.disconnect(false, true); WiFi.begin(ssid, pwd[0] ? pwd : nullptr); }
|
||||
}
|
||||
}
|
||||
if (WiFi.status() == WL_CONNECTED) {
|
||||
if (!modem_sleep_set) { WiFi.setSleep(true); modem_sleep_set = true; crowpanelC6ReportOnce("Wi-Fi connected"); }
|
||||
serial_interface.startTcpServer(true);
|
||||
if (!sntp_pushed) {
|
||||
if (!sntp_kicked) { configTime(0, 0, "pool.ntp.org", "time.nist.gov"); sntp_kicked = true; }
|
||||
const uint32_t e = (uint32_t)time(nullptr);
|
||||
if (e > 1700000000) { rtc_clock.setCurrentTime(e); sntp_pushed = true; printf("[TIME] SNTP -> rtc %lu\n", (unsigned long)e); }
|
||||
}
|
||||
}
|
||||
}
|
||||
serial_interface.tickWebSocketHandshake();
|
||||
sensors.loop();
|
||||
the_mesh.loop();
|
||||
vTaskDelay(1);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
# Elecrow CrowPanel P4 10.1: standalone 16 MB partition table (same layout as the T-Display P4).
|
||||
# NOT an AppFS/launcher app (that's the Tanmatsu): this flashes bootloader+app directly.
|
||||
# Dual OTA app slots (4 MB each; the P4 wadamesh image is ~2.5-3 MB) + a big FAT for
|
||||
# identity/prefs/contacts/chat history + map tiles.
|
||||
# Name, Type, SubType, Offset, Size, Flags
|
||||
nvs, data, nvs, 0x9000, 24K,
|
||||
otadata, data, ota, 0xF000, 8K,
|
||||
phy_init, data, phy, 0x11000, 4K,
|
||||
ota_0, app, ota_0, 0x20000, 4M,
|
||||
ota_1, app, ota_1, 0x420000, 4M,
|
||||
storage, data, fat, 0x820000, 8000K,
|
||||
coredump, data, coredump, 0xFF0000, 64K,
|
||||
|
@@ -0,0 +1,58 @@
|
||||
# Elecrow CrowPanel Advanced 10.1" ESP32-P4 HMI (1024x600) board sdkconfig fragment. EXPERIMENTAL.
|
||||
# Modelled on sdkconfigs/tdisplay_p4 (same ESP32-P4NRW32 + ESP32-C6-MINI-1 esp-hosted pairing). The
|
||||
# C6 SDIO pin/width set lives in a per-revision fragment (sdio_v10 / sdio_v11), layered after this.
|
||||
CONFIG_IDF_TARGET="esp32p4"
|
||||
|
||||
# 32 MB HEX PSRAM @ 200 MHz (in-package on the P4NRW32; Elecrow's V1.0/V1.1 lessons run HEX 200M).
|
||||
# 200 MHz is behind CONFIG_IDF_EXPERIMENTAL_FEATURES on IDF 5.5; without it Kconfig drops to 20 MHz
|
||||
# and the DPI panel underruns fetching its PSRAM framebuffer.
|
||||
CONFIG_SPIRAM=y
|
||||
CONFIG_IDF_EXPERIMENTAL_FEATURES=y
|
||||
CONFIG_SPIRAM_SPEED_200M=y
|
||||
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=65536
|
||||
|
||||
# 16 MB W25Q128 + our standalone dual-OTA partition table (same layout as the T-Display P4).
|
||||
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
|
||||
CONFIG_PARTITION_TABLE_CUSTOM=y
|
||||
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partition_tables/crowpanel_p4_101_16M.csv"
|
||||
|
||||
# MIPI-DSI (EK79007)
|
||||
CONFIG_LCD_DSI_ISR_IRAM_SAFE=y
|
||||
|
||||
# ESP32-C6-MINI-1 co-processor over SDIO slot 1 (CLK18 / CMD19; data pins per revision fragment).
|
||||
# Factory C6 firmware is esp-hosted MCU 2.12.3 (Elecrow "Advance_P4_On-Board_ESP32C6_Firmware_V2.12.3"),
|
||||
# the same version as the hosted fork tanmatsu-wifi pulls in.
|
||||
CONFIG_SLAVE_IDF_TARGET_ESP32C6=y
|
||||
CONFIG_ESP_HOSTED_CP_TARGET_ESP32C6=y
|
||||
CONFIG_ESP_HOSTED_SDIO_CLOCK_FREQ_KHZ=40000
|
||||
# C6_EN = GPIO32 (schematic, all revisions). Reset through hosted_reset_slave_callback() in
|
||||
# variants/crowpanel_p4_101/target.cpp, so the polarity and the GPIO are explicit in code.
|
||||
CONFIG_ESP_HOSTED_SLAVE_RESET_ONLY_IF_NECESSARY=y
|
||||
CONFIG_ESP_HOSTED_RESET_SLAVE_USING_CALLBACK=y
|
||||
CONFIG_ESP_HOSTED_SDIO_RESET_SLAVE_USING_CALLBACK=y
|
||||
CONFIG_ESP_HOSTED_ENABLE_BT_NIMBLE=y
|
||||
# The P4 has no Bluetooth controller of its own: NimBLE's HCI runs over esp-hosted SDIO.
|
||||
CONFIG_BT_ENABLED=y
|
||||
CONFIG_BT_NIMBLE_ENABLED=y
|
||||
CONFIG_BT_CONTROLLER_DISABLED=y
|
||||
# CONFIG_BT_NIMBLE_TRANSPORT_UART is not set
|
||||
# A C6 that cannot be reached must cost Wi-Fi and BLE, never the device (see sdkconfigs/tdisplay_p4).
|
||||
CONFIG_ESP_HOSTED_HOST_RESTART_NO_COMMUNICATION_WITH_SLAVE=n
|
||||
CONFIG_ESP_HOSTED_TRANSPORT_RESTART_ON_FAILURE=n
|
||||
|
||||
# Panic coredump -> the 64K 'coredump' partition (ELF, decodable against the build's elf).
|
||||
CONFIG_ESP_COREDUMP_ENABLE_TO_FLASH=y
|
||||
CONFIG_ESP_COREDUMP_DATA_FORMAT_ELF=y
|
||||
CONFIG_ESP_COREDUMP_CHECKSUM_CRC32=y
|
||||
CONFIG_ESP_COREDUMP_MAX_TASKS_NUM=64
|
||||
|
||||
# DPI/video panel: the 1.2 MB framebuffer lives in PSRAM and is streamed continuously, so the same
|
||||
# underrun mitigations as the T-Display P4: run code from PSRAM (flash writes no longer drop the
|
||||
# cache under the DSI DMA), a 256 KB L2 cache with 128 B lines, -O2.
|
||||
CONFIG_SPIRAM_XIP_FROM_PSRAM=y
|
||||
CONFIG_COMPILER_OPTIMIZATION_SIZE=n
|
||||
CONFIG_COMPILER_OPTIMIZATION_PERF=y
|
||||
CONFIG_CACHE_L2_CACHE_128KB=n
|
||||
CONFIG_CACHE_L2_CACHE_256KB=y
|
||||
CONFIG_CACHE_L2_CACHE_LINE_64B=n
|
||||
CONFIG_CACHE_L2_CACHE_LINE_128B=y
|
||||
@@ -0,0 +1 @@
|
||||
../../tanmatsu/sdkconfigs/general
|
||||
@@ -0,0 +1,9 @@
|
||||
# CrowPanel P4 10.1 V1.0: the C6 data lines run the other way round (schematic: GPIO14 = SD2_D0 ->
|
||||
# C6 IO20 ... GPIO17 = SD2_D3 -> C6 IO23), and V1.0 has none of the series resistors / caps V1.1
|
||||
# added on those lines. Elecrow's V1.0 Lesson17 runs the link 1-bit (D0 = GPIO14, D1 = GPIO15 as the
|
||||
# interrupt line), so this does the same.
|
||||
CONFIG_ESP_HOSTED_SDIO_1_BIT_BUS=y
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CLK_SLOT_1=18
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CMD_SLOT_1=19
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D0_SLOT_1=14
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D1_1BIT_BUS_SLOT_1=15
|
||||
@@ -0,0 +1,10 @@
|
||||
# CrowPanel P4 10.1 V1.1 and V1.2: C6 SDIO 4-bit, P4 GPIO17/16/15/14 = D0/D1/D2/D3.
|
||||
# Source: V1.1/V1.2 schematics (net SD2_D0 = GPIO17 -> C6 IO20 ... SD2_D3 = GPIO14 -> C6 IO23) and
|
||||
# Elecrow's V1.1/V1.2 Lesson17 sdkconfig (4-bit, same pins).
|
||||
CONFIG_ESP_HOSTED_SDIO_4_BIT_BUS=y
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CLK_SLOT_1=18
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_CMD_SLOT_1=19
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D0_SLOT_1=17
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D1_4BIT_BUS_SLOT_1=16
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D2_4BIT_BUS_SLOT_1=15
|
||||
CONFIG_ESP_HOSTED_PRIV_SDIO_PIN_D3_4BIT_BUS_SLOT_1=14
|
||||
@@ -0,0 +1 @@
|
||||
../../tanmatsu/sdkconfigs/wadamesh
|
||||
@@ -1,7 +1,7 @@
|
||||
# Submitting an app to the WADAMESH store
|
||||
|
||||
Apps are small Lua programs that appear in the device's **Apps** drawer and are
|
||||
downloaded over Wi-Fi from `firmware.wadamesh.com/apps/`. Snake, RF Monitor and
|
||||
downloaded over Wi-Fi from `meshinfo.ru/firmware/apps/`. Snake, RF Monitor and
|
||||
Airtime all ship this way — they are ordinary submissions, not special cases, so
|
||||
reading their source is the fastest way to see what an app looks like.
|
||||
|
||||
|
||||
@@ -113,6 +113,14 @@
|
||||
"icon": "music",
|
||||
"requires": "audio",
|
||||
"seed": false
|
||||
},
|
||||
{
|
||||
"id": "blackjack",
|
||||
"name": "Blackjack",
|
||||
"ver": "1.0",
|
||||
"desc": "Casino Blackjack (21) with split, double down, 6-deck shoe, persistent bankroll, and T-Deck/T-Display P4 controls. Contributed by halflive-743.",
|
||||
"icon": "game",
|
||||
"seed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{"id":"blackjack","name":"Blackjack","ver":"1.0","desc":"Casino Blackjack (21) with split, double down, 6-deck shoe, persistent bankroll, and auto-scaling UI for T-Deck & T-Display P4 (AMOLED/LCD).","icon":"game"}
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: bg
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Български
|
||||
# base: bg
|
||||
(device behind) (устройството изостава)
|
||||
@@ -1987,3 +1987,176 @@ Showing the first %d tracks Показани са първите %d песни
|
||||
Sound is off: Settings > Sound Звукът е изключен: Настройки > Звук
|
||||
Stopped Спряно
|
||||
This device cannot play music. Това устройство не може да пуска музика.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Хардуер
|
||||
Display & lock Дисплей и заключване
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Оставете Bluetooth включен, за да сдвоите приложението MeshCore на телефона си. Wi-Fi може да се настрои по всяко време в Настройки.
|
||||
Radio: Радио:
|
||||
Keyboard: Клавиатура:
|
||||
newer keyboard по-нова клавиатура
|
||||
older keyboard по-стара клавиатура
|
||||
older keyboard (set manually) по-стара клавиатура (ръчно)
|
||||
keyboard not detected yet клавиатурата още не е разпозната
|
||||
Always use the external antenna (MMCX) Винаги външната антена (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Стартира на външния конектор при всяко включване. Само за антена, която остава свързана.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Избирайте Външна само с антена на външния конектор. След рестарт започва на вградената антена, освен ако превключвателят по-долу е включен.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Винаги да се ползва външната антена?\n\nРадиото ще стартира на външния конектор (MMCX) при всяко включване. Предаване без свързана антена може да повреди радиото.\n\nВключете това само ако външната антена остава свързана.
|
||||
Turn on Включи
|
||||
On-board antenna selected Избрана е вградената антена
|
||||
External antenna at every boot Външна антена при всяко включване
|
||||
Antenna Антена
|
||||
On-board Вградена
|
||||
Glass tiles Стъклени плочки
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Джаджите, картите и плочките в панела пропускат фона. Изключено: плътни плочки.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. От 0 до 9. По-високо чака по-дълго между изпращанията.
|
||||
A name is required Нужно е име
|
||||
A node clock only moves forward: syncing cannot set it back. Часовникът на възел върви само напред: синхронизирането не може да го върне назад.
|
||||
A room server lists only its admins here. Room сървър показва тук само своите администратори.
|
||||
Access Достъп
|
||||
Access changed Достъпът е променен
|
||||
Actions Действия
|
||||
Admin password Парола на администратор
|
||||
Admin password changed. Паролата на администратора е променена.
|
||||
Admin password for full control, or the room password. Парола на администратор за пълен контрол, или паролата на стаята.
|
||||
Admin password for full control. A guest sees status and neighbours. Парола на администратор за пълен контрол. Гост вижда състоянието и съседите.
|
||||
Advanced Разширени
|
||||
Advert hop limit Лимит на скоковете за обяви
|
||||
Advert intervals Интервали на обявите
|
||||
Adverts Обяви
|
||||
Again Отново
|
||||
Airtime factor Коефициент на ефирно време
|
||||
Bandwidth Честотна лента
|
||||
Change Промени
|
||||
Change radio settings Промяна на радионастройките
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Да се промени ли паролата на администратора? Ако я загубите, вече няма да можете да управлявате този възел през мрежата.
|
||||
Clients Клиенти
|
||||
Coding rate Кодова скорост
|
||||
Console Конзола
|
||||
Current Текущи
|
||||
Decimal degrees, for example 4.4025 Десетични градуси, например 4.4025
|
||||
Decimal degrees, for example 51.2194 Десетични градуси, например 51.2194
|
||||
Direct send delay Закъснение при директно изпращане
|
||||
Discover neighbours Търсене на съседи
|
||||
Duplicates Дубликати
|
||||
Enter a number Въведете число
|
||||
Enter a password Въведете парола
|
||||
Error Грешка
|
||||
Errors Грешки
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Обновяване: възелът отваря Wi-Fi точка за достъп; свържете се с нея и качете новия фърмуер в браузър, както казват инструкциите на възела.
|
||||
Flood advert Flood обява
|
||||
Flood hop limit Лимит на скоковете за flood
|
||||
Flood send delay Закъснение при flood изпращане
|
||||
Floods with more hops are not repeated. 0 to 64. Flood с повече скокове не се повтаря. От 0 до 64.
|
||||
Frequency: 150 to 2500 MHz Честота: от 150 до 2500 MHz
|
||||
Guest Гост
|
||||
Guest password Парола за гост
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Часове между flood обявите: 0 (изкл.) или от 3 до 168.
|
||||
How hard to drop packets that came back around. Колко строго да се изхвърлят пакети, върнали се в кръг.
|
||||
Identity Идентичност
|
||||
Identity & location Идентичност и местоположение
|
||||
Last reply Последен отговор
|
||||
Last signal Последен сигнал
|
||||
Lets a wrong or blank password in to read, not to post. Пуска с грешна или празна парола за четене, не за публикуване.
|
||||
Load more (%d of %u) Зареди още (%d от %u)
|
||||
Local advert Локална обява
|
||||
Location Местоположение
|
||||
Log in Вход
|
||||
Log in as admin Вход като администратор
|
||||
Log in as guest Вход като гост
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Влезли сте като гост: можете да четете състоянието и съседите. Влезте с паролата на администратора, за да променяте настройки.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Влезли сте без права на администратор. Влезте с паролата на администратора, за да променяте настройки.
|
||||
Logging in... Влизане...
|
||||
Login refused. Входът е отказан.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Влиза като гост. Празна пуска всеки като гост. До 15 знака.
|
||||
Loop detection Откриване на цикли
|
||||
Manage Управление
|
||||
Members log in with it to post. Up to 15 characters. Членовете влизат с нея, за да публикуват. До 15 знака.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Минути между обявите без скок: 0 (изкл.) или от 60 до 240.
|
||||
Moderate Умерено
|
||||
Neighbours Съседи
|
||||
New password Нова парола
|
||||
Newest Най-нови
|
||||
No neighbours heard yet. Още не са чути съседи.
|
||||
No reply Няма отговор
|
||||
No reply from the node Възелът не отговаря
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Няма отговор. Проверете паролата, дали възелът е в обхват, и часовника на това устройство.
|
||||
No reply. It may or may not have been applied: read it again. Няма отговор. Може да е приложено, а може и да не е: прочетете отново.
|
||||
No spaces Без интервали
|
||||
Nobody on the list. Няма никой в списъка.
|
||||
Node clock Часовник на възела
|
||||
Noise floor Ниво на шума
|
||||
Not in your contacts Не е в контактите ви
|
||||
Not in your contacts, so only removing is possible here. Не е в контактите ви, затова тук може само да се премахне.
|
||||
Not saved Не е запазено
|
||||
Off: this node stops forwarding anything. Изкл.: този възел спира да препраща каквото и да е.
|
||||
Order Ред
|
||||
Owner Собственик
|
||||
Owner info Информация за собственика
|
||||
Password Парола
|
||||
Passwords Пароли
|
||||
Passwords & access Пароли и достъп
|
||||
Posts Публикации
|
||||
Prefers stronger copies of a flood. 0 to 20. Предпочита по-силните копия на flood. От 0 до 20.
|
||||
Queue Опашка
|
||||
Random delay factor before repeating a flood. 0 to 2. Случаен коефициент на закъснение преди повтаряне на flood. От 0 до 2.
|
||||
Read again Прочети отново
|
||||
Read-only Само четене
|
||||
Read-only access Достъп само за четене
|
||||
Read-write Четене и запис
|
||||
Reading... Четене...
|
||||
Reboot sent. The node is back in about 10 s. Рестартът е изпратен. Възелът се връща след около 10 s.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Да се рестартира ли възелът? Той е извън ефир около 10 s и забравя входовете на гостите.
|
||||
Receive delay Закъснение при приемане
|
||||
Received Получени
|
||||
Refresh Опресни
|
||||
Regions Региони
|
||||
Remove access Премахни достъпа
|
||||
Remove this client's access? Да се премахне ли достъпът на този клиент?
|
||||
Repeat packets Повтаряй пакети
|
||||
Repeaters this node hears directly, with the signal it hears them at. Ретранслатори, които този възел чува директно, със сигнала, с който ги чува.
|
||||
Repeating Повтаряне
|
||||
Repeating & limits Повтаряне и ограничения
|
||||
Reset counters Нулиране на броячите
|
||||
Reset the node's packet counters? Да се нулират ли броячите на пакети на възела?
|
||||
Room password Парола на стаята
|
||||
Save (after a reboot) Запази (след рестарт)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Да се запазят ли новите радионастройки?\nСега: %s\nНови: %s\nВлизат в сила след рестарт. Грешни стойности могат завинаги да откъснат този възел.
|
||||
Saved. Applies after a reboot. Запазено. Влиза в сила след рестарт.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Запазено. Възелът ползва новите радионастройки след рестарт. Да се рестартира ли сега?
|
||||
Saving... Запазване...
|
||||
Send flood advert Изпрати flood обява
|
||||
Send now Изпрати сега
|
||||
Send zero-hop advert Изпрати обява без скок
|
||||
Set the node's position to this device's position? Да се зададе ли позицията на възела като тази на това устройство?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Показва се на всеки, който попита този възел. До 119 знака.
|
||||
Spreading factor Фактор на разпръскване
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Да се стартира ли обновяване на фърмуера на възела? Той отваря своя Wi-Fi точка за достъп, докато не бъде обновен или рестартиран, и междувременно не повтаря нищо.
|
||||
Start firmware update Стартирай обновяване на фърмуера
|
||||
Strict Строго
|
||||
Strongest Най-силни
|
||||
Sync clock to this device Синхронизирай часовника с това устройство
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. Дървото с региони на възела: ^ отбелязва домашния му регион, F че повтаря flood за този регион. Регионите се редактират в Конзолата.
|
||||
The passwords do not match Паролите не съвпадат
|
||||
The position goes out in the node's adverts. Позицията се изпраща в обявите на възела.
|
||||
The same for direct packets. 0 to 2. Същото за директни пакети. От 0 до 2.
|
||||
The same limit for adverts. 0 to 64. Същият лимит за обяви. От 0 до 64.
|
||||
This device Това устройство
|
||||
This device has no position Това устройство няма позиция
|
||||
Transmit power Мощност на предаване
|
||||
Try Опитай
|
||||
Try for 10 minutes Опитай за 10 минути
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Да се опитат ли нови радионастройки за %u минути?\nСега: %s\nОпит: %s\nВъзелът се връща сам. Дотогава го достигате само с новите настройки.
|
||||
Up to 31 characters, without [ ] \\ : , ? * До 31 знака, без [ ] \\ : , ? *
|
||||
Updated %s ago Обновено преди %s
|
||||
Uptime Време на работа
|
||||
Use my position Използвай моята позиция
|
||||
Use this device's settings Използвай настройките на това устройство
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Грешни радионастройки могат да откъснат този възел: тогава го достигате само с новите настройки, или изобщо не. Първо ги опитайте; възелът се връща сам.
|
||||
dBm, -9 to 30. Applies at once. dBm, от -9 до 30. Важи веднага.
|
||||
pushed изпратени
|
||||
you вие
|
||||
Flood in / out Flood вход / изход
|
||||
Direct in / out Директни вход / изход
|
||||
Airtime TX / RX Ефирно време TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: cs
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Čeština
|
||||
# base: cs
|
||||
(device behind) (zařízení za)
|
||||
@@ -2003,3 +2003,176 @@ Showing the first %d tracks Zobrazeno prvních %d skladeb
|
||||
Sound is off: Settings > Sound Zvuk je vypnutý: Nastavení > Zvuk
|
||||
Stopped Zastaveno
|
||||
This device cannot play music. Toto zařízení neumí přehrávat hudbu.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Hardware
|
||||
Display & lock Displej a zámek
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Nechte Bluetooth zapnutý, abyste mohli spárovat aplikaci MeshCore v telefonu. Wi-Fi lze nastavit kdykoli v Nastavení.
|
||||
Radio: Rádio:
|
||||
Keyboard: Klávesnice:
|
||||
newer keyboard novější klávesnice
|
||||
older keyboard starší klávesnice
|
||||
older keyboard (set manually) starší klávesnice (nastaveno ručně)
|
||||
keyboard not detected yet klávesnice zatím nerozpoznána
|
||||
Always use the external antenna (MMCX) Vždy používat externí anténu (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Při každém spuštění začne na externím konektoru. Jen pro anténu, která zůstává připojená.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Externí vyberte jen s anténou na externím konektoru. Po restartu začne na vestavěné anténě, pokud není zapnutý přepínač níže.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Vždy používat externí anténu?\n\nRádio začne při každém spuštění na externím konektoru (MMCX). Vysílání bez připojené antény může rádio poškodit.\n\nZapněte to jen tehdy, když externí anténa zůstává připojená.
|
||||
Turn on Zapnout
|
||||
On-board antenna selected Vybrána vestavěná anténa
|
||||
External antenna at every boot Externí anténa při každém startu
|
||||
Antenna Anténa
|
||||
On-board Vestavěná
|
||||
Glass tiles Skleněné dlaždice
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Widgety, karty a dlaždice panelu nechají prosvítat pozadí. Vypnuto: plné dlaždice.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. 0 až 9. Vyšší čeká mezi odesláními déle.
|
||||
A name is required Jméno je povinné
|
||||
A node clock only moves forward: syncing cannot set it back. Hodiny uzlu jdou jen dopředu: synchronizace je nemůže vrátit.
|
||||
A room server lists only its admins here. Room server zde uvádí jen své správce.
|
||||
Access Přístup
|
||||
Access changed Přístup změněn
|
||||
Actions Akce
|
||||
Admin password Heslo správce
|
||||
Admin password changed. Heslo správce změněno.
|
||||
Admin password for full control, or the room password. Heslo správce pro plnou kontrolu, nebo heslo místnosti.
|
||||
Admin password for full control. A guest sees status and neighbours. Heslo správce pro plnou kontrolu. Host vidí stav a sousedy.
|
||||
Advanced Pokročilé
|
||||
Advert hop limit Limit skoků pro adverty
|
||||
Advert intervals Intervaly advertů
|
||||
Adverts Adverty
|
||||
Again Znovu
|
||||
Airtime factor Faktor vysílacího času
|
||||
Bandwidth Šířka pásma
|
||||
Change Změnit
|
||||
Change radio settings Změnit nastavení rádia
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Změnit heslo správce? Pokud ho ztratíte, nebudete moci tento uzel spravovat přes síť.
|
||||
Clients Klienti
|
||||
Coding rate Kódovací poměr
|
||||
Console Konzole
|
||||
Current Aktuální
|
||||
Decimal degrees, for example 4.4025 Desetinné stupně, například 4.4025
|
||||
Decimal degrees, for example 51.2194 Desetinné stupně, například 51.2194
|
||||
Direct send delay Zpoždění přímého odeslání
|
||||
Discover neighbours Hledat sousedy
|
||||
Duplicates Duplikáty
|
||||
Enter a number Zadejte číslo
|
||||
Enter a password Zadejte heslo
|
||||
Error Chyba
|
||||
Errors Chyby
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Aktualizace: uzel otevře přístupový bod Wi-Fi; připojte se k němu a nahrajte nový firmware v prohlížeči podle pokynů uzlu.
|
||||
Flood advert Flood advert
|
||||
Flood hop limit Limit skoků pro floody
|
||||
Flood send delay Zpoždění odeslání floodu
|
||||
Floods with more hops are not repeated. 0 to 64. Floody s více skoky se neopakují. 0 až 64.
|
||||
Frequency: 150 to 2500 MHz Frekvence: 150 až 2500 MHz
|
||||
Guest Host
|
||||
Guest password Heslo hosta
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Hodiny mezi flood adverty: 0 (vypnuto) nebo 3 až 168.
|
||||
How hard to drop packets that came back around. Jak přísně zahazovat pakety, které se vrátily dokola.
|
||||
Identity Identita
|
||||
Identity & location Identita a poloha
|
||||
Last reply Poslední odpověď
|
||||
Last signal Poslední signál
|
||||
Lets a wrong or blank password in to read, not to post. Pustí dovnitř se špatným nebo prázdným heslem ke čtení, ne k psaní.
|
||||
Load more (%d of %u) Načíst další (%d z %u)
|
||||
Local advert Místní advert
|
||||
Location Poloha
|
||||
Log in Přihlásit
|
||||
Log in as admin Přihlásit jako správce
|
||||
Log in as guest Přihlásit jako host
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Přihlášeno jako host: můžete číst stav a sousedy. Pro změnu nastavení se přihlaste heslem správce.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Přihlášeno bez práv správce. Pro změnu nastavení se přihlaste heslem správce.
|
||||
Logging in... Přihlašování...
|
||||
Login refused. Přihlášení odmítnuto.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Přihlásí jako hosta. Prázdné pustí kohokoli jako hosta. Až 15 znaků.
|
||||
Loop detection Detekce smyček
|
||||
Manage Spravovat
|
||||
Members log in with it to post. Up to 15 characters. Členové se jím přihlašují, aby mohli psát. Až 15 znaků.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Minuty mezi adverty bez skoku: 0 (vypnuto) nebo 60 až 240.
|
||||
Moderate Střední
|
||||
Neighbours Sousedé
|
||||
New password Nové heslo
|
||||
Newest Nejnovější
|
||||
No neighbours heard yet. Zatím nebyli slyšet žádní sousedé.
|
||||
No reply Bez odpovědi
|
||||
No reply from the node Uzel neodpovídá
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Bez odpovědi. Zkontrolujte heslo, zda je uzel v dosahu, a hodiny tohoto zařízení.
|
||||
No reply. It may or may not have been applied: read it again. Bez odpovědi. Možná bylo použito, možná ne: načtěte znovu.
|
||||
No spaces Bez mezer
|
||||
Nobody on the list. Na seznamu nikdo není.
|
||||
Node clock Hodiny uzlu
|
||||
Noise floor Šumové pozadí
|
||||
Not in your contacts Není ve vašich kontaktech
|
||||
Not in your contacts, so only removing is possible here. Není ve vašich kontaktech, takže zde lze jen odebrat.
|
||||
Not saved Neuloženo
|
||||
Off: this node stops forwarding anything. Vypnuto: tento uzel přestane cokoli přeposílat.
|
||||
Order Pořadí
|
||||
Owner Vlastník
|
||||
Owner info Info vlastníka
|
||||
Password Heslo
|
||||
Passwords Hesla
|
||||
Passwords & access Hesla a přístup
|
||||
Posts Příspěvky
|
||||
Prefers stronger copies of a flood. 0 to 20. Dává přednost silnějším kopiím floodu. 0 až 20.
|
||||
Queue Fronta
|
||||
Random delay factor before repeating a flood. 0 to 2. Náhodný faktor zpoždění před opakováním floodu. 0 až 2.
|
||||
Read again Načíst znovu
|
||||
Read-only Jen čtení
|
||||
Read-only access Přístup jen pro čtení
|
||||
Read-write Čtení a zápis
|
||||
Reading... Načítání...
|
||||
Reboot sent. The node is back in about 10 s. Restart odeslán. Uzel se vrátí asi za 10 s.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Restartovat uzel? Asi 10 s nebude vysílat a zapomene přihlášení hostů.
|
||||
Receive delay Zpoždění příjmu
|
||||
Received Přijato
|
||||
Refresh Obnovit
|
||||
Regions Regiony
|
||||
Remove access Odebrat přístup
|
||||
Remove this client's access? Odebrat přístup tohoto klienta?
|
||||
Repeat packets Opakovat pakety
|
||||
Repeaters this node hears directly, with the signal it hears them at. Opakovače, které tento uzel slyší přímo, se signálem, se kterým je slyší.
|
||||
Repeating Opakování
|
||||
Repeating & limits Opakování a limity
|
||||
Reset counters Vynulovat počítadla
|
||||
Reset the node's packet counters? Vynulovat počítadla paketů uzlu?
|
||||
Room password Heslo místnosti
|
||||
Save (after a reboot) Uložit (po restartu)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Uložit nové nastavení rádia?\nNyní: %s\nNové: %s\nPlatí po restartu. Špatné hodnoty mohou tento uzel navždy odříznout.
|
||||
Saved. Applies after a reboot. Uloženo. Platí po restartu.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Uloženo. Uzel použije nové nastavení rádia po restartu. Restartovat nyní?
|
||||
Saving... Ukládání...
|
||||
Send flood advert Odeslat flood advert
|
||||
Send now Odeslat nyní
|
||||
Send zero-hop advert Odeslat advert bez skoku
|
||||
Set the node's position to this device's position? Nastavit polohu uzlu na polohu tohoto zařízení?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Zobrazí se každému, kdo se uzlu zeptá. Až 119 znaků.
|
||||
Spreading factor Rozprostírací faktor
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Spustit aktualizaci firmwaru na uzlu? Otevře vlastní přístupový bod Wi-Fi, dokud nebude aktualizován nebo restartován, a mezitím nic neopakuje.
|
||||
Start firmware update Spustit aktualizaci firmwaru
|
||||
Strict Přísná
|
||||
Strongest Nejsilnější
|
||||
Sync clock to this device Synchronizovat hodiny s tímto zařízením
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. Strom regionů uzlu: ^ označuje jeho domovský region, F že opakuje floody pro tento region. Regiony upravujte v Konzoli.
|
||||
The passwords do not match Hesla se neshodují
|
||||
The position goes out in the node's adverts. Poloha se posílá v advertech uzlu.
|
||||
The same for direct packets. 0 to 2. Totéž pro přímé pakety. 0 až 2.
|
||||
The same limit for adverts. 0 to 64. Stejný limit pro adverty. 0 až 64.
|
||||
This device Toto zařízení
|
||||
This device has no position Toto zařízení nemá polohu
|
||||
Transmit power Vysílací výkon
|
||||
Try Zkusit
|
||||
Try for 10 minutes Zkusit na 10 minut
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Zkusit nové nastavení rádia na %u minut?\nNyní: %s\nZkouška: %s\nUzel se vrátí sám. Do té doby ho zastihnete jen na novém nastavení.
|
||||
Up to 31 characters, without [ ] \\ : , ? * Až 31 znaků, bez [ ] \\ : , ? *
|
||||
Updated %s ago Aktualizováno před %s
|
||||
Uptime Doba běhu
|
||||
Use my position Použít mou polohu
|
||||
Use this device's settings Použít nastavení tohoto zařízení
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Špatné nastavení rádia může tento uzel odříznout: zastihnete ho pak jen na novém nastavení, nebo vůbec. Nejdřív ho zkuste; uzel se vrátí sám.
|
||||
dBm, -9 to 30. Applies at once. dBm, -9 až 30. Platí ihned.
|
||||
pushed odesláno
|
||||
you vy
|
||||
Flood in / out Flood příchozí / odchozí
|
||||
Direct in / out Přímé příchozí / odchozí
|
||||
Airtime TX / RX Vysílací čas TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: de
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Deutsch
|
||||
# base: de
|
||||
(device behind) (Gerät geht nach)
|
||||
@@ -1984,3 +1984,177 @@ Showing the first %d tracks Die ersten %d Titel werden gezeigt
|
||||
Sound is off: Settings > Sound Ton ist aus: Einstellungen > Ton
|
||||
Stopped Gestoppt
|
||||
This device cannot play music. Dieses Gerät kann keine Musik abspielen.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Hardware
|
||||
Display & lock Anzeige & Sperre
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Lass Bluetooth an, um die MeshCore-App auf deinem Handy zu koppeln. WLAN kannst du jederzeit in den Einstellungen einrichten.
|
||||
Radio: Funkmodul:
|
||||
Keyboard: Tastatur:
|
||||
newer keyboard neuere Tastatur
|
||||
older keyboard ältere Tastatur
|
||||
older keyboard (set manually) ältere Tastatur (manuell gesetzt)
|
||||
keyboard not detected yet Tastatur noch nicht erkannt
|
||||
Always use the external antenna (MMCX) Immer die externe Antenne nutzen (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Startet bei jedem Booten an der externen Buchse. Nur für eine Antenne, die dauerhaft angeschlossen bleibt.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Extern nur wählen, wenn eine Antenne an der externen Buchse steckt. Nach einem Neustart läuft es über die interne Antenne, außer der Schalter unten ist an.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Immer die externe Antenne nutzen?\n\nDas Funkmodul startet bei jedem Booten an der externen Buchse (MMCX). Senden ohne angeschlossene Antenne kann das Funkmodul beschädigen.\n\nNur einschalten, wenn deine externe Antenne angeschlossen bleibt.
|
||||
Turn on Einschalten
|
||||
On-board antenna selected Interne Antenne gewählt
|
||||
External antenna at every boot Externe Antenne bei jedem Start
|
||||
Antenna Antenne
|
||||
On-board Intern
|
||||
Glass tiles Glas-Kacheln
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Widgets, Karten und Kacheln im Kontrollfeld lassen den Hintergrund durchscheinen. Aus: deckende Kacheln.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. 0 bis 9. Höher wartet länger zwischen Sendungen.
|
||||
A name is required Ein Name ist nötig
|
||||
A node clock only moves forward: syncing cannot set it back. Die Uhr eines Knotens läuft nur vorwärts: Synchronisieren kann sie nicht zurückstellen.
|
||||
A room server lists only its admins here. Ein Room-Server listet hier nur seine Admins.
|
||||
Access Zugang
|
||||
Access changed Zugang geändert
|
||||
Actions Aktionen
|
||||
Admin password Admin-Passwort
|
||||
Admin password changed. Admin-Passwort geändert.
|
||||
Admin password for full control, or the room password. Admin-Passwort für volle Kontrolle, oder das Raum-Passwort.
|
||||
Admin password for full control. A guest sees status and neighbours. Admin-Passwort für volle Kontrolle. Ein Gast sieht Status und Nachbarn.
|
||||
Advanced Erweitert
|
||||
Advert hop limit Hop-Limit für Adverts
|
||||
Advert intervals Advert-Intervalle
|
||||
Adverts Adverts
|
||||
Again Wiederholen
|
||||
Airtime factor Sendezeit-Faktor
|
||||
Bandwidth Bandbreite
|
||||
Change Ändern
|
||||
Change radio settings Funkeinstellungen ändern
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Admin-Passwort ändern? Geht es verloren, kannst du diesen Knoten nicht mehr über das Mesh verwalten.
|
||||
Clients Clients
|
||||
Coding rate Coding-Rate
|
||||
Console Konsole
|
||||
Current Aktuell
|
||||
Decimal degrees, for example 4.4025 Dezimalgrad, zum Beispiel 4.4025
|
||||
Decimal degrees, for example 51.2194 Dezimalgrad, zum Beispiel 51.2194
|
||||
Direct send delay Sendeverzögerung direkt
|
||||
Discover neighbours Nachbarn suchen
|
||||
Duplicates Duplikate
|
||||
Enter a number Gib eine Zahl ein
|
||||
Enter a password Gib ein Passwort ein
|
||||
Error Fehler
|
||||
Errors Fehler
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Firmware-Update: Der Knoten öffnet einen WLAN-Zugangspunkt; verbinde dich damit und lade die neue Firmware im Browser hoch, wie es die Anweisungen des Knotens sagen.
|
||||
Flood advert Flood-Advert
|
||||
Flood hop limit Hop-Limit für Floods
|
||||
Flood send delay Sendeverzögerung Flood
|
||||
Floods with more hops are not repeated. 0 to 64. Floods mit mehr Hops werden nicht wiederholt. 0 bis 64.
|
||||
Frequency: 150 to 2500 MHz Frequenz: 150 bis 2500 MHz
|
||||
Guest Gast
|
||||
Guest password Gast-Passwort
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Stunden zwischen Flood-Adverts: 0 (aus) oder 3 bis 168.
|
||||
How hard to drop packets that came back around. Wie streng Pakete verworfen werden, die im Kreis zurückkamen.
|
||||
Identity Identität
|
||||
Identity & location Identität & Standort
|
||||
Last reply Letzte Antwort
|
||||
Last signal Letztes Signal
|
||||
Lets a wrong or blank password in to read, not to post. Lässt ein falsches oder leeres Passwort zum Lesen herein, nicht zum Posten.
|
||||
Load more (%d of %u) Mehr laden (%d von %u)
|
||||
Local advert Lokales Advert
|
||||
Location Standort
|
||||
Log in Anmelden
|
||||
Log in as admin Als Admin anmelden
|
||||
Log in as guest Als Gast anmelden
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Als Gast angemeldet: Du kannst Status und Nachbarn lesen. Melde dich mit dem Admin-Passwort an, um Einstellungen zu ändern.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Ohne Admin-Rechte angemeldet. Melde dich mit dem Admin-Passwort an, um Einstellungen zu ändern.
|
||||
Logging in... Anmeldung läuft...
|
||||
Login refused. Anmeldung abgelehnt.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Meldet als Gast an. Leer lässt jeden als Gast herein. Bis zu 15 Zeichen.
|
||||
Loop detection Schleifenerkennung
|
||||
Manage Verwalten
|
||||
Members log in with it to post. Up to 15 characters. Mitglieder melden sich damit an, um zu posten. Bis zu 15 Zeichen.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Minuten zwischen Zero-Hop-Adverts: 0 (aus) oder 60 bis 240.
|
||||
Moderate Mittel
|
||||
Neighbours Nachbarn
|
||||
New password Neues Passwort
|
||||
Newest Neueste
|
||||
No neighbours heard yet. Noch keine Nachbarn gehört.
|
||||
No reply Keine Antwort
|
||||
No reply from the node Keine Antwort vom Knoten
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Keine Antwort. Prüfe das Passwort, ob der Knoten in Reichweite ist, und die Uhr dieses Geräts.
|
||||
No reply. It may or may not have been applied: read it again. Keine Antwort. Vielleicht wurde es übernommen, vielleicht nicht: lies es erneut.
|
||||
No spaces Keine Leerzeichen
|
||||
Nobody on the list. Niemand auf der Liste.
|
||||
Node clock Uhr des Knotens
|
||||
Noise floor Grundrauschen
|
||||
Not in your contacts Nicht in deinen Kontakten
|
||||
Not in your contacts, so only removing is possible here. Nicht in deinen Kontakten, daher ist hier nur Entfernen möglich.
|
||||
Not saved Nicht gespeichert
|
||||
Off: this node stops forwarding anything. Aus: Dieser Knoten leitet nichts mehr weiter.
|
||||
Order Reihenfolge
|
||||
Owner Besitzer
|
||||
Owner info Besitzer-Info
|
||||
Password Passwort
|
||||
Passwords Passwörter
|
||||
Passwords & access Passwörter & Zugang
|
||||
Posts Beiträge
|
||||
Prefers stronger copies of a flood. 0 to 20. Bevorzugt stärkere Kopien eines Floods. 0 bis 20.
|
||||
Queue Warteschlange
|
||||
Random delay factor before repeating a flood. 0 to 2. Zufälliger Verzögerungsfaktor vor dem Wiederholen eines Floods. 0 bis 2.
|
||||
Read again Erneut lesen
|
||||
Read-only Nur lesen
|
||||
Read-only access Nur-Lese-Zugang
|
||||
Read-write Lesen und schreiben
|
||||
Reading... Wird gelesen...
|
||||
Reboot sent. The node is back in about 10 s. Neustart gesendet. Der Knoten ist in etwa 10 s zurück.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Knoten neu starten? Er ist etwa 10 s nicht erreichbar und vergisst Gast-Anmeldungen.
|
||||
Receive delay Empfangsverzögerung
|
||||
Received Empfangen
|
||||
Refresh Aktualisieren
|
||||
Regions Regionen
|
||||
Remove access Zugang entfernen
|
||||
Remove this client's access? Den Zugang dieses Clients entfernen?
|
||||
Repeat packets Pakete wiederholen
|
||||
Repeaters this node hears directly, with the signal it hears them at. Repeater, die dieser Knoten direkt hört, mit dem Signal, mit dem er sie hört.
|
||||
Repeating Wiederholen
|
||||
Repeating & limits Wiederholen & Limits
|
||||
Reset counters Zähler zurücksetzen
|
||||
Reset the node's packet counters? Die Paketzähler des Knotens zurücksetzen?
|
||||
Room password Raum-Passwort
|
||||
Save (after a reboot) Speichern (nach Neustart)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Neue Funkeinstellungen speichern?\nJetzt: %s\nNeu: %s\nSie gelten nach einem Neustart. Falsche Werte können diesen Knoten für immer abschneiden.
|
||||
Saved. Applies after a reboot. Gespeichert. Gilt nach einem Neustart.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Gespeichert. Der Knoten nutzt die neuen Funkeinstellungen nach einem Neustart. Jetzt neu starten?
|
||||
Saving... Wird gespeichert...
|
||||
Send flood advert Flood-Advert senden
|
||||
Send now Jetzt senden
|
||||
Send zero-hop advert Zero-Hop-Advert senden
|
||||
Set the node's position to this device's position? Die Position des Knotens auf die Position dieses Geräts setzen?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Wird jedem gezeigt, der diesen Knoten fragt. Bis zu 119 Zeichen.
|
||||
Spreading factor Spreizfaktor
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Ein Firmware-Update auf dem Knoten starten? Er öffnet einen eigenen WLAN-Zugangspunkt, bis er aktualisiert oder neu gestartet ist, und wiederholt so lange nichts.
|
||||
Start firmware update Firmware-Update starten
|
||||
Status Status
|
||||
Strict Streng
|
||||
Strongest Stärkste
|
||||
Sync clock to this device Uhr mit diesem Gerät abgleichen
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. Der Regionsbaum des Knotens: ^ markiert seine Heimatregion, F dass er Floods für diese Region wiederholt. Regionen bearbeitest du in der Konsole.
|
||||
The passwords do not match Die Passwörter stimmen nicht überein
|
||||
The position goes out in the node's adverts. Die Position wird in den Adverts des Knotens gesendet.
|
||||
The same for direct packets. 0 to 2. Dasselbe für direkte Pakete. 0 bis 2.
|
||||
The same limit for adverts. 0 to 64. Dasselbe Limit für Adverts. 0 bis 64.
|
||||
This device Dieses Gerät
|
||||
This device has no position Dieses Gerät hat keine Position
|
||||
Transmit power Sendeleistung
|
||||
Try Testen
|
||||
Try for 10 minutes 10 Minuten testen
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Neue Funkeinstellungen %u Minuten lang testen?\nJetzt: %s\nTest: %s\nDer Knoten wechselt von selbst zurück. Bis dahin erreichst du ihn nur mit den neuen Einstellungen.
|
||||
Up to 31 characters, without [ ] \\ : , ? * Bis zu 31 Zeichen, ohne [ ] \\ : , ? *
|
||||
Updated %s ago Vor %s aktualisiert
|
||||
Uptime Laufzeit
|
||||
Use my position Meine Position verwenden
|
||||
Use this device's settings Einstellungen dieses Geräts verwenden
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Falsche Funkeinstellungen können diesen Knoten abschneiden: Dann erreichst du ihn nur mit den neuen Einstellungen oder gar nicht. Teste sie zuerst; der Knoten wechselt von selbst zurück.
|
||||
dBm, -9 to 30. Applies at once. dBm, -9 bis 30. Gilt sofort.
|
||||
pushed gepusht
|
||||
you du
|
||||
Flood in / out Flood ein / aus
|
||||
Direct in / out Direkt ein / aus
|
||||
Airtime TX / RX Sendezeit TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: el
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Ελληνικά
|
||||
# base: el
|
||||
(device behind) (συσκευή πίσω)
|
||||
@@ -1987,3 +1987,176 @@ Showing the first %d tracks Εμφανίζονται τα πρώτα %d κομμ
|
||||
Sound is off: Settings > Sound Ο ήχος είναι κλειστός: Ρυθμίσεις > Ήχος
|
||||
Stopped Σταμάτησε
|
||||
This device cannot play music. Αυτή η συσκευή δεν μπορεί να παίξει μουσική.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Υλικό
|
||||
Display & lock Οθόνη & κλείδωμα
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Αφήστε το Bluetooth ενεργό για να συνδέσετε την εφαρμογή MeshCore στο τηλέφωνό σας. Το Wi-Fi ρυθμίζεται οποτεδήποτε από τις Ρυθμίσεις.
|
||||
Radio: Πομποδέκτης:
|
||||
Keyboard: Πληκτρολόγιο:
|
||||
newer keyboard νεότερο πληκτρολόγιο
|
||||
older keyboard παλαιότερο πληκτρολόγιο
|
||||
older keyboard (set manually) παλαιότερο πληκτρολόγιο (χειροκίνητα)
|
||||
keyboard not detected yet το πληκτρολόγιο δεν έχει εντοπιστεί ακόμα
|
||||
Always use the external antenna (MMCX) Πάντα η εξωτερική κεραία (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Ξεκινά στην εξωτερική υποδοχή σε κάθε εκκίνηση. Μόνο για κεραία που μένει συνδεδεμένη.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Επιλέξτε Εξωτερική μόνο με κεραία στην εξωτερική υποδοχή. Μετά από επανεκκίνηση ξεκινά στην ενσωματωμένη κεραία, εκτός αν ο διακόπτης παρακάτω είναι ενεργός.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Πάντα η εξωτερική κεραία;\n\nΟ πομποδέκτης θα ξεκινά στην εξωτερική υποδοχή (MMCX) σε κάθε εκκίνηση. Η εκπομπή χωρίς συνδεδεμένη κεραία μπορεί να καταστρέψει τον πομποδέκτη.\n\nΕνεργοποιήστε το μόνο αν η εξωτερική κεραία μένει συνδεδεμένη.
|
||||
Turn on Ενεργοποίηση
|
||||
On-board antenna selected Επιλέχθηκε η ενσωματωμένη κεραία
|
||||
External antenna at every boot Εξωτερική κεραία σε κάθε εκκίνηση
|
||||
Antenna Κεραία
|
||||
On-board Ενσωμ.
|
||||
Glass tiles Γυάλινα πλακίδια
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Τα widget, οι κάρτες και τα πλακίδια του πίνακα αφήνουν να φαίνεται το φόντο. Ανενεργό: συμπαγή πλακίδια.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. 0 έως 9. Μεγαλύτερο σημαίνει μεγαλύτερη αναμονή μεταξύ αποστολών.
|
||||
A name is required Απαιτείται όνομα
|
||||
A node clock only moves forward: syncing cannot set it back. Το ρολόι ενός κόμβου πάει μόνο μπροστά: ο συγχρονισμός δεν μπορεί να το γυρίσει πίσω.
|
||||
A room server lists only its admins here. Ένας room server εμφανίζει εδώ μόνο τους διαχειριστές του.
|
||||
Access Πρόσβαση
|
||||
Access changed Η πρόσβαση άλλαξε
|
||||
Actions Ενέργειες
|
||||
Admin password Κωδικός διαχειριστή
|
||||
Admin password changed. Ο κωδικός διαχειριστή άλλαξε.
|
||||
Admin password for full control, or the room password. Κωδικός διαχειριστή για πλήρη έλεγχο, ή ο κωδικός του δωματίου.
|
||||
Admin password for full control. A guest sees status and neighbours. Κωδικός διαχειριστή για πλήρη έλεγχο. Ένας επισκέπτης βλέπει κατάσταση και γείτονες.
|
||||
Advanced Για προχωρημένους
|
||||
Advert hop limit Όριο αλμάτων για adverts
|
||||
Advert intervals Διαστήματα advert
|
||||
Adverts Adverts
|
||||
Again Ξανά
|
||||
Airtime factor Συντελεστής χρόνου εκπομπής
|
||||
Bandwidth Εύρος ζώνης
|
||||
Change Αλλαγή
|
||||
Change radio settings Αλλαγή ρυθμίσεων ραδιοφώνου
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Αλλαγή κωδικού διαχειριστή; Αν τον χάσετε, δεν θα μπορείτε πια να διαχειριστείτε αυτόν τον κόμβο μέσω του δικτύου.
|
||||
Clients Πελάτες
|
||||
Coding rate Ρυθμός κωδικοποίησης
|
||||
Console Κονσόλα
|
||||
Current Τρέχον
|
||||
Decimal degrees, for example 4.4025 Δεκαδικές μοίρες, για παράδειγμα 4.4025
|
||||
Decimal degrees, for example 51.2194 Δεκαδικές μοίρες, για παράδειγμα 51.2194
|
||||
Direct send delay Καθυστέρηση άμεσης αποστολής
|
||||
Discover neighbours Αναζήτηση γειτόνων
|
||||
Duplicates Διπλότυπα
|
||||
Enter a number Εισαγάγετε αριθμό
|
||||
Enter a password Εισαγάγετε κωδικό
|
||||
Error Σφάλμα
|
||||
Errors Σφάλματα
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Ενημέρωση: ο κόμβος ανοίγει σημείο πρόσβασης Wi-Fi· συνδεθείτε και ανεβάστε το νέο υλικολογισμικό από φυλλομετρητή, όπως λένε οι οδηγίες του κόμβου.
|
||||
Flood advert Flood advert
|
||||
Flood hop limit Όριο αλμάτων για floods
|
||||
Flood send delay Καθυστέρηση αποστολής flood
|
||||
Floods with more hops are not repeated. 0 to 64. Τα floods με περισσότερα άλματα δεν επαναλαμβάνονται. 0 έως 64.
|
||||
Frequency: 150 to 2500 MHz Συχνότητα: 150 έως 2500 MHz
|
||||
Guest Επισκέπτης
|
||||
Guest password Κωδικός επισκέπτη
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Ώρες μεταξύ flood adverts: 0 (ανενεργό) ή 3 έως 168.
|
||||
How hard to drop packets that came back around. Πόσο αυστηρά απορρίπτονται πακέτα που γύρισαν κυκλικά.
|
||||
Identity Ταυτότητα
|
||||
Identity & location Ταυτότητα και τοποθεσία
|
||||
Last reply Τελευταία απάντηση
|
||||
Last signal Τελευταίο σήμα
|
||||
Lets a wrong or blank password in to read, not to post. Αφήνει να μπει με λάθος ή κενό κωδικό για ανάγνωση, όχι για δημοσίευση.
|
||||
Load more (%d of %u) Φόρτωση περισσότερων (%d από %u)
|
||||
Local advert Τοπικό advert
|
||||
Location Τοποθεσία
|
||||
Log in Σύνδεση
|
||||
Log in as admin Σύνδεση ως διαχειριστής
|
||||
Log in as guest Σύνδεση ως επισκέπτης
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Συνδεθήκατε ως επισκέπτης: βλέπετε κατάσταση και γείτονες. Συνδεθείτε με τον κωδικό διαχειριστή για να αλλάξετε ρυθμίσεις.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Συνδεθήκατε χωρίς δικαιώματα διαχειριστή. Συνδεθείτε με τον κωδικό διαχειριστή για να αλλάξετε ρυθμίσεις.
|
||||
Logging in... Σύνδεση...
|
||||
Login refused. Η σύνδεση απορρίφθηκε.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Σύνδεση ως επισκέπτης. Κενός αφήνει οποιονδήποτε ως επισκέπτη. Έως 15 χαρακτήρες.
|
||||
Loop detection Ανίχνευση βρόχων
|
||||
Manage Διαχείριση
|
||||
Members log in with it to post. Up to 15 characters. Τα μέλη συνδέονται με αυτόν για να δημοσιεύουν. Έως 15 χαρακτήρες.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Λεπτά μεταξύ zero-hop adverts: 0 (ανενεργό) ή 60 έως 240.
|
||||
Moderate Μέτρια
|
||||
Neighbours Γείτονες
|
||||
New password Νέος κωδικός
|
||||
Newest Νεότεροι
|
||||
No neighbours heard yet. Δεν έχουν ακουστεί γείτονες ακόμα.
|
||||
No reply Καμία απάντηση
|
||||
No reply from the node Ο κόμβος δεν απαντά
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Καμία απάντηση. Ελέγξτε τον κωδικό, ότι ο κόμβος είναι εντός εμβέλειας, και το ρολόι αυτής της συσκευής.
|
||||
No reply. It may or may not have been applied: read it again. Καμία απάντηση. Ίσως εφαρμόστηκε, ίσως όχι: διαβάστε το ξανά.
|
||||
No spaces Χωρίς κενά
|
||||
Nobody on the list. Κανείς στη λίστα.
|
||||
Node clock Ρολόι κόμβου
|
||||
Noise floor Επίπεδο θορύβου
|
||||
Not in your contacts Δεν είναι στις επαφές σας
|
||||
Not in your contacts, so only removing is possible here. Δεν είναι στις επαφές σας, οπότε εδώ μπορεί μόνο να αφαιρεθεί.
|
||||
Not saved Δεν αποθηκεύτηκε
|
||||
Off: this node stops forwarding anything. Ανενεργό: ο κόμβος σταματά να προωθεί οτιδήποτε.
|
||||
Order Σειρά
|
||||
Owner Ιδιοκτήτης
|
||||
Owner info Πληροφορίες ιδιοκτήτη
|
||||
Password Κωδικός
|
||||
Passwords Κωδικοί
|
||||
Passwords & access Κωδικοί και πρόσβαση
|
||||
Posts Αναρτήσεις
|
||||
Prefers stronger copies of a flood. 0 to 20. Προτιμά τα ισχυρότερα αντίγραφα ενός flood. 0 έως 20.
|
||||
Queue Ουρά
|
||||
Random delay factor before repeating a flood. 0 to 2. Τυχαίος συντελεστής καθυστέρησης πριν από επανάληψη flood. 0 έως 2.
|
||||
Read again Ανάγνωση ξανά
|
||||
Read-only Μόνο ανάγνωση
|
||||
Read-only access Πρόσβαση μόνο ανάγνωσης
|
||||
Read-write Ανάγνωση και εγγραφή
|
||||
Reading... Ανάγνωση...
|
||||
Reboot sent. The node is back in about 10 s. Η επανεκκίνηση στάλθηκε. Ο κόμβος επιστρέφει σε περίπου 10 s.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Επανεκκίνηση του κόμβου; Μένει εκτός αέρα περίπου 10 s και ξεχνά τις συνδέσεις επισκεπτών.
|
||||
Receive delay Καθυστέρηση λήψης
|
||||
Received Ελήφθησαν
|
||||
Refresh Ανανέωση
|
||||
Regions Περιοχές
|
||||
Remove access Αφαίρεση πρόσβασης
|
||||
Remove this client's access? Αφαίρεση της πρόσβασης αυτού του πελάτη;
|
||||
Repeat packets Επανάληψη πακέτων
|
||||
Repeaters this node hears directly, with the signal it hears them at. Αναμεταδότες που ακούει απευθείας αυτός ο κόμβος, με το σήμα που τους ακούει.
|
||||
Repeating Επανάληψη
|
||||
Repeating & limits Επανάληψη και όρια
|
||||
Reset counters Μηδενισμός μετρητών
|
||||
Reset the node's packet counters? Μηδενισμός των μετρητών πακέτων του κόμβου;
|
||||
Room password Κωδικός δωματίου
|
||||
Save (after a reboot) Αποθήκευση (μετά από επανεκκίνηση)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Αποθήκευση νέων ρυθμίσεων ραδιοφώνου;\nΤώρα: %s\nΝέες: %s\nΙσχύουν μετά από επανεκκίνηση. Λάθος τιμές μπορούν να αποκόψουν οριστικά αυτόν τον κόμβο.
|
||||
Saved. Applies after a reboot. Αποθηκεύτηκε. Ισχύει μετά από επανεκκίνηση.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Αποθηκεύτηκε. Ο κόμβος χρησιμοποιεί τις νέες ρυθμίσεις μετά από επανεκκίνηση. Επανεκκίνηση τώρα;
|
||||
Saving... Αποθήκευση...
|
||||
Send flood advert Αποστολή flood advert
|
||||
Send now Αποστολή τώρα
|
||||
Send zero-hop advert Αποστολή zero-hop advert
|
||||
Set the node's position to this device's position? Ορισμός της θέσης του κόμβου στη θέση αυτής της συσκευής;
|
||||
Shown to anyone who asks this node. Up to 119 characters. Εμφανίζεται σε όποιον ρωτήσει αυτόν τον κόμβο. Έως 119 χαρακτήρες.
|
||||
Spreading factor Συντελεστής διασποράς
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Έναρξη ενημέρωσης υλικολογισμικού στον κόμβο; Ανοίγει δικό του σημείο πρόσβασης Wi-Fi μέχρι να ενημερωθεί ή να επανεκκινηθεί, και στο μεταξύ δεν επαναλαμβάνει τίποτα.
|
||||
Start firmware update Έναρξη ενημέρωσης υλικολογισμικού
|
||||
Strict Αυστηρή
|
||||
Strongest Ισχυρότεροι
|
||||
Sync clock to this device Συγχρονισμός ρολογιού με αυτή τη συσκευή
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. Το δέντρο περιοχών του κόμβου: το ^ σημειώνει την οικεία περιοχή του, το F ότι επαναλαμβάνει floods για την περιοχή. Επεξεργαστείτε τις περιοχές στην Κονσόλα.
|
||||
The passwords do not match Οι κωδικοί δεν ταιριάζουν
|
||||
The position goes out in the node's adverts. Η θέση στέλνεται στα adverts του κόμβου.
|
||||
The same for direct packets. 0 to 2. Το ίδιο για άμεσα πακέτα. 0 έως 2.
|
||||
The same limit for adverts. 0 to 64. Το ίδιο όριο για adverts. 0 έως 64.
|
||||
This device Αυτή η συσκευή
|
||||
This device has no position Αυτή η συσκευή δεν έχει θέση
|
||||
Transmit power Ισχύς εκπομπής
|
||||
Try Δοκιμή
|
||||
Try for 10 minutes Δοκιμή για 10 λεπτά
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Δοκιμή νέων ρυθμίσεων ραδιοφώνου για %u λεπτά;\nΤώρα: %s\nΔοκιμή: %s\nΟ κόμβος επιστρέφει μόνος του. Ως τότε τον βρίσκετε μόνο με τις νέες ρυθμίσεις.
|
||||
Up to 31 characters, without [ ] \\ : , ? * Έως 31 χαρακτήρες, χωρίς [ ] \\ : , ? *
|
||||
Updated %s ago Ενημερώθηκε πριν από %s
|
||||
Uptime Χρόνος λειτουργίας
|
||||
Use my position Χρήση της θέσης μου
|
||||
Use this device's settings Χρήση των ρυθμίσεων αυτής της συσκευής
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Λάθος ρυθμίσεις ραδιοφώνου μπορούν να αποκόψουν τον κόμβο: τότε τον βρίσκετε μόνο με τις νέες ρυθμίσεις, ή καθόλου. Δοκιμάστε τες πρώτα· ο κόμβος επιστρέφει μόνος του.
|
||||
dBm, -9 to 30. Applies at once. dBm, -9 έως 30. Ισχύει αμέσως.
|
||||
pushed προωθήθηκαν
|
||||
you εσείς
|
||||
Flood in / out Flood εισ. / εξ.
|
||||
Direct in / out Άμεσα εισ. / εξ.
|
||||
Airtime TX / RX Χρόνος εκπομπής TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: es
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Español
|
||||
# base: es
|
||||
(device behind) (dispositivo atrasado)
|
||||
@@ -1987,3 +1987,176 @@ Showing the first %d tracks Se muestran las primeras %d pistas
|
||||
Sound is off: Settings > Sound El sonido está apagado: Ajustes > Sonido
|
||||
Stopped Detenido
|
||||
This device cannot play music. Este dispositivo no puede reproducir música.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Hardware
|
||||
Display & lock Pantalla y bloqueo
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Deja el Bluetooth activado para emparejar la app MeshCore de tu teléfono. El Wi-Fi se puede configurar en cualquier momento en Ajustes.
|
||||
Radio: Radio:
|
||||
Keyboard: Teclado:
|
||||
newer keyboard teclado nuevo
|
||||
older keyboard teclado antiguo
|
||||
older keyboard (set manually) teclado antiguo (ajustado a mano)
|
||||
keyboard not detected yet teclado aún no detectado
|
||||
Always use the external antenna (MMCX) Usar siempre la antena externa (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Arranca en el conector externo en cada inicio. Solo para una antena que queda conectada.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Elige Externa solo con una antena puesta en el conector externo. Tras reiniciar arranca en la antena integrada, salvo que el interruptor de abajo esté activado.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. ¿Usar siempre la antena externa?\n\nLa radio arrancará en el conector externo (MMCX) en cada inicio. Transmitir sin una antena conectada puede dañar la radio.\n\nActívalo solo si tu antena externa queda conectada.
|
||||
Turn on Activar
|
||||
On-board antenna selected Antena integrada seleccionada
|
||||
External antenna at every boot Antena externa en cada inicio
|
||||
Antenna Antena
|
||||
On-board Integrada
|
||||
Glass tiles Mosaicos de cristal
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Los widgets, tarjetas y mosaicos del panel dejan ver el fondo. Apagado: mosaicos sólidos.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. 0 a 9. Más alto espera más entre envíos.
|
||||
A name is required Hace falta un nombre
|
||||
A node clock only moves forward: syncing cannot set it back. El reloj de un nodo solo avanza: sincronizar no puede atrasarlo.
|
||||
A room server lists only its admins here. Un servidor de sala solo lista aquí a sus administradores.
|
||||
Access Acceso
|
||||
Access changed Acceso cambiado
|
||||
Actions Acciones
|
||||
Admin password Contraseña de administrador
|
||||
Admin password changed. Contraseña de administrador cambiada.
|
||||
Admin password for full control, or the room password. Contraseña de administrador para el control total, o la contraseña de la sala.
|
||||
Admin password for full control. A guest sees status and neighbours. Contraseña de administrador para el control total. Un invitado ve el estado y los vecinos.
|
||||
Advanced Avanzado
|
||||
Advert hop limit Límite de saltos de anuncios
|
||||
Advert intervals Intervalos de anuncio
|
||||
Adverts Anuncios
|
||||
Again Otra vez
|
||||
Airtime factor Factor de tiempo en el aire
|
||||
Bandwidth Ancho de banda
|
||||
Change Cambiar
|
||||
Change radio settings Cambiar ajustes de radio
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. ¿Cambiar la contraseña de administrador? Si la pierdes, ya no podrás gestionar este nodo por la malla.
|
||||
Clients Clientes
|
||||
Coding rate Tasa de codificación
|
||||
Console Consola
|
||||
Current Actual
|
||||
Decimal degrees, for example 4.4025 Grados decimales, por ejemplo 4.4025
|
||||
Decimal degrees, for example 51.2194 Grados decimales, por ejemplo 51.2194
|
||||
Direct send delay Retardo de envío directo
|
||||
Discover neighbours Buscar vecinos
|
||||
Duplicates Duplicados
|
||||
Enter a number Introduce un número
|
||||
Enter a password Introduce una contraseña
|
||||
Error Error
|
||||
Errors Errores
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Actualización: el nodo abre un punto de acceso Wi-Fi; conéctate y sube el nuevo firmware en un navegador, como dicen las instrucciones del nodo.
|
||||
Flood advert Anuncio flood
|
||||
Flood hop limit Límite de saltos de floods
|
||||
Flood send delay Retardo de envío flood
|
||||
Floods with more hops are not repeated. 0 to 64. Los floods con más saltos no se repiten. 0 a 64.
|
||||
Frequency: 150 to 2500 MHz Frecuencia: 150 a 2500 MHz
|
||||
Guest Invitado
|
||||
Guest password Contraseña de invitado
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Horas entre anuncios flood: 0 (apagado) o 3 a 168.
|
||||
How hard to drop packets that came back around. Con qué rigor se descartan los paquetes que vuelven en bucle.
|
||||
Identity Identidad
|
||||
Identity & location Identidad y ubicación
|
||||
Last reply Última respuesta
|
||||
Last signal Última señal
|
||||
Lets a wrong or blank password in to read, not to post. Deja entrar con una contraseña errónea o vacía para leer, no para publicar.
|
||||
Load more (%d of %u) Cargar más (%d de %u)
|
||||
Local advert Anuncio local
|
||||
Location Ubicación
|
||||
Log in Iniciar sesión
|
||||
Log in as admin Entrar como administrador
|
||||
Log in as guest Entrar como invitado
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Sesión de invitado: puedes leer el estado y los vecinos. Entra con la contraseña de administrador para cambiar ajustes.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Sesión sin derechos de administrador. Entra con la contraseña de administrador para cambiar ajustes.
|
||||
Logging in... Iniciando sesión...
|
||||
Login refused. Inicio de sesión rechazado.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Entra como invitado. Vacía deja entrar a cualquiera como invitado. Hasta 15 caracteres.
|
||||
Loop detection Detección de bucles
|
||||
Manage Gestionar
|
||||
Members log in with it to post. Up to 15 characters. Los miembros entran con ella para publicar. Hasta 15 caracteres.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Minutos entre anuncios de cero saltos: 0 (apagado) o 60 a 240.
|
||||
Moderate Moderada
|
||||
Neighbours Vecinos
|
||||
New password Nueva contraseña
|
||||
Newest Más recientes
|
||||
No neighbours heard yet. Aún no se ha oído ningún vecino.
|
||||
No reply Sin respuesta
|
||||
No reply from the node El nodo no responde
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Sin respuesta. Comprueba la contraseña, que el nodo esté al alcance y el reloj de este dispositivo.
|
||||
No reply. It may or may not have been applied: read it again. Sin respuesta. Puede que se haya aplicado o no: vuelve a leerlo.
|
||||
No spaces Sin espacios
|
||||
Nobody on the list. Nadie en la lista.
|
||||
Node clock Reloj del nodo
|
||||
Noise floor Ruido de fondo
|
||||
Not in your contacts No está en tus contactos
|
||||
Not in your contacts, so only removing is possible here. No está en tus contactos, así que aquí solo se puede quitar.
|
||||
Not saved No guardado
|
||||
Off: this node stops forwarding anything. Apagado: este nodo deja de reenviar nada.
|
||||
Order Orden
|
||||
Owner Propietario
|
||||
Owner info Info del propietario
|
||||
Password Contraseña
|
||||
Passwords Contraseñas
|
||||
Passwords & access Contraseñas y acceso
|
||||
Posts Mensajes
|
||||
Prefers stronger copies of a flood. 0 to 20. Prefiere las copias más fuertes de un flood. 0 a 20.
|
||||
Queue Cola
|
||||
Random delay factor before repeating a flood. 0 to 2. Factor de retardo aleatorio antes de repetir un flood. 0 a 2.
|
||||
Read again Volver a leer
|
||||
Read-only Solo lectura
|
||||
Read-only access Acceso de solo lectura
|
||||
Read-write Lectura y escritura
|
||||
Reading... Leyendo...
|
||||
Reboot sent. The node is back in about 10 s. Reinicio enviado. El nodo vuelve en unos 10 s.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. ¿Reiniciar el nodo? Queda fuera del aire unos 10 s y olvida las sesiones de invitado.
|
||||
Receive delay Retardo de recepción
|
||||
Received Recibidos
|
||||
Refresh Actualizar
|
||||
Regions Regiones
|
||||
Remove access Quitar acceso
|
||||
Remove this client's access? ¿Quitar el acceso de este cliente?
|
||||
Repeat packets Repetir paquetes
|
||||
Repeaters this node hears directly, with the signal it hears them at. Repetidores que este nodo oye directamente, con la señal con que los oye.
|
||||
Repeating Repetición
|
||||
Repeating & limits Repetición y límites
|
||||
Reset counters Poner contadores a cero
|
||||
Reset the node's packet counters? ¿Poner a cero los contadores de paquetes del nodo?
|
||||
Room password Contraseña de la sala
|
||||
Save (after a reboot) Guardar (tras reiniciar)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. ¿Guardar los nuevos ajustes de radio?\nAhora: %s\nNuevos: %s\nSe aplican tras un reinicio. Valores erróneos pueden dejar este nodo aislado para siempre.
|
||||
Saved. Applies after a reboot. Guardado. Se aplica tras un reinicio.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Guardado. El nodo usa los nuevos ajustes de radio tras un reinicio. ¿Reiniciarlo ahora?
|
||||
Saving... Guardando...
|
||||
Send flood advert Enviar anuncio flood
|
||||
Send now Enviar ahora
|
||||
Send zero-hop advert Enviar anuncio de cero saltos
|
||||
Set the node's position to this device's position? ¿Poner la posición del nodo en la de este dispositivo?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Se muestra a quien pregunte a este nodo. Hasta 119 caracteres.
|
||||
Spreading factor Factor de dispersión
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. ¿Iniciar una actualización de firmware en el nodo? Abre su propio punto de acceso Wi-Fi hasta que se actualice o reinicie, y mientras tanto no repite nada.
|
||||
Start firmware update Iniciar actualización de firmware
|
||||
Strict Estricta
|
||||
Strongest Más fuertes
|
||||
Sync clock to this device Sincronizar reloj con este dispositivo
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. El árbol de regiones del nodo: ^ marca su región de origen, F que repite floods de esa región. Edita las regiones en la Consola.
|
||||
The passwords do not match Las contraseñas no coinciden
|
||||
The position goes out in the node's adverts. La posición sale en los anuncios del nodo.
|
||||
The same for direct packets. 0 to 2. Lo mismo para paquetes directos. 0 a 2.
|
||||
The same limit for adverts. 0 to 64. El mismo límite para anuncios. 0 a 64.
|
||||
This device Este dispositivo
|
||||
This device has no position Este dispositivo no tiene posición
|
||||
Transmit power Potencia de transmisión
|
||||
Try Probar
|
||||
Try for 10 minutes Probar 10 minutos
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. ¿Probar nuevos ajustes de radio durante %u minutos?\nAhora: %s\nPrueba: %s\nEl nodo vuelve solo. Hasta entonces solo lo alcanzas con los nuevos ajustes.
|
||||
Up to 31 characters, without [ ] \\ : , ? * Hasta 31 caracteres, sin [ ] \\ : , ? *
|
||||
Updated %s ago Actualizado hace %s
|
||||
Uptime Tiempo activo
|
||||
Use my position Usar mi posición
|
||||
Use this device's settings Usar los ajustes de este dispositivo
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Ajustes de radio erróneos pueden aislar este nodo: entonces solo lo alcanzas con los nuevos ajustes, o nunca. Pruébalos primero; el nodo vuelve solo.
|
||||
dBm, -9 to 30. Applies at once. dBm, -9 a 30. Se aplica al momento.
|
||||
pushed enviados
|
||||
you tú
|
||||
Flood in / out Flood entrada / salida
|
||||
Direct in / out Directo entrada / salida
|
||||
Airtime TX / RX Tiempo en aire TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: fr
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Français
|
||||
# base: fr
|
||||
(device behind) (appareil en retard)
|
||||
@@ -1986,3 +1986,176 @@ Showing the first %d tracks Les %d premiers titres sont affichés
|
||||
Sound is off: Settings > Sound Le son est coupé: Paramètres > Son
|
||||
Stopped Arrêté
|
||||
This device cannot play music. Cet appareil ne peut pas lire de musique.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Matériel
|
||||
Display & lock Affichage et verrouillage
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Laissez le Bluetooth activé pour appairer l'application MeshCore de votre téléphone. Le Wi-Fi peut être configuré à tout moment dans Réglages.
|
||||
Radio: Radio :
|
||||
Keyboard: Clavier :
|
||||
newer keyboard clavier récent
|
||||
older keyboard ancien clavier
|
||||
older keyboard (set manually) ancien clavier (réglé manuellement)
|
||||
keyboard not detected yet clavier pas encore détecté
|
||||
Always use the external antenna (MMCX) Toujours utiliser l'antenne externe (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Démarre sur la prise externe à chaque démarrage. Seulement pour une antenne qui reste branchée.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Ne choisissez Externe qu'avec une antenne branchée sur la prise externe. Après un redémarrage, c'est l'antenne embarquée, sauf si l'interrupteur ci-dessous est activé.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Toujours utiliser l'antenne externe ?\n\nLa radio démarrera sur la prise externe (MMCX) à chaque démarrage. Émettre sans antenne branchée peut endommager la radio.\n\nN'activez ceci que si votre antenne externe reste branchée.
|
||||
Turn on Activer
|
||||
On-board antenna selected Antenne embarquée sélectionnée
|
||||
External antenna at every boot Antenne externe à chaque démarrage
|
||||
Antenna Antenne
|
||||
On-board Interne
|
||||
Glass tiles Tuiles en verre
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Les widgets, cartes et tuiles du panneau laissent voir le fond. Désactivé : tuiles opaques.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. 0 à 9. Plus haut attend plus longtemps entre deux envois.
|
||||
A name is required Un nom est requis
|
||||
A node clock only moves forward: syncing cannot set it back. L'horloge d'un nœud ne fait qu'avancer : la synchroniser ne peut pas la reculer.
|
||||
A room server lists only its admins here. Un serveur de salon ne liste ici que ses admins.
|
||||
Access Accès
|
||||
Access changed Accès modifié
|
||||
Actions Actions
|
||||
Admin password Mot de passe admin
|
||||
Admin password changed. Mot de passe admin modifié.
|
||||
Admin password for full control, or the room password. Mot de passe admin pour le contrôle complet, ou le mot de passe du salon.
|
||||
Admin password for full control. A guest sees status and neighbours. Mot de passe admin pour le contrôle complet. Un invité voit l'état et les voisins.
|
||||
Advanced Avancé
|
||||
Advert hop limit Limite de sauts des annonces
|
||||
Advert intervals Intervalles d'annonce
|
||||
Adverts Annonces
|
||||
Again Encore
|
||||
Airtime factor Facteur de temps d'antenne
|
||||
Bandwidth Bande passante
|
||||
Change Changer
|
||||
Change radio settings Changer les réglages radio
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Changer le mot de passe admin ? Si vous le perdez, vous ne pourrez plus gérer ce nœud par le maillage.
|
||||
Clients Clients
|
||||
Coding rate Taux de codage
|
||||
Console Console
|
||||
Current Actuel
|
||||
Decimal degrees, for example 4.4025 Degrés décimaux, par exemple 4.4025
|
||||
Decimal degrees, for example 51.2194 Degrés décimaux, par exemple 51.2194
|
||||
Direct send delay Délai d'envoi direct
|
||||
Discover neighbours Chercher des voisins
|
||||
Duplicates Doublons
|
||||
Enter a number Entrez un nombre
|
||||
Enter a password Entrez un mot de passe
|
||||
Error Erreur
|
||||
Errors Erreurs
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Mise à jour : le nœud ouvre un point d'accès Wi-Fi ; connectez-vous et envoyez le nouveau firmware dans un navigateur, comme l'indiquent les instructions du nœud.
|
||||
Flood advert Annonce flood
|
||||
Flood hop limit Limite de sauts des floods
|
||||
Flood send delay Délai d'envoi flood
|
||||
Floods with more hops are not repeated. 0 to 64. Les floods avec plus de sauts ne sont pas répétés. 0 à 64.
|
||||
Frequency: 150 to 2500 MHz Fréquence : 150 à 2500 MHz
|
||||
Guest Invité
|
||||
Guest password Mot de passe invité
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Heures entre annonces flood : 0 (arrêt) ou 3 à 168.
|
||||
How hard to drop packets that came back around. Avec quelle rigueur jeter les paquets revenus en boucle.
|
||||
Identity Identité
|
||||
Identity & location Identité et position
|
||||
Last reply Dernière réponse
|
||||
Last signal Dernier signal
|
||||
Lets a wrong or blank password in to read, not to post. Laisse entrer un mot de passe faux ou vide pour lire, pas pour publier.
|
||||
Load more (%d of %u) Charger plus (%d sur %u)
|
||||
Local advert Annonce locale
|
||||
Location Position
|
||||
Log in Se connecter
|
||||
Log in as admin Se connecter en admin
|
||||
Log in as guest Se connecter en invité
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Connecté en invité : vous pouvez lire l'état et les voisins. Connectez-vous avec le mot de passe admin pour changer les réglages.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Connecté sans droits admin. Connectez-vous avec le mot de passe admin pour changer les réglages.
|
||||
Logging in... Connexion...
|
||||
Login refused. Connexion refusée.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Connexion en invité. Vide laisse entrer tout le monde en invité. 15 caractères au plus.
|
||||
Loop detection Détection de boucles
|
||||
Manage Gérer
|
||||
Members log in with it to post. Up to 15 characters. Les membres se connectent avec pour publier. 15 caractères au plus.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Minutes entre annonces zéro saut : 0 (arrêt) ou 60 à 240.
|
||||
Moderate Modérée
|
||||
Neighbours Voisins
|
||||
New password Nouveau mot de passe
|
||||
Newest Plus récents
|
||||
No neighbours heard yet. Aucun voisin entendu pour l'instant.
|
||||
No reply Pas de réponse
|
||||
No reply from the node Pas de réponse du nœud
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Pas de réponse. Vérifiez le mot de passe, que le nœud est à portée, et l'horloge de cet appareil.
|
||||
No reply. It may or may not have been applied: read it again. Pas de réponse. Appliqué ou non, impossible de savoir : relisez la valeur.
|
||||
No spaces Pas d'espaces
|
||||
Nobody on the list. Personne dans la liste.
|
||||
Node clock Horloge du nœud
|
||||
Noise floor Bruit de fond
|
||||
Not in your contacts Pas dans vos contacts
|
||||
Not in your contacts, so only removing is possible here. Pas dans vos contacts : seule la suppression est possible ici.
|
||||
Not saved Non enregistré
|
||||
Off: this node stops forwarding anything. Arrêt : ce nœud ne relaie plus rien.
|
||||
Order Ordre
|
||||
Owner Propriétaire
|
||||
Owner info Infos propriétaire
|
||||
Password Mot de passe
|
||||
Passwords Mots de passe
|
||||
Passwords & access Mots de passe et accès
|
||||
Posts Messages
|
||||
Prefers stronger copies of a flood. 0 to 20. Préfère les copies plus fortes d'un flood. 0 à 20.
|
||||
Queue File d'attente
|
||||
Random delay factor before repeating a flood. 0 to 2. Facteur de délai aléatoire avant de répéter un flood. 0 à 2.
|
||||
Read again Relire
|
||||
Read-only Lecture seule
|
||||
Read-only access Accès en lecture seule
|
||||
Read-write Lecture et écriture
|
||||
Reading... Lecture...
|
||||
Reboot sent. The node is back in about 10 s. Redémarrage envoyé. Le nœud revient dans 10 s environ.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Redémarrer le nœud ? Il est hors antenne 10 s environ et oublie les connexions invité.
|
||||
Receive delay Délai de réception
|
||||
Received Reçus
|
||||
Refresh Actualiser
|
||||
Regions Régions
|
||||
Remove access Retirer l'accès
|
||||
Remove this client's access? Retirer l'accès de ce client ?
|
||||
Repeat packets Répéter les paquets
|
||||
Repeaters this node hears directly, with the signal it hears them at. Les répéteurs que ce nœud entend directement, avec le signal reçu.
|
||||
Repeating Répétition
|
||||
Repeating & limits Répétition et limites
|
||||
Reset counters Remettre les compteurs à zéro
|
||||
Reset the node's packet counters? Remettre à zéro les compteurs de paquets du nœud ?
|
||||
Room password Mot de passe du salon
|
||||
Save (after a reboot) Enregistrer (après redémarrage)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Enregistrer les nouveaux réglages radio ?\nActuel : %s\nNouveau : %s\nIls s'appliquent après un redémarrage. De mauvaises valeurs peuvent couper ce nœud pour de bon.
|
||||
Saved. Applies after a reboot. Enregistré. S'applique après un redémarrage.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Enregistré. Le nœud utilise les nouveaux réglages radio après un redémarrage. Redémarrer maintenant ?
|
||||
Saving... Enregistrement...
|
||||
Send flood advert Envoyer une annonce flood
|
||||
Send now Envoyer maintenant
|
||||
Send zero-hop advert Envoyer une annonce zéro saut
|
||||
Set the node's position to this device's position? Mettre la position du nœud à celle de cet appareil ?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Montré à quiconque interroge ce nœud. 119 caractères au plus.
|
||||
Spreading factor Facteur d'étalement
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Lancer une mise à jour du firmware sur le nœud ? Il ouvre son propre point d'accès Wi-Fi jusqu'à la mise à jour ou un redémarrage, et ne répète plus rien entre-temps.
|
||||
Start firmware update Lancer la mise à jour
|
||||
Strict Stricte
|
||||
Strongest Plus forts
|
||||
Sync clock to this device Régler l'horloge sur cet appareil
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. L'arbre des régions du nœud : ^ marque sa région d'origine, F qu'il répète les floods de cette région. Modifiez les régions dans la Console.
|
||||
The passwords do not match Les mots de passe ne correspondent pas
|
||||
The position goes out in the node's adverts. La position part dans les annonces du nœud.
|
||||
The same for direct packets. 0 to 2. Pareil pour les paquets directs. 0 à 2.
|
||||
The same limit for adverts. 0 to 64. La même limite pour les annonces. 0 à 64.
|
||||
This device Cet appareil
|
||||
This device has no position Cet appareil n'a pas de position
|
||||
Transmit power Puissance d'émission
|
||||
Try Essayer
|
||||
Try for 10 minutes Essayer 10 minutes
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Essayer de nouveaux réglages radio pendant %u minutes ?\nActuel : %s\nEssai : %s\nLe nœud revient seul en arrière. D'ici là, vous ne le joignez qu'avec les nouveaux réglages.
|
||||
Up to 31 characters, without [ ] \\ : , ? * 31 caractères au plus, sans [ ] \\ : , ? *
|
||||
Updated %s ago Mis à jour il y a %s
|
||||
Uptime Temps de fonctionnement
|
||||
Use my position Utiliser ma position
|
||||
Use this device's settings Utiliser les réglages de cet appareil
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. De mauvais réglages radio peuvent couper ce nœud : vous ne le joignez alors qu'avec les nouveaux réglages, ou plus du tout. Essayez-les d'abord ; le nœud revient seul en arrière.
|
||||
dBm, -9 to 30. Applies at once. dBm, -9 à 30. S'applique tout de suite.
|
||||
pushed poussés
|
||||
you vous
|
||||
Flood in / out Flood reçus / émis
|
||||
Direct in / out Direct reçus / émis
|
||||
Airtime TX / RX Temps d'antenne TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: hu
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Magyar
|
||||
# base: hu
|
||||
(device behind) (készülék hátulján)
|
||||
@@ -1997,3 +1997,176 @@ Showing the first %d tracks Az első %d szám látható
|
||||
Sound is off: Settings > Sound A hang ki van kapcsolva: Beállítások > Hang
|
||||
Stopped Leállítva
|
||||
This device cannot play music. Ez az eszköz nem tud zenét lejátszani.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Hardver
|
||||
Display & lock Kijelző és zár
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Hagyd bekapcsolva a Bluetooth-t, hogy párosíthasd a telefonodon a MeshCore alkalmazást. A Wi-Fi bármikor beállítható a Beállításokban.
|
||||
Radio: Rádió:
|
||||
Keyboard: Billentyűzet:
|
||||
newer keyboard újabb billentyűzet
|
||||
older keyboard régebbi billentyűzet
|
||||
older keyboard (set manually) régebbi billentyűzet (kézzel beállítva)
|
||||
keyboard not detected yet a billentyűzet még nincs felismerve
|
||||
Always use the external antenna (MMCX) Mindig a külső antenna (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Minden indításkor a külső csatlakozón indul. Csak tartósan csatlakoztatott antennához.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Külsőt csak akkor válassz, ha antenna van a külső csatlakozón. Újraindítás után a beépített antennán indul, kivéve ha az alábbi kapcsoló be van kapcsolva.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Mindig a külső antennát használod?\n\nA rádió minden indításkor a külső (MMCX) csatlakozón indul. Antenna nélküli adás károsíthatja a rádiót.\n\nCsak akkor kapcsold be, ha a külső antenna csatlakoztatva marad.
|
||||
Turn on Bekapcsol
|
||||
On-board antenna selected Beépített antenna kiválasztva
|
||||
External antenna at every boot Külső antenna minden indításkor
|
||||
Antenna Antenna
|
||||
On-board Beépített
|
||||
Glass tiles Üveg csempék
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. A widgetek, kártyák és a panel csempéi átengedik a hátteret. Ki: tömör csempék.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. 0 és 9 között. Magasabb érték több várakozás a küldések között.
|
||||
A name is required Név megadása kötelező
|
||||
A node clock only moves forward: syncing cannot set it back. Egy node órája csak előre jár: a szinkronizálás nem tudja visszaállítani.
|
||||
A room server lists only its admins here. Egy room szerver itt csak az adminjait listázza.
|
||||
Access Hozzáférés
|
||||
Access changed Hozzáférés módosítva
|
||||
Actions Műveletek
|
||||
Admin password Admin jelszó
|
||||
Admin password changed. Admin jelszó megváltoztatva.
|
||||
Admin password for full control, or the room password. Admin jelszó a teljes irányításhoz, vagy a szoba jelszava.
|
||||
Admin password for full control. A guest sees status and neighbours. Admin jelszó a teljes irányításhoz. Vendégként az állapot és a szomszédok láthatók.
|
||||
Advanced Haladó
|
||||
Advert hop limit Hop korlát advertekhez
|
||||
Advert intervals Advert időközök
|
||||
Adverts Advertek
|
||||
Again Újra
|
||||
Airtime factor Adásidő szorzó
|
||||
Bandwidth Sávszélesség
|
||||
Change Módosítás
|
||||
Change radio settings Rádióbeállítások módosítása
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Megváltoztatod az admin jelszót? Ha elveszíted, többé nem kezelheted ezt a node-ot a hálón keresztül.
|
||||
Clients Kliensek
|
||||
Coding rate Kódolási arány
|
||||
Console Konzol
|
||||
Current Jelenlegi
|
||||
Decimal degrees, for example 4.4025 Tizedes fok, például 4.4025
|
||||
Decimal degrees, for example 51.2194 Tizedes fok, például 51.2194
|
||||
Direct send delay Direkt küldési késleltetés
|
||||
Discover neighbours Szomszédok keresése
|
||||
Duplicates Duplikátumok
|
||||
Enter a number Adj meg egy számot
|
||||
Enter a password Adj meg egy jelszót
|
||||
Error Hiba
|
||||
Errors Hibák
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Firmware frissítés: a node Wi-Fi hozzáférési pontot nyit; csatlakozz hozzá, és töltsd fel az új firmware-t böngészőben, ahogy a node utasításai mondják.
|
||||
Flood advert Flood advert
|
||||
Flood hop limit Hop korlát floodokhoz
|
||||
Flood send delay Flood küldési késleltetés
|
||||
Floods with more hops are not repeated. 0 to 64. A több hopos floodokat nem ismétli. 0 és 64 között.
|
||||
Frequency: 150 to 2500 MHz Frekvencia: 150 és 2500 MHz között
|
||||
Guest Vendég
|
||||
Guest password Vendég jelszó
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Órák a flood advertek között: 0 (ki) vagy 3 és 168 között.
|
||||
How hard to drop packets that came back around. Mennyire szigorúan dobja el a körbe visszaért csomagokat.
|
||||
Identity Azonosító
|
||||
Identity & location Azonosító és hely
|
||||
Last reply Utolsó válasz
|
||||
Last signal Utolsó jel
|
||||
Lets a wrong or blank password in to read, not to post. Hibás vagy üres jelszóval is beenged olvasni, de írni nem.
|
||||
Load more (%d of %u) Továbbiak betöltése (%d / %u)
|
||||
Local advert Helyi advert
|
||||
Location Hely
|
||||
Log in Bejelentkezés
|
||||
Log in as admin Bejelentkezés adminként
|
||||
Log in as guest Bejelentkezés vendégként
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Vendégként bejelentkezve: olvashatod az állapotot és a szomszédokat. A beállítások módosításához jelentkezz be az admin jelszóval.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Admin jogok nélkül bejelentkezve. A beállítások módosításához jelentkezz be az admin jelszóval.
|
||||
Logging in... Bejelentkezés...
|
||||
Login refused. Bejelentkezés elutasítva.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Vendégként jelentkeztet be. Üresen bárkit beenged vendégként. Legfeljebb 15 karakter.
|
||||
Loop detection Hurokészlelés
|
||||
Manage Kezelés
|
||||
Members log in with it to post. Up to 15 characters. A tagok ezzel jelentkeznek be, hogy írhassanak. Legfeljebb 15 karakter.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Percek a zero-hop advertek között: 0 (ki) vagy 60 és 240 között.
|
||||
Moderate Mérsékelt
|
||||
Neighbours Szomszédok
|
||||
New password Új jelszó
|
||||
Newest Legújabb
|
||||
No neighbours heard yet. Még nem hallott szomszédot.
|
||||
No reply Nincs válasz
|
||||
No reply from the node A node nem válaszol
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Nincs válasz. Ellenőrizd a jelszót, hogy a node hatótávon belül van-e, és ennek az eszköznek az óráját.
|
||||
No reply. It may or may not have been applied: read it again. Nincs válasz. Lehet, hogy érvénybe lépett, lehet, hogy nem: olvasd be újra.
|
||||
No spaces Szóközök nélkül
|
||||
Nobody on the list. Senki sincs a listán.
|
||||
Node clock A node órája
|
||||
Noise floor Zajszint
|
||||
Not in your contacts Nincs a névjegyeid között
|
||||
Not in your contacts, so only removing is possible here. Nincs a névjegyeid között, ezért itt csak eltávolítani lehet.
|
||||
Not saved Nincs mentve
|
||||
Off: this node stops forwarding anything. Ki: ez a node semmit sem továbbít.
|
||||
Order Sorrend
|
||||
Owner Tulajdonos
|
||||
Owner info Tulajdonos infó
|
||||
Password Jelszó
|
||||
Passwords Jelszavak
|
||||
Passwords & access Jelszavak és hozzáférés
|
||||
Posts Bejegyzések
|
||||
Prefers stronger copies of a flood. 0 to 20. A flood erősebb példányait részesíti előnyben. 0 és 20 között.
|
||||
Queue Sor
|
||||
Random delay factor before repeating a flood. 0 to 2. Véletlen késleltetési szorzó egy flood ismétlése előtt. 0 és 2 között.
|
||||
Read again Újraolvasás
|
||||
Read-only Csak olvasás
|
||||
Read-only access Csak olvasási hozzáférés
|
||||
Read-write Olvasás és írás
|
||||
Reading... Olvasás...
|
||||
Reboot sent. The node is back in about 10 s. Újraindítás elküldve. A node kb. 10 mp múlva visszatér.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Újraindítod a node-ot? Kb. 10 mp-ig nem ad, és elfelejti a vendég bejelentkezéseket.
|
||||
Receive delay Vételi késleltetés
|
||||
Received Fogadott
|
||||
Refresh Frissítés
|
||||
Regions Régiók
|
||||
Remove access Hozzáférés eltávolítása
|
||||
Remove this client's access? Eltávolítod ennek a kliensnek a hozzáférését?
|
||||
Repeat packets Csomagok ismétlése
|
||||
Repeaters this node hears directly, with the signal it hears them at. Az átjátszók, amelyeket ez a node közvetlenül hall, azzal a jellel, ahogy hallja őket.
|
||||
Repeating Ismétlés
|
||||
Repeating & limits Ismétlés és korlátok
|
||||
Reset counters Számlálók nullázása
|
||||
Reset the node's packet counters? Nullázod a node csomagszámlálóit?
|
||||
Room password Szoba jelszó
|
||||
Save (after a reboot) Mentés (újraindítás után)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Mented az új rádióbeállításokat?\nMost: %s\nÚj: %s\nÚjraindítás után lépnek életbe. Hibás értékek végleg elvághatják ezt a node-ot.
|
||||
Saved. Applies after a reboot. Mentve. Újraindítás után lép életbe.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Mentve. A node újraindítás után használja az új rádióbeállításokat. Újraindítod most?
|
||||
Saving... Mentés...
|
||||
Send flood advert Flood advert küldése
|
||||
Send now Küldés most
|
||||
Send zero-hop advert Zero-hop advert küldése
|
||||
Set the node's position to this device's position? A node helyét ennek az eszköznek a helyére állítod?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Bárki láthatja, aki megkérdezi a node-ot. Legfeljebb 119 karakter.
|
||||
Spreading factor Szórási tényező
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Firmware frissítést indítasz a node-on? Saját Wi-Fi hozzáférési pontot nyit, amíg frissítik vagy újraindul, és addig semmit sem ismétel.
|
||||
Start firmware update Firmware frissítés indítása
|
||||
Strict Szigorú
|
||||
Strongest Legerősebb
|
||||
Sync clock to this device Óra szinkronizálása ehhez az eszközhöz
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. A node régiófája: ^ jelöli az otthoni régióját, F azt, hogy ismétli a floodokat abban a régióban. A régiókat a Konzolban szerkesztheted.
|
||||
The passwords do not match A jelszavak nem egyeznek
|
||||
The position goes out in the node's adverts. A hely a node advertjeiben megy ki.
|
||||
The same for direct packets. 0 to 2. Ugyanez a direkt csomagokra. 0 és 2 között.
|
||||
The same limit for adverts. 0 to 64. Ugyanez a korlát advertekre. 0 és 64 között.
|
||||
This device Ez az eszköz
|
||||
This device has no position Ennek az eszköznek nincs helyzete
|
||||
Transmit power Adóteljesítmény
|
||||
Try Kipróbálás
|
||||
Try for 10 minutes Kipróbálás 10 percig
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Kipróbálod az új rádióbeállításokat %u percig?\nMost: %s\nPróba: %s\nA node magától visszaáll. Addig csak az új beállításokkal éred el.
|
||||
Up to 31 characters, without [ ] \\ : , ? * Legfeljebb 31 karakter, ezek nélkül: [ ] \\ : , ? *
|
||||
Updated %s ago Frissítve %s ezelőtt
|
||||
Uptime Üzemidő
|
||||
Use my position Saját helyem használata
|
||||
Use this device's settings Ennek az eszköznek a beállításai
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. A hibás rádióbeállítások elvághatják ezt a node-ot: akkor csak az új beállításokkal éred el, vagy sehogy. Előbb próbáld ki őket; a node magától visszaáll.
|
||||
dBm, -9 to 30. Applies at once. dBm, -9 és 30 között. Azonnal érvényes.
|
||||
pushed kiküldve
|
||||
you te
|
||||
Flood in / out Flood be / ki
|
||||
Direct in / out Direkt be / ki
|
||||
Airtime TX / RX Adásidő TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: it
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Italiano
|
||||
# base: it
|
||||
(device behind) (dispositivo indietro)
|
||||
@@ -1986,3 +1986,176 @@ Showing the first %d tracks Mostro i primi %d brani
|
||||
Sound is off: Settings > Sound Il suono è spento: Impostazioni > Suono
|
||||
Stopped Fermo
|
||||
This device cannot play music. Questo dispositivo non può riprodurre musica.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Hardware
|
||||
Display & lock Schermo e blocco
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Lascia attivo il Bluetooth per associare l'app MeshCore sul telefono. Il Wi-Fi si può configurare in qualsiasi momento in Impostazioni.
|
||||
Radio: Radio:
|
||||
Keyboard: Tastiera:
|
||||
newer keyboard tastiera nuova
|
||||
older keyboard tastiera vecchia
|
||||
older keyboard (set manually) tastiera vecchia (impostata a mano)
|
||||
keyboard not detected yet tastiera non ancora rilevata
|
||||
Always use the external antenna (MMCX) Usa sempre l'antenna esterna (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Si avvia sul connettore esterno a ogni accensione. Solo per un'antenna che resta collegata.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Scegli Esterna solo con un'antenna montata sul connettore esterno. Dopo un riavvio parte sull'antenna integrata, a meno che l'interruttore qui sotto sia attivo.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Usare sempre l'antenna esterna?\n\nLa radio partirà sul connettore esterno (MMCX) a ogni accensione. Trasmettere senza un'antenna collegata può danneggiare la radio.\n\nAttivalo solo se la tua antenna esterna resta collegata.
|
||||
Turn on Attiva
|
||||
On-board antenna selected Antenna integrata selezionata
|
||||
External antenna at every boot Antenna esterna a ogni avvio
|
||||
Antenna Antenna
|
||||
On-board Integrata
|
||||
Glass tiles Riquadri in vetro
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Widget, schede e riquadri del pannello lasciano vedere lo sfondo. Spento: riquadri pieni.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. Da 0 a 9. Più alto attende di più tra un invio e l'altro.
|
||||
A name is required Serve un nome
|
||||
A node clock only moves forward: syncing cannot set it back. L'orologio di un nodo va solo avanti: sincronizzarlo non può riportarlo indietro.
|
||||
A room server lists only its admins here. Un room server qui elenca solo i suoi amministratori.
|
||||
Access Accesso
|
||||
Access changed Accesso modificato
|
||||
Actions Azioni
|
||||
Admin password Password admin
|
||||
Admin password changed. Password admin cambiata.
|
||||
Admin password for full control, or the room password. Password admin per il controllo completo, oppure la password della stanza.
|
||||
Admin password for full control. A guest sees status and neighbours. Password admin per il controllo completo. Un ospite vede stato e vicini.
|
||||
Advanced Avanzate
|
||||
Advert hop limit Limite di salti per gli advert
|
||||
Advert intervals Intervalli degli advert
|
||||
Adverts Advert
|
||||
Again Di nuovo
|
||||
Airtime factor Fattore tempo di trasmissione
|
||||
Bandwidth Larghezza di banda
|
||||
Change Cambia
|
||||
Change radio settings Cambia impostazioni radio
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Cambiare la password admin? Se la perdi non potrai più gestire questo nodo tramite la mesh.
|
||||
Clients Client
|
||||
Coding rate Coding rate
|
||||
Console Console
|
||||
Current Attuale
|
||||
Decimal degrees, for example 4.4025 Gradi decimali, per esempio 4.4025
|
||||
Decimal degrees, for example 51.2194 Gradi decimali, per esempio 51.2194
|
||||
Direct send delay Ritardo di invio diretto
|
||||
Discover neighbours Cerca vicini
|
||||
Duplicates Duplicati
|
||||
Enter a number Inserisci un numero
|
||||
Enter a password Inserisci una password
|
||||
Error Errore
|
||||
Errors Errori
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Aggiornamento: il nodo apre un access point Wi-Fi; collegati e carica il nuovo firmware in un browser, come dicono le istruzioni del nodo.
|
||||
Flood advert Advert flood
|
||||
Flood hop limit Limite di salti per i flood
|
||||
Flood send delay Ritardo di invio flood
|
||||
Floods with more hops are not repeated. 0 to 64. I flood con più salti non vengono ripetuti. Da 0 a 64.
|
||||
Frequency: 150 to 2500 MHz Frequenza: da 150 a 2500 MHz
|
||||
Guest Ospite
|
||||
Guest password Password ospite
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Ore tra advert flood: 0 (spento) o da 3 a 168.
|
||||
How hard to drop packets that came back around. Quanto severamente scartare i pacchetti tornati in giro.
|
||||
Identity Identità
|
||||
Identity & location Identità e posizione
|
||||
Last reply Ultima risposta
|
||||
Last signal Ultimo segnale
|
||||
Lets a wrong or blank password in to read, not to post. Fa entrare con una password sbagliata o vuota per leggere, non per scrivere.
|
||||
Load more (%d of %u) Carica altri (%d di %u)
|
||||
Local advert Advert locale
|
||||
Location Posizione
|
||||
Log in Accedi
|
||||
Log in as admin Accedi come admin
|
||||
Log in as guest Accedi come ospite
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Accesso come ospite: puoi leggere stato e vicini. Accedi con la password admin per cambiare le impostazioni.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Accesso senza diritti di admin. Accedi con la password admin per cambiare le impostazioni.
|
||||
Logging in... Accesso in corso...
|
||||
Login refused. Accesso rifiutato.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Accede come ospite. Vuota fa entrare chiunque come ospite. Fino a 15 caratteri.
|
||||
Loop detection Rilevamento dei loop
|
||||
Manage Gestisci
|
||||
Members log in with it to post. Up to 15 characters. I membri accedono con questa per scrivere. Fino a 15 caratteri.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Minuti tra advert a zero salti: 0 (spento) o da 60 a 240.
|
||||
Moderate Moderato
|
||||
Neighbours Vicini
|
||||
New password Nuova password
|
||||
Newest Più recenti
|
||||
No neighbours heard yet. Nessun vicino sentito finora.
|
||||
No reply Nessuna risposta
|
||||
No reply from the node Nessuna risposta dal nodo
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Nessuna risposta. Controlla la password, che il nodo sia in portata e l'orologio di questo dispositivo.
|
||||
No reply. It may or may not have been applied: read it again. Nessuna risposta. Potrebbe essere stato applicato o no: rileggilo.
|
||||
No spaces Niente spazi
|
||||
Nobody on the list. Nessuno nell'elenco.
|
||||
Node clock Orologio del nodo
|
||||
Noise floor Rumore di fondo
|
||||
Not in your contacts Non è nei tuoi contatti
|
||||
Not in your contacts, so only removing is possible here. Non è nei tuoi contatti, quindi qui si può solo rimuovere.
|
||||
Not saved Non salvato
|
||||
Off: this node stops forwarding anything. Spento: questo nodo smette di inoltrare qualsiasi cosa.
|
||||
Order Ordine
|
||||
Owner Proprietario
|
||||
Owner info Info proprietario
|
||||
Password Password
|
||||
Passwords Password
|
||||
Passwords & access Password e accesso
|
||||
Posts Messaggi
|
||||
Prefers stronger copies of a flood. 0 to 20. Preferisce le copie più forti di un flood. Da 0 a 20.
|
||||
Queue Coda
|
||||
Random delay factor before repeating a flood. 0 to 2. Fattore di ritardo casuale prima di ripetere un flood. Da 0 a 2.
|
||||
Read again Rileggi
|
||||
Read-only Sola lettura
|
||||
Read-only access Accesso in sola lettura
|
||||
Read-write Lettura e scrittura
|
||||
Reading... Lettura...
|
||||
Reboot sent. The node is back in about 10 s. Riavvio inviato. Il nodo torna tra circa 10 s.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Riavviare il nodo? Resta fuori onda per circa 10 s e dimentica gli accessi degli ospiti.
|
||||
Receive delay Ritardo di ricezione
|
||||
Received Ricevuti
|
||||
Refresh Aggiorna
|
||||
Regions Regioni
|
||||
Remove access Rimuovi accesso
|
||||
Remove this client's access? Rimuovere l'accesso di questo client?
|
||||
Repeat packets Ripeti pacchetti
|
||||
Repeaters this node hears directly, with the signal it hears them at. I ripetitori che questo nodo sente direttamente, con il segnale con cui li sente.
|
||||
Repeating Ripetizione
|
||||
Repeating & limits Ripetizione e limiti
|
||||
Reset counters Azzera contatori
|
||||
Reset the node's packet counters? Azzerare i contatori di pacchetti del nodo?
|
||||
Room password Password della stanza
|
||||
Save (after a reboot) Salva (dopo un riavvio)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Salvare le nuove impostazioni radio?\nOra: %s\nNuove: %s\nValgono dopo un riavvio. Valori sbagliati possono isolare questo nodo per sempre.
|
||||
Saved. Applies after a reboot. Salvato. Vale dopo un riavvio.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Salvato. Il nodo usa le nuove impostazioni radio dopo un riavvio. Riavviarlo ora?
|
||||
Saving... Salvataggio...
|
||||
Send flood advert Invia advert flood
|
||||
Send now Invia ora
|
||||
Send zero-hop advert Invia advert a zero salti
|
||||
Set the node's position to this device's position? Impostare la posizione del nodo su quella di questo dispositivo?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Mostrato a chiunque chieda a questo nodo. Fino a 119 caratteri.
|
||||
Spreading factor Spreading factor
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Avviare un aggiornamento del firmware sul nodo? Apre un suo access point Wi-Fi finché non viene aggiornato o riavviato, e intanto non ripete nulla.
|
||||
Start firmware update Avvia aggiornamento firmware
|
||||
Strict Rigoroso
|
||||
Strongest Più forti
|
||||
Sync clock to this device Sincronizza l'orologio con questo dispositivo
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. L'albero delle regioni del nodo: ^ indica la sua regione di casa, F che ripete i flood per quella regione. Le regioni si modificano nella Console.
|
||||
The passwords do not match Le password non corrispondono
|
||||
The position goes out in the node's adverts. La posizione viene inviata negli advert del nodo.
|
||||
The same for direct packets. 0 to 2. Lo stesso per i pacchetti diretti. Da 0 a 2.
|
||||
The same limit for adverts. 0 to 64. Lo stesso limite per gli advert. Da 0 a 64.
|
||||
This device Questo dispositivo
|
||||
This device has no position Questo dispositivo non ha una posizione
|
||||
Transmit power Potenza di trasmissione
|
||||
Try Prova
|
||||
Try for 10 minutes Prova per 10 minuti
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Provare nuove impostazioni radio per %u minuti?\nOra: %s\nProva: %s\nIl nodo torna indietro da solo. Fino ad allora lo raggiungi solo con le nuove impostazioni.
|
||||
Up to 31 characters, without [ ] \\ : , ? * Fino a 31 caratteri, senza [ ] \\ : , ? *
|
||||
Updated %s ago Aggiornato %s fa
|
||||
Uptime Tempo di attività
|
||||
Use my position Usa la mia posizione
|
||||
Use this device's settings Usa le impostazioni di questo dispositivo
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Impostazioni radio sbagliate possono isolare questo nodo: lo raggiungi solo con le nuove impostazioni, o per niente. Provale prima; il nodo torna indietro da solo.
|
||||
dBm, -9 to 30. Applies at once. dBm, da -9 a 30. Vale subito.
|
||||
pushed inviati
|
||||
you tu
|
||||
Flood in / out Flood in / out
|
||||
Direct in / out Diretti in / out
|
||||
Airtime TX / RX Tempo in onda TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: nl
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Nederlands
|
||||
# base: nl
|
||||
(device behind) (apparaat loopt achter)
|
||||
@@ -1984,3 +1984,177 @@ Showing the first %d tracks De eerste %d nummers worden getoond
|
||||
Sound is off: Settings > Sound Geluid staat uit: Instellingen > Geluid
|
||||
Stopped Gestopt
|
||||
This device cannot play music. Dit toestel kan geen muziek afspelen.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Hardware
|
||||
Display & lock Scherm & vergrendeling
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Laat Bluetooth aan om de MeshCore-app op je telefoon te koppelen. Wi-Fi kun je altijd later instellen in Instellingen.
|
||||
Radio: Radio:
|
||||
Keyboard: Toetsenbord:
|
||||
newer keyboard nieuwer toetsenbord
|
||||
older keyboard ouder toetsenbord
|
||||
older keyboard (set manually) ouder toetsenbord (handmatig ingesteld)
|
||||
keyboard not detected yet toetsenbord nog niet herkend
|
||||
Always use the external antenna (MMCX) Altijd de externe antenne gebruiken (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Start bij elke opstart op de externe aansluiting. Alleen voor een antenne die aangesloten blijft.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Kies Extern alleen met een antenne op de externe aansluiting. Na een herstart begint hij op de ingebouwde antenne, tenzij de schakelaar hieronder aan staat.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Altijd de externe antenne gebruiken?\n\nDe radio start bij elke opstart op de externe (MMCX) aansluiting. Zenden zonder aangesloten antenne kan de radio beschadigen.\n\nZet dit alleen aan als je externe antenne aangesloten blijft.
|
||||
Turn on Aanzetten
|
||||
On-board antenna selected Ingebouwde antenne geselecteerd
|
||||
External antenna at every boot Externe antenne bij elke opstart
|
||||
Antenna Antenne
|
||||
On-board Intern
|
||||
Glass tiles Glazen tegels
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Widgets, kaarten en tegels in het bedieningspaneel laten de achtergrond doorschijnen. Uit: effen tegels.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. 0 tot 9. Hoger wacht langer tussen verzendingen.
|
||||
A name is required Een naam is verplicht
|
||||
A node clock only moves forward: syncing cannot set it back. De klok van een node gaat alleen vooruit: synchroniseren kan hem niet terugzetten.
|
||||
A room server lists only its admins here. Een room server toont hier alleen zijn admins.
|
||||
Access Toegang
|
||||
Access changed Toegang gewijzigd
|
||||
Actions Acties
|
||||
Admin password Adminwachtwoord
|
||||
Admin password changed. Adminwachtwoord gewijzigd.
|
||||
Admin password for full control, or the room password. Adminwachtwoord voor volledige controle, of het roomwachtwoord.
|
||||
Admin password for full control. A guest sees status and neighbours. Adminwachtwoord voor volledige controle. Een gast ziet status en buren.
|
||||
Advanced Geavanceerd
|
||||
Advert hop limit Hoplimiet voor adverts
|
||||
Advert intervals Advertintervallen
|
||||
Adverts Adverts
|
||||
Again Nogmaals
|
||||
Airtime factor Zendtijdfactor
|
||||
Bandwidth Bandbreedte
|
||||
Change Wijzigen
|
||||
Change radio settings Radio-instellingen wijzigen
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Adminwachtwoord wijzigen? Ben je het kwijt, dan kun je deze node niet meer via het mesh beheren.
|
||||
Clients Clients
|
||||
Coding rate Codeersnelheid
|
||||
Console Console
|
||||
Current Huidig
|
||||
Decimal degrees, for example 4.4025 Decimale graden, bijvoorbeeld 4.4025
|
||||
Decimal degrees, for example 51.2194 Decimale graden, bijvoorbeeld 51.2194
|
||||
Direct send delay Zendvertraging direct
|
||||
Discover neighbours Buren zoeken
|
||||
Duplicates Duplicaten
|
||||
Enter a number Voer een getal in
|
||||
Enter a password Voer een wachtwoord in
|
||||
Error Fout
|
||||
Errors Fouten
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Firmware-update: de node opent een wifi-toegangspunt; maak er verbinding mee en upload de nieuwe firmware in een browser, zoals de instructies van de node zeggen.
|
||||
Flood advert Flood-advert
|
||||
Flood hop limit Hoplimiet voor floods
|
||||
Flood send delay Zendvertraging flood
|
||||
Floods with more hops are not repeated. 0 to 64. Floods met meer hops worden niet herhaald. 0 tot 64.
|
||||
Frequency: 150 to 2500 MHz Frequentie: 150 tot 2500 MHz
|
||||
Guest Gast
|
||||
Guest password Gastwachtwoord
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Uren tussen flood-adverts: 0 (uit) of 3 tot 168.
|
||||
How hard to drop packets that came back around. Hoe streng pakketten die rondgingen worden weggegooid.
|
||||
Identity Identiteit
|
||||
Identity & location Identiteit & locatie
|
||||
Last reply Laatste antwoord
|
||||
Last signal Laatste signaal
|
||||
Lets a wrong or blank password in to read, not to post. Laat een fout of leeg wachtwoord binnen om te lezen, niet om te posten.
|
||||
Load more (%d of %u) Meer laden (%d van %u)
|
||||
Local advert Lokale advert
|
||||
Location Locatie
|
||||
Log in Inloggen
|
||||
Log in as admin Inloggen als admin
|
||||
Log in as guest Inloggen als gast
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Ingelogd als gast: je kunt de status en buren lezen. Log in met het adminwachtwoord om instellingen te wijzigen.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Ingelogd zonder adminrechten. Log in met het adminwachtwoord om instellingen te wijzigen.
|
||||
Logging in... Inloggen...
|
||||
Login refused. Inloggen geweigerd.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Logt in als gast. Leeg laat iedereen als gast binnen. Tot 15 tekens.
|
||||
Loop detection Lusdetectie
|
||||
Manage Beheren
|
||||
Members log in with it to post. Up to 15 characters. Leden loggen hiermee in om te posten. Tot 15 tekens.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Minuten tussen zero-hop-adverts: 0 (uit) of 60 tot 240.
|
||||
Moderate Gemiddeld
|
||||
Neighbours Buren
|
||||
New password Nieuw wachtwoord
|
||||
Newest Nieuwste
|
||||
No neighbours heard yet. Nog geen buren gehoord.
|
||||
No reply Geen antwoord
|
||||
No reply from the node Geen antwoord van de node
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Geen antwoord. Controleer het wachtwoord, of de node in bereik is, en de klok van dit toestel.
|
||||
No reply. It may or may not have been applied: read it again. Geen antwoord. Misschien is het toegepast, misschien niet: lees het opnieuw.
|
||||
No spaces Geen spaties
|
||||
Nobody on the list. Niemand op de lijst.
|
||||
Node clock Klok van de node
|
||||
Noise floor Ruisvloer
|
||||
Not in your contacts Niet in je contacten
|
||||
Not in your contacts, so only removing is possible here. Niet in je contacten, dus hier is alleen verwijderen mogelijk.
|
||||
Not saved Niet opgeslagen
|
||||
Off: this node stops forwarding anything. Uit: deze node stuurt niets meer door.
|
||||
Order Volgorde
|
||||
Owner Eigenaar
|
||||
Owner info Eigenaarsinfo
|
||||
Password Wachtwoord
|
||||
Passwords Wachtwoorden
|
||||
Passwords & access Wachtwoorden & toegang
|
||||
Posts Berichten
|
||||
Prefers stronger copies of a flood. 0 to 20. Verkiest sterkere kopieën van een flood. 0 tot 20.
|
||||
Queue Wachtrij
|
||||
Random delay factor before repeating a flood. 0 to 2. Willekeurige vertragingsfactor voor het herhalen van een flood. 0 tot 2.
|
||||
Read again Opnieuw lezen
|
||||
Read-only Alleen lezen
|
||||
Read-only access Alleen-lezentoegang
|
||||
Read-write Lezen en schrijven
|
||||
Reading... Lezen...
|
||||
Reboot sent. The node is back in about 10 s. Herstart verstuurd. De node is over ongeveer 10 s terug.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. De node herstarten? Hij is ongeveer 10 s uit de lucht en vergeet gastlogins.
|
||||
Receive delay Ontvangstvertraging
|
||||
Received Ontvangen
|
||||
Refresh Vernieuwen
|
||||
Regions Regio's
|
||||
Remove access Toegang verwijderen
|
||||
Remove this client's access? De toegang van deze client verwijderen?
|
||||
Repeat packets Pakketten herhalen
|
||||
Repeaters this node hears directly, with the signal it hears them at. Repeaters die deze node rechtstreeks hoort, met het signaal waarmee hij ze hoort.
|
||||
Repeating Herhalen
|
||||
Repeating & limits Herhalen & limieten
|
||||
Reset counters Tellers resetten
|
||||
Reset the node's packet counters? De pakkettellers van de node resetten?
|
||||
Room password Roomwachtwoord
|
||||
Save (after a reboot) Opslaan (na een herstart)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Nieuwe radio-instellingen opslaan?\nNu: %s\nNieuw: %s\nZe gelden na een herstart. Foute waarden kunnen deze node voorgoed afsnijden.
|
||||
Saved. Applies after a reboot. Opgeslagen. Geldt na een herstart.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Opgeslagen. De node gebruikt de nieuwe radio-instellingen na een herstart. Nu herstarten?
|
||||
Saving... Opslaan...
|
||||
Send flood advert Flood-advert versturen
|
||||
Send now Nu versturen
|
||||
Send zero-hop advert Zero-hop-advert versturen
|
||||
Set the node's position to this device's position? De positie van de node instellen op de positie van dit toestel?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Getoond aan iedereen die deze node vraagt. Tot 119 tekens.
|
||||
Spreading factor Spreidingsfactor
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Een firmware-update op de node starten? Hij opent een eigen wifi-toegangspunt tot hij bijgewerkt of herstart is, en herhaalt intussen niets.
|
||||
Start firmware update Firmware-update starten
|
||||
Status Status
|
||||
Strict Streng
|
||||
Strongest Sterkste
|
||||
Sync clock to this device Klok gelijkzetten met dit toestel
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. De regioboom van de node: ^ markeert zijn thuisregio, F dat hij floods voor die regio herhaalt. Regio's bewerk je in de Console.
|
||||
The passwords do not match De wachtwoorden komen niet overeen
|
||||
The position goes out in the node's adverts. De positie gaat mee in de adverts van de node.
|
||||
The same for direct packets. 0 to 2. Hetzelfde voor directe pakketten. 0 tot 2.
|
||||
The same limit for adverts. 0 to 64. Dezelfde limiet voor adverts. 0 tot 64.
|
||||
This device Dit toestel
|
||||
This device has no position Dit toestel heeft geen positie
|
||||
Transmit power Zendvermogen
|
||||
Try Proberen
|
||||
Try for 10 minutes 10 minuten proberen
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Nieuwe radio-instellingen %u minuten proberen?\nNu: %s\nProef: %s\nDe node gaat vanzelf terug. Tot dan bereik je hem alleen met de nieuwe instellingen.
|
||||
Up to 31 characters, without [ ] \\ : , ? * Tot 31 tekens, zonder [ ] \\ : , ? *
|
||||
Updated %s ago %s geleden bijgewerkt
|
||||
Uptime Uptime
|
||||
Use my position Mijn positie gebruiken
|
||||
Use this device's settings Instellingen van dit toestel gebruiken
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Foute radio-instellingen kunnen deze node afsnijden: je bereikt hem dan alleen met de nieuwe instellingen, of helemaal niet. Probeer ze eerst; de node gaat vanzelf terug.
|
||||
dBm, -9 to 30. Applies at once. dBm, -9 tot 30. Geldt meteen.
|
||||
pushed gepusht
|
||||
you jij
|
||||
Flood in / out Flood in / uit
|
||||
Direct in / out Direct in / uit
|
||||
Airtime TX / RX Zendtijd TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: pt-br
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Português (BR)
|
||||
# base: pt-br
|
||||
(device behind) (dispositivo atrasado)
|
||||
@@ -1986,3 +1986,177 @@ Showing the first %d tracks Mostrando as primeiras %d faixas
|
||||
Sound is off: Settings > Sound O som está desligado: Ajustes > Som
|
||||
Stopped Parado
|
||||
This device cannot play music. Este dispositivo não toca música.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Hardware
|
||||
Display & lock Tela e bloqueio
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Deixe o Bluetooth ligado para parear o app MeshCore no seu celular. O Wi-Fi pode ser configurado a qualquer momento em Configurações.
|
||||
Radio: Rádio:
|
||||
Keyboard: Teclado:
|
||||
newer keyboard teclado novo
|
||||
older keyboard teclado antigo
|
||||
older keyboard (set manually) teclado antigo (definido manualmente)
|
||||
keyboard not detected yet teclado ainda não detectado
|
||||
Always use the external antenna (MMCX) Sempre usar a antena externa (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Inicia no conector externo a cada boot. Só para uma antena que fica conectada.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Escolha Externa só com uma antena no conector externo. Depois de reiniciar, começa na antena embutida, a menos que a chave abaixo esteja ligada.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Sempre usar a antena externa?\n\nO rádio vai iniciar no conector externo (MMCX) a cada boot. Transmitir sem uma antena conectada pode danificar o rádio.\n\nSó ligue isto se a sua antena externa ficar conectada.
|
||||
Turn on Ligar
|
||||
On-board antenna selected Antena embutida selecionada
|
||||
External antenna at every boot Antena externa a cada boot
|
||||
Antenna Antena
|
||||
On-board Embutida
|
||||
Glass tiles Blocos de vidro
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Widgets, cartões e blocos do painel deixam o fundo aparecer. Desligado: blocos sólidos.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. 0 a 9. Mais alto espera mais entre envios.
|
||||
A name is required É preciso um nome
|
||||
A node clock only moves forward: syncing cannot set it back. O relógio de um nó só avança: sincronizar não consegue atrasá-lo.
|
||||
A room server lists only its admins here. Um servidor de sala lista aqui apenas seus administradores.
|
||||
Access Acesso
|
||||
Access changed Acesso alterado
|
||||
Actions Ações
|
||||
Admin password Senha de administrador
|
||||
Admin password changed. Senha de administrador alterada.
|
||||
Admin password for full control, or the room password. Senha de administrador para controle total, ou a senha da sala.
|
||||
Admin password for full control. A guest sees status and neighbours. Senha de administrador para controle total. Um convidado vê o status e os vizinhos.
|
||||
Advanced Avançado
|
||||
Advert hop limit Limite de saltos de anúncios
|
||||
Advert intervals Intervalos de anúncio
|
||||
Adverts Anúncios
|
||||
Again De novo
|
||||
Airtime factor Fator de tempo no ar
|
||||
Bandwidth Largura de banda
|
||||
Change Alterar
|
||||
Change radio settings Alterar ajustes de rádio
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Alterar a senha de administrador? Se você a perder, não poderá mais gerenciar este nó pela malha.
|
||||
Clients Clientes
|
||||
Coding rate Taxa de codificação
|
||||
Console Console
|
||||
Current Atual
|
||||
Decimal degrees, for example 4.4025 Graus decimais, por exemplo 4.4025
|
||||
Decimal degrees, for example 51.2194 Graus decimais, por exemplo 51.2194
|
||||
Direct send delay Atraso de envio direto
|
||||
Discover neighbours Procurar vizinhos
|
||||
Duplicates Duplicados
|
||||
Enter a number Digite um número
|
||||
Enter a password Digite uma senha
|
||||
Error Erro
|
||||
Errors Erros
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Atualização: o nó abre um ponto de acesso Wi-Fi; conecte-se a ele e envie o novo firmware num navegador, como dizem as instruções do nó.
|
||||
Flood advert Anúncio flood
|
||||
Flood hop limit Limite de saltos de floods
|
||||
Flood send delay Atraso de envio flood
|
||||
Floods with more hops are not repeated. 0 to 64. Floods com mais saltos não são repetidos. 0 a 64.
|
||||
Frequency: 150 to 2500 MHz Frequência: 150 a 2500 MHz
|
||||
Guest Convidado
|
||||
Guest password Senha de convidado
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Horas entre anúncios flood: 0 (desligado) ou 3 a 168.
|
||||
How hard to drop packets that came back around. Com que rigor descartar pacotes que voltaram em loop.
|
||||
Identity Identidade
|
||||
Identity & location Identidade e local
|
||||
Last reply Última resposta
|
||||
Last signal Último sinal
|
||||
Lets a wrong or blank password in to read, not to post. Deixa entrar com senha errada ou vazia para ler, não para postar.
|
||||
Load more (%d of %u) Carregar mais (%d de %u)
|
||||
Local advert Anúncio local
|
||||
Location Local
|
||||
Log in Entrar
|
||||
Log in as admin Entrar como administrador
|
||||
Log in as guest Entrar como convidado
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Conectado como convidado: você pode ler o status e os vizinhos. Entre com a senha de administrador para alterar ajustes.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Conectado sem direitos de administrador. Entre com a senha de administrador para alterar ajustes.
|
||||
Logging in... Entrando...
|
||||
Login refused. Login recusado.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Entra como convidado. Vazia deixa qualquer um entrar como convidado. Até 15 caracteres.
|
||||
Loop detection Detecção de loops
|
||||
Manage Gerenciar
|
||||
Members log in with it to post. Up to 15 characters. Os membros entram com ela para postar. Até 15 caracteres.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Minutos entre anúncios de salto zero: 0 (desligado) ou 60 a 240.
|
||||
Moderate Moderada
|
||||
Neighbours Vizinhos
|
||||
New password Nova senha
|
||||
Newest Mais recentes
|
||||
No neighbours heard yet. Nenhum vizinho ouvido ainda.
|
||||
No reply Sem resposta
|
||||
No reply from the node O nó não respondeu
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Sem resposta. Confira a senha, se o nó está ao alcance e o relógio deste aparelho.
|
||||
No reply. It may or may not have been applied: read it again. Sem resposta. Pode ter sido aplicado ou não: leia de novo.
|
||||
No spaces Sem espaços
|
||||
Nobody on the list. Ninguém na lista.
|
||||
Node clock Relógio do nó
|
||||
Noise floor Ruído de fundo
|
||||
Not in your contacts Não está nos seus contatos
|
||||
Not in your contacts, so only removing is possible here. Não está nos seus contatos, então aqui só é possível remover.
|
||||
Not saved Não salvo
|
||||
Off: this node stops forwarding anything. Desligado: este nó para de encaminhar qualquer coisa.
|
||||
Order Ordem
|
||||
Owner Dono
|
||||
Owner info Info do dono
|
||||
Password Senha
|
||||
Passwords Senhas
|
||||
Passwords & access Senhas e acesso
|
||||
Posts Mensagens
|
||||
Prefers stronger copies of a flood. 0 to 20. Prefere as cópias mais fortes de um flood. 0 a 20.
|
||||
Queue Fila
|
||||
Random delay factor before repeating a flood. 0 to 2. Fator de atraso aleatório antes de repetir um flood. 0 a 2.
|
||||
Read again Ler de novo
|
||||
Read-only Somente leitura
|
||||
Read-only access Acesso somente leitura
|
||||
Read-write Leitura e escrita
|
||||
Reading... Lendo...
|
||||
Reboot sent. The node is back in about 10 s. Reinício enviado. O nó volta em cerca de 10 s.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Reiniciar o nó? Ele fica fora do ar por cerca de 10 s e esquece os logins de convidado.
|
||||
Receive delay Atraso de recepção
|
||||
Received Recebidos
|
||||
Refresh Atualizar
|
||||
Regions Regiões
|
||||
Remove access Remover acesso
|
||||
Remove this client's access? Remover o acesso deste cliente?
|
||||
Repeat packets Repetir pacotes
|
||||
Repeaters this node hears directly, with the signal it hears them at. Repetidores que este nó ouve diretamente, com o sinal com que os ouve.
|
||||
Repeating Repetição
|
||||
Repeating & limits Repetição e limites
|
||||
Reset counters Zerar contadores
|
||||
Reset the node's packet counters? Zerar os contadores de pacotes do nó?
|
||||
Room password Senha da sala
|
||||
Save (after a reboot) Salvar (após reiniciar)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Salvar novos ajustes de rádio?\nAgora: %s\nNovos: %s\nEles valem após um reinício. Valores errados podem isolar este nó para sempre.
|
||||
Saved. Applies after a reboot. Salvo. Vale após um reinício.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Salvo. O nó usa os novos ajustes de rádio após um reinício. Reiniciar agora?
|
||||
Saving... Salvando...
|
||||
Send flood advert Enviar anúncio flood
|
||||
Send now Enviar agora
|
||||
Send zero-hop advert Enviar anúncio de salto zero
|
||||
Set the node's position to this device's position? Definir a posição do nó como a posição deste aparelho?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Mostrado a quem perguntar a este nó. Até 119 caracteres.
|
||||
Spreading factor Fator de espalhamento
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Iniciar uma atualização de firmware no nó? Ele abre seu próprio ponto de acesso Wi-Fi até ser atualizado ou reiniciado, e enquanto isso não repete nada.
|
||||
Start firmware update Iniciar atualização de firmware
|
||||
Status Status
|
||||
Strict Rigorosa
|
||||
Strongest Mais fortes
|
||||
Sync clock to this device Sincronizar relógio com este aparelho
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. A árvore de regiões do nó: ^ marca sua região de origem, F que ele repete floods dessa região. Edite as regiões no Console.
|
||||
The passwords do not match As senhas não coincidem
|
||||
The position goes out in the node's adverts. A posição vai nos anúncios do nó.
|
||||
The same for direct packets. 0 to 2. O mesmo para pacotes diretos. 0 a 2.
|
||||
The same limit for adverts. 0 to 64. O mesmo limite para anúncios. 0 a 64.
|
||||
This device Este aparelho
|
||||
This device has no position Este aparelho não tem posição
|
||||
Transmit power Potência de transmissão
|
||||
Try Testar
|
||||
Try for 10 minutes Testar por 10 minutos
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Testar novos ajustes de rádio por %u minutos?\nAgora: %s\nTeste: %s\nO nó volta sozinho. Até lá, você só o alcança com os novos ajustes.
|
||||
Up to 31 characters, without [ ] \\ : , ? * Até 31 caracteres, sem [ ] \\ : , ? *
|
||||
Updated %s ago Atualizado há %s
|
||||
Uptime Tempo ligado
|
||||
Use my position Usar minha posição
|
||||
Use this device's settings Usar os ajustes deste aparelho
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Ajustes de rádio errados podem isolar este nó: você só o alcança com os novos ajustes, ou nunca mais. Teste-os primeiro; o nó volta sozinho.
|
||||
dBm, -9 to 30. Applies at once. dBm, -9 a 30. Vale na hora.
|
||||
pushed enviados
|
||||
you você
|
||||
Flood in / out Flood entrada / saída
|
||||
Direct in / out Direto entrada / saída
|
||||
Airtime TX / RX Tempo no ar TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: ro
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Română
|
||||
# base: ro
|
||||
(device behind) (dispozitiv în urmă)
|
||||
@@ -1988,3 +1988,176 @@ Showing the first %d tracks Se arată primele %d piese
|
||||
Sound is off: Settings > Sound Sunetul este oprit: Setări > Sunet
|
||||
Stopped Oprit
|
||||
This device cannot play music. Acest dispozitiv nu poate reda muzică.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Hardware
|
||||
Display & lock Afişaj şi blocare
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Lasă Bluetooth pornit pentru a asocia aplicația MeshCore de pe telefon. Wi-Fi se poate configura oricând din Setări.
|
||||
Radio: Radio:
|
||||
Keyboard: Tastatură:
|
||||
newer keyboard tastatură nouă
|
||||
older keyboard tastatură veche
|
||||
older keyboard (set manually) tastatură veche (setată manual)
|
||||
keyboard not detected yet tastatura nu a fost detectată încă
|
||||
Always use the external antenna (MMCX) Folosește mereu antena externă (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Pornește pe conectorul extern la fiecare pornire. Doar pentru o antenă care rămâne conectată.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Alege Externă doar cu o antenă montată pe conectorul extern. După o repornire pornește pe antena integrată, dacă comutatorul de mai jos nu este activ.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Folosești mereu antena externă?\n\nRadioul va porni pe conectorul extern (MMCX) la fiecare pornire. Transmisia fără antenă conectată poate defecta radioul.\n\nActivează doar dacă antena externă rămâne conectată.
|
||||
Turn on Activează
|
||||
On-board antenna selected Antenă integrată selectată
|
||||
External antenna at every boot Antenă externă la fiecare pornire
|
||||
Antenna Antenă
|
||||
On-board Integrată
|
||||
Glass tiles Plăci de sticlă
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Widgeturile, cardurile și plăcile din panou lasă fundalul să se vadă. Oprit: plăci opace.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. 0 până la 9. Mai mare așteaptă mai mult între trimiteri.
|
||||
A name is required Este nevoie de un nume
|
||||
A node clock only moves forward: syncing cannot set it back. Ceasul unui nod merge doar înainte: sincronizarea nu îl poate da înapoi.
|
||||
A room server lists only its admins here. Un server de cameră listează aici doar administratorii săi.
|
||||
Access Acces
|
||||
Access changed Acces schimbat
|
||||
Actions Acțiuni
|
||||
Admin password Parolă de administrator
|
||||
Admin password changed. Parola de administrator a fost schimbată.
|
||||
Admin password for full control, or the room password. Parola de administrator pentru control complet, sau parola camerei.
|
||||
Admin password for full control. A guest sees status and neighbours. Parola de administrator pentru control complet. Un oaspete vede starea și vecinii.
|
||||
Advanced Avansat
|
||||
Advert hop limit Limită de salturi pentru anunțuri
|
||||
Advert intervals Intervale de anunț
|
||||
Adverts Anunțuri
|
||||
Again Din nou
|
||||
Airtime factor Factor de timp în aer
|
||||
Bandwidth Lățime de bandă
|
||||
Change Schimbă
|
||||
Change radio settings Schimbă setările radio
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Schimbi parola de administrator? Dacă o pierzi, nu mai poți administra acest nod prin rețea.
|
||||
Clients Clienți
|
||||
Coding rate Rată de codare
|
||||
Console Consolă
|
||||
Current Actual
|
||||
Decimal degrees, for example 4.4025 Grade zecimale, de exemplu 4.4025
|
||||
Decimal degrees, for example 51.2194 Grade zecimale, de exemplu 51.2194
|
||||
Direct send delay Întârziere trimitere directă
|
||||
Discover neighbours Caută vecini
|
||||
Duplicates Duplicate
|
||||
Enter a number Introdu un număr
|
||||
Enter a password Introdu o parolă
|
||||
Error Eroare
|
||||
Errors Erori
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Actualizare: nodul deschide un punct de acces Wi-Fi; conectează-te la el și încarcă noul firmware într-un browser, cum spun instrucțiunile nodului.
|
||||
Flood advert Anunț flood
|
||||
Flood hop limit Limită de salturi pentru flood
|
||||
Flood send delay Întârziere trimitere flood
|
||||
Floods with more hops are not repeated. 0 to 64. Floodurile cu mai multe salturi nu sunt repetate. 0 până la 64.
|
||||
Frequency: 150 to 2500 MHz Frecvență: 150 până la 2500 MHz
|
||||
Guest Oaspete
|
||||
Guest password Parolă de oaspete
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Ore între anunțuri flood: 0 (oprit) sau 3 până la 168.
|
||||
How hard to drop packets that came back around. Cât de strict se aruncă pachetele care s-au întors în buclă.
|
||||
Identity Identitate
|
||||
Identity & location Identitate și locație
|
||||
Last reply Ultimul răspuns
|
||||
Last signal Ultimul semnal
|
||||
Lets a wrong or blank password in to read, not to post. Lasă să intre cu o parolă greșită sau goală pentru citire, nu pentru postare.
|
||||
Load more (%d of %u) Încarcă mai mult (%d din %u)
|
||||
Local advert Anunț local
|
||||
Location Locație
|
||||
Log in Autentificare
|
||||
Log in as admin Autentificare ca administrator
|
||||
Log in as guest Autentificare ca oaspete
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Autentificat ca oaspete: poți citi starea și vecinii. Autentifică-te cu parola de administrator pentru a schimba setările.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Autentificat fără drepturi de administrator. Autentifică-te cu parola de administrator pentru a schimba setările.
|
||||
Logging in... Autentificare...
|
||||
Login refused. Autentificare refuzată.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Autentifică ca oaspete. Goală lasă pe oricine ca oaspete. Până la 15 caractere.
|
||||
Loop detection Detectare bucle
|
||||
Manage Administrare
|
||||
Members log in with it to post. Up to 15 characters. Membrii se autentifică cu ea ca să posteze. Până la 15 caractere.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Minute între anunțuri zero-hop: 0 (oprit) sau 60 până la 240.
|
||||
Moderate Moderată
|
||||
Neighbours Vecini
|
||||
New password Parolă nouă
|
||||
Newest Cele mai noi
|
||||
No neighbours heard yet. Niciun vecin auzit încă.
|
||||
No reply Niciun răspuns
|
||||
No reply from the node Nodul nu răspunde
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Niciun răspuns. Verifică parola, dacă nodul e în rază și ceasul acestui dispozitiv.
|
||||
No reply. It may or may not have been applied: read it again. Niciun răspuns. Poate s-a aplicat, poate nu: citește din nou.
|
||||
No spaces Fără spații
|
||||
Nobody on the list. Nimeni pe listă.
|
||||
Node clock Ceasul nodului
|
||||
Noise floor Zgomot de fond
|
||||
Not in your contacts Nu e în contactele tale
|
||||
Not in your contacts, so only removing is possible here. Nu e în contactele tale, deci aici se poate doar elimina.
|
||||
Not saved Nesalvat
|
||||
Off: this node stops forwarding anything. Oprit: acest nod nu mai retransmite nimic.
|
||||
Order Ordine
|
||||
Owner Proprietar
|
||||
Owner info Info proprietar
|
||||
Password Parolă
|
||||
Passwords Parole
|
||||
Passwords & access Parole și acces
|
||||
Posts Postări
|
||||
Prefers stronger copies of a flood. 0 to 20. Preferă copiile mai puternice ale unui flood. 0 până la 20.
|
||||
Queue Coadă
|
||||
Random delay factor before repeating a flood. 0 to 2. Factor de întârziere aleator înainte de a repeta un flood. 0 până la 2.
|
||||
Read again Citește din nou
|
||||
Read-only Doar citire
|
||||
Read-only access Acces doar citire
|
||||
Read-write Citire și scriere
|
||||
Reading... Se citește...
|
||||
Reboot sent. The node is back in about 10 s. Repornire trimisă. Nodul revine în circa 10 s.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Repornești nodul? Nu emite circa 10 s și uită autentificările oaspeților.
|
||||
Receive delay Întârziere recepție
|
||||
Received Primite
|
||||
Refresh Reîmprospătează
|
||||
Regions Regiuni
|
||||
Remove access Elimină accesul
|
||||
Remove this client's access? Elimini accesul acestui client?
|
||||
Repeat packets Repetă pachete
|
||||
Repeaters this node hears directly, with the signal it hears them at. Repetoarele pe care acest nod le aude direct, cu semnalul cu care le aude.
|
||||
Repeating Repetare
|
||||
Repeating & limits Repetare și limite
|
||||
Reset counters Resetează contoarele
|
||||
Reset the node's packet counters? Resetezi contoarele de pachete ale nodului?
|
||||
Room password Parola camerei
|
||||
Save (after a reboot) Salvează (după repornire)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Salvezi noile setări radio?\nAcum: %s\nNoi: %s\nSe aplică după o repornire. Valori greșite pot izola definitiv acest nod.
|
||||
Saved. Applies after a reboot. Salvat. Se aplică după o repornire.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Salvat. Nodul folosește noile setări radio după o repornire. Îl repornești acum?
|
||||
Saving... Se salvează...
|
||||
Send flood advert Trimite anunț flood
|
||||
Send now Trimite acum
|
||||
Send zero-hop advert Trimite anunț zero-hop
|
||||
Set the node's position to this device's position? Setezi poziția nodului la poziția acestui dispozitiv?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Afișat oricui întreabă acest nod. Până la 119 caractere.
|
||||
Spreading factor Factor de împrăștiere
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Pornești o actualizare de firmware pe nod? Deschide propriul punct de acces Wi-Fi până e actualizat sau repornit și între timp nu mai repetă nimic.
|
||||
Start firmware update Pornește actualizarea de firmware
|
||||
Strict Strictă
|
||||
Strongest Cele mai puternice
|
||||
Sync clock to this device Sincronizează ceasul cu acest dispozitiv
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. Arborele de regiuni al nodului: ^ marchează regiunea de bază, F că repetă floodurile pentru acea regiune. Regiunile se editează în Consolă.
|
||||
The passwords do not match Parolele nu se potrivesc
|
||||
The position goes out in the node's adverts. Poziția pleacă în anunțurile nodului.
|
||||
The same for direct packets. 0 to 2. La fel pentru pachetele directe. 0 până la 2.
|
||||
The same limit for adverts. 0 to 64. Aceeași limită pentru anunțuri. 0 până la 64.
|
||||
This device Acest dispozitiv
|
||||
This device has no position Acest dispozitiv nu are poziție
|
||||
Transmit power Putere de emisie
|
||||
Try Încearcă
|
||||
Try for 10 minutes Încearcă 10 minute
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Încerci noi setări radio timp de %u minute?\nAcum: %s\nTest: %s\nNodul revine singur. Până atunci îl găsești doar pe noile setări.
|
||||
Up to 31 characters, without [ ] \\ : , ? * Până la 31 de caractere, fără [ ] \\ : , ? *
|
||||
Updated %s ago Actualizat acum %s
|
||||
Uptime Timp de funcționare
|
||||
Use my position Folosește poziția mea
|
||||
Use this device's settings Folosește setările acestui dispozitiv
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Setări radio greșite pot izola acest nod: îl găsești apoi doar pe noile setări, sau deloc. Încearcă-le întâi; nodul revine singur.
|
||||
dBm, -9 to 30. Applies at once. dBm, -9 până la 30. Se aplică imediat.
|
||||
pushed trimise
|
||||
you tu
|
||||
Flood in / out Flood intrare / ieșire
|
||||
Direct in / out Direct intrare / ieșire
|
||||
Airtime TX / RX Timp în aer TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: sr
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Српски
|
||||
# base: sr
|
||||
(device behind) (уређај касни)
|
||||
@@ -1987,3 +1987,176 @@ Showing the first %d tracks Приказано првих %d песама
|
||||
Sound is off: Settings > Sound Звук је искључен: Подешавања > Звук
|
||||
Stopped Заустављено
|
||||
This device cannot play music. Овај уређај не може да пушта музику.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Хардвер
|
||||
Display & lock Приказ и закључавање
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Оставите Bluetooth укључен да бисте упарили апликацију MeshCore на телефону. Wi-Fi можете подесити било када у Подешавањима.
|
||||
Radio: Радио:
|
||||
Keyboard: Тастатура:
|
||||
newer keyboard новија тастатура
|
||||
older keyboard старија тастатура
|
||||
older keyboard (set manually) старија тастатура (ручно подешено)
|
||||
keyboard not detected yet тастатура још није препозната
|
||||
Always use the external antenna (MMCX) Увек спољна антена (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. При сваком покретању ради преко спољног прикључка. Само за антену која остаје прикључена.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Изаберите Спољну само са антеном на спољном прикључку. После поновног покретања креће на уграђеној антени, осим ако је прекидач испод укључен.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Увек користити спољну антену?\n\nРадио ће се покретати на спољном прикључку (MMCX) при сваком укључивању. Слање без прикључене антене може оштетити радио.\n\nУкључите ово само ако спољна антена остаје прикључена.
|
||||
Turn on Укључи
|
||||
On-board antenna selected Изабрана уграђена антена
|
||||
External antenna at every boot Спољна антена при сваком покретању
|
||||
Antenna Антена
|
||||
On-board Уграђена
|
||||
Glass tiles Стаклене плочице
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Виџети, картице и плочице панела пропуштају позадину. Искључено: пуне плочице.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. Од 0 до 9. Веће чека дуже између слања.
|
||||
A name is required Име је обавезно
|
||||
A node clock only moves forward: syncing cannot set it back. Сат чвора иде само унапред: синхронизација не може да га врати уназад.
|
||||
A room server lists only its admins here. Room сервер овде приказује само своје администраторе.
|
||||
Access Приступ
|
||||
Access changed Приступ је промењен
|
||||
Actions Радње
|
||||
Admin password Лозинка администратора
|
||||
Admin password changed. Лозинка администратора је промењена.
|
||||
Admin password for full control, or the room password. Лозинка администратора за пуну контролу, или лозинка собе.
|
||||
Admin password for full control. A guest sees status and neighbours. Лозинка администратора за пуну контролу. Гост види стање и суседе.
|
||||
Advanced Напредно
|
||||
Advert hop limit Ограничење скокова за огласе
|
||||
Advert intervals Интервали огласа
|
||||
Adverts Огласи
|
||||
Again Поново
|
||||
Airtime factor Фактор времена емитовања
|
||||
Bandwidth Ширина опсега
|
||||
Change Промени
|
||||
Change radio settings Промени радио подешавања
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Променити лозинку администратора? Ако је изгубите, више не можете да управљате овим чвором преко мреже.
|
||||
Clients Клијенти
|
||||
Coding rate Брзина кодирања
|
||||
Console Конзола
|
||||
Current Тренутно
|
||||
Decimal degrees, for example 4.4025 Децимални степени, на пример 4.4025
|
||||
Decimal degrees, for example 51.2194 Децимални степени, на пример 51.2194
|
||||
Direct send delay Кашњење директног слања
|
||||
Discover neighbours Тражи суседе
|
||||
Duplicates Дупликати
|
||||
Enter a number Унесите број
|
||||
Enter a password Унесите лозинку
|
||||
Error Грешка
|
||||
Errors Грешке
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Ажурирање: чвор отвара Wi-Fi приступну тачку; повежите се на њу и отпремите нови фирмвер у прегледачу, како кажу упутства чвора.
|
||||
Flood advert Flood оглас
|
||||
Flood hop limit Ограничење скокова за flood
|
||||
Flood send delay Кашњење flood слања
|
||||
Floods with more hops are not repeated. 0 to 64. Flood са више скокова се не понавља. Од 0 до 64.
|
||||
Frequency: 150 to 2500 MHz Фреквенција: од 150 до 2500 MHz
|
||||
Guest Гост
|
||||
Guest password Лозинка госта
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Сати између flood огласа: 0 (искључено) или од 3 до 168.
|
||||
How hard to drop packets that came back around. Колико строго одбацити пакете који су се вратили у круг.
|
||||
Identity Идентитет
|
||||
Identity & location Идентитет и локација
|
||||
Last reply Последњи одговор
|
||||
Last signal Последњи сигнал
|
||||
Lets a wrong or blank password in to read, not to post. Пушта са погрешном или празном лозинком ради читања, не објављивања.
|
||||
Load more (%d of %u) Учитај још (%d од %u)
|
||||
Local advert Локални оглас
|
||||
Location Локација
|
||||
Log in Пријава
|
||||
Log in as admin Пријава као администратор
|
||||
Log in as guest Пријава као гост
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Пријављени сте као гост: можете да читате стање и суседе. Пријавите се лозинком администратора да бисте мењали подешавања.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Пријављени сте без права администратора. Пријавите се лозинком администратора да бисте мењали подешавања.
|
||||
Logging in... Пријављивање...
|
||||
Login refused. Пријава је одбијена.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Пријављује као госта. Празна пушта свакога као госта. До 15 знакова.
|
||||
Loop detection Откривање петљи
|
||||
Manage Управљање
|
||||
Members log in with it to post. Up to 15 characters. Чланови се њом пријављују да би објављивали. До 15 знакова.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Минути између огласа без скока: 0 (искључено) или од 60 до 240.
|
||||
Moderate Умерено
|
||||
Neighbours Суседи
|
||||
New password Нова лозинка
|
||||
Newest Најновији
|
||||
No neighbours heard yet. Још нису чути суседи.
|
||||
No reply Нема одговора
|
||||
No reply from the node Чвор не одговара
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Нема одговора. Проверите лозинку, да ли је чвор у домету, и сат овог уређаја.
|
||||
No reply. It may or may not have been applied: read it again. Нема одговора. Можда је примењено, а можда није: прочитајте поново.
|
||||
No spaces Без размака
|
||||
Nobody on the list. На листи нема никога.
|
||||
Node clock Сат чвора
|
||||
Noise floor Ниво шума
|
||||
Not in your contacts Није у вашим контактима
|
||||
Not in your contacts, so only removing is possible here. Није у вашим контактима, па је овде могуће само уклањање.
|
||||
Not saved Није сачувано
|
||||
Off: this node stops forwarding anything. Искључено: овај чвор престаје да прослеђује било шта.
|
||||
Order Редослед
|
||||
Owner Власник
|
||||
Owner info Подаци о власнику
|
||||
Password Лозинка
|
||||
Passwords Лозинке
|
||||
Passwords & access Лозинке и приступ
|
||||
Posts Објаве
|
||||
Prefers stronger copies of a flood. 0 to 20. Даје предност јачим копијама flood-а. Од 0 до 20.
|
||||
Queue Ред чекања
|
||||
Random delay factor before repeating a flood. 0 to 2. Насумични фактор кашњења пре понављања flood-а. Од 0 до 2.
|
||||
Read again Прочитај поново
|
||||
Read-only Само читање
|
||||
Read-only access Приступ само за читање
|
||||
Read-write Читање и писање
|
||||
Reading... Читање...
|
||||
Reboot sent. The node is back in about 10 s. Поновно покретање послато. Чвор се враћа за око 10 s.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Поново покренути чвор? Око 10 s није у етру и заборавља пријаве гостију.
|
||||
Receive delay Кашњење пријема
|
||||
Received Примљено
|
||||
Refresh Освежи
|
||||
Regions Региони
|
||||
Remove access Уклони приступ
|
||||
Remove this client's access? Уклонити приступ овог клијента?
|
||||
Repeat packets Понављај пакете
|
||||
Repeaters this node hears directly, with the signal it hears them at. Репетитори које овај чвор чује директно, са сигналом са којим их чује.
|
||||
Repeating Понављање
|
||||
Repeating & limits Понављање и ограничења
|
||||
Reset counters Ресетуј бројаче
|
||||
Reset the node's packet counters? Ресетовати бројаче пакета чвора?
|
||||
Room password Лозинка собе
|
||||
Save (after a reboot) Сачувај (после поновног покретања)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Сачувати нова радио подешавања?\nСада: %s\nНова: %s\nВаже после поновног покретања. Погрешне вредности могу заувек да одсеку овај чвор.
|
||||
Saved. Applies after a reboot. Сачувано. Важи после поновног покретања.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Сачувано. Чвор користи нова радио подешавања после поновног покретања. Поново покренути сада?
|
||||
Saving... Чување...
|
||||
Send flood advert Пошаљи flood оглас
|
||||
Send now Пошаљи сада
|
||||
Send zero-hop advert Пошаљи оглас без скока
|
||||
Set the node's position to this device's position? Поставити позицију чвора на позицију овог уређаја?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Приказује се свакоме ко пита овај чвор. До 119 знакова.
|
||||
Spreading factor Фактор ширења
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Покренути ажурирање фирмвера на чвору? Отвара сопствену Wi-Fi приступну тачку док не буде ажуриран или поново покренут, и у међувремену ништа не понавља.
|
||||
Start firmware update Покрени ажурирање фирмвера
|
||||
Strict Строго
|
||||
Strongest Најјачи
|
||||
Sync clock to this device Синхронизуј сат са овим уређајем
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. Стабло региона чвора: ^ означава његов матични регион, F да понавља flood за тај регион. Регионе мењајте у Конзоли.
|
||||
The passwords do not match Лозинке се не поклапају
|
||||
The position goes out in the node's adverts. Позиција иде у огласима чвора.
|
||||
The same for direct packets. 0 to 2. Исто за директне пакете. Од 0 до 2.
|
||||
The same limit for adverts. 0 to 64. Исто ограничење за огласе. Од 0 до 64.
|
||||
This device Овај уређај
|
||||
This device has no position Овај уређај нема позицију
|
||||
Transmit power Снага предаје
|
||||
Try Пробај
|
||||
Try for 10 minutes Пробај 10 минута
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Пробати нова радио подешавања %u минута?\nСада: %s\nПроба: %s\nЧвор се сам враћа. Дотле га достижете само на новим подешавањима.
|
||||
Up to 31 characters, without [ ] \\ : , ? * До 31 знака, без [ ] \\ : , ? *
|
||||
Updated %s ago Ажурирано пре %s
|
||||
Uptime Време рада
|
||||
Use my position Користи моју позицију
|
||||
Use this device's settings Користи подешавања овог уређаја
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Погрешна радио подешавања могу да одсеку овај чвор: тада га достижете само на новим подешавањима, или никако. Прво их пробајте; чвор се сам враћа.
|
||||
dBm, -9 to 30. Applies at once. dBm, од -9 до 30. Важи одмах.
|
||||
pushed послато
|
||||
you ви
|
||||
Flood in / out Flood улаз / излаз
|
||||
Direct in / out Директни улаз / излаз
|
||||
Airtime TX / RX Време емитовања TX / RX
|
||||
@@ -1,7 +1,7 @@
|
||||
# wadamesh language file
|
||||
# canonical source - translators: edit this file and PR it
|
||||
# code: uk
|
||||
# ver: 26
|
||||
# ver: 28
|
||||
# name: Українська
|
||||
# base: uk
|
||||
(device behind) (пристрій відстає)
|
||||
@@ -1987,3 +1987,176 @@ Showing the first %d tracks Показано перші %d треків
|
||||
Sound is off: Settings > Sound Звук вимкнено: Налаштування > Звук
|
||||
Stopped Зупинено
|
||||
This device cannot play music. Цей пристрій не може відтворювати музику.
|
||||
|
||||
# Settings > Device / keyboard protocol / setup wizard strings
|
||||
Hardware Обладнання
|
||||
Display & lock Екран і блокування
|
||||
Keep Bluetooth on to pair the MeshCore app on your phone. Wi-Fi can be set up anytime in Settings. Залиште Bluetooth увімкненим, щоб під'єднати застосунок MeshCore на телефоні. Wi-Fi можна налаштувати будь-коли в Налаштуваннях.
|
||||
Radio: Радіомодуль:
|
||||
Keyboard: Клавіатура:
|
||||
newer keyboard новіша клавіатура
|
||||
older keyboard старіша клавіатура
|
||||
older keyboard (set manually) старіша клавіатура (задано вручну)
|
||||
keyboard not detected yet клавіатуру ще не визначено
|
||||
Always use the external antenna (MMCX) Завжди зовнішня антена (MMCX)
|
||||
Starts on the external socket at every boot. Only for an antenna that stays connected. Під час кожного запуску працює через зовнішній роз'єм. Лише для антени, що лишається підключеною.
|
||||
Only pick External with an antenna fitted to the external socket. After a reboot it starts on the on-board antenna, unless the switch below is on. Обирайте Зовнішню лише з антеною на зовнішньому роз'ємі. Після перезапуску вмикається вбудована антена, якщо перемикач нижче не ввімкнено.
|
||||
Always use the external antenna?\n\nThe radio will start on the external (MMCX) socket at every boot. Transmitting without an antenna attached can damage the radio.\n\nOnly turn this on if your external antenna stays connected. Завжди використовувати зовнішню антену?\n\nРадіо запускатиметься на зовнішньому роз'ємі (MMCX) під час кожного ввімкнення. Передавання без підключеної антени може пошкодити радіо.\n\nВмикайте, лише якщо зовнішня антена лишається підключеною.
|
||||
Turn on Увімкнути
|
||||
On-board antenna selected Вибрано вбудовану антену
|
||||
External antenna at every boot Зовнішня антена під час кожного запуску
|
||||
Antenna Антена
|
||||
On-board Вбудов.
|
||||
Glass tiles Скляні плитки
|
||||
Widgets, cards and panel tiles let the background show through. Off: solid tiles. Віджети, картки й плитки панелі пропускають тло. Вимк.: суцільні плитки.
|
||||
# repeater admin app
|
||||
0 to 9. Higher waits longer between sends. Від 0 до 9. Більше значення довше чекає між надсиланнями.
|
||||
A name is required Потрібне ім'я
|
||||
A node clock only moves forward: syncing cannot set it back. Годинник вузла йде лише вперед: синхронізація не може повернути його назад.
|
||||
A room server lists only its admins here. Room-сервер показує тут лише своїх адміністраторів.
|
||||
Access Доступ
|
||||
Access changed Доступ змінено
|
||||
Actions Дії
|
||||
Admin password Пароль адміністратора
|
||||
Admin password changed. Пароль адміністратора змінено.
|
||||
Admin password for full control, or the room password. Пароль адміністратора для повного керування або пароль кімнати.
|
||||
Admin password for full control. A guest sees status and neighbours. Пароль адміністратора для повного керування. Гість бачить стан і сусідів.
|
||||
Advanced Додатково
|
||||
Advert hop limit Ліміт хопів для оголошень
|
||||
Advert intervals Інтервали оголошень
|
||||
Adverts Оголошення
|
||||
Again Ще раз
|
||||
Airtime factor Коефіцієнт ефірного часу
|
||||
Bandwidth Ширина смуги
|
||||
Change Змінити
|
||||
Change radio settings Змінити налаштування радіо
|
||||
Change the admin password? If you lose it you can no longer manage this node over the mesh. Змінити пароль адміністратора? Якщо ви його втратите, то більше не зможете керувати цим вузлом через мережу.
|
||||
Clients Клієнти
|
||||
Coding rate Швидкість кодування
|
||||
Console Консоль
|
||||
Current Поточні
|
||||
Decimal degrees, for example 4.4025 Десяткові градуси, наприклад 4.4025
|
||||
Decimal degrees, for example 51.2194 Десяткові градуси, наприклад 51.2194
|
||||
Direct send delay Затримка прямого надсилання
|
||||
Discover neighbours Шукати сусідів
|
||||
Duplicates Дублікати
|
||||
Enter a number Введіть число
|
||||
Enter a password Введіть пароль
|
||||
Error Помилка
|
||||
Errors Помилки
|
||||
Firmware update: the node opens a Wi-Fi access point; join it and upload the new firmware in a browser, as the node's own instructions say. Оновлення: вузол відкриває точку доступу Wi-Fi; під'єднайтеся до неї й завантажте нову прошивку в браузері, як сказано в інструкціях вузла.
|
||||
Flood advert Flood-оголошення
|
||||
Flood hop limit Ліміт хопів для flood
|
||||
Flood send delay Затримка надсилання flood
|
||||
Floods with more hops are not repeated. 0 to 64. Flood з більшою кількістю хопів не повторюється. Від 0 до 64.
|
||||
Frequency: 150 to 2500 MHz Частота: від 150 до 2500 МГц
|
||||
Guest Гість
|
||||
Guest password Пароль гостя
|
||||
Hours between flood adverts: 0 (off) or 3 to 168. Години між flood-оголошеннями: 0 (вимк.) або від 3 до 168.
|
||||
How hard to drop packets that came back around. Наскільки суворо відкидати пакети, що повернулися по колу.
|
||||
Identity Ідентифікація
|
||||
Identity & location Ідентифікація і місце
|
||||
Last reply Остання відповідь
|
||||
Last signal Останній сигнал
|
||||
Lets a wrong or blank password in to read, not to post. Пускає з неправильним або порожнім паролем для читання, але не для дописів.
|
||||
Load more (%d of %u) Завантажити ще (%d з %u)
|
||||
Local advert Локальне оголошення
|
||||
Location Місцезнаходження
|
||||
Log in Увійти
|
||||
Log in as admin Увійти як адміністратор
|
||||
Log in as guest Увійти як гість
|
||||
Logged in as a guest: you can read the status and neighbours. Log in with the admin password to change settings. Вхід як гість: можна читати стан і сусідів. Увійдіть із паролем адміністратора, щоб змінювати налаштування.
|
||||
Logged in without admin rights. Log in with the admin password to change settings. Вхід без прав адміністратора. Увійдіть із паролем адміністратора, щоб змінювати налаштування.
|
||||
Logging in... Вхід...
|
||||
Login refused. Вхід відхилено.
|
||||
Logs in as a guest. Blank lets anyone in as a guest. Up to 15 characters. Вхід як гість. Порожній пускає будь-кого гостем. До 15 символів.
|
||||
Loop detection Виявлення петель
|
||||
Manage Керування
|
||||
Members log in with it to post. Up to 15 characters. Учасники входять із ним, щоб писати. До 15 символів.
|
||||
Minutes between zero-hop adverts: 0 (off) or 60 to 240. Хвилини між оголошеннями без хопів: 0 (вимк.) або від 60 до 240.
|
||||
Moderate Помірне
|
||||
Neighbours Сусіди
|
||||
New password Новий пароль
|
||||
Newest Найновіші
|
||||
No neighbours heard yet. Сусідів ще не чути.
|
||||
No reply Немає відповіді
|
||||
No reply from the node Вузол не відповідає
|
||||
No reply. Check the password, that the node is in range, and this device's clock. Немає відповіді. Перевірте пароль, чи вузол у зоні зв'язку, і годинник цього пристрою.
|
||||
No reply. It may or may not have been applied: read it again. Немає відповіді. Можливо, застосовано, а можливо, ні: прочитайте знову.
|
||||
No spaces Без пробілів
|
||||
Nobody on the list. У списку нікого немає.
|
||||
Node clock Годинник вузла
|
||||
Noise floor Рівень шуму
|
||||
Not in your contacts Немає у ваших контактах
|
||||
Not in your contacts, so only removing is possible here. Немає у ваших контактах, тож тут можна лише видалити.
|
||||
Not saved Не збережено
|
||||
Off: this node stops forwarding anything. Вимк.: цей вузол перестає будь-що пересилати.
|
||||
Order Порядок
|
||||
Owner Власник
|
||||
Owner info Інформація власника
|
||||
Password Пароль
|
||||
Passwords Паролі
|
||||
Passwords & access Паролі й доступ
|
||||
Posts Дописи
|
||||
Prefers stronger copies of a flood. 0 to 20. Надає перевагу сильнішим копіям flood. Від 0 до 20.
|
||||
Queue Черга
|
||||
Random delay factor before repeating a flood. 0 to 2. Випадковий коефіцієнт затримки перед повтором flood. Від 0 до 2.
|
||||
Read again Прочитати знову
|
||||
Read-only Лише читання
|
||||
Read-only access Доступ лише для читання
|
||||
Read-write Читання й запис
|
||||
Reading... Читання...
|
||||
Reboot sent. The node is back in about 10 s. Перезавантаження надіслано. Вузол повернеться приблизно за 10 с.
|
||||
Reboot the node? It is off the air for about 10 s and forgets guest logins. Перезавантажити вузол? Він буде поза ефіром близько 10 с і забуде входи гостей.
|
||||
Receive delay Затримка приймання
|
||||
Received Отримано
|
||||
Refresh Оновити
|
||||
Regions Регіони
|
||||
Remove access Видалити доступ
|
||||
Remove this client's access? Видалити доступ цього клієнта?
|
||||
Repeat packets Повторювати пакети
|
||||
Repeaters this node hears directly, with the signal it hears them at. Ретранслятори, які цей вузол чує напряму, із сигналом, з яким він їх чує.
|
||||
Repeating Повтор
|
||||
Repeating & limits Повтор і обмеження
|
||||
Reset counters Скинути лічильники
|
||||
Reset the node's packet counters? Скинути лічильники пакетів вузла?
|
||||
Room password Пароль кімнати
|
||||
Save (after a reboot) Зберегти (після перезавантаження)
|
||||
Save new radio settings?\nNow: %s\nNew: %s\nThey apply after a reboot. Wrong values can cut this node off for good. Зберегти нові налаштування радіо?\nЗараз: %s\nНові: %s\nВони діють після перезавантаження. Неправильні значення можуть назавжди відрізати цей вузол.
|
||||
Saved. Applies after a reboot. Збережено. Діє після перезавантаження.
|
||||
Saved. The node uses the new radio settings after a reboot. Reboot it now? Збережено. Вузол використає нові налаштування радіо після перезавантаження. Перезавантажити зараз?
|
||||
Saving... Збереження...
|
||||
Send flood advert Надіслати flood-оголошення
|
||||
Send now Надіслати зараз
|
||||
Send zero-hop advert Надіслати оголошення без хопів
|
||||
Set the node's position to this device's position? Встановити позицію вузла за позицією цього пристрою?
|
||||
Shown to anyone who asks this node. Up to 119 characters. Показується кожному, хто запитає цей вузол. До 119 символів.
|
||||
Spreading factor Фактор розширення
|
||||
Start a firmware update on the node? It opens its own Wi-Fi access point until it is updated or rebooted, and stops repeating meanwhile. Почати оновлення прошивки на вузлі? Він відкриє власну точку доступу Wi-Fi до оновлення чи перезавантаження і тим часом нічого не повторює.
|
||||
Start firmware update Почати оновлення прошивки
|
||||
Strict Суворе
|
||||
Strongest Найсильніші
|
||||
Sync clock to this device Синхронізувати годинник із цим пристроєм
|
||||
The node's region tree: ^ marks its home region, F that it repeats floods for that region. Edit regions in the Console. Дерево регіонів вузла: ^ позначає його домашній регіон, F що він повторює flood для цього регіону. Регіони змінюються в Консолі.
|
||||
The passwords do not match Паролі не збігаються
|
||||
The position goes out in the node's adverts. Позиція передається в оголошеннях вузла.
|
||||
The same for direct packets. 0 to 2. Те саме для прямих пакетів. Від 0 до 2.
|
||||
The same limit for adverts. 0 to 64. Той самий ліміт для оголошень. Від 0 до 64.
|
||||
This device Цей пристрій
|
||||
This device has no position Цей пристрій не має позиції
|
||||
Transmit power Потужність передавання
|
||||
Try Спробувати
|
||||
Try for 10 minutes Спробувати 10 хвилин
|
||||
Try new radio settings for %u minutes?\nNow: %s\nTry: %s\nThe node goes back by itself. Until then you reach it only on the new settings. Спробувати нові налаштування радіо на %u хвилин?\nЗараз: %s\nПроба: %s\nВузол повернеться сам. До того він доступний лише на нових налаштуваннях.
|
||||
Up to 31 characters, without [ ] \\ : , ? * До 31 символу, без [ ] \\ : , ? *
|
||||
Updated %s ago Оновлено %s тому
|
||||
Uptime Час роботи
|
||||
Use my position Використати мою позицію
|
||||
Use this device's settings Використати налаштування цього пристрою
|
||||
Wrong radio settings can cut this node off: you then reach it only on the new settings, or not at all. Try them first; the node goes back by itself. Неправильні налаштування радіо можуть відрізати цей вузол: тоді він доступний лише на нових налаштуваннях або зовсім недоступний. Спершу спробуйте їх; вузол повернеться сам.
|
||||
dBm, -9 to 30. Applies at once. дБм, від -9 до 30. Діє одразу.
|
||||
pushed надіслано
|
||||
you ви
|
||||
Flood in / out Flood вхід / вихід
|
||||
Direct in / out Прямі вхід / вихід
|
||||
Airtime TX / RX Ефірний час TX / RX
|
||||
@@ -3,72 +3,72 @@
|
||||
{
|
||||
"code": "bg",
|
||||
"name": "Български",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "de",
|
||||
"name": "Deutsch",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "el",
|
||||
"name": "Ελληνικά",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "es",
|
||||
"name": "Español",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "fr",
|
||||
"name": "Français",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "hu",
|
||||
"name": "Magyar",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "it",
|
||||
"name": "Italiano",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "nl",
|
||||
"name": "Nederlands",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "pt-br",
|
||||
"name": "Português (BR)",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "ro",
|
||||
"name": "Română",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "cs",
|
||||
"name": "Čeština",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "ru",
|
||||
"name": "Русский",
|
||||
"ver": "26"
|
||||
"ver": "33"
|
||||
},
|
||||
{
|
||||
"code": "sr",
|
||||
"name": "Српски",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
},
|
||||
{
|
||||
"code": "uk",
|
||||
"name": "Українська",
|
||||
"ver": "26"
|
||||
"ver": "28"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -336,8 +336,8 @@ class Link {
|
||||
let link = null, info = null, root = null, cwd = '/', entries = [], busy = false, cancelled = false, pingTimer = 0;
|
||||
const rootsById = {};
|
||||
const HINTS = {
|
||||
sd: 'The meshcomod folder is the device\'s own data. You can download it, but not change it here.',
|
||||
internal: 'Files the device keeps in use (identity, contacts, settings, chat history) are download-only. Put your own files in the transfer folder; settings backups (meshcore-*.json) go in the top folder.',
|
||||
sd: 'The meshcomod folder is the device\'s own data. You can download it, but not change it here. The one exception is meshcomod/apps, which takes Lua apps (.lua and .json files).',
|
||||
internal: 'Files the device keeps in use (identity, contacts, settings, chat history) are download-only. Put your own files in the transfer folder; settings backups (meshcore-*.json) go in the top folder, Lua apps (.lua and .json) in the apps folder.',
|
||||
tiles: 'Offline map tiles, stored as zoom/x/y.png. Upload a tile folder to use it on the map.',
|
||||
};
|
||||
|
||||
|
||||
@@ -118,6 +118,27 @@
|
||||
<esp-web-install-button manifest="https://firmware.wadamesh.com/latest-beta/manifest-crowpanel-50.json"></esp-web-install-button>
|
||||
<span class="unsupported">Use Chrome or Edge on desktop (Web Serial).</span>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>Elecrow CrowPanel Advanced 10.1 <span class="beta">Beta</span> <span style="font-weight:600;color:var(--mut)">V1.2</span></h2>
|
||||
<p>10.1" 1024×600 ESP32-P4 touch display and an SX1262 module in the wireless slot.</p>
|
||||
<p class="warn">Experimental, not yet tested on hardware. Only for <b>board revision V1.2</b> (printed on the board); the other revisions need their own card.</p>
|
||||
<esp-web-install-button manifest="https://firmware.wadamesh.com/latest-beta/manifest-crowpanel-p4-101-v12.json"></esp-web-install-button>
|
||||
<span class="unsupported">Use Chrome or Edge on desktop (Web Serial).</span>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>Elecrow CrowPanel Advanced 10.1 <span class="beta">Beta</span> <span style="font-weight:600;color:var(--mut)">V1.1</span></h2>
|
||||
<p>10.1" 1024×600 ESP32-P4 touch display and an SX1262 module in the wireless slot.</p>
|
||||
<p class="warn">Experimental, not yet tested on hardware. Only for <b>board revision V1.1</b> (printed on the board); the other revisions need their own card.</p>
|
||||
<esp-web-install-button manifest="https://firmware.wadamesh.com/latest-beta/manifest-crowpanel-p4-101-v11.json"></esp-web-install-button>
|
||||
<span class="unsupported">Use Chrome or Edge on desktop (Web Serial).</span>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h2>Elecrow CrowPanel Advanced 10.1 <span class="beta">Beta</span> <span style="font-weight:600;color:var(--mut)">V1.0</span></h2>
|
||||
<p>10.1" 1024×600 ESP32-P4 touch display and an SX1262 module in the wireless slot.</p>
|
||||
<p class="warn">Experimental, not yet tested on hardware. Only for <b>board revision V1.0</b> (printed on the board); the other revisions need their own card.</p>
|
||||
<esp-web-install-button manifest="https://firmware.wadamesh.com/latest-beta/manifest-crowpanel-p4-101-v10.json"></esp-web-install-button>
|
||||
<span class="unsupported">Use Chrome or Edge on desktop (Web Serial).</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="note">
|
||||
<b>How it works:</b> plug the device in over USB, click <b>Connect</b>, pick the serial port,
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
# app.wadamesh.com: the WADAMESH web client (web/ in this repo, built by web/build.sh).
|
||||
#
|
||||
# Two names, the same files:
|
||||
# https://app.wadamesh.com full client: USB (Web Serial), Bluetooth, location.
|
||||
# Cloudflare-proxied (SSL "Flexible"), so it reaches this
|
||||
# origin on port 80.
|
||||
# http://wifi.app.wadamesh.com the Wi-Fi version: a node's plain ws:// is mixed
|
||||
# content from https. Proxied like the rest, but two levels
|
||||
# deep, which Cloudflare's Universal SSL (apex + *.wadamesh.com)
|
||||
# does not cover, so https to it fails. That matters: Chrome
|
||||
# upgrades any http:// URL to https when the name answers
|
||||
# https, so http://app.wadamesh.com bounces straight back to
|
||||
# the https copy; a failed https makes Chrome stay on http.
|
||||
# Keep Cloudflare's "Always Use HTTPS" OFF for the zone.
|
||||
# The page picks its bundle itself: crossOriginIsolated (https) -> the pthreads build
|
||||
# in /, otherwise the no-threads build in /nt/ (plain http is not a secure context, so
|
||||
# COOP/COEP cannot enable SharedArrayBuffer there).
|
||||
#
|
||||
# Every response carries COOP/COEP/CORP: the threaded build needs a cross-origin
|
||||
# isolated page. nginx replaces outer add_header sets inside a location that has its
|
||||
# own, so each location repeats them ("always" keeps them on 304/404 too).
|
||||
#
|
||||
# Map tiles and the app Store are same-origin paths here (no CORS needed, COEP happy):
|
||||
# they are handed to the tiles / firmware vhosts on this same box over loopback, so
|
||||
# their rules, caches and allow-lists apply unchanged and nothing goes back out
|
||||
# through Cloudflare.
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name app.wadamesh.com wifi.app.wadamesh.com;
|
||||
|
||||
root /srv/wadamesh/app;
|
||||
index index.html;
|
||||
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Resource-Policy "same-origin" always;
|
||||
|
||||
gzip_static on;
|
||||
|
||||
# The page and the manifest: always revalidate, so a release shows at once.
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Resource-Policy "same-origin" always;
|
||||
add_header Cache-Control "no-cache" always;
|
||||
}
|
||||
|
||||
# Bundles are requested with ?v=<build hash>: cache them for good.
|
||||
location ~* \.(wasm|js|css|png|svg|ico|webmanifest)$ {
|
||||
types {
|
||||
application/wasm wasm;
|
||||
text/javascript js;
|
||||
text/css css;
|
||||
image/png png;
|
||||
image/svg+xml svg;
|
||||
image/x-icon ico;
|
||||
application/manifest+json webmanifest;
|
||||
}
|
||||
add_header Cross-Origin-Opener-Policy "same-origin" always;
|
||||
add_header Cross-Origin-Embedder-Policy "require-corp" always;
|
||||
add_header Cross-Origin-Resource-Policy "same-origin" always;
|
||||
add_header Cache-Control "public, max-age=31536000, immutable" always;
|
||||
}
|
||||
|
||||
# Map tiles: only z/x/y tiles (optionally a style folder) and the elevation query,
|
||||
# handed to the tiles.wadamesh.com vhost on this box.
|
||||
location ^~ /tiles/ {
|
||||
location ~ "^/tiles/((?:[a-z]+/)?[0-9]{1,2}/[0-9]{1,7}/[0-9]{1,7}\.(?:jpg|png)|elev)$" {
|
||||
rewrite ^/tiles/(.*)$ /$1 break;
|
||||
proxy_pass http://127.0.0.1:80;
|
||||
proxy_set_header Host tiles.wadamesh.com;
|
||||
proxy_set_header Cookie "";
|
||||
proxy_hide_header Set-Cookie;
|
||||
add_header Cross-Origin-Resource-Policy "same-origin" always;
|
||||
add_header Cache-Control "public, max-age=1209600" always;
|
||||
}
|
||||
return 404;
|
||||
}
|
||||
|
||||
# The app Store: the catalogs, versioned app folders and language files only (the
|
||||
# update check, OTA images and reports on that vhost stay unreachable from here).
|
||||
location ^~ /fw/apps/ {
|
||||
location ~ "^/fw/apps/(apps\.json|langs\.json|[A-Za-z0-9_-]{1,20}/[0-9][0-9.]{0,7}/[A-Za-z0-9_-][A-Za-z0-9._-]{0,39}|lang/([0-9][0-9.]{0,7}/)?[a-z]{2}(-[a-z]{2})?\.lang)$" {
|
||||
rewrite ^/fw/(apps/.*)$ /$1 break;
|
||||
proxy_pass http://127.0.0.1:80;
|
||||
proxy_set_header Host firmware.wadamesh.com;
|
||||
proxy_set_header Cookie "";
|
||||
proxy_hide_header Set-Cookie;
|
||||
add_header Cross-Origin-Resource-Policy "same-origin" always;
|
||||
}
|
||||
return 404;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,233 @@
|
||||
{
|
||||
"_comment": "Site-only text for wadamesh.com/apps.html. Names, versions and requirements come from deploy/apps/apps.json (the Store catalog); scripts/build/gen-apps-page.py merges the two at every site deploy. One entry per app id. No em dashes.",
|
||||
"categories": [
|
||||
{
|
||||
"id": "radio",
|
||||
"name": "Radio tools",
|
||||
"hue": "--hue-radio"
|
||||
},
|
||||
{
|
||||
"id": "outdoors",
|
||||
"name": "Navigation and outdoors",
|
||||
"hue": "--hue-place"
|
||||
},
|
||||
{
|
||||
"id": "messaging",
|
||||
"name": "Messaging and safety",
|
||||
"hue": "--hue-msg"
|
||||
},
|
||||
{
|
||||
"id": "media",
|
||||
"name": "Media",
|
||||
"hue": "--hue-device"
|
||||
},
|
||||
{
|
||||
"id": "games",
|
||||
"name": "Games",
|
||||
"hue": "--hue-bad"
|
||||
},
|
||||
{
|
||||
"id": "tools",
|
||||
"name": "Tools",
|
||||
"hue": "--hue-sys"
|
||||
}
|
||||
],
|
||||
"apps": {
|
||||
"monitor": {
|
||||
"category": "radio",
|
||||
"glyph": "signal",
|
||||
"tagline": "Your channel at a glance, and every packet you hear.",
|
||||
"about": "Live RSSI and noise as tiles and a filled chart, with the noise floor dashed underneath, and the packets heard most recently with their type, signal bars, SNR and hop count. Tap a packet for its details: who sent it, the route it took, how far its SNR sat above what your spreading factor can still decode, its size and how long it was on the air.",
|
||||
"highlights": [
|
||||
"Margin above the decode limit, per packet",
|
||||
"Packet type, route and airtime",
|
||||
"Works with keys and trackball too"
|
||||
],
|
||||
"shot": "img/apps/monitor.png"
|
||||
},
|
||||
"airtime": {
|
||||
"category": "radio",
|
||||
"glyph": "chart",
|
||||
"tagline": "How busy the channel really is.",
|
||||
"about": "The live channel load as a big figure, the average and peak over the session, and your own time on the air. A filled chart shows the load against your region's duty-cycle limit, and a bar splits the airtime into what you received and what you sent. While it runs it keeps a Home widget with the load up to date.",
|
||||
"highlights": [
|
||||
"Duty-cycle limit on the chart",
|
||||
"Receive and transmit split",
|
||||
"Home widget while it runs (not on the 2 MB Heltec V4)"
|
||||
],
|
||||
"shot": "img/apps/airtime.png"
|
||||
},
|
||||
"wardrive": {
|
||||
"category": "radio",
|
||||
"glyph": "map",
|
||||
"tagline": "Survey your coverage while you drive or walk.",
|
||||
"about": "Every 20 seconds it sends a discovery probe that every node in earshot answers, and logs each reply with your GPS position, altitude and both directions of the link: how well you heard them and how well they heard you. The run goes to a CSV you can take off the device, and it plots back on the map so you can check coverage before you drive it again.",
|
||||
"highlights": [
|
||||
"Both link directions per node",
|
||||
"CSV log with position and altitude",
|
||||
"Run plotted on the map"
|
||||
]
|
||||
},
|
||||
"ping": {
|
||||
"category": "messaging",
|
||||
"glyph": "message",
|
||||
"tagline": "Round-trip time to any contact, with distance and bearing.",
|
||||
"about": "Sends a ping as a direct message and measures how long the answer takes. Both devices swap their GPS position, so the result shows the round-trip time, the distance and the bearing when both have a fix. It also answers pings from other people running Ping.",
|
||||
"highlights": [
|
||||
"Round-trip time over the mesh",
|
||||
"Distance and bearing when both have GPS",
|
||||
"Answers other people's pings"
|
||||
],
|
||||
"credit": "samuelcoustet"
|
||||
},
|
||||
"mecp": {
|
||||
"category": "messaging",
|
||||
"glyph": "bell",
|
||||
"tagline": "Emergency messages everyone can read in their own language.",
|
||||
"about": "Writes and reads messages in the Mesh Emergency Communication Protocol. Pick a severity and the codes (injury, flooding, need water and many more), add the number of people and your position, and post it to the channel you choose. MECP lines heard on your channels while the app is open are shown decoded in plain words.",
|
||||
"highlights": [
|
||||
"Severity, codes, head count and position",
|
||||
"Decodes MECP messages you receive",
|
||||
"Plain text, so it crosses any channel"
|
||||
],
|
||||
"credit_note": "Code table: MECP by xiang-dev-1, CC BY 4.0",
|
||||
"credit_user": "xiang-dev-1"
|
||||
},
|
||||
"nearby": {
|
||||
"category": "outdoors",
|
||||
"glyph": "person",
|
||||
"tagline": "Your contacts on a real map, nearest first.",
|
||||
"about": "Shows the contacts that share a position on the firmware's own map tiles, sorted by distance, with the bearing to each one and a live count of the packets you hear. It is also the reference app for the SDK's map, list, geo and packet calls, so it is a good place to start reading code.",
|
||||
"highlights": [
|
||||
"Real map tiles inside the app",
|
||||
"Distance and bearing to each contact",
|
||||
"Reference app for wada.map and wada.geo"
|
||||
]
|
||||
},
|
||||
"gpscompass": {
|
||||
"category": "outdoors",
|
||||
"glyph": "compass",
|
||||
"tagline": "A compass dial, the live GPS fix, and the way to a contact.",
|
||||
"about": "A heading dial with the live GPS fix underneath. On the ThinkNode M9 the heading comes from its magnetometer, with a calibration you run once by turning the device around; on other boards it uses your GPS course while you move. Pick a contact with a known position and it appears on the dial with its bearing and range.",
|
||||
"highlights": [
|
||||
"Magnetometer heading on the M9",
|
||||
"GPS course on every other board",
|
||||
"Bearing and range to a contact"
|
||||
]
|
||||
},
|
||||
"tripodometer": {
|
||||
"category": "outdoors",
|
||||
"glyph": "gps",
|
||||
"tagline": "A trip computer for your walk or ride.",
|
||||
"about": "Tracks the distance, time, speed and altitude of a trip from the GPS. Start and stop it as you go, reset it for the next trip, and it keeps your trip across app restarts.",
|
||||
"highlights": [
|
||||
"Distance, time, speed and altitude",
|
||||
"Survives app restarts",
|
||||
"Needs a GPS"
|
||||
],
|
||||
"credit": "samuelcoustet"
|
||||
},
|
||||
"protreck": {
|
||||
"category": "outdoors",
|
||||
"glyph": "star",
|
||||
"tagline": "An outdoor watch: sun, moon, stopwatch, timer and altitude.",
|
||||
"about": "Four tools you swipe between. Astro shows sunrise, sunset and the moon phase for where you are. Chrono is a stopwatch with laps, Timer a countdown with an alarm, and Alti your GPS altitude with its minimum, maximum and a trend graph.",
|
||||
"highlights": [
|
||||
"Sunrise, sunset and moon phase",
|
||||
"Stopwatch with laps and a countdown timer",
|
||||
"Altitude trend graph"
|
||||
],
|
||||
"credit": "samuelcoustet"
|
||||
},
|
||||
"music": {
|
||||
"category": "media",
|
||||
"glyph": "music",
|
||||
"tagline": "Your MP3s and WAVs from the SD card, with the screen off.",
|
||||
"about": "Plays the MP3 and WAV files in a Music folder on the SD card, three folder levels deep, so Music/Artist/Album works. Previous, play and pause, next, shuffle and repeat, and it keeps going through the list with the screen off. It follows the device's sound switch and volume, and message chimes stay quiet while a track plays.",
|
||||
"highlights": [
|
||||
"Shuffle and repeat, one track or all",
|
||||
"Keeps playing with the screen off",
|
||||
"T-Deck, T-LoRa Pager, T-Display P4, Tanmatsu, T-Deck Max"
|
||||
],
|
||||
"shot": "img/apps/music.png",
|
||||
"shot_tall": true
|
||||
},
|
||||
"snake": {
|
||||
"category": "games",
|
||||
"glyph": "snake",
|
||||
"tagline": "The classic. Swipe to steer.",
|
||||
"about": "Eat the food, grow longer, do not bite yourself. Steer with swipes, the trackball or the arrow keys, and tap after a game over to play again. Small enough to read in one sitting, which makes it the SDK's first reference app.",
|
||||
"highlights": [
|
||||
"Swipe, trackball or keys",
|
||||
"Runs on every board, the Heltec V4 included",
|
||||
"Reference app for wada.ui and wada.input"
|
||||
]
|
||||
},
|
||||
"2048": {
|
||||
"category": "games",
|
||||
"glyph": "grid",
|
||||
"tagline": "The sliding-tile puzzle, with your best score kept.",
|
||||
"about": "Slide the tiles, merge equal numbers and reach 2048. Swipe or use the trackball to move, tap to start again, and your best score is kept between games.",
|
||||
"highlights": [
|
||||
"Best score kept",
|
||||
"Swipe or trackball"
|
||||
],
|
||||
"credit": "pisti87"
|
||||
},
|
||||
"tetris": {
|
||||
"category": "games",
|
||||
"glyph": "blocks",
|
||||
"tagline": "The falling-block puzzle.",
|
||||
"about": "Swipe left and right to move, up to rotate and down to drop. On a keyboard the arrows move and rotate, and Enter or Space drops.",
|
||||
"highlights": [
|
||||
"Touch and keyboard controls"
|
||||
],
|
||||
"credit": "samuelcoustet"
|
||||
},
|
||||
"breakout": {
|
||||
"category": "games",
|
||||
"glyph": "bricks",
|
||||
"tagline": "Brick-breaker, level after level.",
|
||||
"about": "Move the paddle with swipes or the arrow keys, launch the ball with a swipe up or Enter, and clear every brick to reach the next level.",
|
||||
"highlights": [
|
||||
"Levels",
|
||||
"Touch and keyboard controls"
|
||||
],
|
||||
"credit": "samuelcoustet"
|
||||
},
|
||||
"blackjack": {
|
||||
"category": "games",
|
||||
"glyph": "cards",
|
||||
"tagline": "Casino Blackjack, with your bankroll kept between sessions.",
|
||||
"about": "Twenty-one against the dealer from a six-deck shoe. Hit, stand, double down and split, set your bet before each hand, and your bankroll is still there the next time you open the app. Play it by touch, on the keyboard (H, S, D, P) or with the trackball, and the table scales to the screen, the T-Display P4 included.",
|
||||
"highlights": [
|
||||
"Split and double down",
|
||||
"Bankroll kept between sessions",
|
||||
"Touch, keyboard or trackball"
|
||||
],
|
||||
"credit": "halflive-743"
|
||||
},
|
||||
"sdscan": {
|
||||
"category": "tools",
|
||||
"glyph": "search",
|
||||
"tagline": "Finds and removes Windows malware on the SD card.",
|
||||
"about": "Written for the SD-card worm some ThinkNode M9 cards shipped with: a hidden autorun file and Windows programs disguised as shortcuts. They cannot run on a radio, but they run on the first Windows PC the card goes into. The firmware decides what counts as a threat, so the app can remove those files and nothing else: never map tiles, backups or chat history.",
|
||||
"highlights": [
|
||||
"Firmware decides what is a threat",
|
||||
"Cannot delete your own files",
|
||||
"Asks before removing anything"
|
||||
]
|
||||
},
|
||||
"sdktest": {
|
||||
"category": "tools",
|
||||
"glyph": "settings",
|
||||
"tagline": "For app makers: checks the extended SDK on your board.",
|
||||
"about": "Runs through the extended Lua SDK on the board in your hand and shows the results on screen: capabilities, clock, battery, GPS, private files, audio, SD listing, crypto against published test vectors and channel discovery. A few buttons transmit test messages, so it is a bench tool rather than something to leave running.",
|
||||
"highlights": [
|
||||
"Crypto checked against RFC test vectors",
|
||||
"Every capability flag on one screen",
|
||||
"Some buttons transmit"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,337 @@
|
||||
<!doctype html>
|
||||
<html lang="en" data-sky="soft">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<script>try{if(localStorage.getItem('wm-theme')==='light')document.documentElement.setAttribute('data-theme','light')}catch(e){}</script>
|
||||
<meta name="theme-color" content="#000400">
|
||||
<title>WADAMESH · App Store</title>
|
||||
<meta name="description" content="The Lua apps you can install on a WADAMESH device from its built-in Store: radio tools, navigation, emergency messaging, music and games. Free, sandboxed and reviewed. Write your own with the SDK.">
|
||||
<link rel="canonical" href="https://wadamesh.com/apps.html">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:site_name" content="WADAMESH">
|
||||
<meta property="og:url" content="https://wadamesh.com/apps.html">
|
||||
<meta property="og:title" content="WADAMESH · App Store">
|
||||
<meta property="og:description" content="Radio tools, navigation, emergency messaging, music and games for your mesh radio. Free, sandboxed and reviewed.">
|
||||
<meta property="og:image" content="https://wadamesh.com/og-image.png?v=2">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<link rel="icon" href="favicon.ico" sizes="32x32">
|
||||
<link rel="icon" href="wadamesh-badge.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600;700&family=JetBrains+Mono:wght@600;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root{--bg:#000400; --ink:#E6EBED; --mut:#B0BAC0; --line:#1C2428; --teal:#15B6A6; --teal-ink:#19D6C2; color-scheme:dark}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
body{font:16px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; background:var(--bg); color:var(--ink); -webkit-font-smoothing:antialiased}
|
||||
a{color:var(--teal-ink); text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
|
||||
.top{position:sticky; top:0; z-index:30; display:flex; align-items:center; gap:14px; padding:12px 22px;
|
||||
background:var(--bar); -webkit-backdrop-filter:saturate(1.2) blur(10px); backdrop-filter:saturate(1.2) blur(10px); border-bottom:1px solid var(--line)}
|
||||
.top .word{font-weight:700; letter-spacing:2px; font-size:1.05rem; color:var(--ink)}
|
||||
.top .word .t{color:var(--teal)}
|
||||
.top .tag{font-family:'JetBrains Mono',monospace; font-size:.66rem; letter-spacing:.18em; text-transform:uppercase; color:var(--mut); border:1px solid var(--line); border-radius:100px; padding:4px 9px}
|
||||
.top .sp{flex:1}
|
||||
.top .home{display:inline-flex; align-items:center; gap:7px; color:var(--mut); font-size:.86rem; border:1px solid var(--line); border-radius:100px; padding:6px 13px; background:var(--control)}
|
||||
.top .home:hover{color:var(--teal-ink); border-color:var(--teal); text-decoration:none}
|
||||
.top .home svg{width:16px;height:16px}
|
||||
|
||||
.wrap{max-width:1080px; margin:0 auto; padding:0 22px 80px}
|
||||
h1{font-size:2.1rem; line-height:1.15; margin:38px 0 10px; letter-spacing:-.01em; text-wrap:balance; text-shadow:var(--glow-text)}
|
||||
.lede{color:var(--sky-sub); max-width:66ch; font-size:1.03rem; text-shadow:var(--glow-text)}
|
||||
.cta{display:flex; flex-wrap:wrap; gap:10px; margin-top:20px}
|
||||
.btn{display:inline-flex; align-items:center; gap:8px; padding:10px 18px; border-radius:100px; font-size:.92rem; font-weight:600;
|
||||
border:1px solid var(--line); background:var(--control); color:var(--ink)}
|
||||
.btn:hover{text-decoration:none; border-color:var(--teal)}
|
||||
.btn.pri{background:var(--accent-fill); border-color:var(--accent-fill); color:var(--on-accent)}
|
||||
.btn svg{width:17px; height:17px}
|
||||
|
||||
.steps{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin:30px 0 8px}
|
||||
.step{padding:14px 16px; border-radius:14px; background:var(--surface); border:1px solid var(--line); font-size:.9rem; color:var(--mut)}
|
||||
.step b{display:block; color:var(--ink); font-size:.95rem; margin-bottom:2px}
|
||||
.step .n{font-family:'JetBrains Mono',monospace; color:var(--teal-ink); font-size:.75rem; letter-spacing:.12em}
|
||||
|
||||
.chips{display:flex; flex-wrap:wrap; gap:8px; margin:34px -10px 4px; position:sticky; top:66px; z-index:20; padding:8px 10px; border-radius:18px;
|
||||
background:var(--bar); -webkit-backdrop-filter:saturate(1.2) blur(10px); backdrop-filter:saturate(1.2) blur(10px)}
|
||||
.chip{display:inline-flex; align-items:center; gap:7px; padding:7px 13px; border-radius:100px; cursor:pointer; font:inherit; font-size:.85rem;
|
||||
border:1px solid var(--line); background:var(--control); color:var(--ink2)}
|
||||
.chip span{color:var(--dim); font-size:.78rem; font-variant-numeric:tabular-nums}
|
||||
.chip:hover{border-color:var(--teal)}
|
||||
.chip.on{border-color:var(--teal); background:var(--accent-soft); color:var(--teal-ink); font-weight:600}
|
||||
|
||||
.cat h2{font-size:1.15rem; margin:30px 0 12px; text-shadow:var(--glow-text)}
|
||||
.grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:16px; align-items:start}
|
||||
.app{border-radius:16px; background:var(--surface); border:1px solid var(--line); padding:16px; box-shadow:var(--shadow); scroll-margin-top:150px}
|
||||
.app .shot{margin:-4px -4px 14px; border-radius:11px; background:#05080A; border:1px solid var(--frame-edge); display:grid; place-items:center; padding:10px; height:200px}
|
||||
.app .shot.poster{color:var(--hue); border-color:color-mix(in srgb, var(--hue) 22%, transparent);
|
||||
background:radial-gradient(120% 90% at 50% 110%, color-mix(in srgb, var(--hue) 26%, transparent), transparent 70%), var(--bg2)}
|
||||
.app .shot.poster .pg{width:72px; height:72px; stroke-width:1.3; opacity:.9; filter:drop-shadow(0 0 18px color-mix(in srgb, var(--hue) 55%, transparent))}
|
||||
.app .shot img{max-width:100%; max-height:180px; width:auto; height:auto; border-radius:6px; display:block}
|
||||
.app .shot.tall img{width:170px; height:180px; max-height:none; object-fit:cover; object-position:top; border-radius:8px}
|
||||
.app .head{display:flex; gap:12px; align-items:flex-start}
|
||||
.app .ico{flex:none; width:46px; height:46px; border-radius:13px; display:grid; place-items:center;
|
||||
color:var(--hue); background:color-mix(in srgb, var(--hue) 15%, transparent); box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--hue) 30%, transparent)}
|
||||
.app .ico .g{width:24px; height:24px}
|
||||
.app h3{font-size:1.05rem; line-height:1.25}
|
||||
.app .ver{font-family:'JetBrains Mono',monospace; font-size:.7rem; color:var(--dim); font-weight:600; margin-left:4px}
|
||||
.app .tl{color:var(--mut); font-size:.9rem; margin-top:2px}
|
||||
.app .runs{display:inline-block; margin-top:12px; padding:3px 10px; border-radius:100px; font-size:.76rem; font-weight:600}
|
||||
.app .runs.every{color:var(--ok); background:var(--ok-bg)}
|
||||
.app .runs.most{color:var(--info); background:color-mix(in srgb, var(--info) 14%, transparent)}
|
||||
.app .runs.some{color:var(--warn-ink); background:var(--warn-bg)}
|
||||
.app .by{font-size:.8rem; color:var(--dim); margin-top:8px}
|
||||
.app details{margin-top:10px; border-top:1px solid var(--line); padding-top:8px}
|
||||
.app summary{cursor:pointer; font-size:.85rem; color:var(--teal-ink); list-style:none}
|
||||
.app summary::-webkit-details-marker{display:none}
|
||||
.app summary::before{content:"+ "; font-family:'JetBrains Mono',monospace}
|
||||
.app details[open] summary::before{content:"\2212 "}
|
||||
.app details p{font-size:.9rem; color:var(--ink2); margin-top:8px}
|
||||
.app details ul{margin:8px 0 2px 18px; font-size:.86rem; color:var(--mut)}
|
||||
|
||||
.make{scroll-margin-top:140px; margin-top:56px; padding:26px; border-radius:18px; background:var(--surface); border:1px solid var(--line)}
|
||||
.make h2{font-size:1.4rem; margin-bottom:6px}
|
||||
.make > p{color:var(--mut); max-width:70ch}
|
||||
.mk{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; margin-top:20px}
|
||||
.mk div{padding:16px 18px; border-radius:14px; background:var(--bg2); border:1px solid var(--line)}
|
||||
.mk h3{font-size:.98rem; margin-bottom:6px}
|
||||
.mk p, .mk li{font-size:.9rem; color:var(--mut)}
|
||||
.mk ul{margin:6px 0 0 18px}
|
||||
code{font-family:'JetBrains Mono',monospace; font-size:.82em; background:var(--bg2); border:1px solid var(--line); padding:1px 6px; border-radius:6px; color:var(--ink2); overflow-wrap:anywhere}
|
||||
.foot{margin-top:40px; padding-top:18px; border-top:1px solid var(--line); color:var(--mut); font-size:.85rem}
|
||||
[hidden]{display:none!important}
|
||||
|
||||
@media (max-width:760px){
|
||||
.steps,.mk{grid-template-columns:1fr}
|
||||
h1{font-size:1.65rem}
|
||||
.wrap{padding:0 16px 60px}
|
||||
.top{padding:10px 16px}
|
||||
.top .tag{display:none}
|
||||
.chips{top:60px; margin-inline:-6px; padding-inline:6px; flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none}
|
||||
.chips::-webkit-scrollbar{display:none}
|
||||
.chip{flex:none}
|
||||
.app .shot{height:160px}
|
||||
.app .shot img,.app .shot.tall img{max-height:140px}
|
||||
.app .shot.tall img{height:140px; width:140px}
|
||||
.grid{grid-template-columns:1fr}
|
||||
.make{padding:18px}
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="theme.css?v=2">
|
||||
<script src="theme.js?v=2" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="top">
|
||||
<span class="word">WADA<span class="t">MESH</span></span>
|
||||
<span class="tag">app store</span>
|
||||
<span class="sp"></span>
|
||||
<button type="button" class="wm-theme" data-theme-toggle aria-label="Switch to light mode" title="Switch to light mode"><svg class="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></svg><svg class="i-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41"/></svg></button>
|
||||
<a class="home" href="/">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 11l9-8 9 8M5 10v10h14V10"/></svg>
|
||||
Home
|
||||
</a>
|
||||
</header>
|
||||
|
||||
<main class="wrap">
|
||||
<h1>Apps for your mesh radio</h1>
|
||||
<p class="lede">17 small apps you install from the Store on the device itself, over Wi-Fi. Radio tools, navigation, emergency messages, music and games. They are free, run in a sandbox that keeps them away from your keys, and every one is read before it is listed.</p>
|
||||
<div class="cta">
|
||||
<a class="btn pri" href="#make"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M12 5v14M5 12h14"/></svg>Make your own app</a>
|
||||
<a class="btn" href="sdk.html"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m16 18 6-6-6-6M8 6l-6 6 6 6"/></svg>Lua SDK guide</a>
|
||||
</div>
|
||||
|
||||
<div class="steps">
|
||||
<div class="step"><span class="n">01</span><b>Open the Store</b>In the app drawer, tap Store. It needs Wi-Fi.</div>
|
||||
<div class="step"><span class="n">02</span><b>Tap Get</b>The app installs in a few seconds and shows up in the drawer.</div>
|
||||
<div class="step"><span class="n">03</span><b>Updates find you</b>The Store tile shows a number when an installed app has a newer version.</div>
|
||||
</div>
|
||||
|
||||
<nav class="chips" aria-label="Filter by category">
|
||||
<button type="button" class="chip on" data-f="all">All <span>17</span></button>
|
||||
<button type="button" class="chip" data-f="radio">Radio tools <span>3</span></button>
|
||||
<button type="button" class="chip" data-f="outdoors">Navigation and outdoors <span>4</span></button>
|
||||
<button type="button" class="chip" data-f="messaging">Messaging and safety <span>2</span></button>
|
||||
<button type="button" class="chip" data-f="media">Media <span>1</span></button>
|
||||
<button type="button" class="chip" data-f="games">Games <span>5</span></button>
|
||||
<button type="button" class="chip" data-f="tools">Tools <span>2</span></button>
|
||||
</nav>
|
||||
|
||||
<section class="cat" data-cat="radio"><h2>Radio tools</h2><div class="grid">
|
||||
<article class="app" id="monitor" data-cat="radio" style="--hue:var(--hue-radio)">
|
||||
<div class="shot"><img src="img/apps/monitor.png" alt="RF Monitor on a device" loading="lazy" width="320" height="240"></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 20h.01M7 20v-4M12 20v-8M17 20V8M22 4v16"/></svg></span><div><h3>RF Monitor <span class="ver">v1.4</span></h3><p class="tl">Your channel at a glance, and every packet you hear.</p></div></div>
|
||||
<p class="runs every">Every board</p>
|
||||
<details><summary>More about RF Monitor</summary><p>Live RSSI and noise as tiles and a filled chart, with the noise floor dashed underneath, and the packets heard most recently with their type, signal bars, SNR and hop count. Tap a packet for its details: who sent it, the route it took, how far its SNR sat above what your spreading factor can still decode, its size and how long it was on the air.</p>
|
||||
<ul><li>Margin above the decode limit, per packet</li><li>Packet type, route and airtime</li><li>Works with keys and trackball too</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="airtime" data-cat="radio" style="--hue:var(--hue-radio)">
|
||||
<div class="shot"><img src="img/apps/airtime.png" alt="Airtime on a device" loading="lazy" width="320" height="240"></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 3v18h18"/><path d="m7 15 4-4 3 3 6-7"/></svg></span><div><h3>Airtime <span class="ver">v1.6</span></h3><p class="tl">How busy the channel really is.</p></div></div>
|
||||
<p class="runs every">Every board</p>
|
||||
<details><summary>More about Airtime</summary><p>The live channel load as a big figure, the average and peak over the session, and your own time on the air. A filled chart shows the load against your region's duty-cycle limit, and a bar splits the airtime into what you received and what you sent. While it runs it keeps a Home widget with the load up to date.</p>
|
||||
<ul><li>Duty-cycle limit on the chart</li><li>Receive and transmit split</li><li>Home widget while it runs (not on the 2 MB Heltec V4)</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="wardrive" data-cat="radio" style="--hue:var(--hue-radio)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 4 3 6v14l6-2 6 2 6-2V4l-6 2-6-2Z"/><path d="M9 4v14M15 6v14"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 4 3 6v14l6-2 6 2 6-2V4l-6 2-6-2Z"/><path d="M9 4v14M15 6v14"/></svg></span><div><h3>Wardrive <span class="ver">v1.2</span></h3><p class="tl">Survey your coverage while you drive or walk.</p></div></div>
|
||||
<p class="runs most">Every board but the 2 MB Heltec V4</p>
|
||||
<details><summary>More about Wardrive</summary><p>Every 20 seconds it sends a discovery probe that every node in earshot answers, and logs each reply with your GPS position, altitude and both directions of the link: how well you heard them and how well they heard you. The run goes to a CSV you can take off the device, and it plots back on the map so you can check coverage before you drive it again.</p>
|
||||
<ul><li>Both link directions per node</li><li>CSV log with position and altitude</li><li>Run plotted on the map</li></ul>
|
||||
</details></article>
|
||||
</div></section>
|
||||
<section class="cat" data-cat="outdoors"><h2>Navigation and outdoors</h2><div class="grid">
|
||||
<article class="app" id="protreck" data-cat="outdoors" style="--hue:var(--hue-place)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 3 2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1-4.4-4.3 6.1-.9Z"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 3 2.7 5.6 6.1.9-4.4 4.3 1 6.1L12 17l-5.4 2.9 1-6.1-4.4-4.3 6.1-.9Z"/></svg></span><div><h3>ProTreck <span class="ver">v1.0</span></h3><p class="tl">An outdoor watch: sun, moon, stopwatch, timer and altitude.</p></div></div>
|
||||
<p class="runs every">Every board</p>
|
||||
<p class="by">By <a href="https://github.com/samuelcoustet" target="_blank" rel="noopener">samuelcoustet</a></p>
|
||||
<details><summary>More about ProTreck</summary><p>Four tools you swipe between. Astro shows sunrise, sunset and the moon phase for where you are. Chrono is a stopwatch with laps, Timer a countdown with an alarm, and Alti your GPS altitude with its minimum, maximum and a trend graph.</p>
|
||||
<ul><li>Sunrise, sunset and moon phase</li><li>Stopwatch with laps and a countdown timer</li><li>Altitude trend graph</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="nearby" data-cat="outdoors" style="--hue:var(--hue-place)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21v-1a6 6 0 0 1 6-6h4a6 6 0 0 1 6 6v1"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21v-1a6 6 0 0 1 6-6h4a6 6 0 0 1 6 6v1"/></svg></span><div><h3>Nearby <span class="ver">v1.0</span></h3><p class="tl">Your contacts on a real map, nearest first.</p></div></div>
|
||||
<p class="runs most">Every board but the 2 MB Heltec V4</p>
|
||||
<details><summary>More about Nearby</summary><p>Shows the contacts that share a position on the firmware's own map tiles, sorted by distance, with the bearing to each one and a live count of the packets you hear. It is also the reference app for the SDK's map, list, geo and packet calls, so it is a good place to start reading code.</p>
|
||||
<ul><li>Real map tiles inside the app</li><li>Distance and bearing to each contact</li><li>Reference app for wada.map and wada.geo</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="gpscompass" data-cat="outdoors" style="--hue:var(--hue-place)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="m15.5 8.5-2 5-5 2 2-5Z"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9"/><path d="m15.5 8.5-2 5-5 2 2-5Z"/></svg></span><div><h3>GPS Compass <span class="ver">v1.0</span></h3><p class="tl">A compass dial, the live GPS fix, and the way to a contact.</p></div></div>
|
||||
<p class="runs every">Every board</p>
|
||||
<details><summary>More about GPS Compass</summary><p>A heading dial with the live GPS fix underneath. On the ThinkNode M9 the heading comes from its magnetometer, with a calibration you run once by turning the device around; on other boards it uses your GPS course while you move. Pick a contact with a known position and it appears on the dial with its bearing and range.</p>
|
||||
<ul><li>Magnetometer heading on the M9</li><li>GPS course on every other board</li><li>Bearing and range to a contact</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="tripodometer" data-cat="outdoors" style="--hue:var(--hue-place)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 21s-7-6.3-7-11a7 7 0 0 1 14 0c0 4.7-7 11-7 11Z"/><circle cx="12" cy="10" r="2.5"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 21s-7-6.3-7-11a7 7 0 0 1 14 0c0 4.7-7 11-7 11Z"/><circle cx="12" cy="10" r="2.5"/></svg></span><div><h3>Trip Odometer <span class="ver">v1.0</span></h3><p class="tl">A trip computer for your walk or ride.</p></div></div>
|
||||
<p class="runs most">Needs a GPS</p>
|
||||
<p class="by">By <a href="https://github.com/samuelcoustet" target="_blank" rel="noopener">samuelcoustet</a></p>
|
||||
<details><summary>More about Trip Odometer</summary><p>Tracks the distance, time, speed and altitude of a trip from the GPS. Start and stop it as you go, reset it for the next trip, and it keeps your trip across app restarts.</p>
|
||||
<ul><li>Distance, time, speed and altitude</li><li>Survives app restarts</li><li>Needs a GPS</li></ul>
|
||||
</details></article>
|
||||
</div></section>
|
||||
<section class="cat" data-cat="messaging"><h2>Messaging and safety</h2><div class="grid">
|
||||
<article class="app" id="ping" data-cat="messaging" style="--hue:var(--hue-msg)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H8l-5 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2Z"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H8l-5 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2Z"/></svg></span><div><h3>Ping <span class="ver">v1.0</span></h3><p class="tl">Round-trip time to any contact, with distance and bearing.</p></div></div>
|
||||
<p class="runs most">Every board but the 2 MB Heltec V4</p>
|
||||
<p class="by">By <a href="https://github.com/samuelcoustet" target="_blank" rel="noopener">samuelcoustet</a></p>
|
||||
<details><summary>More about Ping</summary><p>Sends a ping as a direct message and measures how long the answer takes. Both devices swap their GPS position, so the result shows the round-trip time, the distance and the bearing when both have a fix. It also answers pings from other people running Ping.</p>
|
||||
<ul><li>Round-trip time over the mesh</li><li>Distance and bearing when both have GPS</li><li>Answers other people's pings</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="mecp" data-cat="messaging" style="--hue:var(--hue-msg)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"/><path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9"/><path d="M10.3 21a1.94 1.94 0 0 0 3.4 0"/></svg></span><div><h3>MECP <span class="ver">v1.0</span></h3><p class="tl">Emergency messages everyone can read in their own language.</p></div></div>
|
||||
<p class="runs most">Every board but the 2 MB Heltec V4</p>
|
||||
<p class="by">Code table: MECP by <a href="https://github.com/xiang-dev-1" target="_blank" rel="noopener">xiang-dev-1</a>, CC BY 4.0</p>
|
||||
<details><summary>More about MECP</summary><p>Writes and reads messages in the Mesh Emergency Communication Protocol. Pick a severity and the codes (injury, flooding, need water and many more), add the number of people and your position, and post it to the channel you choose. MECP lines heard on your channels while the app is open are shown decoded in plain words.</p>
|
||||
<ul><li>Severity, codes, head count and position</li><li>Decodes MECP messages you receive</li><li>Plain text, so it crosses any channel</li></ul>
|
||||
</details></article>
|
||||
</div></section>
|
||||
<section class="cat" data-cat="media"><h2>Media</h2><div class="grid">
|
||||
<article class="app" id="music" data-cat="media" style="--hue:var(--hue-device)">
|
||||
<div class="shot tall"><img src="img/apps/music.png" alt="Music on a device" loading="lazy" width="284" height="616"></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9 18V5l12-2v13"/><circle cx="6" cy="18" r="3"/><circle cx="18" cy="16" r="3"/></svg></span><div><h3>Music <span class="ver">v1.0</span></h3><p class="tl">Your MP3s and WAVs from the SD card, with the screen off.</p></div></div>
|
||||
<p class="runs some">Boards with a speaker</p>
|
||||
<details><summary>More about Music</summary><p>Plays the MP3 and WAV files in a Music folder on the SD card, three folder levels deep, so Music/Artist/Album works. Previous, play and pause, next, shuffle and repeat, and it keeps going through the list with the screen off. It follows the device's sound switch and volume, and message chimes stay quiet while a track plays.</p>
|
||||
<ul><li>Shuffle and repeat, one track or all</li><li>Keeps playing with the screen off</li><li>T-Deck, T-LoRa Pager, T-Display P4, Tanmatsu, T-Deck Max</li></ul>
|
||||
</details></article>
|
||||
</div></section>
|
||||
<section class="cat" data-cat="games"><h2>Games</h2><div class="grid">
|
||||
<article class="app" id="snake" data-cat="games" style="--hue:var(--hue-bad)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 18h6a3 3 0 0 0 0-6H8a3 3 0 0 1 0-6h10"/><circle cx="19.5" cy="6" r="1.5"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 18h6a3 3 0 0 0 0-6H8a3 3 0 0 1 0-6h10"/><circle cx="19.5" cy="6" r="1.5"/></svg></span><div><h3>Snake <span class="ver">v1.0</span></h3><p class="tl">The classic. Swipe to steer.</p></div></div>
|
||||
<p class="runs every">Every board</p>
|
||||
<details><summary>More about Snake</summary><p>Eat the food, grow longer, do not bite yourself. Steer with swipes, the trackball or the arrow keys, and tap after a game over to play again. Small enough to read in one sitting, which makes it the SDK's first reference app.</p>
|
||||
<ul><li>Swipe, trackball or keys</li><li>Runs on every board, the Heltec V4 included</li><li>Reference app for wada.ui and wada.input</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="tetris" data-cat="games" style="--hue:var(--hue-bad)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 14h5v5H4zM9 14h5v5H9zM9 9h5v5H9zM15 4h5v5h-5z"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 14h5v5H4zM9 14h5v5H9zM9 9h5v5H9zM15 4h5v5h-5z"/></svg></span><div><h3>Tetris <span class="ver">v1.0</span></h3><p class="tl">The falling-block puzzle.</p></div></div>
|
||||
<p class="runs every">Every board</p>
|
||||
<p class="by">By <a href="https://github.com/samuelcoustet" target="_blank" rel="noopener">samuelcoustet</a></p>
|
||||
<details><summary>More about Tetris</summary><p>Swipe left and right to move, up to rotate and down to drop. On a keyboard the arrows move and rotate, and Enter or Space drops.</p>
|
||||
<ul><li>Touch and keyboard controls</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="2048" data-cat="games" style="--hue:var(--hue-bad)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="3"/><path d="M9 3v18M15 3v18M3 9h18M3 15h18"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="3"/><path d="M9 3v18M15 3v18M3 9h18M3 15h18"/></svg></span><div><h3>2048 <span class="ver">v1.2</span></h3><p class="tl">The sliding-tile puzzle, with your best score kept.</p></div></div>
|
||||
<p class="runs every">Every board</p>
|
||||
<p class="by">By <a href="https://github.com/pisti87" target="_blank" rel="noopener">pisti87</a></p>
|
||||
<details><summary>More about 2048</summary><p>Slide the tiles, merge equal numbers and reach 2048. Swipe or use the trackball to move, tap to start again, and your best score is kept between games.</p>
|
||||
<ul><li>Best score kept</li><li>Swipe or trackball</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="breakout" data-cat="games" style="--hue:var(--hue-bad)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4h8v4H3zM13 4h8v4h-8zM7 10h10v4H7z"/><path d="M8 20h8"/><circle cx="12" cy="17" r="1.2"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 4h8v4H3zM13 4h8v4h-8zM7 10h10v4H7z"/><path d="M8 20h8"/><circle cx="12" cy="17" r="1.2"/></svg></span><div><h3>Breakout <span class="ver">v1.0</span></h3><p class="tl">Brick-breaker, level after level.</p></div></div>
|
||||
<p class="runs every">Every board</p>
|
||||
<p class="by">By <a href="https://github.com/samuelcoustet" target="_blank" rel="noopener">samuelcoustet</a></p>
|
||||
<details><summary>More about Breakout</summary><p>Move the paddle with swipes or the arrow keys, launch the ball with a swipe up or Enter, and clear every brick to reach the next level.</p>
|
||||
<ul><li>Levels</li><li>Touch and keyboard controls</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="blackjack" data-cat="games" style="--hue:var(--hue-bad)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="6" width="11" height="15" rx="2"/><path d="m10 6 .6-2.1a2 2 0 0 1 2.4-1.4l6.6 1.8a2 2 0 0 1 1.4 2.4l-3 11.3"/><path d="M8.5 11v5M6 13.5h5"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="6" width="11" height="15" rx="2"/><path d="m10 6 .6-2.1a2 2 0 0 1 2.4-1.4l6.6 1.8a2 2 0 0 1 1.4 2.4l-3 11.3"/><path d="M8.5 11v5M6 13.5h5"/></svg></span><div><h3>Blackjack <span class="ver">v1.0</span></h3><p class="tl">Casino Blackjack, with your bankroll kept between sessions.</p></div></div>
|
||||
<p class="runs every">Every board</p>
|
||||
<p class="by">By <a href="https://github.com/halflive-743" target="_blank" rel="noopener">halflive-743</a></p>
|
||||
<details><summary>More about Blackjack</summary><p>Twenty-one against the dealer from a six-deck shoe. Hit, stand, double down and split, set your bet before each hand, and your bankroll is still there the next time you open the app. Play it by touch, on the keyboard (H, S, D, P) or with the trackball, and the table scales to the screen, the T-Display P4 included.</p>
|
||||
<ul><li>Split and double down</li><li>Bankroll kept between sessions</li><li>Touch, keyboard or trackball</li></ul>
|
||||
</details></article>
|
||||
</div></section>
|
||||
<section class="cat" data-cat="tools"><h2>Tools</h2><div class="grid">
|
||||
<article class="app" id="sdktest" data-cat="tools" style="--hue:var(--hue-sys)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.6 1.6 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.6 1.6 0 0 0-1.8-.3 1.6 1.6 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.6 1.6 0 0 0-1-1.5 1.6 1.6 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.6 1.6 0 0 0 .3-1.8 1.6 1.6 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.6 1.6 0 0 0 1.5-1 1.6 1.6 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.6 1.6 0 0 0 1.8.3H9a1.6 1.6 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.6 1.6 0 0 0 1 1.5 1.6 1.6 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.6 1.6 0 0 0-.3 1.8V9a1.6 1.6 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.6 1.6 0 0 0-1.5 1Z"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.6 1.6 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.6 1.6 0 0 0-1.8-.3 1.6 1.6 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.6 1.6 0 0 0-1-1.5 1.6 1.6 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.6 1.6 0 0 0 .3-1.8 1.6 1.6 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.6 1.6 0 0 0 1.5-1 1.6 1.6 0 0 0-.3-1.8l-.1-.1a2 2 0 1 1 2.8-2.8l.1.1a1.6 1.6 0 0 0 1.8.3H9a1.6 1.6 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.6 1.6 0 0 0 1 1.5 1.6 1.6 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.6 1.6 0 0 0-.3 1.8V9a1.6 1.6 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.6 1.6 0 0 0-1.5 1Z"/></svg></span><div><h3>SDK Test <span class="ver">v1.7</span></h3><p class="tl">For app makers: checks the extended SDK on your board.</p></div></div>
|
||||
<p class="runs most">Every board but the 2 MB Heltec V4</p>
|
||||
<details><summary>More about SDK Test</summary><p>Runs through the extended Lua SDK on the board in your hand and shows the results on screen: capabilities, clock, battery, GPS, private files, audio, SD listing, crypto against published test vectors and channel discovery. A few buttons transmit test messages, so it is a bench tool rather than something to leave running.</p>
|
||||
<ul><li>Crypto checked against RFC test vectors</li><li>Every capability flag on one screen</li><li>Some buttons transmit</li></ul>
|
||||
</details></article>
|
||||
<article class="app" id="sdscan" data-cat="tools" style="--hue:var(--hue-sys)">
|
||||
<div class="shot poster"><svg class="pg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m21 21-4.3-4.3"/></svg></div>
|
||||
<div class="head"><span class="ico"><svg class="g" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"/><path d="m21 21-4.3-4.3"/></svg></span><div><h3>SD Scan <span class="ver">v1.1</span></h3><p class="tl">Finds and removes Windows malware on the SD card.</p></div></div>
|
||||
<p class="runs most">Boards with an SD card</p>
|
||||
<details><summary>More about SD Scan</summary><p>Written for the SD-card worm some ThinkNode M9 cards shipped with: a hidden autorun file and Windows programs disguised as shortcuts. They cannot run on a radio, but they run on the first Windows PC the card goes into. The firmware decides what counts as a threat, so the app can remove those files and nothing else: never map tiles, backups or chat history.</p>
|
||||
<ul><li>Firmware decides what is a threat</li><li>Cannot delete your own files</li><li>Asks before removing anything</li></ul>
|
||||
</details></article>
|
||||
</div></section>
|
||||
|
||||
<section class="make" id="make">
|
||||
<h2>Make your own app</h2>
|
||||
<p>Apps are one Lua file plus a one-line manifest. They talk to the device through the <code>wada.*</code> API: screens and input, timers, storage, the mesh, GPS, the map and audio. Read a reference app, write yours on the device, and send it in for everyone.</p>
|
||||
<div class="mk">
|
||||
<div><h3>1. Read the SDK guide</h3><p>The <a href="sdk.html">SDK guide</a> starts with <a href="sdk.html#hello">your first app</a> in ten lines and documents every call. Snake, RF Monitor and Nearby are small enough to read in one sitting.</p></div>
|
||||
<div><h3>2. Try it on your own device</h3><p>Copy your <code>.lua</code> file to <code>/meshcomod/apps/</code> on the SD card (or <code>/apps/</code> on boards that store internally) and it appears in the app drawer, no manifest needed. <a href="sdk.html#install">How side-loading works</a>.</p></div>
|
||||
<div><h3>3. Send it in</h3><p>Fork <a href="https://github.com/ALLFATHER-BV/wadamesh" target="_blank" rel="noopener">ALLFATHER-BV/wadamesh</a>, add <code>deploy/apps/<id>/<ver>/</code> with your <code>.lua</code> and manifest, add your app to <code>deploy/apps/apps.json</code>, and open a pull request saying what it does and which boards you tried. A published version is never edited: a change ships as the next version. No git? <a href="https://github.com/ALLFATHER-BV/wadamesh/issues/new" target="_blank" rel="noopener">Open an issue</a> with the file attached. <a href="https://github.com/ALLFATHER-BV/wadamesh/blob/main/deploy/apps/README.md" target="_blank" rel="noopener">The full guide</a>.</p></div>
|
||||
<div><h3>4. What review looks for</h3><ul>
|
||||
<li>Never reads, sends or stores keys, identities or channel secrets</li>
|
||||
<li>No flash writes in a loop or on every packet</li>
|
||||
<li>Nothing that needs more than the Heltec V4's 2 MB of PSRAM</li>
|
||||
<li>Transmits or changes radio settings only when the user asks</li>
|
||||
<li>Data leaves the device only when the user asked for it</li>
|
||||
</ul><p style="margin-top:6px">If something needs changing we say what and why on the PR, and help you land it. Apps are published under GPL-3.0 like the rest of the firmware.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<p class="foot">This page is generated from the same catalog the devices read, so the versions here are the versions you get. Questions? Ask on <a href="https://discord.gg/T8X2UaQ7Sm" target="_blank" rel="noopener">Discord</a> or read the <a href="docs.html">user guide</a>.</p>
|
||||
</main>
|
||||
|
||||
<script>
|
||||
(function(){
|
||||
var chips=document.querySelectorAll('.chip'), cats=document.querySelectorAll('.cat');
|
||||
function show(f){
|
||||
chips.forEach(function(c){c.classList.toggle('on', c.dataset.f===f)});
|
||||
cats.forEach(function(s){s.hidden = !(f==='all' || s.dataset.cat===f)});
|
||||
}
|
||||
chips.forEach(function(c){c.addEventListener('click', function(){show(c.dataset.f)})});
|
||||
// a link to #<app id> opens that app's details
|
||||
var id=location.hash.slice(1), el=id && document.getElementById(id);
|
||||
if(el && el.classList.contains('app')){var d=el.querySelector('details'); if(d) d.open=true}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -159,7 +159,7 @@
|
||||
<div class="how">
|
||||
<div class="card">
|
||||
<h3>It works</h3>
|
||||
<p>On the device: Settings, About, "Send a test report". Tick what you actually
|
||||
<p>On the device: Settings, Device, "Send a test report". Tick what you actually
|
||||
exercised, say how long you have been running it, and send. It takes one tap and
|
||||
needs Wi-Fi on the device. Nothing identifying is sent, and the device lists
|
||||
exactly what it will send before it sends it.</p>
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
<p>Firmware for the ESP32-S3 boards builds with PlatformIO from the repo. The <b>Tanmatsu</b> is different: it runs under badge.team's launcher as an app rather than as standalone firmware, and flashing it the usual way replaces the launcher OS. There is a separate guide for that: <a href="tanmatsu.html">Sideloading on the Tanmatsu</a>.</p>
|
||||
<p>If you only want to write software for the device, you do not need a firmware build at all: see the <a href="sdk.html">Lua app SDK</a>.</p>
|
||||
<h3>Is my history actually saving?</h3>
|
||||
<p><b>Settings → About → Chat store</b> is the answer: it names the storage in use, when history last saved successfully, and the exact stage and error a failing save is hitting. Worth a look if messages seem to vanish across a reboot.</p>
|
||||
<p><b>Settings → Device → Chat store</b> is the answer: it names the storage in use, when history last saved successfully, and the exact stage and error a failing save is hitting. Worth a look if messages seem to vanish across a reboot.</p>
|
||||
</div>
|
||||
<div class="shot"><div class="device"><img class="screen" src="docs-img/home.png?v=92" alt="Home: the App drawer"></div><div class="cap">Home: the App drawer</div></div>
|
||||
</div>
|
||||
@@ -320,12 +320,12 @@
|
||||
<h2><span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-2.4.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 8 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-2.4 1.65 1.65 0 0 0-1.51-1H1a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 3 8z"/></svg></span> Settings</h2>
|
||||
<div class="row">
|
||||
<div class="prose">
|
||||
<p>Settings opens on a list in four groups. Each page has its icon and, where it fits, its current state beside the name: your node name, the frequency, the network, the language, the charge.</p>
|
||||
<p>Settings opens with <b>Device</b>, which names the hardware beside it (on the T-Deck, the keyboard it detected too), then a list in four groups. Each page has its icon and, where it fits, its current state beside the name: your node name, the frequency, the network, the language, the charge.</p>
|
||||
<ul>
|
||||
<li><b>Mesh</b>: Profile, Radio & Mesh, Auto-add, Quick replies.</li>
|
||||
<li><b>Connections</b>: Wi-Fi, Bluetooth, GPS, MQTT bridge.</li>
|
||||
<li><b>Device</b>: Display, Lock screen, Sound, Keyboard, Language, Clock & time, Battery, and Sensors on boards that have them.</li>
|
||||
<li><b>System</b>: General, Backups, App permissions, About.</li>
|
||||
<li><b>Display & lock</b>: Display, Theme, Lock screen, Sound, Keyboard, Language, Clock & time, Battery, and Sensors on boards that have them.</li>
|
||||
<li><b>System</b>: General, Backups, App permissions.</li>
|
||||
</ul>
|
||||
<p>Tap a row to open its page; the bar at the top then carries a back chevron. Every page is described in <a href="#settings-pages">Settings pages</a> below. <b>Hold the Settings tab</b> to go straight to the <a href="#control">control panel</a> instead. On the T-LoRa Pager, hold its Settings key, <b>S</b>.</p>
|
||||
</div>
|
||||
@@ -447,7 +447,7 @@
|
||||
<h2><span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="13.5" cy="6.5" r=".5" fill="currentColor"/><circle cx="17.5" cy="10.5" r=".5" fill="currentColor"/><circle cx="8.5" cy="7.5" r=".5" fill="currentColor"/><circle cx="6.5" cy="12.5" r=".5" fill="currentColor"/><path d="M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z"/></svg></span> Colours & theme</h2>
|
||||
<div class="row">
|
||||
<div class="prose">
|
||||
<p>The look of the whole interface lives on one page: <b>Settings → Theme</b>, under Device. Holding the theme chip in the <a href="#control">control panel</a> opens it too.</p>
|
||||
<p>The look of the whole interface lives on one page: <b>Settings → Theme</b>, under Display & lock. Holding the theme chip in the <a href="#control">control panel</a> opens it too.</p>
|
||||
<p>It opens on a <b>preview</b>: a corner of the launcher, a chat and the send button, drawn in whatever you have picked, so you see the result before anything restarts. Under it:</p>
|
||||
<ul>
|
||||
<li><b>Mode</b>: Night and Day as two small screens, with <b>High contrast</b> under them.</li>
|
||||
@@ -632,17 +632,17 @@
|
||||
<h2><span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M23 4v6h-6"/><path d="M1 20v-6h6"/><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"/></svg></span> Updates & test builds</h2>
|
||||
<div class="row">
|
||||
<div class="prose">
|
||||
<p>WADAMESH checks for new firmware on its own. When one is available, <b>Settings → About</b> shows it and you can flash it straight from the device with <b>Install update</b>, over Wi-Fi, with no computer needed. (A T-Deck running under Launcher updates through Launcher instead, and the Tanmatsu through its app store.)</p>
|
||||
<p>WADAMESH checks for new firmware on its own. When one is available, <b>Settings → Device</b> shows it and you can flash it straight from the device with <b>Install update</b>, over Wi-Fi, with no computer needed. (A T-Deck running under Launcher updates through Launcher instead, and the Tanmatsu through its app store.)</p>
|
||||
<h3>Two channels: Stable and Test</h3>
|
||||
<ul>
|
||||
<li><b>Stable</b> is the default. It is the build that has been tested and is recommended for everyday use. Leave your device on this unless you want to help test.</li>
|
||||
<li><b>Test (beta)</b> gets new features and fixes earlier, before they are proven. It can be rough, so it is meant for trying things early and reporting bugs, not for a device you rely on.</li>
|
||||
</ul>
|
||||
<h3>Turn on test builds</h3>
|
||||
<p>Flip <b>Settings → About → "Get test builds (beta)"</b> on. From then on, both the update check and <b>Install update</b> follow the test channel, so the device offers the newest test build over Wi-Fi. Turn the switch back off to return to stable. You can switch either way at any time.</p>
|
||||
<p>Flip <b>Settings → Device → "Get test builds (beta)"</b> on. From then on, both the update check and <b>Install update</b> follow the test channel, so the device offers the newest test build over Wi-Fi. Turn the switch back off to return to stable. You can switch either way at any time.</p>
|
||||
<p>Prefer to start on a test build from scratch? Pick <b>Beta · testing</b> when you flash from <a href="https://flasher.wadamesh.com" target="_blank" rel="noopener">flasher.wadamesh.com</a>.</p>
|
||||
</div>
|
||||
<div class="shot"><div class="device"><img class="screen" src="docs-img/set_about.png?v=92" alt="About page"></div><div class="cap">The About page</div></div>
|
||||
<div class="shot"><div class="device"><img class="screen" src="docs-img/set_about.png?v=92" alt="Device page"></div><div class="cap">The Device page</div></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -741,7 +741,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sgrp">Device</div>
|
||||
<div class="sgrp">Display & lock</div>
|
||||
<div class="scards">
|
||||
<div class="scard">
|
||||
<div class="thumb"><img src="docs-img/set_display.png?v=92" alt="Display settings"></div>
|
||||
@@ -839,8 +839,6 @@
|
||||
<ul>
|
||||
<li><b>Send advert now</b></li>
|
||||
<li><b>Store data on SD</b> (restart)</li>
|
||||
<li><b>Run setup again</b> from scratch</li>
|
||||
<li><b>Reboot device</b></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="scard">
|
||||
@@ -863,15 +861,19 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div class="scard">
|
||||
<div class="thumb"><img src="docs-img/set_about.png?v=92" alt="About settings"></div>
|
||||
<h3>About</h3>
|
||||
<div class="lede">Version, updates and diagnostics.</div>
|
||||
<div class="thumb"><img src="docs-img/set_about.png?v=92" alt="Device settings"></div>
|
||||
<h3>Device</h3>
|
||||
<div class="lede">The hardware, its overrides, version, updates and diagnostics.</div>
|
||||
<ul>
|
||||
<li><b>Firmware version</b> plus update check and install</li>
|
||||
<li><b>Get test builds (beta)</b>: opt into the <a href="#updates">test channel</a></li>
|
||||
<li><b>Model</b>, <b>radio</b> (e.g. SX1262 or LR1121) and the hardware detected at boot; the Device row names it too</li>
|
||||
<li><b>Older keyboard protocol</b> (T-Deck): turn on if the keyboard types the wrong letters</li>
|
||||
<li><b>Firmware version</b> plus update check / install</li>
|
||||
<li><b>Get test builds (beta)</b> switch: opt into the <a href="#updates">test channel</a></li>
|
||||
<li><b>Send a test report</b> and <b>Report a bug</b>: see <a href="#testing">Testing a beta</a></li>
|
||||
<li>Full <b>system information</b>: uptime, chip, memory, flash, storage</li>
|
||||
<li><b>Device ID</b> and crash-report export</li>
|
||||
<li><b>Run setup again</b> from scratch</li>
|
||||
<li><b>Reboot device</b></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -895,7 +897,7 @@
|
||||
<section class="doc" id="testing">
|
||||
<h2><span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg></span> Testing a beta</h2>
|
||||
<div class="prose" style="max-width:64ch">
|
||||
<p>A test build becomes the stable release when it has been shown to work, and with this many board images most of them are in hands we never hear from. So the device can report: <b>Settings → About → "Send a test report"</b>. What you send appears on the <a href="beta.html">test matrix</a>, which is what the next promotion is decided on.</p>
|
||||
<p>A test build becomes the stable release when it has been shown to work, and with this many board images most of them are in hands we never hear from. So the device can report: <b>Settings → Device → "Send a test report"</b>. What you send appears on the <a href="beta.html">test matrix</a>, which is what the next promotion is decided on.</p>
|
||||
|
||||
<h3>What a report says</h3>
|
||||
<p>Tick only the areas you actually exercised, say how long you have been running the build, and add a line if you have something to say. The areas matter: "it works" from somebody who watched it boot and "it works" from somebody who messaged on it all week are not the same claim, and a board only turns green on two reports of the second kind from two different devices.</p>
|
||||
|
||||
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 183 KiB |
|
After Width: | Height: | Size: 114 KiB |
@@ -5,13 +5,13 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<script>try{if(localStorage.getItem('wm-theme')==='light')document.documentElement.setAttribute('data-theme','light')}catch(e){}</script>
|
||||
<title>WADAMESH: MeshCore firmware with the whole mesh on the radio</title>
|
||||
<meta name="description" content="Free, open-source MeshCore firmware with chat, channels, a map and apps on the radio itself, by touch, keyboard or trackball. Runs on 14 boards.">
|
||||
<meta name="description" content="Free, open-source MeshCore firmware with chat, channels, a map and apps on the radio itself, by touch, keyboard or trackball. Runs on 16 boards.">
|
||||
<link rel="canonical" href="https://wadamesh.com/">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:site_name" content="WADAMESH">
|
||||
<meta property="og:url" content="https://wadamesh.com/">
|
||||
<meta property="og:title" content="WADAMESH: MeshCore firmware with the whole mesh on the radio">
|
||||
<meta property="og:description" content="Chat, channels, contacts, a map and apps on the radio itself, by touch, keyboard or trackball, and a companion radio for the MeshCore app at the same time. Free and open source, on 14 boards.">
|
||||
<meta property="og:description" content="Chat, channels, contacts, a map and apps on the radio itself, by touch, keyboard or trackball, and a companion radio for the MeshCore app at the same time. Free and open source, on 16 boards.">
|
||||
<meta property="og:image" content="https://wadamesh.com/og-image.png?v=2">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
@@ -422,13 +422,19 @@
|
||||
.cookiebar a{color:var(--teal-ink); cursor:pointer}
|
||||
.cookiebar button{background:var(--accent-fill); color:var(--on-accent); border:0; border-radius:8px; padding:8px 16px; font-weight:650; cursor:pointer; font-size:.86rem; flex:none; font-family:inherit}
|
||||
/* the way in, straight under the intro */
|
||||
.cta-row{margin-top:26px}
|
||||
.cta-row{margin-top:26px; display:flex; flex-wrap:wrap; justify-content:center; gap:12px}
|
||||
.cta{display:inline-flex; align-items:center; gap:10px; padding:13px 26px; border-radius:100px;
|
||||
background:var(--accent-fill); color:var(--on-accent); font-weight:700; font-size:1.02rem; text-shadow:none;
|
||||
box-shadow:0 16px 36px -14px rgba(25,214,194,.6); transition:transform .15s, filter .15s}
|
||||
.cta:hover, .cta:focus-visible{transform:translateY(-2px); filter:brightness(1.08); outline:none}
|
||||
.cta:focus-visible{box-shadow:0 0 0 3px var(--bg), 0 0 0 5px var(--teal)}
|
||||
.cta svg{width:19px; height:19px}
|
||||
.cta.alt{background:var(--control); color:var(--ink); box-shadow:inset 0 0 0 1px var(--line), var(--shadow);
|
||||
-webkit-backdrop-filter:blur(8px); backdrop-filter:blur(8px)}
|
||||
.cta.alt svg{color:#5865F2}
|
||||
.cta.alt.web svg{color:var(--teal-ink)}
|
||||
.cta.alt.web:hover, .cta.alt.web:focus-visible{box-shadow:inset 0 0 0 1px var(--teal), var(--shadow)}
|
||||
.cta.alt:hover, .cta.alt:focus-visible{box-shadow:inset 0 0 0 1px #5865F2, var(--shadow)}
|
||||
/* a soft dark scrim behind the hero text, so it reads on the brightest part of the sky */
|
||||
header{position:relative; isolation:isolate}
|
||||
header::before{content:""; position:absolute; z-index:-1; left:50%; top:20px; transform:translateX(-50%);
|
||||
@@ -466,6 +472,14 @@
|
||||
<span class="ic"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z"/><path d="M14 2v5h5"/><path d="M16 13H8"/><path d="M16 17H8"/><path d="M10 9H8"/></svg></span>
|
||||
<span class="lb">Docs</span>
|
||||
</a>
|
||||
<a class="fab" style="--hue:var(--hue-msg)" id="webBtn" href="webclient.html" aria-label="Web client: wadamesh in your browser" title="Web client">
|
||||
<span class="ic"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></span>
|
||||
<span class="lb">Web client</span>
|
||||
</a>
|
||||
<a class="fab" style="--hue:var(--hue-radio)" id="appsBtn" href="apps.html" aria-label="App Store: every Lua app" title="App Store">
|
||||
<span class="ic"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><path d="M17.5 14v7M14 17.5h7"/></svg></span>
|
||||
<span class="lb">Apps</span>
|
||||
</a>
|
||||
<a class="fab" style="--hue:var(--hue-sys)" id="sdkBtn" href="sdk.html" aria-label="Lua app SDK" title="Lua app SDK">
|
||||
<span class="ic"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m18 16 4-4-4-4"/><path d="m6 8-4 4 4 4"/><path d="m14.5 4-5 16"/></svg></span>
|
||||
<span class="lb">Lua SDK</span>
|
||||
@@ -524,8 +538,8 @@
|
||||
<span class="byline">by meshcomod</span>
|
||||
</div>
|
||||
<p class="lede">The whole mesh, on the radio itself.</p>
|
||||
<p class="sub">MeshCore firmware with chat, channels, contacts, a map and apps on the device itself, by touch, keyboard or trackball, <b>and</b> a companion radio for the <b>MeshCore app</b> at the same time. Runs on <a href="#devices">14 boards</a>, from the <b>LilyGo T-Deck</b> and <b>Heltec V4</b> to the <b>Tanmatsu</b>.</p>
|
||||
<div class="cta-row"><a class="cta" href="#install"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3v12"/><path d="m7 11 5 5 5-5"/><path d="M5 21h14"/></svg>Install WADAMESH</a></div>
|
||||
<p class="sub">MeshCore firmware with chat, channels, contacts, a map and apps on the device itself, by touch, keyboard or trackball, <b>and</b> a companion radio for the <b>MeshCore app</b> at the same time. Runs on <a href="#devices">16 boards</a>, from the <b>LilyGo T-Deck</b> and <b>Heltec V4</b> to the <b>Tanmatsu</b>.</p>
|
||||
<div class="cta-row"><a class="cta" href="#install"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3v12"/><path d="m7 11 5 5 5-5"/><path d="M5 21h14"/></svg>Install WADAMESH</a><a class="cta alt" href="https://discord.gg/T8X2UaQ7Sm" target="_blank" rel="noopener"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20.317 4.369a19.79 19.79 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.249a18.27 18.27 0 0 0-5.487 0 12.6 12.6 0 0 0-.617-1.249.077.077 0 0 0-.079-.037A19.74 19.74 0 0 0 3.677 4.369a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028 14.2 14.2 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.1 13.1 0 0 1-1.872-.892.077.077 0 0 1-.008-.128c.126-.094.252-.192.372-.291a.074.074 0 0 1 .078-.01c3.927 1.793 8.18 1.793 12.061 0a.074.074 0 0 1 .079.009c.12.099.246.198.373.292a.077.077 0 0 1-.006.127 12.3 12.3 0 0 1-1.873.891.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.84 19.84 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.06.06 0 0 0-.031-.029zM8.02 15.331c-1.182 0-2.157-1.086-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.332-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.086-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.332-.946 2.418-2.157 2.418z"/></svg>Join the community</a><a class="cta alt web" href="https://app.wadamesh.com/"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>Use the web client</a></div>
|
||||
<div class="pills">
|
||||
<span class="pill" tabindex="0" style="--hue:var(--hue-place)"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 20l-6-3V4l6 3 6-3 6 3v13l-6-3-6 3z"/><path d="M9 7v13M15 4v13"/></svg>Offline map
|
||||
<span class="pop"><b>Offline map</b>A real OpenStreetMap you can pan and zoom on the device. Pre-load tile packs to an SD card for fully offline use, or fetch over Wi-Fi, and see your contacts' GPS positions plotted on it.</span></span>
|
||||
@@ -583,7 +597,7 @@
|
||||
|
||||
<section id="devices">
|
||||
<div class="wrap">
|
||||
<h2 class="h2">Runs on 14 boards</h2>
|
||||
<h2 class="h2">Runs on 16 boards</h2>
|
||||
<p class="p">From keyboard handhelds to touch panels. Pick yours to jump straight to its installer.</p>
|
||||
<div class="devgrid">
|
||||
<a class="devtile" href="#standalone" data-find="t-deck plus"><span class="mk">LilyGo</span><b>T-Deck / Plus</b><span class="spec">Keyboard, trackball and touchscreen handheld.</span><span class="st"><span class="lvl full">Fully supported</span><span class="ch">Stable</span></span></a>
|
||||
@@ -641,7 +655,7 @@
|
||||
<button type="button" data-wm-ch="stable" style="font:inherit;font-size:.85rem;font-weight:600;padding:7px 16px;border:0;background:var(--control);color:var(--mut);cursor:pointer">Stable</button>
|
||||
<button type="button" data-wm-ch="beta" style="font:inherit;font-size:.85rem;font-weight:600;padding:7px 16px;border:0;border-left:1px solid var(--line);background:var(--control);color:var(--mut);cursor:pointer">Beta · testing</button>
|
||||
</div>
|
||||
<p style="margin:12px auto 0;max-width:600px;text-align:left;font-size:.88rem;line-height:1.6"><b>Stable</b> is the tested default. Pick it unless you want to help test. <b>Beta · testing</b> gets new features and fixes earlier, before they are proven, so it can be rough. It is for trying things early and reporting bugs.<br>Already running WADAMESH? You do not have to reflash to switch channels: turn on <b>Settings → About → "Get test builds (beta)"</b> on the device and it updates to test builds over Wi-Fi. Switch it off to go back to stable.<br>Testing a beta? Report from the device (Settings → About → "Send a test report") and it shows up on the <a href="beta.html">test matrix</a>, which is what the next stable is promoted on.</p>
|
||||
<p style="margin:12px auto 0;max-width:600px;text-align:left;font-size:.88rem;line-height:1.6"><b>Stable</b> is the tested default. Pick it unless you want to help test. <b>Beta · testing</b> gets new features and fixes earlier, before they are proven, so it can be rough. It is for trying things early and reporting bugs.<br>Already running WADAMESH? You do not have to reflash to switch channels: turn on <b>Settings → Device → "Get test builds (beta)"</b> on the device and it updates to test builds over Wi-Fi. Switch it off to go back to stable.<br>Testing a beta? Report from the device (Settings → Device → "Send a test report") and it shows up on the <a href="beta.html">test matrix</a>, which is what the next stable is promoted on.</p>
|
||||
<p data-wm-betahint hidden style="margin:8px auto 0;font-size:.84rem;color:var(--warn);max-width:560px">Beta builds are newer and less tested: for trying things early and reporting bugs. On a T-Deck under Launcher you download the .bin and side-load it.</p>
|
||||
<details class="wn" data-whatsnew hidden style="margin:18px auto 0;max-width:560px;border-radius:12px;padding:13px 16px;text-align:left">
|
||||
<summary><span class="wn-caret" aria-hidden="true">▸</span><span>See what’s new in <span data-wn-tag style="color:var(--teal-ink)">the latest build</span><span data-wn-count class="wn-count"></span></span></summary>
|
||||
@@ -686,7 +700,7 @@
|
||||
<span class="sup part" tabindex="0"><span class="dot"></span>Partially supported<span class="pop"><b>Partially supported</b>The AMOLED + SX1262 model is hardware-tested. LR2021 support is compile-tested and needs device validation. Bluetooth pairing is unavailable; use Wi-Fi or USB for the phone-app link.</span></span>
|
||||
<div class="p4q"><span>Radio</span><div class="seg" role="group" aria-label="Radio chip"><button type="button" data-p4-radio="sx1262" aria-pressed="true">SX1262</button><button type="button" data-p4-radio="lr2021" aria-pressed="false">LR2021</button></div></div>
|
||||
<div class="p4q"><span>Wi-Fi</span><div class="seg" role="group" aria-label="Wi-Fi after installing"><button type="button" data-p4-wifi="hosted" aria-pressed="true">Works</button><button type="button" data-p4-wifi="at" aria-pressed="false">Never connects</button></div></div>
|
||||
<p class="p4help">The radio is the option you picked when you ordered. Not sure about Wi-Fi? Start with <b>Works</b>. If Wi-Fi then never connects, your unit's Wi-Fi chip still runs LilyGo's factory firmware (ESP-AT): pick <b>Never connects</b> and install that image, it brings Wi-Fi back.</p>
|
||||
<p class="p4help">The radio is the option you picked when you ordered. Not sure about Wi-Fi? Start with <b>Works</b>. If the screen then turns <b>blue or teal right after the logo</b>, or Wi-Fi never connects, your unit's Wi-Fi chip still runs LilyGo's factory firmware (ESP-AT): pick <b>Never connects</b> and install that image, it fixes both.</p>
|
||||
<div class="p4v" data-radio="sx1262" data-wifi="hosted"><p class="p4lbl">SX1262 radio</p>
|
||||
<esp-web-install-button id="inst-tdp4" manifest="https://firmware.wadamesh.com/latest-beta/manifest-tdisplay-p4.json"></esp-web-install-button>
|
||||
<a class="dl2" data-dl-board="tdisplay-p4" data-dl-betaonly download href="https://firmware.wadamesh.com/latest-beta/wadamesh-tdisplay-p4-merged.bin"><span class="dl2-row"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v12M7 11l5 5 5-5M5 21h14"/></svg>Download .bin</span><span class="dlver" data-dl-ver></span></a></div>
|
||||
@@ -704,7 +718,7 @@
|
||||
<span class="sup part" tabindex="0"><span class="dot"></span>Partially supported<span class="pop"><b>Partially supported</b>Both LCD radio variants are compile-tested and need hardware validation. Bluetooth pairing is unavailable; use Wi-Fi or USB for the phone-app link.</span></span>
|
||||
<div class="p4q"><span>Radio</span><div class="seg" role="group" aria-label="Radio chip"><button type="button" data-p4-radio="sx1262" aria-pressed="true">SX1262</button><button type="button" data-p4-radio="lr2021" aria-pressed="false">LR2021</button></div></div>
|
||||
<div class="p4q"><span>Wi-Fi</span><div class="seg" role="group" aria-label="Wi-Fi after installing"><button type="button" data-p4-wifi="hosted" aria-pressed="true">Works</button><button type="button" data-p4-wifi="at" aria-pressed="false">Never connects</button></div></div>
|
||||
<p class="p4help">The radio is the option you picked when you ordered. Not sure about Wi-Fi? Start with <b>Works</b>. If Wi-Fi then never connects, your unit's Wi-Fi chip still runs LilyGo's factory firmware (ESP-AT): pick <b>Never connects</b> and install that image, it brings Wi-Fi back.</p>
|
||||
<p class="p4help">The radio is the option you picked when you ordered. Not sure about Wi-Fi? Start with <b>Works</b>. If the screen then turns <b>blue or teal right after the logo</b>, or Wi-Fi never connects, your unit's Wi-Fi chip still runs LilyGo's factory firmware (ESP-AT): pick <b>Never connects</b> and install that image, it fixes both.</p>
|
||||
<div class="p4v" data-radio="sx1262" data-wifi="hosted"><p class="p4lbl">SX1262 radio</p>
|
||||
<esp-web-install-button id="inst-tdp4-lcd"></esp-web-install-button>
|
||||
<a class="dl2" id="dl-tdp4-lcd" download><span class="dl2-row"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v12M7 11l5 5 5-5M5 21h14"/></svg>Download .bin</span><span class="dlver" id="dl-tdp4-lcd-ver"></span></a></div>
|
||||
@@ -763,6 +777,20 @@
|
||||
<esp-web-install-button id="inst-crowpanel-50" manifest="https://firmware.wadamesh.com/latest-beta/manifest-crowpanel-50.json"></esp-web-install-button>
|
||||
<a class="dl2" data-dl-board="crowpanel-50" data-dl-betaonly download href="https://firmware.wadamesh.com/latest-beta/wadamesh-crowpanel-50-merged.bin"><span class="dl2-row"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v12M7 11l5 5 5-5M5 21h14"/></svg>Download .bin</span><span class="dlver" data-dl-ver></span></a>
|
||||
<p data-wm-betaonly style="color:var(--mut);font-size:.78rem;margin:6px 0 0">Beta only. Set the DIP switch and attach the SX1262 before booting; flash with care and report what works.</p></div>
|
||||
<div class="board" data-search="elecrow crowpanel advanced 10.1 10 inch esp32-p4 p4 ek79007 mipi dsi gt911 sx1262 c6 touchscreen lora experimental"><h4>CrowPanel Advanced 10.1 <span style="font-weight:600;color:var(--mut)">(experimental)</span></h4><p>10.1" 1024×600 ESP32-P4 touch display with an SX1262 module in the wireless slot. One image per board revision.</p>
|
||||
<span class="sup part" tabindex="0"><span class="dot"></span>Partially supported<span class="pop"><b>Not yet tested on hardware</b>This build is for the ESP32-P4 CrowPanel Advanced 10.1 (1024×600), not the ESP32-S3 Advance boards. Display, touch, backlight, Wi-Fi and Bluetooth through the C6, the SX1262 and the microSD slot are ported from Elecrow's schematics and example code; nothing has run on a physical unit yet. No battery reading, sound or GPS.</span></span>
|
||||
<div class="p4q"><span>Revision</span><div class="seg" role="group" aria-label="Board revision"><button type="button" data-cprev-pick="12" aria-pressed="true">V1.2</button><button type="button" data-cprev-pick="11" aria-pressed="false">V1.1</button><button type="button" data-cprev-pick="10" aria-pressed="false">V1.0</button></div></div>
|
||||
<p class="p4help">The revision is printed on the board. The pins for the radio and the Wi-Fi chip moved between revisions, so the wrong image leaves LoRa or Wi-Fi dead.</p>
|
||||
<div class="p4v" data-cprev="12"><p class="p4lbl">Board revision V1.2</p>
|
||||
<esp-web-install-button id="inst-crowpanel-p4-101-v12" manifest="https://firmware.wadamesh.com/latest-beta/manifest-crowpanel-p4-101-v12.json"></esp-web-install-button>
|
||||
<a class="dl2" data-dl-board="crowpanel-p4-101-v12" data-dl-betaonly download href="https://firmware.wadamesh.com/latest-beta/wadamesh-crowpanel-p4-101-v12-merged.bin"><span class="dl2-row"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v12M7 11l5 5 5-5M5 21h14"/></svg>Download .bin</span><span class="dlver" data-dl-ver></span></a></div>
|
||||
<div class="p4v" data-cprev="11" hidden><p class="p4lbl">Board revision V1.1</p>
|
||||
<esp-web-install-button id="inst-crowpanel-p4-101-v11" manifest="https://firmware.wadamesh.com/latest-beta/manifest-crowpanel-p4-101-v11.json"></esp-web-install-button>
|
||||
<a class="dl2" data-dl-board="crowpanel-p4-101-v11" data-dl-betaonly download href="https://firmware.wadamesh.com/latest-beta/wadamesh-crowpanel-p4-101-v11-merged.bin"><span class="dl2-row"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v12M7 11l5 5 5-5M5 21h14"/></svg>Download .bin</span><span class="dlver" data-dl-ver></span></a></div>
|
||||
<div class="p4v" data-cprev="10" hidden><p class="p4lbl">Board revision V1.0</p>
|
||||
<esp-web-install-button id="inst-crowpanel-p4-101-v10" manifest="https://firmware.wadamesh.com/latest-beta/manifest-crowpanel-p4-101-v10.json"></esp-web-install-button>
|
||||
<a class="dl2" data-dl-board="crowpanel-p4-101-v10" data-dl-betaonly download href="https://firmware.wadamesh.com/latest-beta/wadamesh-crowpanel-p4-101-v10-merged.bin"><span class="dl2-row"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v12M7 11l5 5 5-5M5 21h14"/></svg>Download .bin</span><span class="dlver" data-dl-ver></span></a></div>
|
||||
<p data-wm-betaonly style="color:var(--mut);font-size:.78rem;margin:6px 0 0">Experimental and beta only. Attach the SX1262 before booting, power it from one USB cable, and please report what works.</p></div>
|
||||
</div>
|
||||
</details>
|
||||
|
||||
@@ -805,6 +833,11 @@
|
||||
<esp-web-install-button id="inst-wio-tracker-l2" manifest="https://firmware.wadamesh.com/latest-beta/manifest-wio-tracker-l2.json"></esp-web-install-button>
|
||||
<a class="dl2" data-dl-board="wio-tracker-l2" data-dl-betaonly download href="https://firmware.wadamesh.com/latest-beta/wadamesh-wio-tracker-l2-merged.bin"><span class="dl2-row"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v12M7 11l5 5 5-5M5 21h14"/></svg>Download .bin</span><span class="dlver" data-dl-ver></span></a>
|
||||
<p data-wm-betaonly style="color:var(--mut);font-size:.78rem;margin:6px 0 0">Beta channel only until the next stable.</p></div>
|
||||
<div class="board" data-search="seeed sensecap indicator d1l d1pro esp32-s3 st7701s ft6336 sx1262 480x480 touch desk experimental"><h4>SenseCAP Indicator D1L <span style="font-weight:600;color:var(--mut)">(experimental)</span></h4><p>ESP32-S3 · 4" 480×480 touch desk display · SX1262.</p>
|
||||
<span class="sup part" tabindex="0"><span class="dot"></span>Partially supported<span class="pop"><b>Community port, beta</b>Contributed by the community (PR #682) and tested by its contributor on one unit: display, touch and LoRa messaging work. It is USB-powered with no battery, so the battery readouts and Power off are hidden. The RP2040 side (buzzer, microSD, Grove, sensors) is not used, so there are no map tiles. No updates from the device: update from this page.</span></span>
|
||||
<esp-web-install-button id="inst-sensecap-indicator" manifest="https://firmware.wadamesh.com/latest-beta/manifest-sensecap-indicator.json"></esp-web-install-button>
|
||||
<a class="dl2" data-dl-board="sensecap-indicator" data-dl-betaonly download href="https://firmware.wadamesh.com/latest-beta/wadamesh-sensecap-indicator-merged.bin"><span class="dl2-row"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 3v12M7 11l5 5 5-5M5 21h14"/></svg>Download .bin</span><span class="dlver" data-dl-ver></span></a>
|
||||
<p data-wm-betaonly style="color:var(--mut);font-size:.78rem;margin:6px 0 0">Experimental and beta only. Please report what works.</p></div>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
@@ -852,8 +885,8 @@
|
||||
<details><summary>Is it really free?</summary><div class="a">Yes. WADAMESH is open source under GPL-3.0: no licence key and nothing locked. The code is on <a href="https://github.com/ALLFATHER-BV/wadamesh" target="_blank" rel="noopener">GitHub</a>.</div></details>
|
||||
<details><summary>Does it work with the MeshCore app?</summary><div class="a">Yes. The device can be the radio for the official MeshCore app on your phone (iOS and Android) over Bluetooth, Wi-Fi or USB, while you keep using it on its own. On the T-Display P4, Bluetooth pairing isn't available yet and on the Tanmatsu it has known gaps, so use Wi-Fi or USB there.</div></details>
|
||||
<details><summary>Will I keep my identity, contacts and channels?</summary><div class="a">Updating from the device keeps everything. A fresh install from this page can erase what is on the board, so make a backup first: <b>Settings → Backups → Export backup</b> saves your whole setup, including your node's identity, to the SD card when one is in. Without a card it stays on the board, so copy it off first with <a href="https://files.wadamesh.com" target="_blank" rel="noopener">USB Files</a>. <b>Restore</b> on the same page brings it back.</div></details>
|
||||
<details><summary>How do I update later?</summary><div class="a">From the device. When a new build is out, <b>Settings → About</b> shows it and <b>Install update</b> flashes it over Wi-Fi, no computer needed. A T-Deck under Launcher updates through Launcher, and the Tanmatsu through its app store.</div></details>
|
||||
<details><summary>Stable or Beta?</summary><div class="a"><b>Stable</b> is the tested build and the default. <b>Beta</b> gets new features and fixes first and can be rough: it is for trying things early and reporting bugs. Switch any time on the device with <b>Settings → About → Get test builds (beta)</b>.</div></details>
|
||||
<details><summary>How do I update later?</summary><div class="a">From the device. When a new build is out, <b>Settings → Device</b> shows it and <b>Install update</b> flashes it over Wi-Fi, no computer needed. A T-Deck under Launcher updates through Launcher, and the Tanmatsu through its app store.</div></details>
|
||||
<details><summary>Stable or Beta?</summary><div class="a"><b>Stable</b> is the tested build and the default. <b>Beta</b> gets new features and fixes first and can be rough: it is for trying things early and reporting bugs. Switch any time on the device with <b>Settings → Device → Get test builds (beta)</b>.</div></details>
|
||||
<details><summary>Why can't I install from my phone?</summary><div class="a">The firmware goes onto the board over a USB cable, and only Chrome and Edge on a computer let a web page do that. Open wadamesh.com on a computer. A Tanmatsu installs WADAMESH from its own app store.</div></details>
|
||||
<details><summary>My board isn't detected</summary><div class="a">Try another cable first: many USB cables only charge. Close anything else using the port, such as a serial monitor or another tab, then put the board in download mode. On a T-Deck, hold the trackball while you tap reset.</div></details>
|
||||
<details><summary>Can I go back to the original firmware?</summary><div class="a">Yes, nothing is locked. Flash stock MeshCore the same way from the official <a href="https://flasher.meshcore.io/" target="_blank" rel="noopener">MeshCore web flasher</a>, or your board maker's own firmware.</div></details>
|
||||
@@ -875,6 +908,20 @@
|
||||
<span class="go">Read the guide</span>
|
||||
</a>
|
||||
|
||||
<a class="rescard" style="--hue:var(--hue-msg)" href="webclient.html">
|
||||
<span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg></span>
|
||||
<h4>Web client</h4>
|
||||
<p>The WADAMESH interface in your browser, for any MeshCore node over USB, Bluetooth or Wi-Fi. Try the demo, nothing to install.</p>
|
||||
<span class="go">How it works</span>
|
||||
</a>
|
||||
|
||||
<a class="rescard" style="--hue:var(--hue-radio)" href="apps.html">
|
||||
<span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="7" height="7" rx="1.5"/><rect x="14" y="3" width="7" height="7" rx="1.5"/><rect x="3" y="14" width="7" height="7" rx="1.5"/><path d="M17.5 14v7M14 17.5h7"/></svg></span>
|
||||
<h4>App Store</h4>
|
||||
<p>Every app you can install from the Store on the device: radio tools, navigation, emergency messages, music and games.</p>
|
||||
<span class="go">Browse the apps</span>
|
||||
</a>
|
||||
|
||||
<a class="rescard" style="--hue:var(--hue-sys)" href="sdk.html">
|
||||
<span class="ico"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m18 16 4-4-4-4"/><path d="m6 8-4 4 4 4"/><path d="m14.5 4-5 16"/></svg></span>
|
||||
<h4>Lua app SDK</h4>
|
||||
@@ -1288,6 +1335,19 @@ We use no tracking, analytics, or advertising cookies. Our CDN and security prov
|
||||
sync();
|
||||
});
|
||||
|
||||
// ---- CrowPanel Advanced 10.1: the board revision picks the image ----
|
||||
document.querySelectorAll('#devsel .board').forEach(card => {
|
||||
const picks = card.querySelectorAll('[data-cprev-pick]');
|
||||
if (!picks.length) return;
|
||||
let rev = '12';
|
||||
const sync = () => {
|
||||
picks.forEach(b => b.setAttribute('aria-pressed', b.getAttribute('data-cprev-pick') === rev ? 'true' : 'false'));
|
||||
card.querySelectorAll('.p4v[data-cprev]').forEach(v => { v.hidden = v.dataset.cprev !== rev; });
|
||||
};
|
||||
picks.forEach(b => b.addEventListener('click', () => { rev = b.getAttribute('data-cprev-pick'); sync(); }));
|
||||
sync();
|
||||
});
|
||||
|
||||
// ---- "open this page on a computer": copy the link ----
|
||||
document.querySelectorAll('[data-copyurl]').forEach(b => b.addEventListener('click', () => {
|
||||
const code = b.parentElement.querySelector('code');
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
<main>
|
||||
<div class="hero">
|
||||
<h1>Lua app SDK</h1>
|
||||
<p>WADAMESH runs small Lua apps. They live on the device as a single <code>.lua</code> file, appear in the app drawer next to the built-ins, and can be installed and updated from the Store over the air.</p>
|
||||
<p>WADAMESH runs small Lua apps. They live on the device as a single <code>.lua</code> file, appear in the app drawer next to the built-ins, and can be installed and updated from the Store over the air. The <a href="apps.html">App Store page</a> lists every one of them.</p>
|
||||
<div class="meta"><span class="chip">API v1</span> <span class="chip">Lua 5.4</span></div>
|
||||
</div>
|
||||
|
||||
@@ -261,17 +261,19 @@ return app</code></pre>
|
||||
<tr><td>wada.ui.clear()</td><td>Remove every widget from the app's page, leaving the page itself. This is how you build an app with more than one screen: clear, then create the next screen's widgets in the same place you built the first. <b>Any handle you still hold from before the clear is dead</b>: calling a method on it does nothing rather than crashing, but it will not come back, so re-create and re-assign. Older firmware has no <code>ui.clear</code>: write <code>local clear = ui.clear or function() end</code> if you need to run on both.</td></tr>
|
||||
<tr><td>wada.ui.list(x, y, w, h)</td><td>A scrollable list of selectable rows, the "pick one of N" widget. Methods: <code>add(text [, fn])</code> returning the row index, <code>set(i, text)</code>, <code>color(i, c)</code>, <code>select(i)</code> (highlights <i>and</i> scrolls it into view), <code>selected()</code>, <code>count()</code>, <code>clear()</code>, <code>pos(x, y)</code>. Rows are real buttons, so keyboard and trackball navigation walks them on touchless boards without you doing anything.</td></tr>
|
||||
<tr><td>wada.ui.input(title, initial, cb)</td><td>A modal text field. <code>cb(text)</code> on OK, <code>cb(nil)</code> on cancel or on the dialog being closed any other way: exactly one call, always, so an app that disabled itself while waiting always gets to re-enable. Uses the firmware's own dialog and keyboard, so it behaves identically on a touchscreen, on the Tanmatsu's physical keyboard and on a trackball board. One prompt at a time.</td></tr>
|
||||
<tr><td>wada.ui.canvas(w, h)</td><td>A drawing surface. See the canvas methods below.</td></tr>
|
||||
<tr><td>wada.ui.canvas(w, h)</td><td>A drawing surface. See the canvas methods below. Each side is clamped to the screen's long side (at least 480), so sizing it from <code>on_open(w, h)</code> is safe on every board.</td></tr>
|
||||
<tr><td>wada.ui.chart(points)</td><td>A line chart sized to the page. The Airtime and RF Monitor primitive.</td></tr>
|
||||
<tr><td>wada.ui.scroll(on)</td><td>Allow the page to scroll when content is taller than the screen.</td></tr>
|
||||
<tr><td>wada.ui.text_h(size)</td><td>Line height in pixels for a size class. Use it to lay out a canvas.</td></tr>
|
||||
<tr><td>wada.ui.colors</td><td>Theme table: <code>text</code>, <code>sub</code>, <code>bg</code>, <code>panel</code>, <code>accent</code>, <code>good</code>, <code>bad</code>, and on newer firmware <code>warn</code> (amber) and <code>border</code> (a panel's frame). Write <code>colors.warn or 0xE8A33D</code> to run on both.</td></tr>
|
||||
</table>
|
||||
<h3>Label handle</h3>
|
||||
<p>A button returns the same kind of handle, so all of these work on buttons too; <code>color</code> sets a button's text colour.</p>
|
||||
<table class="api">
|
||||
<tr><td>lbl:set(text)</td><td>Replace the text.</td></tr>
|
||||
<tr><td>lbl:color(c)</td><td>Set the colour, e.g. <code>wada.ui.colors.accent</code>.</td></tr>
|
||||
<tr><td>lbl:pos(x, y)</td><td>Place it explicitly instead of in flow.</td></tr>
|
||||
<tr><td>lbl:bg(fill [, border])</td><td>Fill colour behind it: on a button handle, the button's own colour (and its frame when <code>border</code> is given), so a coloured button stays a focus stop for the keys and trackball. New in beta_96: write <code>if b.bg then b:bg(c) end</code> to run on older firmware too.</td></tr>
|
||||
<tr><td>lbl:width(px, [align])</td><td>Fix the width; longer text wraps instead of running off the panel. Optional <code>"center"</code> / <code>"right"</code> aligns the text inside that width (default left).</td></tr>
|
||||
</table>
|
||||
<h3>Canvas handle</h3>
|
||||
@@ -632,6 +634,7 @@ end</code></pre>
|
||||
<h2>Install your own</h2>
|
||||
<div class="row"><div class="prose">
|
||||
<p>Drop a bare <code>.lua</code> file into <code>/meshcomod/apps/</code> on the SD card (<code>/apps/</code> when the device stores internally) and it shows up in the drawer, no manifest needed. The filename becomes the name. That is the fast loop while you are writing something.</p>
|
||||
<p>No need to pull the card each time: plug the device in over USB, open <a href="https://files.wadamesh.com" target="_blank" rel="noopener">USB Files</a> in Chrome or Edge and drop the file into that same apps folder. It takes <code>.lua</code> and <code>.json</code> files there (from beta_96); the app shows up the next time you open the drawer.</p>
|
||||
<p>Apps you side-load appear in the Store under <b>Your own apps</b>, where you can remove them again. A long press on the drawer tile also offers to remove.</p>
|
||||
<p>On boards without an SD card the same path lives on internal storage.</p>
|
||||
<p>No card slot you can reach (the ThinkNode M9's card is soldered on)? Push the files over the USB serial console instead: <code>scripts/sideload_app.py --port /dev/cu.wchusbserial10 --reboot deploy/apps/<id>/<ver></code> sends the <code>.lua</code> + <code>.json</code> through the firmware's <code>fput</code>/<code>fadd</code>/<code>fend</code> commands into the same <code>/apps/</code> the Store uses (<code>--dest /lang</code> for a language file). Needs pyserial.</p>
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url><loc>https://wadamesh.com/</loc></url>
|
||||
<url><loc>https://wadamesh.com/docs.html</loc></url>
|
||||
<url><loc>https://wadamesh.com/webclient.html</loc></url>
|
||||
<url><loc>https://wadamesh.com/apps.html</loc></url>
|
||||
<url><loc>https://wadamesh.com/sdk.html</loc></url>
|
||||
<url><loc>https://wadamesh.com/changelog.html</loc></url>
|
||||
<url><loc>https://wadamesh.com/beta.html</loc></url>
|
||||
|
||||
@@ -0,0 +1,263 @@
|
||||
<!doctype html>
|
||||
<html lang="en" data-sky="soft">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<script>try{if(localStorage.getItem('wm-theme')==='light')document.documentElement.setAttribute('data-theme','light')}catch(e){}</script>
|
||||
<meta name="theme-color" content="#000400">
|
||||
<title>WADAMESH · Web client</title>
|
||||
<meta name="description" content="The WADAMESH interface in your browser: try the demo, or drive any MeshCore companion node over USB, Bluetooth or Wi-Fi from a computer or phone. Free, no install, no account.">
|
||||
<link rel="canonical" href="https://wadamesh.com/webclient.html">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:site_name" content="WADAMESH">
|
||||
<meta property="og:url" content="https://wadamesh.com/webclient.html">
|
||||
<meta property="og:title" content="WADAMESH · Web client">
|
||||
<meta property="og:description" content="The WADAMESH interface in your browser, for any MeshCore node: USB, Bluetooth or Wi-Fi. Free, no install.">
|
||||
<meta property="og:image" content="https://wadamesh.com/og-image.png?v=2">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<link rel="icon" href="favicon.ico" sizes="32x32">
|
||||
<link rel="icon" href="wadamesh-badge.svg" type="image/svg+xml">
|
||||
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@500;600;700&family=JetBrains+Mono:wght@600;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root{--bg:#000400; --ink:#E6EBED; --mut:#B0BAC0; --line:#1C2428; --teal:#15B6A6; --teal-ink:#19D6C2; color-scheme:dark}
|
||||
*{box-sizing:border-box;margin:0;padding:0}
|
||||
body{font:16px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; background:var(--bg); color:var(--ink); -webkit-font-smoothing:antialiased}
|
||||
a{color:var(--teal-ink); text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
|
||||
.top{position:sticky; top:0; z-index:30; display:flex; align-items:center; gap:14px; padding:12px 22px;
|
||||
background:var(--bar); -webkit-backdrop-filter:saturate(1.2) blur(10px); backdrop-filter:saturate(1.2) blur(10px); border-bottom:1px solid var(--line)}
|
||||
.top .word{font-weight:700; letter-spacing:2px; font-size:1.05rem; color:var(--ink)}
|
||||
.top .word .t{color:var(--teal)}
|
||||
.top .tag{font-family:'JetBrains Mono',monospace; font-size:.66rem; letter-spacing:.18em; text-transform:uppercase; color:var(--mut); border:1px solid var(--line); border-radius:100px; padding:4px 9px}
|
||||
.top .sp{flex:1}
|
||||
.top .home{display:inline-flex; align-items:center; gap:7px; color:var(--mut); font-size:.86rem; border:1px solid var(--line); border-radius:100px; padding:6px 13px; background:var(--control)}
|
||||
.top .home:hover{color:var(--teal-ink); border-color:var(--teal); text-decoration:none}
|
||||
.top .home svg{width:16px;height:16px}
|
||||
|
||||
.wrap{max-width:1080px; margin:0 auto; padding:0 22px 80px}
|
||||
h1{font-size:2.1rem; line-height:1.15; margin:38px 0 10px; letter-spacing:-.01em; text-wrap:balance; text-shadow:var(--glow-text)}
|
||||
.lede{color:var(--sky-sub); max-width:66ch; font-size:1.03rem; text-shadow:var(--glow-text)}
|
||||
.cta{display:flex; flex-wrap:wrap; gap:10px; margin-top:20px}
|
||||
.btn{display:inline-flex; align-items:center; gap:8px; padding:10px 18px; border-radius:100px; font-size:.92rem; font-weight:600;
|
||||
border:1px solid var(--line); background:var(--control); color:var(--ink)}
|
||||
.btn:hover{text-decoration:none; border-color:var(--teal)}
|
||||
.btn.pri{background:var(--accent-fill); border-color:var(--accent-fill); color:var(--on-accent)}
|
||||
.btn svg{width:17px; height:17px}
|
||||
|
||||
.steps{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; margin:30px 0 8px}
|
||||
.step{padding:14px 16px; border-radius:14px; background:var(--surface); border:1px solid var(--line); font-size:.9rem; color:var(--mut)}
|
||||
.step b{display:block; color:var(--ink); font-size:.95rem; margin-bottom:2px}
|
||||
.step .n{font-family:'JetBrains Mono',monospace; color:var(--teal-ink); font-size:.75rem; letter-spacing:.12em}
|
||||
|
||||
.chips{display:flex; flex-wrap:wrap; gap:8px; margin:34px -10px 4px; position:sticky; top:66px; z-index:20; padding:8px 10px; border-radius:18px;
|
||||
background:var(--bar); -webkit-backdrop-filter:saturate(1.2) blur(10px); backdrop-filter:saturate(1.2) blur(10px)}
|
||||
.chip{display:inline-flex; align-items:center; gap:7px; padding:7px 13px; border-radius:100px; cursor:pointer; font:inherit; font-size:.85rem;
|
||||
border:1px solid var(--line); background:var(--control); color:var(--ink2)}
|
||||
.chip span{color:var(--dim); font-size:.78rem; font-variant-numeric:tabular-nums}
|
||||
.chip:hover{border-color:var(--teal)}
|
||||
.chip.on{border-color:var(--teal); background:var(--accent-soft); color:var(--teal-ink); font-weight:600}
|
||||
|
||||
.cat h2{font-size:1.15rem; margin:30px 0 12px; text-shadow:var(--glow-text)}
|
||||
.grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:16px; align-items:start}
|
||||
.app{border-radius:16px; background:var(--surface); border:1px solid var(--line); padding:16px; box-shadow:var(--shadow); scroll-margin-top:150px}
|
||||
.app .shot{margin:-4px -4px 14px; border-radius:11px; background:#05080A; border:1px solid var(--frame-edge); display:grid; place-items:center; padding:10px; height:200px}
|
||||
.app .shot.poster{color:var(--hue); border-color:color-mix(in srgb, var(--hue) 22%, transparent);
|
||||
background:radial-gradient(120% 90% at 50% 110%, color-mix(in srgb, var(--hue) 26%, transparent), transparent 70%), var(--bg2)}
|
||||
.app .shot.poster .pg{width:72px; height:72px; stroke-width:1.3; opacity:.9; filter:drop-shadow(0 0 18px color-mix(in srgb, var(--hue) 55%, transparent))}
|
||||
.app .shot img{max-width:100%; max-height:180px; width:auto; height:auto; border-radius:6px; display:block}
|
||||
.app .shot.tall img{width:170px; height:180px; max-height:none; object-fit:cover; object-position:top; border-radius:8px}
|
||||
.app .head{display:flex; gap:12px; align-items:flex-start}
|
||||
.app .ico{flex:none; width:46px; height:46px; border-radius:13px; display:grid; place-items:center;
|
||||
color:var(--hue); background:color-mix(in srgb, var(--hue) 15%, transparent); box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--hue) 30%, transparent)}
|
||||
.app .ico .g{width:24px; height:24px}
|
||||
.app h3{font-size:1.05rem; line-height:1.25}
|
||||
.app .ver{font-family:'JetBrains Mono',monospace; font-size:.7rem; color:var(--dim); font-weight:600; margin-left:4px}
|
||||
.app .tl{color:var(--mut); font-size:.9rem; margin-top:2px}
|
||||
.app .runs{display:inline-block; margin-top:12px; padding:3px 10px; border-radius:100px; font-size:.76rem; font-weight:600}
|
||||
.app .runs.every{color:var(--ok); background:var(--ok-bg)}
|
||||
.app .runs.most{color:var(--info); background:color-mix(in srgb, var(--info) 14%, transparent)}
|
||||
.app .runs.some{color:var(--warn-ink); background:var(--warn-bg)}
|
||||
.app .by{font-size:.8rem; color:var(--dim); margin-top:8px}
|
||||
.app details{margin-top:10px; border-top:1px solid var(--line); padding-top:8px}
|
||||
.app summary{cursor:pointer; font-size:.85rem; color:var(--teal-ink); list-style:none}
|
||||
.app summary::-webkit-details-marker{display:none}
|
||||
.app summary::before{content:"+ "; font-family:'JetBrains Mono',monospace}
|
||||
.app details[open] summary::before{content:"\2212 "}
|
||||
.app details p{font-size:.9rem; color:var(--ink2); margin-top:8px}
|
||||
.app details ul{margin:8px 0 2px 18px; font-size:.86rem; color:var(--mut)}
|
||||
|
||||
.make{scroll-margin-top:140px; margin-top:56px; padding:26px; border-radius:18px; background:var(--surface); border:1px solid var(--line)}
|
||||
.make h2{font-size:1.4rem; margin-bottom:6px}
|
||||
.make > p{color:var(--mut); max-width:70ch}
|
||||
.mk{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; margin-top:20px}
|
||||
.mk div{padding:16px 18px; border-radius:14px; background:var(--bg2); border:1px solid var(--line)}
|
||||
.mk h3{font-size:.98rem; margin-bottom:6px}
|
||||
.mk p, .mk li{font-size:.9rem; color:var(--mut)}
|
||||
.mk ul{margin:6px 0 0 18px}
|
||||
code{font-family:'JetBrains Mono',monospace; font-size:.82em; background:var(--bg2); border:1px solid var(--line); padding:1px 6px; border-radius:6px; color:var(--ink2); overflow-wrap:anywhere}
|
||||
.foot{margin-top:40px; padding-top:18px; border-top:1px solid var(--line); color:var(--mut); font-size:.85rem}
|
||||
[hidden]{display:none!important}
|
||||
|
||||
@media (max-width:760px){
|
||||
.steps,.mk{grid-template-columns:1fr}
|
||||
h1{font-size:1.65rem}
|
||||
.wrap{padding:0 16px 60px}
|
||||
.top{padding:10px 16px}
|
||||
.top .tag{display:none}
|
||||
.chips{top:60px; margin-inline:-6px; padding-inline:6px; flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none}
|
||||
.chips::-webkit-scrollbar{display:none}
|
||||
.chip{flex:none}
|
||||
.app .shot{height:160px}
|
||||
.app .shot img,.app .shot.tall img{max-height:140px}
|
||||
.app .shot.tall img{height:140px; width:140px}
|
||||
.grid{grid-template-columns:1fr}
|
||||
.make{padding:18px}
|
||||
}
|
||||
|
||||
.gal{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; margin-top:28px}
|
||||
.gal figure{margin:0; border-radius:14px; overflow:hidden; background:#05080A; box-shadow:0 0 0 1px var(--frame-edge), var(--shadow)}
|
||||
.gal img{display:block; width:100%; height:auto}
|
||||
.gal figcaption{padding:9px 12px; font-size:.84rem; color:var(--mut); background:var(--surface)}
|
||||
.sec{margin-top:52px}
|
||||
.sec h2{font-size:1.4rem; margin-bottom:6px; text-shadow:var(--glow-text)}
|
||||
.sec > p{color:var(--mut); max-width:72ch}
|
||||
.ways{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px; margin-top:18px}
|
||||
.way{padding:16px 18px; border-radius:14px; background:var(--surface); border:1px solid var(--line)}
|
||||
.way h3{font-size:1.02rem; margin-bottom:4px; display:flex; align-items:center; gap:9px}
|
||||
.way h3 svg{width:20px; height:20px; color:var(--teal-ink)}
|
||||
.way .who{font-size:.8rem; color:var(--dim); margin-bottom:8px}
|
||||
.way ol{margin:0 0 0 18px; font-size:.9rem; color:var(--ink2)}
|
||||
.way li{margin:3px 0}
|
||||
.tbl{width:100%; border-collapse:collapse; margin-top:16px; font-size:.9rem}
|
||||
.tblwrap{overflow-x:auto; border-radius:14px; border:1px solid var(--line); background:var(--surface); margin-top:16px}
|
||||
.tblwrap .tbl{margin:0}
|
||||
.tbl th,.tbl td{padding:9px 12px; text-align:left; border-bottom:1px solid var(--line); white-space:nowrap}
|
||||
.tbl tr:last-child td{border-bottom:0}
|
||||
.tbl th{color:var(--mut); font-weight:600; font-size:.8rem; letter-spacing:.04em}
|
||||
.tbl td.y{color:var(--ok)} .tbl td.n{color:var(--dim)}
|
||||
.note{margin-top:12px; font-size:.86rem; color:var(--mut); max-width:80ch}
|
||||
.two{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; margin-top:18px}
|
||||
.box{padding:16px 18px; border-radius:14px; background:var(--surface); border:1px solid var(--line)}
|
||||
.box h3{font-size:1rem; margin-bottom:6px}
|
||||
.box p,.box li{font-size:.9rem; color:var(--mut)}
|
||||
.box ul{margin:6px 0 0 18px}
|
||||
.faq details{border-top:1px solid var(--line); padding:12px 0}
|
||||
.faq details:last-child{border-bottom:1px solid var(--line)}
|
||||
.faq summary{cursor:pointer; font-weight:600}
|
||||
.faq details p{margin-top:8px; color:var(--mut); max-width:75ch; font-size:.92rem}
|
||||
@media (max-width:760px){
|
||||
.gal,.ways,.two{grid-template-columns:1fr}
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="theme.css?v=2">
|
||||
<script src="theme.js?v=2" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<header class="top">
|
||||
<span class="word">WADA<span class="t">MESH</span></span>
|
||||
<span class="tag">web client</span>
|
||||
<span class="sp"></span>
|
||||
<button type="button" class="wm-theme" data-theme-toggle aria-label="Switch to light mode" title="Switch to light mode"><svg class="i-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/></svg><svg class="i-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41"/></svg></button>
|
||||
<a class="home" href="/">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 11l9-8 9 8M5 10v10h14V10"/></svg>
|
||||
Home
|
||||
</a>
|
||||
</header>
|
||||
|
||||
<main class="wrap">
|
||||
<h1>WADAMESH in your browser</h1>
|
||||
<p class="lede">The same interface you run on a T-Deck or a Heltec, in a browser tab. Try it on demo data, or connect it to your own MeshCore companion node over a USB cable, Bluetooth or Wi-Fi, from a computer or a phone. Free, nothing to install, no account.</p>
|
||||
<div class="cta">
|
||||
<a class="btn pri" href="https://app.wadamesh.com/" data-app-link><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="M2 12h20"/><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"/></svg>Open the web client</a>
|
||||
<a class="btn" href="#connect"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 2v14"/><path d="m8 6 4-4 4 4"/><circle cx="12" cy="19" r="3"/><path d="M8 11h8"/></svg>How to connect</a>
|
||||
</div>
|
||||
|
||||
<div class="gal">
|
||||
<figure><img src="img/webclient/home.jpg" alt="Home screen with widgets in the web client" width="800" height="480" loading="lazy"><figcaption>Home, widgets and all, at full size</figcaption></figure>
|
||||
<figure><img src="img/webclient/chat.jpg" alt="A conversation in the web client" width="800" height="480" loading="lazy"><figcaption>Chats, channels and rooms with delivery ticks</figcaption></figure>
|
||||
<figure><img src="img/webclient/map.jpg" alt="The map with your location in the web client" width="800" height="480" loading="lazy"><figcaption>The map, centred on where your computer or phone is</figcaption></figure>
|
||||
<figure><img src="img/webclient/store.jpg" alt="The app Store in the web client" width="800" height="480" loading="lazy"><figcaption>The Store and Lua apps, kept in your browser</figcaption></figure>
|
||||
</div>
|
||||
|
||||
<section class="sec" id="what">
|
||||
<h2>The real interface, not a lookalike</h2>
|
||||
<p>The web client is built from exactly the same code that runs on the devices, so it looks and behaves the same and gets every improvement with each release. Your browser does the drawing; the node does the radio. Anything a MeshCore companion node can do through its app link, the web client can do: chats, channels, rooms, contacts, repeater status and telemetry, repeater admin, the terminal, settings for your node, the map, the Store and its apps.</p>
|
||||
</section>
|
||||
|
||||
<section class="sec" id="connect">
|
||||
<h2>Connect your node</h2>
|
||||
<p>Open the web client, press <b>Connect</b> and pick how your node is attached. It works with stock MeshCore companion firmware as well as WADAMESH and meshcomod. The page remembers your choice and reconnects by itself next time.</p>
|
||||
<div class="ways">
|
||||
<div class="way"><h3><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 2v14"/><path d="m8 6 4-4 4 4"/><circle cx="12" cy="19" r="3"/><path d="M8 11h8"/></svg>USB cable</h3><p class="who">Chrome or Edge on a computer</p><ol>
|
||||
<li>Plug the node into the computer with a data cable.</li>
|
||||
<li>Press Connect, then USB cable.</li>
|
||||
<li>Pick the node's port in the browser's list.</li></ol></div>
|
||||
<div class="way"><h3><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m7 7 10 10-5 5V2l5 5L7 17"/></svg>Bluetooth</h3><p class="who">Chrome or Edge on a computer or an Android phone</p><ol>
|
||||
<li>Turn Bluetooth on, on the node.</li>
|
||||
<li>Press Connect, then Bluetooth.</li>
|
||||
<li>Pick the node and enter its PIN if it asks.</li></ol></div>
|
||||
<div class="way"><h3><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.55a11 11 0 0 1 14 0"/><path d="M1.42 9a16 16 0 0 1 21.16 0"/><path d="M8.53 16.11a6 6 0 0 1 6.95 0"/><path d="M12 20h.01"/></svg>Wi-Fi</h3><p class="who">Any browser, nodes with WADAMESH or meshcomod firmware</p><ol>
|
||||
<li>Turn Wi-Fi on, on the node, on the same network as you.</li>
|
||||
<li>Open the <a href="http://wifi.app.wadamesh.com/">Wi-Fi version</a> (wifi.app.wadamesh.com) of the web client.</li>
|
||||
<li>Press Connect, then Wi-Fi, and type the node's address.</li></ol></div>
|
||||
</div>
|
||||
<p class="note">Why a separate Wi-Fi version? Nodes speak plain, unencrypted WebSocket on your network (encryption is too heavy for the radio's chip next to Wi-Fi), and browsers do not let a secure https page open an unencrypted connection. The Wi-Fi version is the same client on plain http. Browsers in turn only allow USB, Bluetooth and your location on secure pages, so those work in the main version.</p>
|
||||
</section>
|
||||
|
||||
<section class="sec" id="where">
|
||||
<h2>Where it works</h2>
|
||||
<div class="tblwrap"><table class="tbl">
|
||||
<tr><th></th><th>Demo</th><th>USB</th><th>Bluetooth</th><th>Wi-Fi</th><th>Your location</th></tr>
|
||||
<tr><td>Chrome or Edge, computer</td><td class="y">Yes</td><td class="y">Yes</td><td class="y">Yes</td><td class="y">Yes</td><td class="y">Yes</td></tr>
|
||||
<tr><td>Firefox or Safari, computer</td><td class="y">Yes</td><td class="n">No</td><td class="n">No</td><td class="y">Yes</td><td class="y">Yes</td></tr>
|
||||
<tr><td>Android, Chrome</td><td class="y">Yes</td><td class="n">Depends on the phone</td><td class="y">Yes</td><td class="y">Yes</td><td class="y">Yes</td></tr>
|
||||
<tr><td>iPhone and iPad</td><td class="y">Yes</td><td class="n">No</td><td class="n">No</td><td class="y">Yes</td><td class="y">Yes</td></tr>
|
||||
</table></div>
|
||||
<p class="note">Apple does not allow USB or Bluetooth from a web page in any iPhone or iPad browser, so on those the web client connects over Wi-Fi only. On a phone the interface switches to portrait, uses your phone's own keyboard, and can be added to your home screen to open like an app.</p>
|
||||
</section>
|
||||
|
||||
<section class="sec" id="data">
|
||||
<h2>Your data stays with you</h2>
|
||||
<div class="two">
|
||||
<div class="box"><h3>Kept in your browser</h3><p>Chat history, settings and installed apps live in this browser on this device, nowhere else. Each node you connect gets its own storage, separate from the demo. Use <b>Backup this browser</b> in the page menu to move everything to another browser or computer.</p></div>
|
||||
<div class="box"><h3>Your location</h3><p>The browser asks before it shares your location, and the web client uses it for the map, distances and bearings. It only reaches your node, and from there the mesh, when that node's own "share my position" setting is on, exactly as with a GPS on a device.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="sec" id="diff">
|
||||
<h2>What is different from a device</h2>
|
||||
<div class="two">
|
||||
<div class="box"><h3>Works the same</h3><ul>
|
||||
<li>Chats, channels, rooms and contacts</li>
|
||||
<li>Repeater status, telemetry and admin</li>
|
||||
<li>The map, with tiles and your location</li>
|
||||
<li>The Store, Lua apps and languages</li>
|
||||
<li>Your node's settings and the terminal</li></ul></div>
|
||||
<div class="box"><h3>Only on a device</h3><ul>
|
||||
<li>The radio tools: Spectrum, RF Monitor and Airtime</li>
|
||||
<li>Discover scans and wardriving</li>
|
||||
<li>Sound, the SD card and USB Files</li>
|
||||
<li>Firmware updates (the web client is always the latest)</li></ul></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="sec faq" id="faq">
|
||||
<h2>Questions</h2>
|
||||
<details><summary>Do I need a WADAMESH device?</summary><p>No. Any MeshCore companion node works, including stock MeshCore firmware on a Heltec, RAK or T-Beam. The demo needs no node at all.</p></details>
|
||||
<details><summary>Is it the MeshCore app?</summary><p>No, it is the WADAMESH interface. It talks to your node over the same companion link the MeshCore app uses, so you use one or the other at a time on a given connection.</p></details>
|
||||
<details><summary>Does anything go through your servers?</summary><p>The page itself, map tiles and the app Store come from wadamesh.com. Your messages go straight between your browser and your node.</p></details>
|
||||
<details><summary>Can I use it offline?</summary><p>Once loaded, chatting through a connected node keeps working without internet. Map tiles and the Store need a connection.</p></details>
|
||||
<details><summary>Something does not work</summary><p>Ask on <a href="https://discord.gg/T8X2UaQ7Sm" target="_blank" rel="noopener">Discord</a> or <a href="https://github.com/ALLFATHER-BV/wadamesh/issues" target="_blank" rel="noopener">open an issue</a>, and say which browser and node you use.</p></details>
|
||||
</section>
|
||||
|
||||
<p class="foot" style="margin-top:40px;color:var(--mut);font-size:.85rem">Open source under GPL-3.0, like the firmware. <a href="/">Back to wadamesh.com</a></p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,26 +1,26 @@
|
||||
# Heltec V4 TFT touch firmware — custom partition table.
|
||||
# Heltec V4 TFT touch firmware - custom partition table.
|
||||
#
|
||||
# 16 MB layout with TWO EQUAL OTA app slots so the touch firmware can
|
||||
# self-update (HTTP OTA via the meshcomod proxy). The app region (app0+app1)
|
||||
# is split evenly at 3.875 MB each — the firmware is ~2.4–2.5 MB, leaving
|
||||
# is split evenly at 3.875 MB each - the firmware is ~2.4-2.5 MB, leaving
|
||||
# ~1.3 MB of growth headroom per slot. The tiles + spiffs offsets are UNCHANGED,
|
||||
# so an OTA (or the one-time USB re-flash that installs this table) keeps the
|
||||
# map tile cache and all user data (/new_prefs, /contacts3, /channels2, chat
|
||||
# history) intact.
|
||||
# - app0 3.875 MB (ota_0) ┐ equal A/B slots; OTA ping-pongs between them
|
||||
# - app1 3.875 MB (ota_1) ┘ (was 1.5 MB — too small to hold the image)
|
||||
# - app0 3.875 MB (ota_0) + equal A/B slots; OTA ping-pongs between them
|
||||
# - app1 3.875 MB (ota_1) + (was 1.5 MB - too small to hold the image)
|
||||
# - "tiles" 4.75 MB (subtype 0x83 = LittleFS) for the map tab's tile pack
|
||||
# - spiffs 3.375 MB for user data
|
||||
#
|
||||
# Layout (16 MB total):
|
||||
# 0x000000–0x009000 bootloader + partition table
|
||||
# 0x009000–0x00E000 nvs (20 KB, unchanged)
|
||||
# 0x00E000–0x010000 otadata (8 KB, unchanged)
|
||||
# 0x010000–0x3F0000 app0 (3.875 MB, ota_0)
|
||||
# 0x3F0000–0x7D0000 app1 (3.875 MB, ota_1 — grown from 1.5 MB)
|
||||
# 0x7D0000–0xC90000 tiles (4.75 MB, LittleFS, type 0x83) [unchanged]
|
||||
# 0xC90000–0xFF0000 spiffs (3.375 MB) [unchanged]
|
||||
# 0xFF0000–0x1000000 coredump (64 KB, unchanged)
|
||||
# 0x000000-0x009000 bootloader + partition table
|
||||
# 0x009000-0x00E000 nvs (20 KB, unchanged)
|
||||
# 0x00E000-0x010000 otadata (8 KB, unchanged)
|
||||
# 0x010000-0x3F0000 app0 (3.875 MB, ota_0)
|
||||
# 0x3F0000-0x7D0000 app1 (3.875 MB, ota_1 - grown from 1.5 MB)
|
||||
# 0x7D0000-0xC90000 tiles (4.75 MB, LittleFS, type 0x83) [unchanged]
|
||||
# 0xC90000-0xFF0000 spiffs (3.375 MB) [unchanged]
|
||||
# 0xFF0000-0x1000000 coredump (64 KB, unchanged)
|
||||
#
|
||||
# Subtype 0x83 = ESP-IDF LittleFS subtype. The Arduino LittleFSFS instance
|
||||
# in UITask.cpp mounts this by partition label "tiles". SPIFFS.begin()
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 12 and column 7.
|
@@ -1635,6 +1635,164 @@ lib_deps =
|
||||
densaugeo/base64 @ ~1.4.0
|
||||
knolleary/PubSubClient @ ^2.8.0
|
||||
|
||||
; ======================================================================
|
||||
; Seeed SenseCAP Indicator D1L — 480x480 RGB touch panel, SX1262 behind a TCA9535.
|
||||
; The radio's NSS/RESET/BUSY/DIO1 are expander pins; P_LORA_* 0x40..0x43 are
|
||||
; virtual pin numbers the radio HAL maps onto them. 8 MB flash, two OTA slots.
|
||||
; ======================================================================
|
||||
[env:sensecap_indicator_companion_radio_touch]
|
||||
platform = platformio/espressif32@6.11.0
|
||||
framework = arduino
|
||||
board = sensecap_indicator
|
||||
monitor_speed = 115200
|
||||
upload_speed = 921600
|
||||
board_build.arduino.memory_type = qio_opi
|
||||
board_build.flash_size = 8MB
|
||||
board_upload.flash_size = 8MB
|
||||
board_upload.maximum_size = 8388608
|
||||
board_build.partitions = variants/sensecap_indicator/partitions_sensecap_indicator.csv
|
||||
extra_scripts = pre:scripts/build/pre_gen_baked.py, pre:scripts/inject_wifi_env.py, pre:scripts/build/patch_lvgl_anim_uaf.py, pre:scripts/build/patch_lvgl_arabic.py, pre:scripts/build/patch_meshcore_txt_timestamp.py, pre:scripts/build/perf_lvgl.py, merge-bin.py
|
||||
custom_lvgl_o2 = yes ; LVGL at -O2 (scripts/build/perf_lvgl.py), like the T-Deck
|
||||
; No custom_lvgl_iram: it costs +5.9 KB IRAM, and with this board's 23 KB internal draw
|
||||
; band (see UITask::begin) that would leave less internal heap than the T-Deck's.
|
||||
|
||||
build_unflags =
|
||||
-std=gnu++11
|
||||
|
||||
build_flags =
|
||||
-I"${platformio.libdeps_dir}/${this.__env__}/MicroNMEA/src"
|
||||
-I"${platformio.libdeps_dir}/${this.__env__}/LovyanGFX/src"
|
||||
-I variants/sensecap_indicator
|
||||
-I include
|
||||
-I src
|
||||
-I src/ui-touch
|
||||
-Wno-deprecated-declarations
|
||||
-Wno-unused-parameter
|
||||
-std=gnu++17
|
||||
-DNDEBUG
|
||||
-DRADIOLIB_STATIC_ONLY=1
|
||||
-DRADIOLIB_GODMODE=1
|
||||
-D MC_VENDORED_TOUCH_APP
|
||||
-D ESP32_PLATFORM
|
||||
-D HAS_SENSECAP_INDICATOR=1
|
||||
-D BOARD_HAS_PSRAM=1
|
||||
-D ESP32_CPU_FREQ=240
|
||||
-D CORE_DEBUG_LEVEL=0
|
||||
-D LORA_FREQ=869.618
|
||||
-D LORA_BW=62.5
|
||||
-D LORA_SF=8
|
||||
-D USE_SX1262
|
||||
-D RADIO_CLASS=CustomSX1262
|
||||
-D WRAPPER_CLASS=CustomSX1262Wrapper
|
||||
-D LORA_TX_POWER=22
|
||||
-D P_LORA_NSS=0x40
|
||||
-D P_LORA_RESET=0x41
|
||||
-D P_LORA_BUSY=0x42
|
||||
-D P_LORA_DIO_1=0x43
|
||||
-D P_LORA_SCLK=41
|
||||
-D P_LORA_MISO=47
|
||||
-D P_LORA_MOSI=48
|
||||
-D SX126X_DIO2_AS_RF_SWITCH=true
|
||||
; The radio strap picks TCXO (2.4 V) or crystal at run time. The inner quotes
|
||||
; keep the parentheses away from the shell that runs the compiler.
|
||||
-D SX126X_DIO3_TCXO_VOLTAGE="'indicatorTcxoVoltage()'"
|
||||
-D SX126X_CURRENT_LIMIT=140
|
||||
-D SX126X_RX_BOOSTED_GAIN=1
|
||||
-D INDICATOR_PCLK_HZ=12000000
|
||||
-D RADIOLIB_EXCLUDE_CC1101=1
|
||||
-D RADIOLIB_EXCLUDE_RF69=1
|
||||
-D RADIOLIB_EXCLUDE_SX1231=1
|
||||
-D RADIOLIB_EXCLUDE_SI443X=1
|
||||
-D RADIOLIB_EXCLUDE_RFM2X=1
|
||||
-D RADIOLIB_EXCLUDE_SX128X=1
|
||||
-D RADIOLIB_EXCLUDE_AFSK=1
|
||||
-D RADIOLIB_EXCLUDE_AX25=1
|
||||
-D RADIOLIB_EXCLUDE_HELLSCHREIBER=1
|
||||
-D RADIOLIB_EXCLUDE_MORSE=1
|
||||
-D RADIOLIB_EXCLUDE_APRS=1
|
||||
-D RADIOLIB_EXCLUDE_BELL=1
|
||||
-D RADIOLIB_EXCLUDE_RTTY=1
|
||||
-D RADIOLIB_EXCLUDE_SSTV=1
|
||||
-D ENV_INCLUDE_GPS=0
|
||||
-D ENV_INCLUDE_AHTX0=0
|
||||
-D ENV_INCLUDE_BME280=0
|
||||
-D ENV_INCLUDE_BMP280=0
|
||||
-D ENV_INCLUDE_SHTC3=0
|
||||
-D ENV_INCLUDE_SHT4X=0
|
||||
-D ENV_INCLUDE_LPS22HB=0
|
||||
-D ENV_INCLUDE_INA3221=0
|
||||
-D ENV_INCLUDE_INA219=0
|
||||
-D ENV_INCLUDE_INA226=0
|
||||
-D ENV_INCLUDE_INA260=0
|
||||
-D ENV_INCLUDE_MLX90614=0
|
||||
-D ENV_INCLUDE_VL53L0X=0
|
||||
-D ENV_INCLUDE_BME680=0
|
||||
-D ENV_INCLUDE_BMP085=0
|
||||
-D PIN_BOARD_SDA=39
|
||||
-D PIN_BOARD_SCL=40
|
||||
-D PIN_USER_BTN=38
|
||||
-D PIN_TFT_LEDA_CTL=-1
|
||||
-D PIN_TFT_RST=-1
|
||||
-D PIN_TFT_DC=-1
|
||||
-D DISPLAY_CLASS=IndicatorDisplay
|
||||
-D DISPLAY_ROTATION=0
|
||||
-D DISPLAY_SCALE_X=1.0
|
||||
-D DISPLAY_SCALE_Y=1.0
|
||||
-D UI_LVGL=1
|
||||
-D HAS_TOUCH_UI=1
|
||||
-D FIRMWARE_OTA_ENV='"sensecap_indicator_companion_radio_touch"'
|
||||
-D ENABLE_ADVERT_ON_BOOT=0
|
||||
-D LV_CONF_PATH=lv_conf.h
|
||||
-D LV_CONF_INCLUDE_SIMPLE=1
|
||||
-D LV_MEMCPY_MEMSET_STD=1 ; newlib memcpy/memset in LVGL (see include/lv_conf.h)
|
||||
; The UI-size presets use Montserrat 18/20/24. Those are generated fonts
|
||||
; (src/ui-touch/ui_font_NN.c, gated on this board's macro in the generator), not
|
||||
; LVGL's: never force LV_FONT_MONTSERRAT_NN=1 here, it would link LVGL's copy too.
|
||||
-D MAX_CONTACTS=2000
|
||||
-D MAX_GROUP_CHANNELS=40
|
||||
-D ADMIN_PASSWORD='"password"'
|
||||
-D MULTI_TRANSPORT_COMPANION=1
|
||||
-D WADAMESH_FORK_BUILD=1
|
||||
-D TCP_PORT=5000
|
||||
-D WS_PORT=8765
|
||||
-D BLE_PIN_CODE=123456
|
||||
-D ENABLE_PRIVATE_KEY_IMPORT=1
|
||||
-D ENABLE_PRIVATE_KEY_EXPORT=1
|
||||
-D CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN=1
|
||||
-D CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN=16384
|
||||
-D CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN=4096
|
||||
|
||||
build_src_filter =
|
||||
+<*.cpp>
|
||||
+<*.c>
|
||||
+<helpers/*.cpp>
|
||||
+<helpers/esp32/*.cpp>
|
||||
+<helpers/input/*.cpp>
|
||||
-<helpers/input/TDeckTouch.cpp>
|
||||
+<helpers/ui/UIColorPalette.cpp>
|
||||
+<ui-touch/*.cpp>
|
||||
+<ui-touch/*.c>
|
||||
+<../variants/sensecap_indicator/*.cpp>
|
||||
|
||||
lib_deps =
|
||||
https://github.com/ALLFATHER-BV/meshcomod.git#core-v1.18.0
|
||||
SPI
|
||||
Wire
|
||||
SD_MMC
|
||||
jgromes/RadioLib @ ^7.6.0
|
||||
rweather/Crypto @ ^0.4.0
|
||||
adafruit/RTClib @ ^2.1.3
|
||||
melopero/Melopero RV3028 @ ^1.1.0
|
||||
electroniccats/CayenneLPP @ 1.6.1
|
||||
h2zero/NimBLE-Arduino @ 1.4.3
|
||||
stevemarple/MicroNMEA @ ^2.0.6
|
||||
ESP32Async/ESPAsyncWebServer @ 3.10.3
|
||||
file://arch/esp32/AsyncElegantOTA
|
||||
lvgl/lvgl @ ^8.3.11
|
||||
lovyan03/LovyanGFX @ 1.2.27
|
||||
densaugeo/base64 @ ~1.4.0
|
||||
knolleary/PubSubClient @ ^2.8.0
|
||||
|
||||
[env:tlora_pager_lr1121_companion_radio_touch]
|
||||
platform = platformio/espressif32@6.11.0
|
||||
framework = arduino
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
# beta_96 - chat history keeps saving on busy devices, unread messages under a locked screen, Settings > Device, Lua apps over USB, Blackjack. TEST BUILD.
|
||||
# One user-facing note per non-blank, non-# line; # lines are section comments.
|
||||
# Order: what this build is, the important fix, new things, fixes, for app makers.
|
||||
|
||||
Test build, on top of beta_95. The stable build stays beta_85.
|
||||
|
||||
# --- Important fix ---
|
||||
Chat history keeps saving on a device with a lot of it. Once the history on the card or in the device's storage reached its 24 files, a reboot could leave every new message in memory only, so it was gone after the next restart, without any warning (reported on Discord). Full files are now merged to make room, and a save that cannot land says so. Messages lost before this build cannot be recovered; older history is untouched.
|
||||
Messages that arrive in a chat you left open while the screen is off or locked stay unread, so the lock screen shows them. They count as read once you wake the device and see the chat (reported on Discord).
|
||||
|
||||
# --- New ---
|
||||
Settings opens with a Device page: what this unit is, its radio and hardware, and the About information, with Run setup again and Reboot. The group with Display, Theme, Lock screen, Sound and Keyboard is now called Display & lock (#596 by oumike, asked for by Jess-39).
|
||||
First-time setup keeps Bluetooth on and shows a switch for it (#416, by oumike).
|
||||
T-Display P4: a one-row status bar with the title on the left and the clock beside the icons, and Settings in landscape uses two real columns (by oumike).
|
||||
In a chat, the clock and battery stay at the height they have on every other screen (by oumike).
|
||||
USB Files can put Lua apps on the device: drop a .lua or .json file into the apps folder (meshcomod/apps on the SD card) at files.wadamesh.com, no need to take the card out. It shows up the next time you open the app drawer (asked for on Discord).
|
||||
New in the Store: Blackjack, with split, double down and your bankroll kept between sessions (#681 by halflive-743).
|
||||
The Store now lists more than 16 apps; it stopped at 16 before, so new apps would not have shown up.
|
||||
|
||||
# --- Fixes ---
|
||||
ThinkNode M9 and other keypad boards: Up and Down on a web page scroll the text instead of jumping past it to the toolbar (#680 by oumike, reported by Buko84 in #677).
|
||||
A lock screen PIN with a 0 (or any digit on the Sym layer) can be typed on the T-Deck (#676 by oumike, reported by TerryTel93 in #675).
|
||||
Characters a font cannot draw show as one "*" everywhere, skin-tone modifiers are hidden, and invisible marks in Arabic and Hebrew messages stay invisible (#679 by oumike, reported by neoemit in #673).
|
||||
The chats list shows the double tick as soon as a direct message is delivered (reported by neoemit in #670).
|
||||
ThinkNode M9: the keyboard language code in the chat header no longer sits on top of the GPS icon (reported by neoemit in #672).
|
||||
The contact popup is wider on 320 pixel screens and gives a long name a second line, so with Large Text it no longer runs under the buttons (reported by Danie10 in #668).
|
||||
A lock screen with your own picture is no longer milky: a lighter dark tint and light text on every theme (reported by Flyflinger in #652).
|
||||
Translations: this build's new texts in all 14 languages.
|
||||
|
||||
# --- For app makers ---
|
||||
Canvases larger than 480 pixels are fitted to the screen instead of stopping the app, so apps that size their canvas from on_open work on the T-Display P4, Tanmatsu and CrowPanel 5 (reported on Discord).
|
||||
button:bg(colour) gives a button its own fill colour, and it stays reachable with the keys and trackball (SDK guide).
|
||||
@@ -0,0 +1,14 @@
|
||||
# beta_97 - chat history never drops old messages, Store installs complete, repeater requests answer, CrowPanel Advanced 10.1. TEST BUILD.
|
||||
# One user-facing note per non-blank, non-# line; # lines are section comments.
|
||||
# Order: what this build is, fixes, the new board.
|
||||
|
||||
Test build, on top of beta_96. The stable build stays beta_85.
|
||||
|
||||
# --- Fixes ---
|
||||
Chat history: when the history files can no longer be merged to make room, a new file is opened instead of retiring the oldest one, so no message is ever dropped to keep saving. beta_96 could still lose old messages on devices with a lot of history in many quiet chats. Checked with a simulation of 60,000 messages, constant reboots and power cuts in the middle of a merge.
|
||||
Store installs complete: a downloaded app could land cut off on the SD card, which reported a network error and left an app that failed to start with "syntax error near <eof>" (Blackjack, reported by halflive-743 on Discord). Downloads are now written in pieces, checked on the card and only then installed, so a failed install leaves nothing behind and a failed update keeps the old version.
|
||||
Repeater telemetry and status requests answer: the device now asks directly first, the way the MeshCore app does, and only logs in when that gets no reply. The old order (log in, then ask) got an answer 2 times out of 8 from a repeater next to the device; this build 7 out of 8 (#683, reported by 900steve).
|
||||
Lua apps that save larger files with wada.fs.write no longer risk a file that is cut off on the SD card.
|
||||
|
||||
# --- New board ---
|
||||
Elecrow CrowPanel Advanced 10.1 (ESP32-P4, 1024 by 600) is in the web flasher as an experimental board, with one image per board revision (V1.0, V1.1, V1.2, printed on the board). It needs an SX1262 module in the wireless slot. It has not run on a real unit yet, so please report what works (asked for on Discord).
|
||||
@@ -0,0 +1,22 @@
|
||||
# beta_98 - repeater and room server admin, SenseCAP Indicator, CrowPanel 10.1 touch, OTA and backup fixes, wadamesh in the browser. TEST BUILD.
|
||||
# One user-facing note per non-blank, non-# line; # lines are section comments.
|
||||
# Order: what this build is, new, fixes, boards.
|
||||
|
||||
Test build, on top of beta_97. The stable build stays beta_85.
|
||||
|
||||
# --- New ---
|
||||
Repeater and room server admin: the Admin button on a repeater or room server now opens a full admin app instead of a password box and a raw console. Log in as admin or guest (a remembered password logs in at once), then see the node's status, firmware and owner, its neighbours (newest or strongest), telemetry and the access list, change roles, edit identity and location, radio, repeating and limits, adverts, passwords and regions, and run actions such as an advert, a clock sync, discovering neighbours, resetting counters, a reboot or a firmware update. The old console stays under Advanced.
|
||||
wadamesh in your browser: the same touch UI runs at app.wadamesh.com and drives your own MeshCore node over USB or Bluetooth (Chrome or Edge), or a wadamesh or meshcomod node over Wi-Fi from wifi.app.wadamesh.com. It brings the map, the Store and Lua apps, backups and your device's location, keeps its chats in the browser, and works on phones in portrait. Without a node it runs a demo mesh.
|
||||
Theme: Settings, Theme, Background has a Glass tiles switch (on by default); off draws the Home tiles solid.
|
||||
Large screens in landscape (T-Display P4, Tanmatsu, CrowPanel 5.0 and 10.1): the empty message box is one line tall and grows as you type.
|
||||
|
||||
# --- Fixes ---
|
||||
Firmware updates over Wi-Fi no longer stop at 0 percent and restart the device: the download waited without yielding, so a slow start tripped the task watchdog. It now copies the image in small blocks and gives up cleanly after 15 seconds without data (#689, reported by Hixsten on a T-Deck Plus).
|
||||
Backups get one name, meshcore-backup-<date>, and a device without a set clock never overwrites an earlier backup: it numbers them instead (#688 by oumike, for #686 reported by zomgugoff). On the Tanmatsu the free name is found by opening the file, since its storage reports existing files as missing.
|
||||
T-Display P4: when the Wi-Fi chip stops answering (units running LilyGo's factory ESP-AT image lost Wi-Fi after about an hour, with empty scans and Connect doing nothing), it is now reset and rejoins the network on its own, no reboot needed (#685, reported by william-stearns). Not yet checked on a unit that shows the problem, so please report.
|
||||
Companion sync: a node keeps a sync position for up to 8 apps. When all 8 were taken, a new app was never synced at all; the slot of the app that synced longest ago is now reused.
|
||||
|
||||
# --- Boards ---
|
||||
SenseCAP Indicator D1L is a new board in the web flasher (#682 by Confituurke): the ST7701S screen, FT6336 touch and the SX1262 radio behind the TCA9535 expander. Power off is hidden, as nothing on the board can wake it again.
|
||||
CrowPanel Advanced 10.1: touch works. The SD card driver claimed pin 45, the touch controller's data line, and shut the touch bus down after the first card check. Map tiles are kept on the board's own storage, and the boot is quieter. Still experimental, so please report what works.
|
||||
T-Display P4: Radio settings has "Always use the external antenna (MMCX)", which asks first with a warning, and the control panel has an Antenna tile.
|
||||