mirror of
https://github.com/meshtastic/meshtastic.git
synced 2025-03-05 21:00:08 -08:00
Merge branch 'master' into patch-2
This commit is contained in:
commit
ea894cffa7
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
|
@ -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:
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
"ignoreUnknown": true
|
"ignoreUnknown": true,
|
||||||
|
"ignore": ["*.json"]
|
||||||
},
|
},
|
||||||
"vcs": {
|
"vcs": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
|
|
|
@ -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/)
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
:::
|
:::
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React from "react";
|
import type React from "react";
|
||||||
|
|
||||||
import Layout from "@theme/Layout";
|
import Layout from "@theme/Layout";
|
||||||
|
|
||||||
|
|
|
@ -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";
|
||||||
|
|
||||||
|
|
|
@ -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} />
|
||||||
|
|
|
@ -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"> </a>
|
<span className="button disabled button--primary button--block" href="#">
|
||||||
|
|
||||||
|
</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" />
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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[] = [
|
||||||
{
|
{
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 =
|
||||||
|
|
|
@ -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}"],
|
||||||
|
|
|
@ -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/"
|
||||||
|
|
Loading…
Reference in a new issue