mirror of
https://github.com/betaflight/betaflight-configurator.git
synced 2025-07-16 04:45:20 +03:00
212 lines
6.6 KiB
JavaScript
212 lines
6.6 KiB
JavaScript
'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 },
|
|
};
|
|
},
|
|
};
|