mirror of
https://github.com/betaflight/betaflight-configurator.git
synced 2025-07-18 05:45:25 +03:00
Added Virtual Mode
This commit is contained in:
parent
09663e386e
commit
030a75a89e
15 changed files with 518 additions and 52 deletions
212
src/js/VirtualFC.js
Normal file
212
src/js/VirtualFC.js
Normal file
|
@ -0,0 +1,212 @@
|
|||
'use strict';
|
||||
|
||||
const VirtualFC = {
|
||||
// these values are manufactured to unlock all the functionality of the configurator, they dont represent actual hardware
|
||||
setVirtualConfig() {
|
||||
const virtualFC = FC;
|
||||
|
||||
virtualFC.resetState();
|
||||
|
||||
virtualFC.CONFIG.flightControllerVersion = "4.2.4";
|
||||
virtualFC.CONFIG.apiVersion = CONFIGURATOR.virtualApiVersion;
|
||||
|
||||
virtualFC.FEATURE_CONFIG.features = new Features(FC.CONFIG);
|
||||
virtualFC.FEATURE_CONFIG.features.setMask(0);
|
||||
|
||||
virtualFC.BEEPER_CONFIG.beepers = new Beepers(FC.CONFIG);
|
||||
virtualFC.BEEPER_CONFIG.dshotBeaconConditions = new Beepers(FC.CONFIG, [ "RX_LOST", "RX_SET" ]);
|
||||
|
||||
virtualFC.MIXER_CONFIG.mixer = 3;
|
||||
|
||||
virtualFC.MOTOR_DATA = Array.from({length: 8});
|
||||
virtualFC.MOTOR_3D_CONFIG = true;
|
||||
virtualFC.MOTOR_CONFIG = {
|
||||
minthrottle: 1070,
|
||||
maxthrottle: 2000,
|
||||
mincommand: 1000,
|
||||
motor_count: 4,
|
||||
motor_poles: 14,
|
||||
use_dshot_telemetry: true,
|
||||
use_esc_sensor: false,
|
||||
};
|
||||
|
||||
virtualFC.SERVO_CONFIG = Array.from({length: 8});
|
||||
|
||||
for (let i = 0; i < virtualFC.SERVO_CONFIG.length; i++) {
|
||||
virtualFC.SERVO_CONFIG[i] = {
|
||||
middle: 1500,
|
||||
min: 1000,
|
||||
max: 2000,
|
||||
indexOfChannelToForward: 255,
|
||||
rate: 100,
|
||||
reversedInputSources: 0,
|
||||
};
|
||||
}
|
||||
|
||||
virtualFC.ADJUSTMENT_RANGES = Array.from({length: 16});
|
||||
|
||||
for (let i = 0; i < virtualFC.ADJUSTMENT_RANGES.length; i++) {
|
||||
virtualFC.ADJUSTMENT_RANGES[i] = {
|
||||
slotIndex: 0,
|
||||
auxChannelIndex: 0,
|
||||
range: {
|
||||
start: 900,
|
||||
end: 900,
|
||||
},
|
||||
adjustmentFunction: 0,
|
||||
auxSwitchChannelIndex: 0,
|
||||
};
|
||||
}
|
||||
|
||||
virtualFC.SERIAL_CONFIG.ports = Array.from({length: 6});
|
||||
|
||||
virtualFC.SERIAL_CONFIG.ports[0] = {
|
||||
identifier: 20,
|
||||
auxChannelIndex: 0,
|
||||
functions: ["MSP"],
|
||||
msp_baudrate: 115200,
|
||||
gps_baudrate: 57600,
|
||||
telemetry_baudrate: "AUTO",
|
||||
blackbox_baudrate: 115200,
|
||||
};
|
||||
|
||||
for (let i = 1; i < virtualFC.SERIAL_CONFIG.ports.length; i++) {
|
||||
virtualFC.SERIAL_CONFIG.ports[i] = {
|
||||
identifier: i-1,
|
||||
auxChannelIndex: 0,
|
||||
functions: [],
|
||||
msp_baudrate: 115200,
|
||||
gps_baudrate: 57600,
|
||||
telemetry_baudrate: "AUTO",
|
||||
blackbox_baudrate: 115200,
|
||||
};
|
||||
}
|
||||
|
||||
virtualFC.LED_STRIP = Array.from({length: 256});
|
||||
|
||||
for (let i = 0; i < virtualFC.LED_STRIP.length; i++) {
|
||||
virtualFC.LED_STRIP[i] = {
|
||||
x: 0,
|
||||
y: 0,
|
||||
functions: ["c"],
|
||||
color: 0,
|
||||
directions: [],
|
||||
parameters: 0,
|
||||
};
|
||||
}
|
||||
|
||||
virtualFC.ANALOG = {
|
||||
voltage: 12,
|
||||
mAhdrawn: 1200,
|
||||
rssi: 100,
|
||||
amperage: 3,
|
||||
};
|
||||
|
||||
virtualFC.CONFIG.sampleRateHz = 12000;
|
||||
virtualFC.PID_ADVANCED_CONFIG.pid_process_denom = 2;
|
||||
|
||||
virtualFC.BLACKBOX.supported = true;
|
||||
|
||||
virtualFC.VTX_CONFIG.vtx_type = 1;
|
||||
|
||||
virtualFC.BATTERY_CONFIG = {
|
||||
vbatmincellvoltage: 1,
|
||||
vbatmaxcellvoltage: 4,
|
||||
vbatwarningcellvoltage: 3,
|
||||
capacity: 10000,
|
||||
voltageMeterSource: 1,
|
||||
currentMeterSource: 1,
|
||||
};
|
||||
|
||||
virtualFC.BATTERY_STATE = {
|
||||
cellCount: 10,
|
||||
voltage: 20,
|
||||
mAhDrawn: 1000,
|
||||
amperage: 3,
|
||||
};
|
||||
|
||||
virtualFC.DATAFLASH = {
|
||||
ready: true,
|
||||
supported: true,
|
||||
sectors: 1024,
|
||||
totalSize: 40000,
|
||||
usedSize: 10000,
|
||||
};
|
||||
|
||||
virtualFC.SDCARD = {
|
||||
supported: true,
|
||||
state: 1,
|
||||
freeSizeKB: 1024,
|
||||
totalSizeKB: 2048,
|
||||
};
|
||||
|
||||
virtualFC.SENSOR_CONFIG = {
|
||||
acc_hardware: 1,
|
||||
baro_hardware: 1,
|
||||
mag_hardware: 1,
|
||||
};
|
||||
|
||||
virtualFC.RC = {
|
||||
channels: Array.from({length: 16}),
|
||||
active_channels: 16,
|
||||
};
|
||||
for (let i = 0; i < virtualFC.RC.channels.length; i++) {
|
||||
virtualFC.RC.channels[i] = 1500;
|
||||
}
|
||||
|
||||
// from https://github.com/betaflight/betaflight/blob/master/docs/Modes.md
|
||||
virtualFC.AUX_CONFIG = ["ARM","ANGLE","HORIZON","ANTI GRAVITY","MAG","HEADFREE","HEADADJ","CAMSTAB","PASSTHRU","BEEPERON","LEDLOW","CALIB",
|
||||
"OSD","TELEMETRY","SERVO1","SERVO2","SERVO3","BLACKBOX","FAILSAFE","AIRMODE","3D","FPV ANGLE MIX","BLACKBOX ERASE","CAMERA CONTROL 1",
|
||||
"CAMERA CONTROL 2","CAMERA CONTROL 3","FLIP OVER AFTER CRASH","BOXPREARM","BEEP GPS SATELLITE COUNT","VTX PIT MODE","USER1","USER2",
|
||||
"USER3","USER4","PID AUDIO","PARALYZE","GPS RESCUE","ACRO TRAINER","DISABLE VTX CONTROL","LAUNCH CONTROL"];
|
||||
FC.AUX_CONFIG_IDS = [0,1,2,4,5,6,7,8,12,13,15,17,19,20,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,48,49];
|
||||
|
||||
for (let i = 0; i < 16; i++) {
|
||||
virtualFC.RXFAIL_CONFIG[i] = {
|
||||
mode: 1,
|
||||
value: 1500,
|
||||
};
|
||||
}
|
||||
|
||||
// 11 1111 (pass bitchecks)
|
||||
virtualFC.CONFIG.activeSensors = 63;
|
||||
},
|
||||
setupVirtualOSD(){
|
||||
const virtualOSD = OSD;
|
||||
|
||||
virtualOSD.data.video_system = 1;
|
||||
virtualOSD.data.unit_mode = 1;
|
||||
|
||||
virtualOSD.virtualMode = {
|
||||
itemPositions: Array.from({length: 60}),
|
||||
statisticsState: [],
|
||||
warningFlags: 0,
|
||||
timerData: [],
|
||||
};
|
||||
|
||||
virtualOSD.data.state = {
|
||||
haveMax7456Configured: true,
|
||||
haveOsdFeature: true,
|
||||
haveMax7456FontDeviceConfigured: true,
|
||||
isMax7456FontDeviceDetected: true,
|
||||
haveSomeOsd: true,
|
||||
};
|
||||
|
||||
virtualOSD.data.parameters = {
|
||||
cameraFrameWidth: 30,
|
||||
cameraFrameHeight: 30,
|
||||
};
|
||||
|
||||
virtualOSD.data.osd_profiles = {
|
||||
number: 3,
|
||||
selected: 0,
|
||||
};
|
||||
|
||||
virtualOSD.data.alarms = {
|
||||
rssi: { display_name: i18n.getMessage('osdTimerAlarmOptionRssi'), value: 0 },
|
||||
cap: { display_name: i18n.getMessage('osdTimerAlarmOptionCapacity'), value: 0 },
|
||||
alt: { display_name: i18n.getMessage('osdTimerAlarmOptionAltitude'), value: 0 },
|
||||
time: { display_name: 'Minutes', value: 0 },
|
||||
};
|
||||
},
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue