Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,13 @@ To build deb and rpm packages for Linux, you have to install the following packa
- OpenSuse/Fedora: `dpkg, fakeroot, rpmbuild, systemd-devel, devel-basis (zypper install -t pattern devel_basis), zip`

Example (note the double -- ):
```npm run make -- --arch="x64"```
```yarn run make -- --arch="x64"```

### Running with debug | Inspector

To be able to open Inspector, set environment variable `NODE_ENV` to `development` or set the flag directly when run `npm start`:
To be able to open Inspector, set environment variable `NODE_ENV` to `development` or set the flag directly when run `yarn start`:

```NODE_ENV=development npm start``` or ```$env:NODE_ENV="development" | npm start``` for Windows PowerShell
```NODE_ENV=development yarn start``` or ```$env:NODE_ENV="development" | yarn start``` for Windows PowerShell

Or use VScode and start a debug session `Debug Configurator` (Just hit F5!)

Expand Down
2 changes: 1 addition & 1 deletion forge.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url));
export default {
packagerConfig: {
executableName: "inav-configurator",
asar: false,
asar: true,
icon: 'images/inav',
},
rebuildConfig: {},
Expand Down
48 changes: 46 additions & 2 deletions js/configurator_main.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ import '../src/css/styles.css'

import $ from 'jquery';
import 'jquery-ui-dist/jquery-ui';
import * as THREE from 'three'
import * as THREE from 'three';
import semver from 'semver';

import { GUI, TABS } from './gui';
import CONFIGURATOR from './data_storage';
Expand All @@ -20,6 +21,7 @@ import CliAutoComplete from './CliAutoComplete';
import { SITLProcess } from './sitl';
import settingsCache from './settingsCache';
import store from './store';
import dialog from './dialog';


window.$ = $;
Expand Down Expand Up @@ -72,13 +74,45 @@ $(function() {
globalSettings.showProfileParameters = store.get('show_profile_parameters', 1);
globalSettings.assistnowOfflineData = store.get('assistnow_offline_data', []);
globalSettings.assistnowOfflineDate = store.get('assistnow_offline_date', 0);
globalSettings.disableSitlUpdateCheck = store.get('disable_sitl_update_check', false);
updateProfilesHighlightColours();

var cliAutocomplete = store.get('cli_autocomplete', true);
globalSettings.cliAutocomplete = cliAutocomplete;
CliAutoComplete.setEnabled(cliAutocomplete);


window.electronAPI.getCurretSITLVersion().then(currentVersion => {

if (!currentVersion) {
return;
}

if (semver.lt(currentVersion, CONFIGURATOR.minfirmwareVersionAccepted) || semver.gte(currentVersion, CONFIGURATOR.maxFirmwareVersionAccepted)) {
GUI.log(i18n.getMessage('sitlVersionMismatch'));
}

if (!globalSettings.disableSitlUpdateCheck)
{
window.electronAPI.getSitlReleases(false, true).then((data) => {
if (data.error || data.response.length != 1) {
GUI.log(`${i18n.getMessage("sitlErrorGithub")} ${data.message}`);
} else {
if (semver.lt(currentVersion, data.response[0].version)) {
if (dialog.confirm(i18n.getMessage('sitlUpdateAvailable', data.response[0].version))) {
window.electronAPI.downloadSitlBinary(data.response[0].url, data.response[0].version).then((error) => {
if (!error) {
GUI.log(i18n.getMessage('sitlUpdateSuccsess', data.response[0].version))
} else {
GUI.log(i18n.getMessage('sitlUpdateError', error))
}
});
}
}
}
});
}
});

// Resets the OSD units used by the unit coversion when the FC is disconnected.
if (!CONFIGURATOR.connectionValid) {
globalSettings.osdUnits = null;
Expand All @@ -102,6 +136,10 @@ $(function() {
appUpdater.checkRelease(version);
}

if (window.electronAPI.getPlatform() == 'win32' && window.electronAPI.getArch() == 'ia32')
{
$('.tab_sitl').hide();
}

// log library versions in console to make version tracking easier
console.log('Libraries: jQuery - ' + $.fn.jquery + ', three.js - ' + THREE.REVISION);
Expand Down Expand Up @@ -307,12 +345,18 @@ $(function() {
CliAutoComplete.setEnabled($(this).is(':checked'));
});

$('div.disable_SitlUpdateCheck input').on('change', function() {
globalSettings.disableSitlUpdateCheck = $(this).is(':checked');
store.set('disable_sitl_update_check', globalSettings.disableSitlUpdateCheck);
});

$('#ui-unit-type').val(globalSettings.unitType);
$('#map-provider-type').val(globalSettings.mapProviderType);
$('#proxyurl').val(globalSettings.proxyURL);
$('#proxylayer').val(globalSettings.proxyLayer);
$('#showProfileParameters').prop('checked', globalSettings.showProfileParameters);
$('#cliAutocomplete').prop('checked', globalSettings.cliAutocomplete);
$('#disableSitlUpdateCheck').prop('checked', globalSettings.disableSitlUpdateCheck);
$('#assistnow-api-key').val(globalSettings.assistnowApiKey);

i18n.getLanguages().forEach(lng => {
Expand Down
1 change: 1 addition & 0 deletions js/globalSettings.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ var globalSettings = {
assistnowApiKey: null,
assistnowOfflineData: [],
assistnowOfflineDate: 0,
disableSitlUpdateCheck: false,
store: null,
saveAssistnowData: function() {
this.store.set('assistnow_offline_data', this.assistnowOfflineData);
Expand Down
2 changes: 1 addition & 1 deletion js/groundstation.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ const groundstation = (function () {
anchor: [0.5, 0.5],
opacity: 1,
scale: 0.6,
src: path.join(__dirname, './../images/icons/icon_mission_airplane.png')
//src: path.join('./../images/icons/icon_mission_airplane.png')
}))
});
privateScope.cursorPosition = new Point(fromLonLat([lon, lat]));
Expand Down
18 changes: 16 additions & 2 deletions js/main/child_process.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
import { spawn } from 'node:child_process'
import { app } from 'electron';
import path from 'path';
import fs from 'node:fs'
import os from 'os';

const child_process = {
_processes: [],

start: function (command, args, opts, window) {
var process;
let process;
try {
process = spawn(command, args, opts);
const commandPath = path.join(app.getPath('userData'), 'sitl', command);

if (os.platform() !== 'win32') {
const stats = fs.statSync(commandPath);
const permission = stats.mode & 0o777;
if (permission !== 0o755) {
fs.chmodSync(commandPath, 0o755);
}
}

process = spawn(commandPath, args, opts);
} catch (err) {
console.log(err);
return -1;
Expand Down
58 changes: 45 additions & 13 deletions js/main/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import path from 'path';
import { fileURLToPath } from 'node:url';
import started from 'electron-squirrel-startup';
import { writeFile, readFile } from 'node:fs/promises';
import os from 'os';

import tcp from './tcp';
import udp from './udp';
import serial from './serial';
import child_process from './child_process';
import sitl_tools from './sitl_tools.js';

const __dirname = path.dirname(fileURLToPath(import.meta.url));

Expand Down Expand Up @@ -328,18 +330,6 @@ app.whenReady().then(() => {
});
});

ipcMain.handle('chmod', (_event, pathName, mode) => {
return new Promise(resolve => {
chmod(path.join(__dirname, 'sitl', pathName), mode, error => {
if (error) {
resolve(error.message)
} else {
resolve(false)
}
});
});
});

ipcMain.handle('rm', (_event, path) => {
return new Promise(resolve => {
rm(path, error => {
Expand All @@ -353,13 +343,55 @@ app.whenReady().then(() => {
});

ipcMain.on('startChildProcess', (_event, command, args, opts) => {
child_process.start(path.join(__dirname, 'sitl', command), args, opts, mainWindow);
child_process.start(command, args, opts, mainWindow);
});

ipcMain.on('killChildProcess', (_event) => {
child_process.stop();
});


ipcMain.handle('downloadSitlBinary', (_event, url, version) => {
return new Promise(async resolve => {
try {
await sitl_tools.downloadSitlBinary(url, version);
resolve(false);
} catch (err) {
resolve(err.message);
}
});
});

ipcMain.handle('getCurretSITLVersion', (_event) => {
return new Promise(async resolve => {
try {
const version = await sitl_tools.getCurretSITLVersion();
resolve(version);
} catch (err) {
resolve(null);
}
});
});

ipcMain.handle('getSitlReleases', (_event, devRelease, latest) => {
return new Promise(async resolve => {
try {
const response = await sitl_tools.getSitlReleases(devRelease, latest);
resolve({error: false, response: response});
} catch (error) {
resolve({error: true, message: error.message});
}
});
});

ipcMain.on('getPlatform', (event) => {
event.returnValue = os.platform();
});

ipcMain.on('getArch', (event) => {
event.returnValue = os.arch();
});

// On OS X it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) {
Expand Down
11 changes: 10 additions & 1 deletion js/main/preload.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,19 @@ contextBridge.exposeInMainWorld('electronAPI', {
writeFile: (filename, data) => ipcRenderer.invoke('writeFile', filename, data),
readFile: (filename, encoding = 'utf8') => ipcRenderer.invoke('readFile', filename, encoding),
rm: (path) => ipcRenderer.invoke('rm', path),
chmod: (path, mode) => ipcRenderer.invoke('chmod', path, mode),
startChildProcess: (command, args, opts) => ipcRenderer.send('startChildProcess', command, args, opts),
killChildProcess: () => ipcRenderer.send('killChildProcess'),
onChildProcessStdout: (callback) => ipcRenderer.on('onChildProcessStdout', (_event, data) => callback(data)),
onChildProcessStderr: (callback) => ipcRenderer.on('onChildProcessStderr', (_event, data) => callback(data)),
onChildProcessError: (callback) => ipcRenderer.on('onChildProcessError', (_event, error) => callback(error)),
removeChildProcessEvents: () => {
ipcRenderer.removeAllListeners('onChildProcessStdout');
ipcRenderer.removeAllListeners('onChildProcessStderr');
ipcRenderer.removeAllListeners('onChildProcessError');
},
downloadSitlBinary: (url, version) => ipcRenderer.invoke('downloadSitlBinary', url, version),
getCurretSITLVersion: () => ipcRenderer.invoke('getCurretSITLVersion'),
getSitlReleases: (devRelease, latest) => ipcRenderer.invoke('getSitlReleases', devRelease, latest),
getPlatform: ()=> ipcRenderer.sendSync('getPlatform'),
getArch: ()=> ipcRenderer.sendSync('getArch'),
});
Loading