Merge branch 'meshtastic:master' into master

This commit is contained in:
sigmahour 2022-11-01 12:00:37 -04:00 committed by GitHub
commit 46ed0766b5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 206 additions and 177 deletions

View file

@ -24,7 +24,7 @@ The 4 byte header is constructed to both provide framing and to not look line 'n
- Byte 2: MSB of protobuf length - Byte 2: MSB of protobuf length
- Byte 3: LSB of protobuf length - Byte 3: LSB of protobuf length
The receiver will validate length and if >512 it will assume the packet is corrupted and return to looking for START1. While looking for START1 any other characters are printed as "debug output". For small example implementation of this reader see the meshtastic-python implementation. The receiver will validate length and if >512 it will assume the packet is corrupted and return to looking for START1. While looking for START1 any other characters are printed as "debug output". For small example implementation of this reader see the python implementation.
## MeshBluetoothService (the BLE API) ## MeshBluetoothService (the BLE API)

View file

@ -82,8 +82,9 @@ If the message received contains valid JSON in the payload, the JSON is deserial
Check out [MQTT Settings](/docs/settings/moduleconfig/mqtt) for full information. For quick start instructions, read on. Check out [MQTT Settings](/docs/settings/moduleconfig/mqtt) for full information. For quick start instructions, read on.
- Connect your gateway node to wifi, by setting the `wifi_ssid` and `wifi_password` preferences. - Connect your gateway node to wifi, by setting the `network.wifi_ssid`, `network.wifi_psk` and `network.wifi_enabled` preferences.
- Configure your broker settings: `mqtt_server`, `mqtt_username`, and `mqtt_password`. If all are left blank, the device will connect to the Meshtastic broker. - Alternatively use the RAK4631 with Ethernet Module RAK13800, by setting `network.eth_mode` and `network.eth_enabled`.
- Configure your broker settings: `mqtt.address`, `mqtt.username`, and `mqtt.password`. If all are left blank, the device will connect to the Meshtastic broker.
- Set `uplink_enabled` and `downlink_enabled` as appropriate for each channel. Most users will just have a single channel (at channel index 0). `meshtastic --ch-index 0 --ch-set uplink_enabled true` - Set `uplink_enabled` and `downlink_enabled` as appropriate for each channel. Most users will just have a single channel (at channel index 0). `meshtastic --ch-index 0 --ch-set uplink_enabled true`
`uplink_enabled` will tell the device to publish mesh packets to MQTT. `uplink_enabled` will tell the device to publish mesh packets to MQTT.

View file

@ -41,7 +41,7 @@ meshtastic --setlat 25.2 --setlon -16.8 --setalt 120
Or to configure an ESP32 based board to join a Wifi network as a station: Or to configure an ESP32 based board to join a Wifi network as a station:
```shell ```shell
meshtastic --set network.wifi_ssid mywifissid --set network.wifi_psk mywifipsw meshtastic --set network.wifi_ssid mywifissid --set network.wifi_psk mywifipsw --set network.wifi_enabled 1
``` ```
:::note :::note

View file

@ -15,6 +15,11 @@ const config = {
organizationName: 'meshtastic', organizationName: 'meshtastic',
projectName: 'meshtastic', projectName: 'meshtastic',
themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ { themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ {
announcementBar: {
id: '2_0',
content:
'🎉 Meshtastic 2.0 Has Now Launched! Check it Out <a href="/2.0">Here</a> 🎉',
},
colorMode: { colorMode: {
respectPrefersColorScheme: true, respectPrefersColorScheme: true,
}, },
@ -64,7 +69,7 @@ const config = {
], ],
}, },
footer: { footer: {
copyright: `<a href="https://vercel.com/?utm_source=meshtastic&utm_campaign=oss">Powered by ▲ Vercel</a> | Meshtastic® is a registered trademark of Geeksville Industries LLC. | <a href="/docs/legal">Legal Information</a>.`, copyright: `<a href="https://vercel.com/?utm_source=meshtastic&utm_campaign=oss">Powered by ▲ Vercel</a> | Meshtastic® is a registered trademark of Meshtastic LLC. | <a href="/docs/legal">Legal Information</a>.`,
}, },
algolia: { algolia: {
appId: 'IG2GQB8L3V', appId: 'IG2GQB8L3V',

View file

@ -39,7 +39,7 @@
"@meshtastic/eslint-config": "^1.0.8", "@meshtastic/eslint-config": "^1.0.8",
"@tailwindcss/typography": "^0.5.7", "@tailwindcss/typography": "^0.5.7",
"@tsconfig/docusaurus": "^1.0.6", "@tsconfig/docusaurus": "^1.0.6",
"@types/node": "^18.11.8", "@types/node": "^18.11.9",
"@types/react": "^18.0.24", "@types/react": "^18.0.24",
"@types/react-dom": "^18.0.8", "@types/react-dom": "^18.0.8",
"prettier": "^2.7.1", "prettier": "^2.7.1",

View file

@ -13,7 +13,7 @@ specifiers:
'@meshtastic/eslint-config': ^1.0.8 '@meshtastic/eslint-config': ^1.0.8
'@tailwindcss/typography': ^0.5.7 '@tailwindcss/typography': ^0.5.7
'@tsconfig/docusaurus': ^1.0.6 '@tsconfig/docusaurus': ^1.0.6
'@types/node': ^18.11.8 '@types/node': ^18.11.9
'@types/react': ^18.0.24 '@types/react': ^18.0.24
'@types/react-dom': ^18.0.8 '@types/react-dom': ^18.0.8
autoprefixer: ^10.4.13 autoprefixer: ^10.4.13
@ -58,7 +58,7 @@ devDependencies:
'@meshtastic/eslint-config': 1.0.8 '@meshtastic/eslint-config': 1.0.8
'@tailwindcss/typography': 0.5.7_tailwindcss@3.2.1 '@tailwindcss/typography': 0.5.7_tailwindcss@3.2.1
'@tsconfig/docusaurus': 1.0.6 '@tsconfig/docusaurus': 1.0.6
'@types/node': 18.11.8 '@types/node': 18.11.9
'@types/react': 18.0.24 '@types/react': 18.0.24
'@types/react-dom': 18.0.8 '@types/react-dom': 18.0.8
prettier: 2.7.1 prettier: 2.7.1
@ -2929,26 +2929,26 @@ packages:
resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
dependencies: dependencies:
'@types/connect': 3.4.35 '@types/connect': 3.4.35
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/bonjour/3.5.10: /@types/bonjour/3.5.10:
resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/connect-history-api-fallback/1.3.5: /@types/connect-history-api-fallback/1.3.5:
resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==}
dependencies: dependencies:
'@types/express-serve-static-core': 4.17.28 '@types/express-serve-static-core': 4.17.28
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/connect/3.4.35: /@types/connect/3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/eslint-scope/3.7.3: /@types/eslint-scope/3.7.3:
@ -2969,7 +2969,7 @@ packages:
/@types/express-serve-static-core/4.17.28: /@types/express-serve-static-core/4.17.28:
resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
'@types/qs': 6.9.7 '@types/qs': 6.9.7
'@types/range-parser': 1.2.4 '@types/range-parser': 1.2.4
dev: false dev: false
@ -2999,7 +2999,7 @@ packages:
/@types/http-proxy/1.17.8: /@types/http-proxy/1.17.8:
resolution: {integrity: sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==} resolution: {integrity: sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/json-schema/7.0.11: /@types/json-schema/7.0.11:
@ -3012,7 +3012,7 @@ packages:
/@types/keyv/3.1.4: /@types/keyv/3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/mdast/3.0.10: /@types/mdast/3.0.10:
@ -3029,8 +3029,8 @@ packages:
resolution: {integrity: sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==} resolution: {integrity: sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==}
dev: false dev: false
/@types/node/18.11.8: /@types/node/18.11.9:
resolution: {integrity: sha512-uGwPWlE0Hj972KkHtCDVwZ8O39GmyjfMane1Z3GUBGGnkZ2USDq7SxLpVIiIHpweY9DS0QTDH0Nw7RNBsAAZ5A==} resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
/@types/parse-json/4.0.0: /@types/parse-json/4.0.0:
resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==}
@ -3087,7 +3087,7 @@ packages:
/@types/responselike/1.0.0: /@types/responselike/1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/retry/0.12.1: /@types/retry/0.12.1:
@ -3097,7 +3097,7 @@ packages:
/@types/sax/1.2.4: /@types/sax/1.2.4:
resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==} resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/scheduler/0.16.2: /@types/scheduler/0.16.2:
@ -3113,13 +3113,13 @@ packages:
resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==}
dependencies: dependencies:
'@types/mime': 1.3.2 '@types/mime': 1.3.2
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/sockjs/0.3.33: /@types/sockjs/0.3.33:
resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@types/unist/2.0.6: /@types/unist/2.0.6:
@ -3129,7 +3129,7 @@ packages:
/@types/ws/8.5.3: /@types/ws/8.5.3:
resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
dev: false dev: false
/@typescript-eslint/eslint-plugin/5.22.0_4bcn5aatkhkr3q2dzj4ewaqjbe: /@typescript-eslint/eslint-plugin/5.22.0_4bcn5aatkhkr3q2dzj4ewaqjbe:
@ -5050,7 +5050,7 @@ packages:
resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
require-like: 0.1.2 require-like: 0.1.2
dev: false dev: false
@ -6235,7 +6235,7 @@ packages:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'} engines: {node: '>= 10.13.0'}
dependencies: dependencies:
'@types/node': 18.11.8 '@types/node': 18.11.9
merge-stream: 2.0.0 merge-stream: 2.0.0
supports-color: 8.1.1 supports-color: 8.1.1

View file

@ -10,9 +10,9 @@ import Layout from '@theme/Layout';
const TwoPointZero = (): JSX.Element => { const TwoPointZero = (): JSX.Element => {
const stats = [ const stats = [
{ label: 'Active Nodes', value: 'xx+' }, { label: 'Active Nodes', value: 'A Lot!' },
{ label: 'Community Members', value: '4000+' }, { label: 'Community Members', value: '4000+' },
{ label: 'Total Commits', value: '4800+' }, { label: 'Firmware Commits', value: '4900+' },
{ label: 'Community Donations', value: '$5700+' }, { label: 'Community Donations', value: '$5700+' },
]; ];
const logos = [ const logos = [
@ -87,12 +87,12 @@ const TwoPointZero = (): JSX.Element => {
giveaways, so jump in and win some prizes. giveaways, so jump in and win some prizes.
</p> </p>
<div className="flex gap-2"> <div className="flex gap-2">
<button <a
type="submit" href="#start"
className="block w-full rounded-md border border-transparent bg-rose-500 px-5 py-3 text-base font-medium text-white shadow hover:bg-rose-600 focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 sm:px-10" className="flex w-full rounded-md border border-transparent bg-rose-500 px-5 py-3 text-base font-medium text-white shadow hover:bg-rose-600 hover:text-black hover:no-underline focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 sm:px-10"
> >
Find Out More <span className="m-auto">Find Out More</span>
</button> </a>
<a <a
className="flex w-16 rounded-md border border-transparent bg-[#1DA1F2] shadow hover:bg-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-offset-2" className="flex w-16 rounded-md border border-transparent bg-[#1DA1F2] shadow hover:bg-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-offset-2"
target="_blank" target="_blank"
@ -236,16 +236,14 @@ const TwoPointZero = (): JSX.Element => {
<path d="M9.352 4C4.456 7.456 1 13.12 1 19.36c0 5.088 3.072 8.064 6.624 8.064 3.36 0 5.856-2.688 5.856-5.856 0-3.168-2.208-5.472-5.088-5.472-.576 0-1.344.096-1.536.192.48-3.264 3.552-7.104 6.624-9.024L9.352 4zm16.512 0c-4.8 3.456-8.256 9.12-8.256 15.36 0 5.088 3.072 8.064 6.624 8.064 3.264 0 5.856-2.688 5.856-5.856 0-3.168-2.304-5.472-5.184-5.472-.576 0-1.248.096-1.44.192.48-3.264 3.456-7.104 6.528-9.024L25.864 4z" /> <path d="M9.352 4C4.456 7.456 1 13.12 1 19.36c0 5.088 3.072 8.064 6.624 8.064 3.36 0 5.856-2.688 5.856-5.856 0-3.168-2.208-5.472-5.088-5.472-.576 0-1.344.096-1.536.192.48-3.264 3.552-7.104 6.624-9.024L9.352 4zm16.512 0c-4.8 3.456-8.256 9.12-8.256 15.36 0 5.088 3.072 8.064 6.624 8.064 3.264 0 5.856-2.688 5.856-5.856 0-3.168-2.304-5.472-5.184-5.472-.576 0-1.248.096-1.44.192.48-3.264 3.456-7.104 6.528-9.024L25.864 4z" />
</svg> </svg>
<p className="relative"> <p className="relative">
Tincidunt integer commodo, cursus etiam aliquam Meshtastic is the neatest open source I've ever
neque, et. Consectetur pretium in volutpat, diam. seen!
Montes, magna cursus nulla feugiat dignissim id
lobortis amet.
</p> </p>
</div> </div>
<footer className="mt-4"> <footer className="mt-4">
<p className="text-base font-semibold text-rose-200"> <p className="text-base font-semibold text-rose-200">
Quote author Elvis Presley
</p> </p>
</footer> </footer>
</blockquote> </blockquote>
@ -254,34 +252,64 @@ const TwoPointZero = (): JSX.Element => {
</div> </div>
</div> </div>
<div className="relative mx-auto max-w-md px-4 sm:max-w-3xl sm:px-6 lg:px-0"> <div
id="start"
className="relative mx-auto max-w-md px-4 sm:max-w-3xl sm:px-6 lg:px-0"
>
{/* Content area */} {/* Content area */}
<div className="pt-12 sm:pt-16 lg:pt-20"> <div className="pt-12 sm:pt-16 lg:pt-20">
<h2 className="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl"> <h2 className="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
A brief overview of all the changes and improvements A brief overview of all the changes and improvements
</h2> </h2>
<div className="mt-6 space-y-6 text-gray-500"> <div className="mt-6 space-y-6 text-gray-500">
<p className="text-lg"> <h2>Monumental stuff!</h2>
Sagittis scelerisque nulla cursus in enim consectetur
quam. Dictum urna sed consectetur neque tristique
pellentesque. Blandit amet, sed aenean erat arcu morbi.
Cursus faucibus nunc nisl netus morbi vel porttitor vitae
ut. Amet vitae fames senectus vitae.
</p>
<p className="text-base leading-7"> <p className="text-base leading-7">
Sollicitudin tristique eros erat odio sed vitae, consequat <li>
turpis elementum. Lorem nibh vel, eget pretium arcu vitae. Completely new LoRA band plan with faster messaging
Eros eu viverra donec ut volutpat donec laoreet quam urna. </li>
Sollicitudin tristique eros erat odio sed vitae, consequat <li>Smarter and more reliable mesh routing</li>
turpis elementum. Lorem nibh vel, eget pretium arcu vitae. <li>
Eros eu viverra donec ut volutpat donec laoreet quam urna. Unlimited nodes* (80 Connected at a time, oldest node
will be removed when a new node joins the mesh)
</li>
<li>
New messaging additions: waypoints, reactions
(tap-backs), and telemetry
</li>
<li>
Improvements for Canned Messages module and CardKB
messaging for stand alone communicator devices
</li>
<li>Sensor, Screen, and Input device auto-detection</li>
<li>New devices supported (6 new targets!)</li>
<li>
Added over the air bluetooth updates for NRF devices
(RAK-4631)
</li>
<li>Ethernet support via RAK-13800</li>
<li>
Compass improvements for larger screens and
customizations
</li>
</p> </p>
<h2>Nerd stuff!</h2>
<p className="text-base leading-7"> <p className="text-base leading-7">
Rhoncus nisl, libero egestas diam fermentum dui. At quis <li>New filesystem for ESP32 (LittleFS)</li>
tincidunt vel ultricies. Vulputate aliquet velit faucibus <li>
semper. Pellentesque in venenatis vestibulum consectetur Upgraded Arduino framework for both NRF52 and ESP32
nibh id. In id ut tempus egestas. Enim sit aliquam nec, a. </li>
Morbi enim fermentum lacus in. Viverra. <li>New bluetooth stack for ESP32 (NimBLE)</li>
<li>Unified GPS stack now using NMEA</li>
<li>Support for more I2C sensors</li>
<li>Support for ATECCA608B Cryptographic Coprocessor</li>
<li>More Serial module I/O modes</li>
<li>JSON messages over MQTT</li>
<li>
Device codebase refactored and optimized in many areas
</li>
<li>
Completely restructured protobufs and configuration
</li>
</p> </p>
</div> </div>
</div> </div>
@ -303,11 +331,6 @@ const TwoPointZero = (): JSX.Element => {
</div> </div>
))} ))}
</dl> </dl>
<div className="mt-10">
<a href="#" className="text-base font-medium text-rose-500">
Further reading...
</a>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -415,7 +438,7 @@ const TwoPointZero = (): JSX.Element => {
</div> </div>
<FlipClockCountdown <FlipClockCountdown
className="m-auto" className="m-auto"
to={new Date(2022, 12, 1).getTime()} to={new Date(2022, 11, 1).getTime()}
/> />
</div> </div>
</div> </div>

View file

@ -14,7 +14,7 @@ export const FirmwareCard = ({
release, release,
}: releaseCardProps): JSX.Element => { }: releaseCardProps): JSX.Element => {
return ( return (
<div className="card"> <div className="card m-4 border-2 border-secondary">
<div <div
className="card__header" className="card__header"
style={{ display: 'flex', justifyContent: 'space-between' }} style={{ display: 'flex', justifyContent: 'space-between' }}

View file

@ -1,18 +1,23 @@
import React from 'react'; import React from 'react';
import { FaAndroid, FaApple } from 'react-icons/fa';
import useSWR from 'swr'; import useSWR from 'swr';
// import { Endpoints } from '@octokit/types'; import {
ArrowTopRightOnSquareIcon,
BoltIcon,
ComputerDesktopIcon,
CpuChipIcon,
GlobeAltIcon,
} from '@heroicons/react/24/solid';
import Layout from '@theme/Layout'; import Layout from '@theme/Layout';
import { Release } from '../../utils/github'; import { Release } from '../../utils/github';
import { fetcher } from '../../utils/swr'; import { fetcher } from '../../utils/swr';
import { DownloadCard } from './_components/DownloadCard';
import { import {
FirmwareCard, FirmwareCard,
PlaceholderFirmwareCard, PlaceholderFirmwareCard,
} from './_components/FirmwareCard'; } from './_components/FirmwareCard';
import { HeaderText } from './_components/HeaderText';
const Firmware = (): JSX.Element => { const Firmware = (): JSX.Element => {
const { data, error } = useSWR<Release[]>( const { data, error } = useSWR<Release[]>(
@ -28,87 +33,112 @@ const Firmware = (): JSX.Element => {
title="Downloads" title="Downloads"
description="Downloads for the Meshtastic project" description="Downloads for the Meshtastic project"
> >
<main className="margin-vert--xl"> <div className="container mt-8 flex flex-col gap-3">
<div className="container"> <h1 className="m-2">Flasher</h1>
<HeaderText type="h1" text="Downloads" /> <div className="flex h-48 w-full overflow-hidden rounded-xl">
<div className="flex w-1/5 bg-gradient-to-r from-green-500 to-primary">
<BoltIcon className="m-auto h-20" />
</div> </div>
<div className="container"> <div className="w-full bg-primary">
<HeaderText <div className="m-auto mt-8 w-96">
type="h2" <h3>Meshtastic Flasher</h3>
text="Install Meshtastic" <p className="mb-3">
link="install-meshtastic" Desktop application to flash fimware to your devices.
/> </p>
<DownloadCard
client="Meshtastic Flasher"
buttonText="Download Meshtastic Flasher"
url="https://github.com/meshtastic/Meshtastic-gui-installer/releases/latest"
notes={[
'To download using ',
<code>pip</code>,
' follow ',
<a href="/docs/software/python/meshtastic-flasher#install-using-pip">
these instructions
</a>,
'.',
]}
/>
</div>
<div className="container">
<HeaderText
type="h2"
text="Mobile Downloads"
link="mobile-downloads"
/>
<ul
style={{
position: 'relative',
display: 'grid',
gap: '1.5rem',
gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',
paddingLeft: '0',
}}
>
<DownloadCard
client="Android"
imgUrl="https://f-droid.org/badge/get-it-on.png"
url="https://meshtastic.org/docs/software/android/#f-droid"
imgUrl2="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png"
url2="https://play.google.com/store/apps/details?id=com.geeksville.mesh&referrer=utm_source=downloads-page"
notes={[
'To sideload, ',
<a <a
href="https://github.com/meshtastic/Meshtastic-Android/releases/latest"
rel="noreferrer"
target="_blank" target="_blank"
rel="noopener noreferrer"
href="https://github.com/meshtastic/Meshtastic-gui-installer/releases/latest"
className="m-auto flex rounded-lg border-4 border-transparent bg-accent p-1 font-semibold text-black shadow-md hover:text-black hover:brightness-110 active:border-green-200"
> >
download the latest .apk Download
</a>, <ArrowTopRightOnSquareIcon className="m-auto ml-2 h-4" />
' from Github', </a>
]}
/>
<DownloadCard
client="iOS"
url="https://testflight.apple.com/join/c8nNl8q1"
buttonText="Download on TestFlight"
notes="Currently only available in TestFlight"
/>
</ul>
</div> </div>
<div className="container"> </div>
<HeaderText </div>
type="h2" {/* */}
text="Firmware Downloads" <h1 className="m-2">Apps</h1>
link="firmware-downloads" <div className="flex h-48 w-full overflow-hidden rounded-xl">
/> <div className="flex w-1/5 bg-gradient-to-r from-rose-500 to-primary">
<ul <ComputerDesktopIcon className="m-auto h-20" />
style={{ </div>
position: 'relative', <div className="flex w-full bg-primary">
display: 'grid', <div className="flex w-1/3 p-4">
gap: '1.5rem', <div className="flex flex-grow rounded-md border-2 border-secondary bg-primary shadow-md hover:brightness-90">
gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))', <div className="m-auto">
paddingLeft: '0', <FaApple className="h-20 w-20" />
}} </div>
<div className="m-auto flex flex-col gap-3">
<h2>Apple</h2>
<a
target="_blank"
rel="noopener noreferrer"
href="https://testflight.apple.com/join/c8nNl8q1"
className="m-auto flex rounded-lg border-4 border-transparent bg-accent p-1 font-semibold text-black shadow-md hover:text-black hover:brightness-110 active:border-green-200"
> >
App Store
<ArrowTopRightOnSquareIcon className="m-auto ml-2 h-4" />
</a>
</div>
</div>
</div>
<div className="flex w-1/3 p-4">
<div className="relative flex flex-grow rounded-md border-2 border-secondary bg-primary shadow-md hover:brightness-90">
<div className="m-auto">
<FaAndroid className="h-20 w-20" />
</div>
<div className="m-auto flex flex-col gap-3">
<h2>Android</h2>
<a
target="_blank"
rel="noopener noreferrer"
href="https://play.google.com/store/apps/details?id=com.geeksville.mesh&referrer=utm_source=downloads-page"
className="m-auto flex rounded-lg border-4 border-transparent bg-accent p-1 font-semibold text-black shadow-md hover:text-black hover:brightness-110 active:border-green-200"
>
Play Store
<ArrowTopRightOnSquareIcon className="m-auto ml-2 h-4" />
</a>
<a
className="absolute bottom-2 flex"
target="_blank"
rel="noopener noreferrer"
href="https://meshtastic.org/docs/software/android/#f-droid"
>
F-Droid
<ArrowTopRightOnSquareIcon className="m-auto ml-2 h-4" />
</a>
</div>
</div>
</div>
<div className="flex w-1/3 p-4">
<div className="flex flex-grow rounded-md border-2 border-secondary bg-primary shadow-md hover:brightness-90">
<div className="m-auto">
<GlobeAltIcon className="h-20 w-20" />
</div>
<div className="m-auto flex flex-col gap-3">
<h2>Web</h2>
<a
target="_blank"
rel="noopener noreferrer"
href="https://client.meshtastic.org"
className="m-auto flex rounded-lg border-4 border-transparent bg-accent p-1 font-semibold text-black shadow-md hover:text-black hover:brightness-110 active:border-green-200"
>
meshtastic.org
<ArrowTopRightOnSquareIcon className="m-auto ml-2 h-4" />
</a>
</div>
</div>
</div>
</div>
</div>
{/* */}
<h1 className="m-2">Firmware</h1>
<div className="flex w-full overflow-hidden rounded-xl">
<div className="flex w-1/5 bg-gradient-to-r from-orange-500 to-primary">
<CpuChipIcon className="m-auto h-20" />
</div>
<div className="flex w-full bg-primary">
{data && !error ? ( {data && !error ? (
<> <>
<FirmwareCard <FirmwareCard
@ -121,7 +151,7 @@ const Firmware = (): JSX.Element => {
description="Upcoming changes for testing. For those who want new features." description="Upcoming changes for testing. For those who want new features."
release={alpha} release={alpha}
/> />
<div className="card"> <div className="card m-4 border-2 border-secondary">
<div className="card__header"> <div className="card__header">
<h3>Bleeding</h3> <h3>Bleeding</h3>
</div> </div>
@ -148,39 +178,9 @@ const Firmware = (): JSX.Element => {
<PlaceholderFirmwareCard /> <PlaceholderFirmwareCard />
</> </>
)} )}
</ul>
Once downloaded, follow the flashing instructions for{' '}
<a
href="/docs/getting-started/flashing-firmware/flashing-esp32"
rel="noreferrer"
target="_blank"
>
ESP32 chipsets
</a>
,{' '}
<a
href="/docs/getting-started/flashing-firmware/flashing-nrf52"
rel="noreferrer"
target="_blank"
>
NRF52 chipsets
</a>
, or the{' '}
<a
href="/docs/software/python/meshtastic-flasher"
rel="noreferrer"
target="_blank"
>
GUI instructions for Meshtastic Flasher
</a>
.
</div> </div>
<div className="container">
<i>
Google Play and the Google Play logo are trademarks of Google LLC.
</i>
</div> </div>
</main> </div>
</Layout> </Layout>
); );
}; };