Merge branch 'master' into patch-2

This commit is contained in:
Ben Meadors 2024-02-10 08:59:47 -06:00 committed by GitHub
commit ea894cffa7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
25 changed files with 322 additions and 295 deletions

View file

@ -19,7 +19,7 @@ jobs:
version: latest version: latest
- name: Run Biome - name: Run Biome
run: biome ci . run: biome ci . --diagnostic-level=error
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:

View file

@ -4,7 +4,8 @@
"enabled": true "enabled": true
}, },
"files": { "files": {
"ignoreUnknown": true "ignoreUnknown": true,
"ignore": ["*.json"]
}, },
"vcs": { "vcs": {
"enabled": true, "enabled": true,

View file

@ -21,6 +21,10 @@ us on [Discord](https://discord.com/invite/ktMAKGBnBs) to add your group.
- [YYC Mesh](https://yycmesh.com/) - [YYC Mesh](https://yycmesh.com/)
## United States ## United States
### Arkansas
- [Fort Smith Mesh](https://discord.com/invite/nwsvcXeqMX)
### California ### California
- [SoCal Mesh](https://socalmesh.org) - [SoCal Mesh](https://socalmesh.org)
- [Laguna Mesh](https://lagunamesh.com) - [Laguna Mesh](https://lagunamesh.com)
@ -28,6 +32,9 @@ us on [Discord](https://discord.com/invite/ktMAKGBnBs) to add your group.
- [Bay Area Mesh](https://canvis.app/z2k8a8) - [Bay Area Mesh](https://canvis.app/z2k8a8)
- [San Diego Mesh](https://discord.gg/HzE248x2) - [San Diego Mesh](https://discord.gg/HzE248x2)
### Colorado
- [Denver Mesh](https://denvermesh.org)
### Hawaii ### Hawaii
- [Hawaii Meshnet](https://www.hawaiimesh.net/) - [Hawaii Meshnet](https://www.hawaiimesh.net/)

View file

@ -23,7 +23,7 @@ Enables the canned message module.
Sends a bell character with each message. Sends a bell character with each message.
The [External Notification Module](external-notification) can be set up to beep when a new message arrives. The [External Notification Module](external-notification.mdx) can be set up to beep when a new message arrives.
This module can also be configured to beep only when a message contains the bell character. This module can also be configured to beep only when a message contains the bell character.
### Messages ### Messages

View file

@ -65,5 +65,5 @@ This configures the frequency the radio is set to. Check out the [frequency cal
- If you are part of a large mesh and don't know what a setting does, don't change it (unless you're super curious). - If you are part of a large mesh and don't know what a setting does, don't change it (unless you're super curious).
- Leave your [MAX HOPS](/docs/configuration/radio/lora#max-hops) set to 3 unless you're sure you need more (or less) to reach your destination node. - Leave your [MAX HOPS](/docs/configuration/radio/lora#max-hops) set to 3 unless you're sure you need more (or less) to reach your destination node.
- TEST your settings and hardware before you install in hard-to-reach locations. - TEST your settings and hardware before you install in hard-to-reach locations.
- Connecting a node to the [public MQTT server](./module/mqtt#connect-to-the-default-public-server) may publish the locations of all nodes in your mesh to the internet. This will also add every globally connected node to your node database and potentially flood your mesh with all types of packets. - Connecting a node to the [public MQTT server](/docs/configuration/module/mqtt#connect-to-the-default-public-server) may publish the locations of all nodes in your mesh to the internet. This will also add every globally connected node to your node database and potentially flood your mesh with all types of packets.

View file

@ -12,7 +12,7 @@ import Link from "@docusaurus/Link";
## Flash Firmware ## Flash Firmware
:::info :::info
You may now use the [Meshtastic Web Flasher](https://flasher.mesthastic.org) to download and copy firmware to your nRF52 or RP2040-based devices. Alternatively, follow the instructions below to download and install firmware. You may now use the [Meshtastic Web Flasher](https://flasher.meshtastic.org) to download and copy firmware to your nRF52 or RP2040-based devices. Alternatively, follow the instructions below to download and install firmware.
::: :::
### nRF52 ### nRF52

View file

@ -10,7 +10,7 @@ import Link from "@docusaurus/Link";
Meshtastic uses the [littlefs](https://github.com/littlefs-project/littlefs) library to store configuration, logs, and other data in the internal flash of nRF52 & RP2040 devices. Updating the firmware does _not_ erase this additional data, which can cause issues when the format and location of data changes between releases. Meshtastic uses the [littlefs](https://github.com/littlefs-project/littlefs) library to store configuration, logs, and other data in the internal flash of nRF52 & RP2040 devices. Updating the firmware does _not_ erase this additional data, which can cause issues when the format and location of data changes between releases.
:::info :::info
You may now use the [Meshtastic Web Flasher](https://flasher.mesthastic.org) to Factory Erase your nRF52 or RP2040-based devices. Visit the flasher, select your board, and click the trash can icon to the right of the Flash button. This will open a dialogue to begin the erase procedure. You may now use the [Meshtastic Web Flasher](https://flasher.meshtastic.org) to Factory Erase your nRF52 or RP2040-based devices. Visit the flasher, select your board, and click the trash can icon to the right of the Flash button. This will open a dialogue to begin the erase procedure.
Alternatively, follow the instructions below. Alternatively, follow the instructions below.
::: :::

View file

@ -13,3 +13,4 @@ sidebar_position: 1
- **Long press:** Will signal the device to shutdown after 5 seconds. - **Long press:** Will signal the device to shutdown after 5 seconds.
- **Single press:** Changes the information page displayed on the device's screen. - **Single press:** Changes the information page displayed on the device's screen.
- **Double press:** Sends an adhoc ping of the device's position to the network. - **Double press:** Sends an adhoc ping of the device's position to the network.
- **Triple press:** Enables/Disables the GPS Module on demand. If an NPN Transistor is added it will cut power to the GPS board. The NPN pin must be configured on the PIN_GPS_EN inside the Position module in the App for this switching to work.

View file

@ -119,6 +119,8 @@ The RAK11200 does not contain a LoRa transceiver, and thus needs to be added sep
- International - International
- [RAK Wireless Store](https://store.rakwireless.com/products/wiscore-esp32-module-rak11200) - [RAK Wireless Store](https://store.rakwireless.com/products/wiscore-esp32-module-rak11200)
- [RAK Wireless Aliexpress](https://www.aliexpress.us/item/3256802312474717.html) - [RAK Wireless Aliexpress](https://www.aliexpress.us/item/3256802312474717.html)
- US
- [Rokland](https://store.rokland.com/products/rakwireless-rak11200-wifi-and-ble-espressif-esp32-wrover-pid-110023)
<img <img
alt="RAK4631 5005 11200" alt="RAK4631 5005 11200"

View file

@ -24,4 +24,6 @@ Please see the RAK documentation for the correct way to connect your hardware to
- RAK's [GitHub Page](https://github.com/RAKWireless/WisBlock) for the WisBlock - RAK's [GitHub Page](https://github.com/RAKWireless/WisBlock) for the WisBlock
- Purchase links - Purchase links
- See purchase links under specific base boards, core modules, and peripherals - See purchase links under specific base boards, core modules, and peripherals
- US Distributor [RAK Wireless Starter Kit](https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit) - China RAK Direct [RAK Wireless Starter Kit w/ Gen2 Base board](https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit)
- US Distributor Rokland [RAK Wireless Starter Kit w/ Gen2 Base board](https://store.rokland.com/products/rak-wireless-wisblock-meshtastic-starter-kit)
- US Distributor Rokland [RAK Wireless Starter Kit w/ Gen1 Base board](https://store.rokland.com/products/rakwireless-meshtastic-starter-kit-alternative-with-rak5005-o-base)

View file

@ -9,6 +9,7 @@ const config = {
"An open source, off-grid, decentralized, mesh network built to run on affordable, low-power devices", "An open source, off-grid, decentralized, mesh network built to run on affordable, low-power devices",
url: "https://meshtastic.org", url: "https://meshtastic.org",
baseUrl: "/", baseUrl: "/",
trailingSlash: true,
onBrokenLinks: "throw", onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn", onBrokenMarkdownLinks: "warn",
favicon: "design/web/favicon.ico", favicon: "design/web/favicon.ico",

View file

@ -33,7 +33,7 @@
"tailwindcss": "^3.4.1" "tailwindcss": "^3.4.1"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^1.5.0", "@biomejs/biome": "^1.5.3",
"@buf/meshtastic_protobufs.bufbuild_es": "1.6.0-20240106203407-94f78518ac45.1", "@buf/meshtastic_protobufs.bufbuild_es": "1.6.0-20240106203407-94f78518ac45.1",
"@docusaurus/module-type-aliases": "3.1.0", "@docusaurus/module-type-aliases": "3.1.0",
"@tailwindcss/typography": "^0.5.10", "@tailwindcss/typography": "^0.5.10",

View file

@ -65,8 +65,8 @@ dependencies:
devDependencies: devDependencies:
'@biomejs/biome': '@biomejs/biome':
specifier: ^1.5.0 specifier: ^1.5.3
version: 1.5.0 version: 1.5.3
'@buf/meshtastic_protobufs.bufbuild_es': '@buf/meshtastic_protobufs.bufbuild_es':
specifier: 1.6.0-20240106203407-94f78518ac45.1 specifier: 1.6.0-20240106203407-94f78518ac45.1
version: 1.6.0-20240106203407-94f78518ac45.1(@bufbuild/protobuf@1.6.0) version: 1.6.0-20240106203407-94f78518ac45.1(@bufbuild/protobuf@1.6.0)
@ -1551,24 +1551,24 @@ packages:
to-fast-properties: 2.0.0 to-fast-properties: 2.0.0
dev: false dev: false
/@biomejs/biome@1.5.0: /@biomejs/biome@1.5.3:
resolution: {integrity: sha512-ln+o5jbs109qpeDoA+5n+vlAPai3DhlK0tHtZXzQvu4tswFgxNiJCeIXmlW1DYHziTmtBImV3Y0uhbm2iVSE3Q==} resolution: {integrity: sha512-yvZCa/g3akwTaAQ7PCwPWDCkZs3Qa5ONg/fgOUT9e6wAWsPftCjLQFPXBeGxPK30yZSSpgEmRCfpGTmVbUjGgg==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
hasBin: true hasBin: true
requiresBuild: true requiresBuild: true
optionalDependencies: optionalDependencies:
'@biomejs/cli-darwin-arm64': 1.5.0 '@biomejs/cli-darwin-arm64': 1.5.3
'@biomejs/cli-darwin-x64': 1.5.0 '@biomejs/cli-darwin-x64': 1.5.3
'@biomejs/cli-linux-arm64': 1.5.0 '@biomejs/cli-linux-arm64': 1.5.3
'@biomejs/cli-linux-arm64-musl': 1.5.0 '@biomejs/cli-linux-arm64-musl': 1.5.3
'@biomejs/cli-linux-x64': 1.5.0 '@biomejs/cli-linux-x64': 1.5.3
'@biomejs/cli-linux-x64-musl': 1.5.0 '@biomejs/cli-linux-x64-musl': 1.5.3
'@biomejs/cli-win32-arm64': 1.5.0 '@biomejs/cli-win32-arm64': 1.5.3
'@biomejs/cli-win32-x64': 1.5.0 '@biomejs/cli-win32-x64': 1.5.3
dev: true dev: true
/@biomejs/cli-darwin-arm64@1.5.0: /@biomejs/cli-darwin-arm64@1.5.3:
resolution: {integrity: sha512-3+D7axf04dpadGMOaqb2q+zyQnhWW0o/Imt7TJBWsoE0N3/+28Wht8g3UEHHcUL5FPuGIfsE+NcYntBaaAsEIg==} resolution: {integrity: sha512-ImU7mh1HghEDyqNmxEZBoMPr8SxekkZuYcs+gynKlNW+TALQs7swkERiBLkG9NR0K1B3/2uVzlvYowXrmlW8hw==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@ -1576,8 +1576,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@biomejs/cli-darwin-x64@1.5.0: /@biomejs/cli-darwin-x64@1.5.3:
resolution: {integrity: sha512-8k5aaLWE/B6ZAXLC+z/Vwh9ogyiSaiRIfvg+F9foxuneHl2R/D/2Iy7pvd3Yoi4Kf6/MBdowekPVezGP4/Kbcw==} resolution: {integrity: sha512-vCdASqYnlpq/swErH7FD6nrFz0czFtK4k/iLgj0/+VmZVjineFPgevOb+Sr9vz0tk0GfdQO60bSpI74zU8M9Dw==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@ -1585,8 +1585,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@biomejs/cli-linux-arm64-musl@1.5.0: /@biomejs/cli-linux-arm64-musl@1.5.3:
resolution: {integrity: sha512-+1B3J8tWLTOvP3+00Cap+XhEXMvxwCHvVfuywUsB7Sqd66NWic3wKJuGbGcS3PuCWtGuIFsiQMNAGqiOXG4uBQ==} resolution: {integrity: sha512-DYuMizUYUBYfS0IHGjDrOP1RGipqWfMGEvNEJ398zdtmCKLXaUvTimiox5dvx4X15mBK5M2m8wgWUgOP1giUpQ==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -1594,8 +1594,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@biomejs/cli-linux-arm64@1.5.0: /@biomejs/cli-linux-arm64@1.5.3:
resolution: {integrity: sha512-RiecxG71E1jnqiJZ3FaikVBDRkk2ohIxBo0O4o68g87y6Hug//G0S83sj6Wqyn8DgKMCRWQg+XYMgk5CwLVowA==} resolution: {integrity: sha512-cupBQv0sNF1OKqBfx7EDWMSsKwRrBUZfjXawT4s6hKV6ALq7p0QzWlxr/sDmbKMLOaLQtw2Qgu/77N9rm+f9Rg==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -1603,8 +1603,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@biomejs/cli-linux-x64-musl@1.5.0: /@biomejs/cli-linux-x64-musl@1.5.3:
resolution: {integrity: sha512-4S2rLluc0WT+XTbLTgcm9+5EEFwJmoGiUEzR6N0P2sIjZD8c5KNf9Ou46BP1Pdg5AgqV+IIClGPK1I80ApSh1Q==} resolution: {integrity: sha512-UUHiAnlDqr2Y/LpvshBFhUYMWkl2/Jn+bi3U6jKuav0qWbbBKU/ByHgR4+NBxpKBYoCtWxhnmatfH1bpPIuZMw==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@ -1612,8 +1612,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@biomejs/cli-linux-x64@1.5.0: /@biomejs/cli-linux-x64@1.5.3:
resolution: {integrity: sha512-TlTsG+ptSmnDTUsAAYsXyGOXMcFiF8SiwhPdj4YsNkJRgx9M2curEVcTVm66FINIPK6VJTUcEDahFlx3NPUOzA==} resolution: {integrity: sha512-YQrSArQvcv4FYsk7Q91Yv4uuu5F8hJyORVcv3zsjCLGkjIjx2RhjYLpTL733SNL7v33GmOlZY0eFR1ko38tuUw==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@ -1621,8 +1621,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@biomejs/cli-win32-arm64@1.5.0: /@biomejs/cli-win32-arm64@1.5.3:
resolution: {integrity: sha512-sWOi1SR+YqJuXElBncGRnWBR7IN7ni6GQY4Zm/vTpP6nVA0dX5C301eQUW1N/VnFQb6fyrJTcBslDUKyemsN/g==} resolution: {integrity: sha512-HxatYH7vf/kX9nrD+pDYuV2GI9GV8EFo6cfKkahAecTuZLPxryHx1WEfJthp5eNsE0+09STGkKIKjirP0ufaZA==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
@ -1630,8 +1630,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@biomejs/cli-win32-x64@1.5.0: /@biomejs/cli-win32-x64@1.5.3:
resolution: {integrity: sha512-OoqgUXyzmRwX466bklOsWS7WdcvWtBuxF94DXATNe7bUiBa2tlW8QX7VVZvPnMKH57E5J619AkB3b5fhzyUhXA==} resolution: {integrity: sha512-fMvbSouZEASU7mZH8SIJSANDm5OqsjgtVXlbUqxwed6BP7uuHRSs396Aqwh2+VoW8fwTpp6ybIUoC9FrzB0kyA==}
engines: {node: '>=14.*'} engines: {node: '>=14.*'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]

View file

@ -1,4 +1,4 @@
import React from "react"; import type React from "react";
export interface ColorModeProps { export interface ColorModeProps {
children: React.ReactNode; children: React.ReactNode;

View file

@ -1,4 +1,4 @@
import React from "react"; import type React from "react";
import Layout from "@theme/Layout"; import Layout from "@theme/Layout";

View file

@ -1,4 +1,4 @@
import React from "react"; import type React from "react";
import { FiExternalLink } from "react-icons/fi"; import { FiExternalLink } from "react-icons/fi";

View file

@ -1,12 +1,12 @@
import { Protobuf, Types } from "@meshtastic/js"; import { Protobuf, Types } from "@meshtastic/js";
import React, { useEffect } from "react"; import React, { useEffect, useState } from "react";
interface Region { interface Region {
freq_start: number; freqStart: number;
freq_end: number; freqEnd: number;
duty_cycle: number; dutyCycle: number;
spacing: number; spacing: number;
power_limit: number; powerLimit: number;
} }
interface Modem { interface Modem {
@ -22,181 +22,181 @@ const RegionData = new Map<
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.US, Protobuf.Config.Config_LoRaConfig_RegionCode.US,
{ {
freq_start: 902.0, freqStart: 902.0,
freq_end: 928.0, freqEnd: 928.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 30, powerLimit: 30,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.EU_433, Protobuf.Config.Config_LoRaConfig_RegionCode.EU_433,
{ {
freq_start: 433.0, freqStart: 433.0,
freq_end: 434.0, freqEnd: 434.0,
duty_cycle: 10, dutyCycle: 10,
spacing: 0, spacing: 0,
power_limit: 12, powerLimit: 12,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.EU_868, Protobuf.Config.Config_LoRaConfig_RegionCode.EU_868,
{ {
freq_start: 869.4, freqStart: 869.4,
freq_end: 869.65, freqEnd: 869.65,
duty_cycle: 10, dutyCycle: 10,
spacing: 0, spacing: 0,
power_limit: 27, powerLimit: 27,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.CN, Protobuf.Config.Config_LoRaConfig_RegionCode.CN,
{ {
freq_start: 470.0, freqStart: 470.0,
freq_end: 510.0, freqEnd: 510.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 19, powerLimit: 19,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.JP, Protobuf.Config.Config_LoRaConfig_RegionCode.JP,
{ {
freq_start: 920.8, freqStart: 920.8,
freq_end: 927.8, freqEnd: 927.8,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 16, powerLimit: 16,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.ANZ, Protobuf.Config.Config_LoRaConfig_RegionCode.ANZ,
{ {
freq_start: 915.0, freqStart: 915.0,
freq_end: 928.0, freqEnd: 928.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 30, powerLimit: 30,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.RU, Protobuf.Config.Config_LoRaConfig_RegionCode.RU,
{ {
freq_start: 868.7, freqStart: 868.7,
freq_end: 869.2, freqEnd: 869.2,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 20, powerLimit: 20,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.KR, Protobuf.Config.Config_LoRaConfig_RegionCode.KR,
{ {
freq_start: 920.0, freqStart: 920.0,
freq_end: 923.0, freqEnd: 923.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 0, powerLimit: 0,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.TW, Protobuf.Config.Config_LoRaConfig_RegionCode.TW,
{ {
freq_start: 920.0, freqStart: 920.0,
freq_end: 925.0, freqEnd: 925.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 0, powerLimit: 0,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.IN, Protobuf.Config.Config_LoRaConfig_RegionCode.IN,
{ {
freq_start: 865.0, freqStart: 865.0,
freq_end: 867.0, freqEnd: 867.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 30, powerLimit: 30,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.NZ_865, Protobuf.Config.Config_LoRaConfig_RegionCode.NZ_865,
{ {
freq_start: 864.0, freqStart: 864.0,
freq_end: 868.0, freqEnd: 868.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 36, powerLimit: 36,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.TH, Protobuf.Config.Config_LoRaConfig_RegionCode.TH,
{ {
freq_start: 920.0, freqStart: 920.0,
freq_end: 925.0, freqEnd: 925.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 16, powerLimit: 16,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.UA_433, Protobuf.Config.Config_LoRaConfig_RegionCode.UA_433,
{ {
freq_start: 433.0, freqStart: 433.0,
freq_end: 434.7, freqEnd: 434.7,
duty_cycle: 10, dutyCycle: 10,
spacing: 0, spacing: 0,
power_limit: 10, powerLimit: 10,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.UA_868, Protobuf.Config.Config_LoRaConfig_RegionCode.UA_868,
{ {
freq_start: 868.0, freqStart: 868.0,
freq_end: 868.6, freqEnd: 868.6,
duty_cycle: 1, dutyCycle: 1,
spacing: 0, spacing: 0,
power_limit: 14, powerLimit: 14,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.MY_433, Protobuf.Config.Config_LoRaConfig_RegionCode.MY_433,
{ {
freq_start: 433.0, freqStart: 433.0,
freq_end: 435.0, freqEnd: 435.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 20, powerLimit: 20,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.MY_919, Protobuf.Config.Config_LoRaConfig_RegionCode.MY_919,
{ {
freq_start: 919.0, freqStart: 919.0,
freq_end: 924.0, freqEnd: 924.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 27, powerLimit: 27,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.LORA_24, Protobuf.Config.Config_LoRaConfig_RegionCode.LORA_24,
{ {
freq_start: 2400.0, freqStart: 2400.0,
freq_end: 2483.5, freqEnd: 2483.5,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 10, powerLimit: 10,
}, },
], ],
[ [
Protobuf.Config.Config_LoRaConfig_RegionCode.UNSET, Protobuf.Config.Config_LoRaConfig_RegionCode.UNSET,
{ {
freq_start: 902.0, freqStart: 902.0,
freq_end: 928.0, freqEnd: 928.0,
duty_cycle: 100, dutyCycle: 100,
spacing: 0, spacing: 0,
power_limit: 30, powerLimit: 30,
}, },
], ],
]); ]);
@ -273,24 +273,24 @@ const modemPresets = new Map<
export const FrequencyCalculator = (): JSX.Element => { export const FrequencyCalculator = (): JSX.Element => {
const [modemPreset, setModemPreset] = const [modemPreset, setModemPreset] =
React.useState<Protobuf.Config.Config_LoRaConfig_ModemPreset>( useState<Protobuf.Config.Config_LoRaConfig_ModemPreset>(
Protobuf.Config.Config_LoRaConfig_ModemPreset.LONG_FAST, Protobuf.Config.Config_LoRaConfig_ModemPreset.LONG_FAST,
); );
const [region, setRegion] = const [region, setRegion] =
React.useState<Protobuf.Config.Config_LoRaConfig_RegionCode>( useState<Protobuf.Config.Config_LoRaConfig_RegionCode>(
Protobuf.Config.Config_LoRaConfig_RegionCode.US, Protobuf.Config.Config_LoRaConfig_RegionCode.US,
); );
const [channel, setChannel] = React.useState<Types.ChannelNumber>( const [channel, setChannel] = useState<Types.ChannelNumber>(
Types.ChannelNumber.PRIMARY, Types.ChannelNumber.Primary,
); );
const [numChannels, setNumChannels] = React.useState<number>(0); const [numChannels, setNumChannels] = useState<number>(0);
const [channelFrequency, setChannelFrequency] = React.useState<number>(0); const [channelFrequency, setChannelFrequency] = useState<number>(0);
useEffect(() => { useEffect(() => {
const selectedRegion = RegionData.get(region); const selectedRegion = RegionData.get(region);
const selectedModemPreset = modemPresets.get(modemPreset); const selectedModemPreset = modemPresets.get(modemPreset);
const calculatedNumChannels = Math.floor( const calculatedNumChannels = Math.floor(
(selectedRegion.freq_end - selectedRegion.freq_start) / (selectedRegion.freqEnd - selectedRegion.freqStart) /
(selectedRegion.spacing + selectedModemPreset.bw / 1000), (selectedRegion.spacing + selectedModemPreset.bw / 1000),
); );
@ -304,7 +304,7 @@ export const FrequencyCalculator = (): JSX.Element => {
setChannel(updatedChannel); setChannel(updatedChannel);
setChannelFrequency( setChannelFrequency(
selectedRegion.freq_start + selectedRegion.freqStart +
selectedModemPreset.bw / 2000 + selectedModemPreset.bw / 2000 +
updatedChannel * (selectedModemPreset.bw / 1000), updatedChannel * (selectedModemPreset.bw / 1000),
); );
@ -318,7 +318,7 @@ export const FrequencyCalculator = (): JSX.Element => {
value={modemPreset} value={modemPreset}
onChange={(e) => onChange={(e) =>
setModemPreset( setModemPreset(
parseInt( Number.parseInt(
e.target.value, e.target.value,
) as Protobuf.Config.Config_LoRaConfig_ModemPreset, ) as Protobuf.Config.Config_LoRaConfig_ModemPreset,
) )
@ -335,7 +335,7 @@ export const FrequencyCalculator = (): JSX.Element => {
<label>Region:</label> <label>Region:</label>
<select <select
value={region} value={region}
onChange={(e) => setRegion(parseInt(e.target.value))} onChange={(e) => setRegion(Number.parseInt(e.target.value))}
> >
{Array.from(RegionData.keys()).map((key) => ( {Array.from(RegionData.keys()).map((key) => (
<option key={key} value={key}> <option key={key} value={key}>
@ -344,11 +344,17 @@ export const FrequencyCalculator = (): JSX.Element => {
))} ))}
</select> </select>
</div> </div>
<div className="flex gap-2 mb-4">
<label className="font-semibold">Number of channels:</label>
<input type="number" disabled={true} value={numChannels} />
</div>
<div className="flex gap-2"> <div className="flex gap-2">
<label>Channel:</label> <label>Channel:</label>
<select <select
value={channel} value={channel}
onChange={(e) => setChannel(parseInt(e.target.value))} onChange={(e) => setChannel(Number.parseInt(e.target.value))}
> >
{Array.from(Array(numChannels).keys()).map((key) => ( {Array.from(Array(numChannels).keys()).map((key) => (
<option key={key} value={key}> <option key={key} value={key}>
@ -358,10 +364,6 @@ export const FrequencyCalculator = (): JSX.Element => {
</select> </select>
</div> </div>
<div className="flex gap-2">
<label className="font-semibold">Number of channels:</label>
<input type="number" disabled={true} value={numChannels} />
</div>
<div className="flex gap-2"> <div className="flex gap-2">
<label className="font-semibold">Channel Frequency:</label> <label className="font-semibold">Channel Frequency:</label>
<input type="number" disabled={true} value={channelFrequency} /> <input type="number" disabled={true} value={channelFrequency} />

View file

@ -1,4 +1,4 @@
import { DeviceFirmwareResource } from "../../../utils/apiTypes"; import type { DeviceFirmwareResource } from "../../../utils/apiTypes";
export interface releaseCardProps { export interface releaseCardProps {
variant: string; variant: string;
@ -66,7 +66,9 @@ export const PlaceholderFirmwareCard = (): JSX.Element => {
<div className="rounded-md bg-gray-500 w-32 h-4" /> <div className="rounded-md bg-gray-500 w-32 h-4" />
</div> </div>
<div className="card__body rounded-md bg-gray-500 h-12" /> <div className="card__body rounded-md bg-gray-500 h-12" />
<a className="button disabled button--primary button--block">&nbsp;</a> <span className="button disabled button--primary button--block" href="#">
&nbsp;
</span>
<div className="rounded-md bg-gray-500 w-32 h-8" /> <div className="rounded-md bg-gray-500 w-32 h-8" />
<div className="rounded-md bg-gray-500 w-44 h-4" /> <div className="rounded-md bg-gray-500 w-44 h-4" />
<div className="rounded-md bg-gray-500 w-36 h-4" /> <div className="rounded-md bg-gray-500 w-36 h-4" />

View file

@ -10,7 +10,7 @@ import {
} from "@heroicons/react/24/solid"; } from "@heroicons/react/24/solid";
import Layout from "@theme/Layout"; import Layout from "@theme/Layout";
import { FirmwareReleases } from "../../utils/apiTypes"; import type { FirmwareReleases } from "../../utils/apiTypes";
import { fetcher } from "../../utils/swr"; import { fetcher } from "../../utils/swr";
import { import {
FirmwareCard, FirmwareCard,
@ -63,7 +63,8 @@ const Firmware = (): JSX.Element => {
<div className="card__body"> <div className="card__body">
<p> <p>
Devices such as T-Echo, RAK4631, and RAK11300 are flashed via Devices such as T-Echo, RAK4631, and RAK11300 are flashed via
filesystem. Use the web flasher to download applicable firmware. filesystem. Use the web flasher to download applicable
firmware.
</p> </p>
</div> </div>
<div className="card__footer mt-auto"> <div className="card__footer mt-auto">

View file

@ -4,7 +4,10 @@ import useBaseUrl from "@docusaurus/useBaseUrl";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import Layout from "@theme/Layout"; import Layout from "@theme/Layout";
import { SocialCard, SocialCardProps } from "../components/homepage/SocialCard"; import {
SocialCard,
type SocialCardProps,
} from "../components/homepage/SocialCard";
const SocialCards: SocialCardProps[] = [ const SocialCards: SocialCardProps[] = [
{ {

View file

@ -85,7 +85,7 @@ const OEM = (): JSX.Element => {
<span>Font</span> <span>Font</span>
<select <select
onChange={(e) => { onChange={(e) => {
setOemFont(parseInt(e.target.value)); setOemFont(Number.parseInt(e.target.value));
}} }}
> >
{enumOptions.map(([name, value]) => ( {enumOptions.map(([name, value]) => (
@ -102,7 +102,7 @@ const OEM = (): JSX.Element => {
readFile(e.target.files[0]).then((data) => { readFile(e.target.files[0]).then((data) => {
setOemIconBits( setOemIconBits(
new Uint8Array( new Uint8Array(
data.split(",").map((s) => parseInt(s.trim(), 16)), data.split(",").map((s) => Number.parseInt(s.trim(), 16)),
), ),
); );
}); });
@ -113,7 +113,7 @@ const OEM = (): JSX.Element => {
type="number" type="number"
name="oemIconHeight" name="oemIconHeight"
onChange={(e) => { onChange={(e) => {
setOemIconHeight(parseInt(e.target.value)); setOemIconHeight(Number.parseInt(e.target.value));
}} }}
/> />
<span>Logo Width</span> <span>Logo Width</span>
@ -121,7 +121,7 @@ const OEM = (): JSX.Element => {
type="number" type="number"
name="oemIconWidth" name="oemIconWidth"
onChange={(e) => { onChange={(e) => {
setOemIconWidth(parseInt(e.target.value)); setOemIconWidth(Number.parseInt(e.target.value));
}} }}
/> />
<span>Boot Text</span> <span>Boot Text</span>
@ -132,7 +132,7 @@ const OEM = (): JSX.Element => {
setOemText(e.target.value); setOemText(e.target.value);
}} }}
/> />
<a <button
className="cursor-pointer rounded-md bg-tertiary p-2 hover:brightness-90" className="cursor-pointer rounded-md bg-tertiary p-2 hover:brightness-90"
download="OEM.bin" download="OEM.bin"
onClick={() => { onClick={() => {
@ -141,9 +141,10 @@ const OEM = (): JSX.Element => {
}); });
window.open(URL.createObjectURL(blob)); window.open(URL.createObjectURL(blob));
}} }}
type="button"
> >
Download Download
</a> </button>
{oemBytes.toString()} {oemBytes.toString()}
</div> </div>
</Layout> </Layout>

View file

@ -5,10 +5,10 @@ export default function calculateADC() {
const batFullPercent = 1; const batFullPercent = 1;
//variable //variable
const batteryChargePercent = const batteryChargePercent =
parseFloat( Number.parseFloat(
(<HTMLInputElement>document.getElementById("batteryChargePercent")).value, (<HTMLInputElement>document.getElementById("batteryChargePercent")).value,
) / 100; ) / 100;
const operativeAdcMultiplier = parseFloat( const operativeAdcMultiplier = Number.parseFloat(
(<HTMLInputElement>document.getElementById("operativeAdcMultiplier")).value, (<HTMLInputElement>document.getElementById("operativeAdcMultiplier")).value,
); );
const result = const result =

View file

@ -1,5 +1,5 @@
import typography from "@tailwindcss/typography";
import type { Config } from "tailwindcss"; import type { Config } from "tailwindcss";
import typography from '@tailwindcss/typography'
export default { export default {
content: ["./src/**/*.{js,jsx,ts,tsx}"], content: ["./src/**/*.{js,jsx,ts,tsx}"],

View file

@ -57,6 +57,10 @@
"source": "/docs/software/mqtt/", "source": "/docs/software/mqtt/",
"destination": "/docs/software/integrations/mqtt" "destination": "/docs/software/integrations/mqtt"
}, },
{
"source": "/docs/software/mqtt/:path*/",
"destination": "/docs/software/integrations/mqtt/:path*/"
},
{ {
"source": "/docs/getting-started/faq", "source": "/docs/getting-started/faq",
"destination": "/docs/faq/" "destination": "/docs/faq/"