Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
10c7185
Start PWA conversion
Lemontree-Softworks Dec 1, 2025
5209d96
Fix import of HTML in JS Programming tab
Lemontree-Softworks Dec 1, 2025
01cdcbd
search.js: Update fetch to ESM import syntax
sensei-hacker Dec 1, 2025
a536572
search: Add error handling
sensei-hacker Dec 1, 2025
2ab4cae
magnetometer.js error logging
sensei-hacker Dec 1, 2025
ef74611
magnetometer.js error logging
sensei-hacker Dec 1, 2025
2cdf4d8
Try deploy to gh pages
Lemontree-Softworks Dec 1, 2025
0b7cb6d
Include dist
Lemontree-Softworks Dec 1, 2025
f738784
GH-Pages
Lemontree-Softworks Dec 1, 2025
69b03b3
Proxy for github downloads
Lemontree-Softworks Dec 1, 2025
b362347
Delete dist
Lemontree-Softworks Dec 1, 2025
89efbbb
Merge branch 'master' of https://github.com/iNavFlight/inav-configura…
Lemontree-Softworks Dec 2, 2025
f95fe29
More work, works almost
Lemontree-Softworks Dec 2, 2025
1ea34bf
Fix transpiler API definitions to match firmware implementation
sensei-hacker Dec 2, 2025
ef4b1c4
Fix page loading in packed app
Lemontree-Softworks Dec 2, 2025
75320e9
Fix CI?
Lemontree-Softworks Dec 2, 2025
8506956
Ci, Yarn??
Lemontree-Softworks Dec 2, 2025
f07f2f1
yanr.lock?
Lemontree-Softworks Dec 2, 2025
b927cae
ci, again...
Lemontree-Softworks Dec 2, 2025
aa317ba
Downgrage gh-pages
Lemontree-Softworks Dec 2, 2025
b8fe15f
And now mac?
Lemontree-Softworks Dec 3, 2025
e18d348
Try again...
Lemontree-Softworks Dec 3, 2025
5a0be6e
XCode?
Lemontree-Softworks Dec 3, 2025
c8b83e3
...
Lemontree-Softworks Dec 3, 2025
19d1d6e
..................
Lemontree-Softworks Dec 3, 2025
9e45402
I hate this ...
Lemontree-Softworks Dec 3, 2025
447769e
Address PR review feedback: update test documentation
sensei-hacker Dec 3, 2025
e3924bd
Merge pull request #2450 from sensei-hacker/transpiler-api-fixes
sensei-hacker Dec 3, 2025
7bb72e0
Merge pull request #2446 from sensei-hacker/search_update_fetch_to_esm
sensei-hacker Dec 3, 2025
689378c
Merge pull request #2447 from sensei-hacker/mag_not_load_win64
sensei-hacker Dec 3, 2025
2ed9320
Remove unused API definition files
sensei-hacker Dec 2, 2025
dca306d
Fix build error: Remove missing override.js import
sensei-hacker Dec 3, 2025
1745979
Merge pull request #2445 from Scavanger/Fix-JS-Programming-Tab
sensei-hacker Dec 3, 2025
2a72ab8
Merge pull request #2451 from sensei-hacker/remove-unused-api-definit…
sensei-hacker Dec 3, 2025
49b0f52
Merge branch 'maintenance-9.x' of https://github.com/iNavFlight/inav-…
Lemontree-Softworks Dec 3, 2025
6e08e18
Yarn Version?
Lemontree-Softworks Dec 3, 2025
e600060
Refactor tab management by encapsulating tab functionalities into ind…
Lemontree-Softworks Dec 3, 2025
20360cb
Add workbox configuration for caching file size limit
Lemontree-Softworks Dec 3, 2025
729ef26
Start PWA conversion
Lemontree-Softworks Dec 1, 2025
f861469
Try deploy to gh pages
Lemontree-Softworks Dec 1, 2025
d4b24ae
Include dist
Lemontree-Softworks Dec 1, 2025
4388774
Proxy for github downloads
Lemontree-Softworks Dec 1, 2025
aab95fd
Delete dist
Lemontree-Softworks Dec 1, 2025
7e55e6c
More work, works almost
Lemontree-Softworks Dec 2, 2025
42dc0e4
Fix CI?
Lemontree-Softworks Dec 2, 2025
c2a2b49
Ci, Yarn??
Lemontree-Softworks Dec 2, 2025
6bc4032
ci, again...
Lemontree-Softworks Dec 2, 2025
24994f4
And now mac?
Lemontree-Softworks Dec 3, 2025
3404149
Try again...
Lemontree-Softworks Dec 3, 2025
daaf7a6
XCode?
Lemontree-Softworks Dec 3, 2025
d24665b
...
Lemontree-Softworks Dec 3, 2025
66abf70
..................
Lemontree-Softworks Dec 3, 2025
858defc
I hate this ...
Lemontree-Softworks Dec 3, 2025
0d6ef23
Fix transpiler API definitions to match firmware implementation
sensei-hacker Dec 2, 2025
e6704e5
Address PR review feedback: update test documentation
sensei-hacker Dec 3, 2025
237caf9
search.js: Update fetch to ESM import syntax
sensei-hacker Dec 1, 2025
b8acd12
search: Add error handling
sensei-hacker Dec 1, 2025
36aeaf8
magnetometer.js error logging
sensei-hacker Dec 1, 2025
0bfd42a
magnetometer.js error logging
sensei-hacker Dec 1, 2025
8eca14b
Fix import of HTML in JS Programming tab
Lemontree-Softworks Dec 1, 2025
57d9aa4
Fix page loading in packed app
Lemontree-Softworks Dec 2, 2025
6735ae3
Remove unused API definition files
sensei-hacker Dec 2, 2025
78b7f76
Fix build error: Remove missing override.js import
sensei-hacker Dec 3, 2025
14ed387
Refactor tab management by encapsulating tab functionalities into ind…
Lemontree-Softworks Dec 3, 2025
0ec70bd
Add workbox configuration for caching file size limit
Lemontree-Softworks Dec 3, 2025
5fff6ce
Merge branch 'PWA' of https://github.com/Scavanger/inav-configurator …
Lemontree-Softworks Dec 3, 2025
496d3e4
Mess from Rebase...
Lemontree-Softworks Dec 3, 2025
4a30180
ci
Lemontree-Softworks Dec 3, 2025
f79e486
more mess
Lemontree-Softworks Dec 3, 2025
17b470b
Revert "Remove unused API definition files"
Lemontree-Softworks Dec 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 39 additions & 16 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,14 @@ jobs:
echo "BUILD_NAME=inav-configurator_linux_x64_${VERSION}_${BUILD_SUFFIX}" >> $GITHUB_ENV
- uses: actions/setup-node@v4
with:
node-version: 22
node-version: 24
#check-latest: true
- name: Install dependencies
run: sudo apt-get update && sudo apt-get -y install dpkg fakeroot rpm build-essential libudev-dev
- name: Setup Yarn with Corepack
run: corepack enable
- name: Setup Yarn with Corepack
run: corepack enable
- name: Install deps
uses: nick-fields/retry@v3
with:
Expand Down Expand Up @@ -90,10 +94,14 @@ jobs:
echo "BUILD_NAME=inav-configurator_linux_aarch64_${VERSION}_${BUILD_SUFFIX}" >> $GITHUB_ENV
- uses: actions/setup-node@v4
with:
node-version: 22
node-version: 24
#check-latest: true
- name: Install dependencies
run: sudo apt-get update && sudo apt-get -y install dpkg fakeroot rpm build-essential libudev-dev
- name: Setup Yarn with Corepack
run: corepack enable
- name: Setup Yarn with Corepack
run: corepack enable
- name: Install deps
uses: nick-fields/retry@v3
with:
Expand Down Expand Up @@ -142,17 +150,20 @@ jobs:
echo "BUILD_NAMEarm64=inav-configurator_MacOS_arm64_${VERSION}_${BUILD_SUFFIX}" >> $GITHUB_ENV
- uses: actions/setup-node@v4
with:
node-version: 22
node-version: 24
#check-latest: true
# Workaround due to a bug in node-gyp: https://github.com/electron/rebuild/issues/1116
- name: Install Setuptools
run: python3 -m pip install --break-system-packages setuptools
- name: Renstall X Code cli
run: |
sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
- name: Setup Yarn with Corepack
run: corepack enable
- name: Install deps
uses: nick-fields/retry@v3
with:
max_attempts: 3
retry_on: error
command: yarn install --foreground-scripts
command: yarn install
timeout_minutes: 10
on_retry_command: rm -rfv node_modules
- name: Build MacOS arm64
Expand Down Expand Up @@ -190,17 +201,20 @@ jobs:
echo "BUILD_NAMEx64=inav-configurator_MacOS_x64_${VERSION}_${BUILD_SUFFIX}" >> $GITHUB_ENV
- uses: actions/setup-node@v4
with:
node-version: 22
node-version: 24
#check-latest: true
# Workaround due to a bug in node-gyp: https://github.com/electron/rebuild/issues/1116
- name: Install Setuptools
run: python3 -m pip install --break-system-packages setuptools
- name: Reinstall X Code cli
run: |
sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
- name: Setup Yarn with Corepack
run: corepack enable
- name: Install deps
uses: nick-fields/retry@v3
with:
max_attempts: 3
retry_on: error
command: yarn install --foreground-scripts
command: yarn install
timeout_minutes: 10
on_retry_command: rm -rfv node_modules
- name: Build MacOS x64
Expand Down Expand Up @@ -242,18 +256,22 @@ jobs:
shell: bash
- uses: actions/setup-node@v4
with:
node-version: 22
node-version: 24
- uses: engineerd/[email protected]
with:
name: "Wix Toolset 3.1.4"
url: "https://github.com/wixtoolset/wix3/releases/download/wix3141rtm/wix314-binaries.zip"
pathInArchive: "/"
- name: Setup Yarn with Corepack
run: corepack enable
- name: Setup Yarn with Corepack
run: corepack enable
- name: Install deps
uses: nick-fields/retry@v3
with:
max_attempts: 3
retry_on: error
command: yarn install --foreground-scripts
command: yarn install
timeout_minutes: 10
on_retry_command: rm -rfv node_modules
- name: Build Win x64
Expand Down Expand Up @@ -295,18 +313,22 @@ jobs:
shell: bash
- uses: actions/setup-node@v4
with:
node-version: 22
node-version: 24
- uses: engineerd/[email protected]
with:
name: "Wix Toolset 3.1.4"
url: "https://github.com/wixtoolset/wix3/releases/download/wix3141rtm/wix314-binaries.zip"
pathInArchive: "/"
- name: Setup Yarn with Corepack
run: corepack enable
- name: Setup Yarn with Corepack
run: corepack enable
- name: Install deps
uses: nick-fields/retry@v3
with:
max_attempts: 3
retry_on: error
command: yarn install --foreground-scripts
command: yarn install
timeout_minutes: 10
on_retry_command: rm -rfv node_modules
- name: Build Win32
Expand All @@ -322,3 +344,4 @@ jobs:
name: ${{env.BUILD_NAMEia32}}_MSI
path: ./out/make/wix/ia32/*.msi


11 changes: 6 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@ inav-configurator.iml
.eslintrc.json
/.project
/cache/
/dist/
/apps/
/build/
/dist/
/dev-dist/
*~
*.swp
*.bak
eeprom.bin

# ctags
tags
TAGS
# ctags
tags
TAGS
Binary file added .yarn/install-state.gz
Binary file not shown.
942 changes: 942 additions & 0 deletions .yarn/releases/yarn-4.12.0.cjs

Large diffs are not rendered by default.

Binary file added images/pwa/inav_icon_192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/pwa/inav_icon_512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>INAV Configurator</title>
<link rel="icon" href="/favicon.ico" sizes="48x48" />
<link rel="apple-touch-icon" href="/apple-touch-icon-180x180.png" />
</head>

<body>
Expand Down
2 changes: 1 addition & 1 deletion js/appUpdater.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import semver from 'semver';

import { GUI } from './gui';
import GUI from './gui';
import jBox from 'jbox';
import i18n from './localization';

Expand Down
160 changes: 160 additions & 0 deletions js/bridge.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@

import pkg from './../package.json' assert { type: 'json' };
import webSerial from './web/serial';
import webLocalStorage from './web/localStoreage';

const usbBootloaders = [
{ vendorId: 1155, productId: 57105, name: 'STM DFU'},
{ vendorId: 11836, productId: 57105, name: 'AT32 DFU'}
];

const bridge = {

isElectron: false,
serialEvents: new EventTarget(),
bootloaderIds: usbBootloaders,

init: function() {
this.isElectron = typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0;
if (this.isElectron) {
window.electronAPI.onSerialData(buffer => this.serialEvents.dispatchEvent(new CustomEvent('data', { detail: buffer })));
window.electronAPI.serialClose(() => this.serialEvents.dispatchEvent(new CustomEvent('close')));
window.electronAPI.onSerialError(error => this.serialEvents.dispatchEvent(new CustomEvent('error', { detail: error })))

} else {
webSerial.events.addEventListener('data', event => this.serialEvents.dispatchEvent(new CustomEvent('data', { detail: event.detail })));
webSerial.events.addEventListener('close', () => this.serialEvents.dispatchEvent(new CustomEvent('close')));
webSerial.events.addEventListener('error', event => this.serialEvents.dispatchEvent(new CustomEvent('error', { detail: event.detail })));
}
},


proxy: function(url) {
if (this.isElectron) {
return url;
} else {
// Use a cloudflare worker as a proxy to bypass CORS policy
return `https://proxy.inav.workers.dev/?url=${url}`
}
},

readFile: async function(file) {
if (this.isElectron) {
const response = await window.electronAPI.readFile(file);
return {
error: response.error,
data: response.error ? null : response.toString()
}
} else {
try {
const text = await file.text();
return {
error: false,
data: text
}
} catch (error) {
return {
error: error,
data: null
}
}
}
},

writeFile: async function (filename, data, binary = false) {
if (this.isElectron) {
return window.electronAPI.writeFile(filename, data);
} else {
const blob = new Blob([data], {type: binary ? 'application/octet-stream' : 'text/plain'});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename,
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
return false;
}
},

getAppLocale : function() {
if (this.isElectron) {
return window.electronAPI.appGetLocale();
} else {
return navigator.language;
}
},

storeGet: function(key, defaultValue) {
if (this.isElectron) {
return window.electronAPI.storeGet(key, defaultValue);
} else {
return webLocalStorage.get(key, defaultValue);
}
},

storeSet: function(key, value) {
if (this.isElectron) {
window.electronAPI.storeSet(key, value);
} else {
webLocalStorage.set(key, value);
}
},

storeDelete: function(key) {
if (this.isElectron) {
window.electronAPI.storeDelete(key);
} else {
webLocalStorage.delete(key);
}
},

getAppVersion: function() {
if (this.isElectron) {
return window.electronAPI.appGetVersion();
} else {
return pkg.version;
}
},

serialConnect: function(path, options) {
if (this.isElectron) {
return window.electronAPI.serialConnect(path, options);
} else {
return webSerial.connect(path, options);
}
},

serialClose: function() {
if (this.isElectron) {
return window.electronAPI.serialClose();
} else {
return webSerial.close();
}
},

serialSend: function(data) {
if (this.isElectron) {
return window.electronAPI.serialSend(data);
} else {
return webSerial.send(data);
}
},

listSerialDevices: async function () {
if (this.isElectron) {
return window.electronAPI.listSerialDevices();
} else {
return webSerial.getDevices();
}
},

requestWebSerialPermission: async function () {
if (!this.isElectron) {
return webSerial.requestPermission();
}
},
}

export default bridge;
Loading