diff --git a/src/components/MotorOutputReordering/MotorOutputReorderingComponent.js b/src/components/MotorOutputReordering/MotorOutputReorderingComponent.js
index c5a3ccdd..4496e38c 100644
--- a/src/components/MotorOutputReordering/MotorOutputReorderingComponent.js
+++ b/src/components/MotorOutputReordering/MotorOutputReorderingComponent.js
@@ -1,5 +1,6 @@
import MotorOutputReorderConfig from "./MotorOutputReorderingConfig";
import MotorOutputReorderCanvas from "./MotorOutputReorderingCanvas";
+import { mspHelper } from "../../js/msp/MSPHelper";
export default class MotorOutputReorderComponent
{
diff --git a/src/components/init.js b/src/components/init.js
index 43240e40..e07c49a2 100644
--- a/src/components/init.js
+++ b/src/components/init.js
@@ -11,6 +11,7 @@ import BatteryLegend from "./quad-status/BatteryLegend.vue";
import BetaflightLogo from "./betaflight-logo/BetaflightLogo.vue";
import StatusBar from "./status-bar/StatusBar.vue";
import BatteryIcon from "./quad-status/BatteryIcon.vue";
+import FC from '../js/fc.js';
// Most of the global objects can go here at first.
// It's a bit of overkill for simple components,
diff --git a/src/js/Beepers.js b/src/js/Beepers.js
index cba055b0..466b8914 100644
--- a/src/js/Beepers.js
+++ b/src/js/Beepers.js
@@ -1,4 +1,4 @@
-'use strict';
+import { bit_check, bit_clear, bit_set } from './serial_backend';
class Beepers {
constructor(config, supportedConditions) {
@@ -105,3 +105,5 @@ class Beepers {
}
}
}
+
+export default Beepers;
diff --git a/src/js/Features.js b/src/js/Features.js
index 94af6902..14e83c19 100644
--- a/src/js/Features.js
+++ b/src/js/Features.js
@@ -1,4 +1,4 @@
-'use strict';
+import { bit_check, bit_set, bit_clear } from "./serial_backend";
const Features = function (config) {
const self = this;
@@ -198,3 +198,5 @@ Features.prototype.updateData = function (featureElement) {
}
}
};
+
+export default Features;
diff --git a/src/js/VirtualFC.js b/src/js/VirtualFC.js
index 3208f156..01173504 100644
--- a/src/js/VirtualFC.js
+++ b/src/js/VirtualFC.js
@@ -1,4 +1,6 @@
-'use strict';
+import Features from "./Features";
+import Beepers from "./Beepers";
+import FC from "./fc";
const VirtualFC = {
// these values are manufactured to unlock all the functionality of the configurator, they dont represent actual hardware
@@ -215,3 +217,5 @@ const VirtualFC = {
};
},
};
+
+export default VirtualFC;
diff --git a/src/js/backup_restore.js b/src/js/backup_restore.js
index a1ca6683..1e67870b 100644
--- a/src/js/backup_restore.js
+++ b/src/js/backup_restore.js
@@ -1,8 +1,14 @@
-'use strict';
+import { sensor_status, update_dataflash_global, reinitializeConnection } from "./serial_backend";
+import GUI from "./gui";
+import Features from "./Features";
+import { i18n } from "./localization";
+import Beepers from "./Beepers";
+import FC from "./fc";
+import { mspHelper } from "./msp/MSPHelper";
// code below is highly experimental, although it runs fine on latest firmware
// the data inside nested objects needs to be verified if deep copy works properly
-function configuration_backup(callback) {
+export function configuration_backup(callback) {
let activeProfile = null;
let version = CONFIGURATOR.version;
@@ -245,7 +251,7 @@ function configuration_backup(callback) {
}
-function configuration_restore(callback) {
+export function configuration_restore(callback) {
let chosenFileEntry = null;
const accepts = [{
diff --git a/src/js/fc.js b/src/js/fc.js
index 28906b49..fd8210e9 100644
--- a/src/js/fc.js
+++ b/src/js/fc.js
@@ -1,4 +1,4 @@
-'use strict';
+import { bit_check } from "./serial_backend";
const INITIAL_CONFIG = {
apiVersion: "0.0.0",
@@ -901,3 +901,7 @@ const FC = {
QUICKRATES: 4,
},
};
+
+// temp binding to global scope
+window.FC = FC;
+export default FC;
diff --git a/src/js/main.js b/src/js/main.js
index b90b76a8..9e248a98 100644
--- a/src/js/main.js
+++ b/src/js/main.js
@@ -4,6 +4,11 @@ import GUI from './gui.js';
import { get as getConfig, set as setConfig } from './ConfigStorage.js';
import ReleaseChecker from './release_checker.js';
import { tracking, createAnalytics } from './Analytics.js';
+import { initializeSerialBackend } from './serial_backend.js';
+// Currently fc is everywhere, so we need to import it here
+// till all is in modules
+import './fc.js';
+import './msp/MSPHelper.js';
$(document).ready(function () {
diff --git a/src/js/msp/MSPConnector.js b/src/js/msp/MSPConnector.js
index e3c8b295..a21f8b9a 100644
--- a/src/js/msp/MSPConnector.js
+++ b/src/js/msp/MSPConnector.js
@@ -1,4 +1,5 @@
-'use strict';
+import MspHelper from "./MSPHelper";
+import { read_serial } from "../serial_backend";
const MSPConnectorImpl = function () {
this.baud = undefined;
@@ -74,3 +75,5 @@ MSPConnectorImpl.prototype.disconnect = function(onDisconnectCallback) {
MSP.disconnect_cleanup();
};
+
+export default MSPConnectorImpl;
diff --git a/src/js/msp/MSPHelper.js b/src/js/msp/MSPHelper.js
index ebb9fbfb..1f5e3f05 100644
--- a/src/js/msp/MSPHelper.js
+++ b/src/js/msp/MSPHelper.js
@@ -1,8 +1,12 @@
-'use strict';
+// NOTE: this is a circular dependency, needs investigating
+import { bit_check, sensor_status, bit_set, update_dataflash_global } from "../serial_backend";
+import { i18n } from "../localization";
+import GUI from "../gui";
+import FC from "../fc";
+import semver from 'semver';
// Used for LED_STRIP
const ledDirectionLetters = ['n', 'e', 's', 'w', 'u', 'd']; // in LSB bit order
-const ledFunctionLetters = ['i', 'w', 'f', 'a', 't', 'r', 'c', 'g', 's', 'b', 'l']; // in LSB bit order
const ledBaseFunctionLetters = ['c', 'f', 'a', 'l', 's', 'g', 'r']; // in LSB bit
let ledOverlayLetters = ['t', 'o', 'b', 'v', 'i', 'w']; // in LSB bit
@@ -2641,3 +2645,11 @@ MSP.SDCARD_STATE_FATAL = 1;
MSP.SDCARD_STATE_CARD_INIT = 2;
MSP.SDCARD_STATE_FS_INIT = 3;
MSP.SDCARD_STATE_READY = 4;
+
+let mspHelper;
+// This is temporary, till things are moved
+// to modules and every usage of this can create own
+// instance or re-use existing where needed.
+window.mspHelper = mspHelper = new MspHelper();
+export { mspHelper };
+export default MspHelper;
diff --git a/src/js/protocols/stm32.js b/src/js/protocols/stm32.js
index f71d2afc..1600aa37 100644
--- a/src/js/protocols/stm32.js
+++ b/src/js/protocols/stm32.js
@@ -5,7 +5,8 @@
popular choices - 921600, 460800, 256000, 230400, 153600, 128000, 115200, 57600, 38400, 28800, 19200
*/
-'use strict';
+import MSPConnectorImpl from "../msp/MSPConnector";
+import { bit_check } from "../serial_backend";
const STM32_protocol = function () {
this.baud = null;
@@ -881,3 +882,4 @@ STM32_protocol.prototype.cleanup = function () {
// initialize object
const STM32 = new STM32_protocol();
+export default STM32;
diff --git a/src/js/serial_backend.js b/src/js/serial_backend.js
index 49c9779a..3702b182 100644
--- a/src/js/serial_backend.js
+++ b/src/js/serial_backend.js
@@ -1,10 +1,17 @@
-'use strict';
+import GUI from "./gui";
+import { i18n } from "./localization";
+// NOTE: this is a circular dependency, needs investigating
+import MspHelper from "./msp/MSPHelper";
+import Features from "./Features";
+import VirtualFC from "./VirtualFC";
+import Beepers from "./Beepers";
+import FC from "./fc";
let mspHelper;
let connectionTimestamp;
let clicks = false;
-function initializeSerialBackend() {
+export function initializeSerialBackend() {
GUI.updateManualPortVisibility = function() {
const selected_port = $('div#port-picker #port option:selected');
if (selected_port.data().isManual) {
@@ -587,7 +594,7 @@ function onClosed(result) {
CONFIGURATOR.cliEngineActive = false;
}
-function read_serial(info) {
+export function read_serial(info) {
if (CONFIGURATOR.cliActive) {
MSP.clearListeners();
MSP.disconnect_cleanup();
@@ -599,7 +606,7 @@ function read_serial(info) {
}
}
-function sensor_status(sensors_detected) {
+export function sensor_status(sensors_detected) {
// initialize variable (if it wasn't)
if (!sensor_status.previous_sensors_detected) {
sensor_status.previous_sensors_detected = -1; // Otherwise first iteration will not be run if sensors_detected == 0
@@ -665,7 +672,7 @@ function sensor_status(sensors_detected) {
}
}
-function have_sensor(sensors_detected, sensor_code) {
+export function have_sensor(sensors_detected, sensor_code) {
switch(sensor_code) {
case 'acc':
return bit_check(sensors_detected, 0);
@@ -746,23 +753,19 @@ async function update_live_status() {
}
}
-function specificByte(num, pos) {
- return 0x000000FF & (num >> (8 * pos));
-}
-
-function bit_check(num, bit) {
+export function bit_check(num, bit) {
return ((num >> bit) % 2 != 0);
}
-function bit_set(num, bit) {
+export function bit_set(num, bit) {
return num | 1 << bit;
}
-function bit_clear(num, bit) {
+export function bit_clear(num, bit) {
return num & ~(1 << bit);
}
-function update_dataflash_global() {
+export function update_dataflash_global() {
function formatFilesize(bytes) {
if (bytes < 1024) {
return `${bytes}B`;
@@ -805,7 +808,7 @@ function update_dataflash_global() {
}
}
-function reinitializeConnection(callback) {
+export function reinitializeConnection(callback) {
// Close connection gracefully if it still exists.
const previousTimeStamp = connectionTimestamp;
diff --git a/src/js/tabs/adjustments.js b/src/js/tabs/adjustments.js
index c9082816..8cb1319c 100644
--- a/src/js/tabs/adjustments.js
+++ b/src/js/tabs/adjustments.js
@@ -1,5 +1,6 @@
import { i18n } from '../localization';
import GUI from '../gui';
+import { mspHelper } from '../msp/MSPHelper';
const adjustments = {};
diff --git a/src/js/tabs/auxiliary.js b/src/js/tabs/auxiliary.js
index 7107584c..9b684c6d 100644
--- a/src/js/tabs/auxiliary.js
+++ b/src/js/tabs/auxiliary.js
@@ -1,6 +1,8 @@
import { i18n } from '../localization';
import GUI from '../gui';
import { get as getConfig, set as setConfig } from '../ConfigStorage';
+import { bit_check } from '../serial_backend';
+import { mspHelper } from '../msp/MSPHelper';
const auxiliary = {};
diff --git a/src/js/tabs/cli.js b/src/js/tabs/cli.js
index d50d7af0..fa832d1b 100644
--- a/src/js/tabs/cli.js
+++ b/src/js/tabs/cli.js
@@ -3,6 +3,7 @@ import Clipboard from "../Clipboard";
import GUI from '../gui';
import BuildApi from '../BuildApi';
import { tracking } from '../Analytics';
+import { reinitializeConnection } from "../serial_backend";
const cli = {
lineDelayMs: 15,
diff --git a/src/js/tabs/configuration.js b/src/js/tabs/configuration.js
index 12b47b9f..0170c348 100644
--- a/src/js/tabs/configuration.js
+++ b/src/js/tabs/configuration.js
@@ -2,6 +2,8 @@ import semver from 'semver';
import { i18n } from '../localization';
import GUI from '../gui';
import { tracking } from "../Analytics";
+import { reinitializeConnection } from '../serial_backend';
+import { mspHelper } from '../msp/MSPHelper';
const configuration = {
analyticsChanges: {},
diff --git a/src/js/tabs/failsafe.js b/src/js/tabs/failsafe.js
index da4d903e..c4822afa 100644
--- a/src/js/tabs/failsafe.js
+++ b/src/js/tabs/failsafe.js
@@ -1,5 +1,8 @@
import { i18n } from "../localization";
import GUI from '../gui';
+import { reinitializeConnection } from "../serial_backend";
+import { mspHelper } from "../msp/MSPHelper";
+
const failsafe = {};
diff --git a/src/js/tabs/firmware_flasher.js b/src/js/tabs/firmware_flasher.js
index ca79afc1..142afdba 100644
--- a/src/js/tabs/firmware_flasher.js
+++ b/src/js/tabs/firmware_flasher.js
@@ -5,6 +5,9 @@ import { get as getStorage, set as setStorage } from '../SessionStorage';
import BuildApi from '../BuildApi';
import ConfigInserter from "../ConfigInserter.js";
import { tracking } from "../Analytics";
+import MspHelper from '../msp/MSPHelper';
+import STM32 from '../protocols/stm32';
+import FC from '../fc';
const firmware_flasher = {
targets: null,
diff --git a/src/js/tabs/gps.js b/src/js/tabs/gps.js
index 49152424..627849d0 100644
--- a/src/js/tabs/gps.js
+++ b/src/js/tabs/gps.js
@@ -1,5 +1,7 @@
import { i18n } from "../localization";
import GUI from '../gui';
+import { have_sensor } from "../serial_backend";
+import FC from '../fc';
const gps = {};
gps.initialize = function (callback) {
diff --git a/src/js/tabs/led_strip.js b/src/js/tabs/led_strip.js
index 99aa2f29..c6451e2b 100644
--- a/src/js/tabs/led_strip.js
+++ b/src/js/tabs/led_strip.js
@@ -1,5 +1,7 @@
import { i18n } from "../localization";
import GUI from '../gui';
+import { mspHelper } from "../msp/MSPHelper";
+import FC from "../fc";
const led_strip = {
wireMode: false,
diff --git a/src/js/tabs/logging.js b/src/js/tabs/logging.js
index 6954d1fe..5f2d1652 100644
--- a/src/js/tabs/logging.js
+++ b/src/js/tabs/logging.js
@@ -2,6 +2,7 @@ import { millitime } from '../utils/common.js';
import GUI from '../gui';
import { i18n } from '../localization';
import { get as getConfig, set as setConfig } from '../ConfigStorage';
+import FC from '../fc.js';
const logging = {};
logging.initialize = function (callback) {
diff --git a/src/js/tabs/motors.js b/src/js/tabs/motors.js
index 913910b6..09edf7a9 100644
--- a/src/js/tabs/motors.js
+++ b/src/js/tabs/motors.js
@@ -5,6 +5,9 @@ import MotorOutputReorderConfig from "../../components/MotorOutputReordering/Mot
import MotorOutputReorderComponent from "../../components/MotorOutputReordering/MotorOutputReorderingComponent";
import EscDshotDirectionComponent from "../../components/EscDshotDirection/EscDshotDirectionComponent";
import { tracking } from "../Analytics";
+import { bit_check, reinitializeConnection } from "../serial_backend";
+import { mspHelper } from "../msp/MSPHelper";
+import FC from "../fc";
const motors = {
previousDshotBidir: null,
diff --git a/src/js/tabs/onboard_logging.js b/src/js/tabs/onboard_logging.js
index 4ca65d71..d5bcf97d 100644
--- a/src/js/tabs/onboard_logging.js
+++ b/src/js/tabs/onboard_logging.js
@@ -1,6 +1,9 @@
import { i18n } from "../localization";
import GUI from '../gui';
import { tracking } from "../Analytics";
+import { reinitializeConnection } from "../serial_backend";
+import { mspHelper } from "../msp/MSPHelper";
+import FC from "../fc";
let sdcardTimer;
diff --git a/src/js/tabs/osd.js b/src/js/tabs/osd.js
index 98b2aa94..652da339 100644
--- a/src/js/tabs/osd.js
+++ b/src/js/tabs/osd.js
@@ -1,6 +1,9 @@
import { i18n } from "../localization";
import GUI from '../gui';
import { tracking } from "../Analytics";
+import { bit_check } from "../serial_backend";
+import VirtualFC from "../VirtualFC";
+import FC from "../fc";
const FONT = {};
const SYM = {};
diff --git a/src/js/tabs/pid_tuning.js b/src/js/tabs/pid_tuning.js
index b3d51725..372b00d8 100644
--- a/src/js/tabs/pid_tuning.js
+++ b/src/js/tabs/pid_tuning.js
@@ -2,6 +2,9 @@ import { i18n } from "../localization";
import { colorTables, getColorForPercentage } from '../utils/css.js';
import GUI from '../gui';
import { tracking } from "../Analytics";
+import { have_sensor } from "../serial_backend";
+import { mspHelper } from "../msp/MSPHelper";
+import FC from "../fc";
const pid_tuning = {
RATE_PROFILE_MASK: 128,
diff --git a/src/js/tabs/ports.js b/src/js/tabs/ports.js
index 61952827..67eae9f6 100644
--- a/src/js/tabs/ports.js
+++ b/src/js/tabs/ports.js
@@ -2,6 +2,9 @@ import semver from 'semver';
import { i18n } from "../localization";
import GUI from '../gui';
import { tracking } from "../Analytics";
+import { reinitializeConnection } from '../serial_backend';
+import { mspHelper } from '../msp/MSPHelper';
+import FC from '../fc';
const ports = {
analyticsChanges: {},
diff --git a/src/js/tabs/power.js b/src/js/tabs/power.js
index ea58308e..0c6d68f6 100644
--- a/src/js/tabs/power.js
+++ b/src/js/tabs/power.js
@@ -1,6 +1,8 @@
import { i18n } from '../localization';
import GUI from '../gui';
import { tracking } from "../Analytics";
+import { mspHelper } from '../msp/MSPHelper';
+import FC from '../fc';
const power = {
supported: false,
diff --git a/src/js/tabs/receiver.js b/src/js/tabs/receiver.js
index 70f8f6c4..123975c3 100644
--- a/src/js/tabs/receiver.js
+++ b/src/js/tabs/receiver.js
@@ -2,6 +2,10 @@ import { i18n } from "../localization";
import GUI from '../gui';
import { get as getConfig, set as setConfig } from '../ConfigStorage';
import { tracking } from "../Analytics";
+import { bit_check, reinitializeConnection } from "../serial_backend";
+import { mspHelper } from "../msp/MSPHelper";
+import FC from "../fc";
+
import CryptoES from 'crypto-es';
const receiver = {
diff --git a/src/js/tabs/sensors.js b/src/js/tabs/sensors.js
index 20508fba..f3b9b66c 100644
--- a/src/js/tabs/sensors.js
+++ b/src/js/tabs/sensors.js
@@ -1,6 +1,8 @@
import { i18n } from "../localization";
import GUI from '../gui';
import { get as getConfig, set as setConfig } from '../ConfigStorage';
+import { have_sensor } from "../serial_backend";
+import FC from "../fc";
const sensors = {};
sensors.initialize = function (callback) {
diff --git a/src/js/tabs/servos.js b/src/js/tabs/servos.js
index d2633652..497fa4a8 100644
--- a/src/js/tabs/servos.js
+++ b/src/js/tabs/servos.js
@@ -1,5 +1,7 @@
import { i18n } from "../localization";
import GUI from '../gui';
+import { mspHelper } from "../msp/MSPHelper";
+import FC from "../fc";
const servos = {};
servos.initialize = function (callback) {
diff --git a/src/js/tabs/setup.js b/src/js/tabs/setup.js
index 8230c2c0..ca602494 100644
--- a/src/js/tabs/setup.js
+++ b/src/js/tabs/setup.js
@@ -1,5 +1,9 @@
import { i18n } from '../localization';
import GUI from '../gui';
+import { configuration_backup, configuration_restore } from '../backup_restore';
+import { have_sensor } from '../serial_backend';
+import { mspHelper } from '../msp/MSPHelper';
+import FC from '../fc';
const setup = {
yaw_fix: 0.0,
diff --git a/src/js/tabs/transponder.js b/src/js/tabs/transponder.js
index 9452953b..82174735 100644
--- a/src/js/tabs/transponder.js
+++ b/src/js/tabs/transponder.js
@@ -1,5 +1,8 @@
import { i18n } from "../localization";
import GUI from '../gui';
+import { reinitializeConnection } from "../serial_backend";
+import { mspHelper } from '../msp/MSPHelper';
+import FC from "../fc";
const transponder = {
available: false,
diff --git a/src/js/tabs/vtx.js b/src/js/tabs/vtx.js
index 0ee7a9c3..6460591a 100644
--- a/src/js/tabs/vtx.js
+++ b/src/js/tabs/vtx.js
@@ -2,6 +2,8 @@ import { i18n } from "../localization";
import Clipboard from "../Clipboard";
import GUI from '../gui';
import { tracking } from "../Analytics";
+import { mspHelper } from "../msp/MSPHelper";
+import FC from '../fc';
const vtx = {
supported: false,
diff --git a/src/main.html b/src/main.html
index 86e2b3e8..51662312 100644
--- a/src/main.html
+++ b/src/main.html
@@ -86,8 +86,6 @@
-
-
@@ -95,19 +93,12 @@
-
-
-
-
-
-
-
diff --git a/test/karma.conf.js b/test/karma.conf.js
index 2a2d8ddd..bd0083e5 100644
--- a/test/karma.conf.js
+++ b/test/karma.conf.js
@@ -14,6 +14,7 @@ module.exports = function(config) {
'./node_modules/jquery-textcomplete/dist/jquery.textcomplete.min.js',
'./node_modules/bluebird/js/browser/bluebird.min.js',
'./node_modules/jbox/dist/jBox.min.js',
+ './src/js/msp.js',
'./src/js/serial.js',
'./src/js/data_storage.js',
{ pattern: './src/js/localization.js', type: 'module', watched: false },