diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 7946ea51..9e90bd36 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -87,6 +87,12 @@ "tabServos": { "message": "Servos" }, + "tabFailsafe": { + "message": "Failsafe" + }, + "tabTransponder": { + "message": "Race Transponder" + }, "tabGPS": { "message": "GPS" }, @@ -103,10 +109,10 @@ "message": "CLI" }, "tabLogging": { - "message": "Logging" + "message": "Tethered Logging" }, - "tabDataflash": { - "message": "Dataflash" + "tabOnboardLogging": { + "message": "Blackbox" }, "tabAdjustments": { "message": "Adjustments" @@ -433,6 +439,88 @@ "message": "EEPROM saved" }, + "featureRX_PPM": { + "message": "PPM RX input" + }, + "featureVBAT": { + "message": "Battery voltage monitoring" + }, + "featureINFLIGHT_ACC_CAL": { + "message": "In-flight level calibration" + }, + "featureRX_SERIAL": { + "message": "Serial-based receiver (SPEKSAT, SBUS, SUMD)" + }, + "featureMOTOR_STOP": { + "message": "Don't spin the motors when armed" + }, + "featureSERVO_TILT": { + "message": "Servo gimbal" + }, + "featureSOFTSERIAL": { + "message": "Enable CPU based serial ports" + }, + "featureSOFTSERIALTip": { + "message": "Configure ports on the Ports tab after enabling." + }, + "featureGPS": { + "message": "GPS for navigation and telemetry" + }, + "featureGPSTip": { + "message": "Configure port scenario first" + }, + "featureFAILSAFE": { + "message": "Apply failsafe settings on RX signal loss" + }, + "featureSONAR": { + "message": "Sonar" + }, + "featureTELEMETRY": { + "message": "Telemetry output" + }, + "featureCURRENT_METER": { + "message": "Battery current monitoring" + }, + "feature3D": { + "message": "3D mode (for use with reversible ESCs)" + }, + "featureRX_PARALLEL_PWM": { + "message": "PWM RX input (one wire per channel)" + }, + "featureRX_MSP": { + "message": "MSP RX input (control via MSP port)" + }, + "featureRSSI_ADC": { + "message": "Analog RSSI input" + }, + "featureLED_STRIP": { + "message": "Multi-color RGB LED strip support" + }, + "featureDISPLAY": { + "message": "OLED Screen Display" + }, + "featureONESHOT125": { + "message": "ONESHOT ESC support" + }, + "featureONESHOT125Tip": { + "message": "Disconnect flight battery and remove props before enabling." + }, + "featureBLACKBOX": { + "message": "Blackbox flight data recorder" + }, + "featureBLACKBOXTip": { + "message": "Configure via the BlackBox tab after enabling." + }, + "featureCHANNEL_FORWARDING": { + "message": "Forward aux channels to servo outputs" + }, + "featureTRANSPONDER": { + "message": "Race Transponder" + }, + "featureTRANSPONDERTip": { + "message": "Configure via the Race Transponder tab after enabling." + }, + "configurationFeatureEnabled": { "message": "Enabled" }, @@ -943,6 +1031,33 @@ "message": "EEPROM saved" }, + "transponderNotSupported": { + "message": "Your flight controller's firmware does not support transponder functionality." + }, + "transponderHelp": { + "message": "Configure your transponder code here. Note: Only valid codes will be recognised by race timing systems. Valid transponder codes can be obtained from Seriously Pro." + }, + "transponderInformation": { + "message": "Transponders systems allow race organizers to time your laps. The transponder is fitted to your aircraft and when your aircraft passes the timing gate the track-side receiver registers your code and records your laptime. When fitting an IR based transponder your should ensure that it points outward from your aircraft towards the track-side receivers and that the light beam is not obstructed by your airframe, battery-straps, cables, propellers, etc." + }, + "transponderConfiguration": { + "message": "Configuration" + }, + "transponderData": { + "message": "Data" + }, + "transponderDataHelp": { + "message": "Hexadecimal digits only, 0-9, A-F" + }, + "transponderButtonSave": { + "message": "Save" + }, + "transponderDataInvalid": { + "message": "Transponder data is invalid" + }, + "transponderEepromSaved": { + "message": "EEPROM saved" + }, "servosFirmwareUpgradeRequired": { "message": "Servos requires firmware >= 1.10.0. and target support." @@ -1100,10 +1215,30 @@ "message": "Automatically loaded previous log file: $1" }, - "dataflashNote": { - "message": "Blackbox flight logs can be recorded to your flight controller's onboard dataflash chip." + "blackboxNotSupported": { + "message": "Your flight controller's firmware does not support Blackbox logging." }, - "dataflashNotSupportedNote": { + "blackboxMaybeSupported": { + "message": "Your flight controller's firmware is too old to support this tab, or the Blackbox feature is disabled on the Configuration tab." + }, + "blackboxConfiguration": { + "message": "Blackbox configuration" + }, + "blackboxButtonSave": { + "message": "Save and reboot" + }, + + "serialLoggingSupportedNote": { + "message": "You can log to an external logging device (such as an OpenLog or compatible clone) by using a serial port. Configure the port on the Ports tab." + }, + "sdcardNote": { + "message": "Flight logs can be recorded to your flight controller's onboard SD card slot." + }, + + "dataflashNote": { + "message": "Flight logs can be recorded to your flight controller's onboard dataflash chip." + }, + "dataflashNotPresentNote": { "message": "Your flight controller does not have a compatible dataflash chip available." }, "dataflashFirmwareUpgradeRequired": { diff --git a/images/icons/cf_icon_sdcard.svg b/images/icons/cf_icon_sdcard.svg new file mode 100644 index 00000000..c429edd8 --- /dev/null +++ b/images/icons/cf_icon_sdcard.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/images/icons/cf_icon_transponder_grey.svg b/images/icons/cf_icon_transponder_grey.svg new file mode 100644 index 00000000..2ca2c849 --- /dev/null +++ b/images/icons/cf_icon_transponder_grey.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + diff --git a/images/icons/cf_icon_transponder_white.svg b/images/icons/cf_icon_transponder_white.svg new file mode 100644 index 00000000..a58f74b1 --- /dev/null +++ b/images/icons/cf_icon_transponder_white.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + diff --git a/js/boards.js b/js/boards.js index 7163e96b..05e1d8fd 100644 --- a/js/boards.js +++ b/js/boards.js @@ -48,6 +48,10 @@ var BOARD_DEFINITIONS = [ name: "SP Racing F3", identifier: "SRF3", vcp: false + }, { + name: "SP Racing F3 Mini", + identifier: "SRFM", + vcp: true }, { name: "MotoLab", identifier: "MOTO", diff --git a/js/data_storage.js b/js/data_storage.js index 72b9031b..61a170a2 100755 --- a/js/data_storage.js +++ b/js/data_storage.js @@ -14,200 +14,3 @@ var CONFIGURATOR = { 'cliActive': false, 'cliValid': false }; - -var CONFIG = { - apiVersion: "0.0.0", - flightControllerIdentifier: '', - flightControllerVersion: '', - version: 0, - buildInfo: '', - multiType: 0, - msp_version: 0, // not specified using semantic versioning - capability: 0, - cycleTime: 0, - i2cError: 0, - activeSensors: 0, - mode: 0, - profile: 0, - uid: [0, 0, 0], - accelerometerTrims: [0, 0] -}; - -var BF_CONFIG = { - mixerConfiguration: 0, - features: 0, - serialrx_type: 0, - board_align_roll: 0, - board_align_pitch: 0, - board_align_yaw: 0, - currentscale: 0, - currentoffset: 0 -}; - -var LED_STRIP = []; - -var PID = { - controller: 0 -}; - -var PID_names = []; -var PIDs = new Array(10); -for (var i = 0; i < 10; i++) { - PIDs[i] = new Array(3); -} - -var RC_MAP = []; - -// defaults -// roll, pitch, yaw, throttle, aux 1, ... aux n -var RC = { - active_channels: 0, - channels: new Array(32) -}; - -var RC_tuning = { - RC_RATE: 0, - RC_EXPO: 0, - roll_pitch_rate: 0, // pre 1.7 api only - roll_rate: 0, - pitch_rate: 0, - yaw_rate: 0, - dynamic_THR_PID: 0, - throttle_MID: 0, - throttle_EXPO: 0, - dynamic_THR_breakpoint: 0, - RC_YAW_EXPO: 0 -}; - -var AUX_CONFIG = []; -var AUX_CONFIG_IDS = []; - -var MODE_RANGES = []; -var ADJUSTMENT_RANGES = []; - -var SERVO_CONFIG = []; -var SERVO_RULES = []; - -var SERIAL_CONFIG = { - ports: [], - - // pre 1.6 settings - mspBaudRate: 0, - gpsBaudRate: 0, - gpsPassthroughBaudRate: 0, - cliBaudRate: 0, -}; - -var SENSOR_DATA = { - gyroscope: [0, 0, 0], - accelerometer: [0, 0, 0], - magnetometer: [0, 0, 0], - altitude: 0, - sonar: 0, - kinematics: [0.0, 0.0, 0.0], - debug: [0, 0, 0, 0] -}; - -var MOTOR_DATA = new Array(8); -var SERVO_DATA = new Array(8); - -var GPS_DATA = { - fix: 0, - numSat: 0, - lat: 0, - lon: 0, - alt: 0, - speed: 0, - ground_course: 0, - distanceToHome: 0, - ditectionToHome: 0, - update: 0, - - // baseflight specific gps stuff - chn: [], - svid: [], - quality: [], - cno: [] -}; - -var ANALOG = { - voltage: 0, - mAhdrawn: 0, - rssi: 0, - amperage: 0 -}; - -var ARMING_CONFIG = { - auto_disarm_delay: 0, - disarm_kill_switch: 0 -}; - -var FC_CONFIG = { - loopTime: 0 -}; - -var MISC = { - midrc: 0, - minthrottle: 0, - maxthrottle: 0, - mincommand: 0, - failsafe_throttle: 0, - gps_type: 0, - gps_baudrate: 0, - gps_ubx_sbas: 0, - multiwiicurrentoutput: 0, - rssi_channel: 0, - placeholder2: 0, - mag_declination: 0, // not checked - vbatscale: 0, - vbatmincellvoltage: 0, - vbatmaxcellvoltage: 0, - vbatwarningcellvoltage: 0 -}; - -var _3D = { - deadband3d_low: 0, - deadband3d_high: 0, - neutral3d: 0, - deadband3d_throttle: 0 -}; - -var DATAFLASH = { - ready: false, - sectors: 0, - totalSize: 0, - usedSize: 0 -}; - -var RC_deadband = { - deadband: 0, - yaw_deadband: 0, - alt_hold_deadband: 0 -}; - -var SENSOR_ALIGNMENT = { - align_gyro: 0, - align_acc: 0, - align_mag: 0 -}; - -var RX_CONFIG = { - serialrx_provider: 0, - maxcheck: 0, - midrc: 0, - mincheck: 0, - spektrum_sat_bind: 0, - rx_min_usec: 0, - rx_max_usec: 0 -}; - -var FAILSAFE_CONFIG = { - failsafe_delay: 0, - failsafe_off_delay: 0, - failsafe_throttle: 0, - failsafe_kill_switch: 0, - failsafe_throttle_low_delay: 0, - failsafe_procedure: 0 -}; - -var RXFAIL_CONFIG = []; diff --git a/js/fc.js b/js/fc.js new file mode 100644 index 00000000..089403be --- /dev/null +++ b/js/fc.js @@ -0,0 +1,259 @@ +'use strict'; + +// define all the global variables that are uses to hold FC state +var CONFIG; +var BF_CONFIG; +var LED_STRIP; +var PID; +var PID_names; +var PIDs; +var RC_MAP; +var RC; +var RC_tuning; +var AUX_CONFIG; +var AUX_CONFIG_IDS; +var MODE_RANGES; +var ADJUSTMENT_RANGES; +var SERVO_CONFIG; +var SERVO_RULES; +var SERIAL_CONFIG; +var SENSOR_DATA; +var MOTOR_DATA; +var SERVO_DATA; +var GPS_DATA; +var ANALOG; +var ARMING_CONFIG; +var FC_CONFIG; +var MISC; +var _3D; +var DATAFLASH; +var SDCARD; +var BLACKBOX; +var TRANSPONDER; +var RC_deadband; +var SENSOR_ALIGNMENT; +var RX_CONFIG; +var FAILSAFE_CONFIG; +var RXFAIL_CONFIG; + +var FC = { + resetState: function() { + CONFIG = { + apiVersion: "0.0.0", + flightControllerIdentifier: '', + flightControllerVersion: '', + version: 0, + buildInfo: '', + multiType: 0, + msp_version: 0, // not specified using semantic versioning + capability: 0, + cycleTime: 0, + i2cError: 0, + activeSensors: 0, + mode: 0, + profile: 0, + uid: [0, 0, 0], + accelerometerTrims: [0, 0] + }; + + BF_CONFIG = { + mixerConfiguration: 0, + features: 0, + serialrx_type: 0, + board_align_roll: 0, + board_align_pitch: 0, + board_align_yaw: 0, + currentscale: 0, + currentoffset: 0 + }; + + LED_STRIP = []; + + PID = { + controller: 0 + }; + + PID_names = []; + PIDs = new Array(10); + for (var i = 0; i < 10; i++) { + PIDs[i] = new Array(3); + } + + RC_MAP = []; + + // defaults + // roll, pitch, yaw, throttle, aux 1, ... aux n + RC = { + active_channels: 0, + channels: new Array(32) + }; + + RC_tuning = { + RC_RATE: 0, + RC_EXPO: 0, + roll_pitch_rate: 0, // pre 1.7 api only + roll_rate: 0, + pitch_rate: 0, + yaw_rate: 0, + dynamic_THR_PID: 0, + throttle_MID: 0, + throttle_EXPO: 0, + dynamic_THR_breakpoint: 0, + RC_YAW_EXPO: 0 + }; + + AUX_CONFIG = []; + AUX_CONFIG_IDS = []; + + MODE_RANGES = []; + ADJUSTMENT_RANGES = []; + + SERVO_CONFIG = []; + SERVO_RULES = []; + + SERIAL_CONFIG = { + ports: [], + + // pre 1.6 settings + mspBaudRate: 0, + gpsBaudRate: 0, + gpsPassthroughBaudRate: 0, + cliBaudRate: 0, + }; + + SENSOR_DATA = { + gyroscope: [0, 0, 0], + accelerometer: [0, 0, 0], + magnetometer: [0, 0, 0], + altitude: 0, + sonar: 0, + kinematics: [0.0, 0.0, 0.0], + debug: [0, 0, 0, 0] + }; + + MOTOR_DATA = new Array(8); + SERVO_DATA = new Array(8); + + GPS_DATA = { + fix: 0, + numSat: 0, + lat: 0, + lon: 0, + alt: 0, + speed: 0, + ground_course: 0, + distanceToHome: 0, + ditectionToHome: 0, + update: 0, + + // baseflight specific gps stuff + chn: [], + svid: [], + quality: [], + cno: [] + }; + + ANALOG = { + voltage: 0, + mAhdrawn: 0, + rssi: 0, + amperage: 0 + }; + + ARMING_CONFIG = { + auto_disarm_delay: 0, + disarm_kill_switch: 0 + }; + + FC_CONFIG = { + loopTime: 0 + }; + + MISC = { + midrc: 0, + minthrottle: 0, + maxthrottle: 0, + mincommand: 0, + failsafe_throttle: 0, + gps_type: 0, + gps_baudrate: 0, + gps_ubx_sbas: 0, + multiwiicurrentoutput: 0, + rssi_channel: 0, + placeholder2: 0, + mag_declination: 0, // not checked + vbatscale: 0, + vbatmincellvoltage: 0, + vbatmaxcellvoltage: 0, + vbatwarningcellvoltage: 0 + }; + + _3D = { + deadband3d_low: 0, + deadband3d_high: 0, + neutral3d: 0, + deadband3d_throttle: 0 + }; + + DATAFLASH = { + ready: false, + supported: false, + sectors: 0, + totalSize: 0, + usedSize: 0 + }; + + SDCARD = { + supported: false, + state: 0, + filesystemLastError: 0, + freeSizeKB: 0, + totalSizeKB: 0, + }; + + BLACKBOX = { + supported: false, + blackboxDevice: 0, + blackboxRateNum: 1, + blackboxRateDenom: 1 + }; + + TRANSPONDER = { + supported: false, + data: [] + }; + + RC_deadband = { + deadband: 0, + yaw_deadband: 0, + alt_hold_deadband: 0 + }; + + SENSOR_ALIGNMENT = { + align_gyro: 0, + align_acc: 0, + align_mag: 0 + }; + + RX_CONFIG = { + serialrx_provider: 0, + maxcheck: 0, + midrc: 0, + mincheck: 0, + spektrum_sat_bind: 0, + rx_min_usec: 0, + rx_max_usec: 0 + }; + + FAILSAFE_CONFIG = { + failsafe_delay: 0, + failsafe_off_delay: 0, + failsafe_throttle: 0, + failsafe_kill_switch: 0, + failsafe_throttle_low_delay: 0, + failsafe_procedure: 0 + }; + + RXFAIL_CONFIG = []; + } +}; \ No newline at end of file diff --git a/js/gui.js b/js/gui.js index c93bda8e..84972d4a 100644 --- a/js/gui.js +++ b/js/gui.js @@ -19,6 +19,7 @@ var GUI_control = function () { ]; this.defaultAllowedTabsWhenConnected = [ 'failsafe', + 'transponder', 'adjustments', 'auxiliary', 'cli', @@ -26,7 +27,7 @@ var GUI_control = function () { 'gps', 'led_strip', 'logging', - 'dataflash', + 'onboard_logging', 'modes', 'motors', 'pid_tuning', @@ -275,10 +276,12 @@ GUI_control.prototype.content_ready = function (callback) { $(elem).removeClass('togglemedium'); }); - // Build link to in-use CF version documentation - var documentationButton = $('div#content #button-documentation'); - documentationButton.html("Documentation for "+CONFIG.flightControllerVersion); - documentationButton.attr("href","https://github.com/cleanflight/cleanflight/tree/v{0}/docs".format(CONFIG.flightControllerVersion)); + if (CONFIGURATOR.connectionValid) { + // Build link to in-use CF version documentation + var documentationButton = $('div#content #button-documentation'); + documentationButton.html("Documentation for " + CONFIG.flightControllerVersion); + documentationButton.attr("href","https://github.com/cleanflight/cleanflight/tree/v{0}/docs".format(CONFIG.flightControllerVersion)); + } // loading tooltip jQuery(document).ready(function($) { diff --git a/js/msp.js b/js/msp.js index f18d738b..26628092 100644 --- a/js/msp.js +++ b/js/msp.js @@ -35,6 +35,11 @@ var MSP_codes = { MSP_SET_FAILSAFE_CONFIG: 76, MSP_RXFAIL_CONFIG: 77, MSP_SET_RXFAIL_CONFIG: 78, + MSP_SDCARD_SUMMARY: 79, + MSP_BLACKBOX_CONFIG: 80, + MSP_SET_BLACKBOX_CONFIG: 81, + MSP_TRANSPONDER_CONFIG: 82, + MSP_SET_TRANSPONDER_CONFIG: 83, // Multiwii MSP commands MSP_IDENT: 100, @@ -888,13 +893,17 @@ var MSP = { break; case MSP_codes.MSP_DATAFLASH_SUMMARY: if (data.byteLength >= 13) { - DATAFLASH.ready = (data.getUint8(0) & 1) != 0; + var + flags = data.getUint8(0); + DATAFLASH.ready = (flags & 1) != 0; + DATAFLASH.supported = (flags & 2) != 0 || DATAFLASH.ready; DATAFLASH.sectors = data.getUint32(1, 1); DATAFLASH.totalSize = data.getUint32(5, 1); DATAFLASH.usedSize = data.getUint32(9, 1); } else { // Firmware version too old to support MSP_DATAFLASH_SUMMARY DATAFLASH.ready = false; + DATAFLASH.supported = false; DATAFLASH.sectors = 0; DATAFLASH.totalSize = 0; DATAFLASH.usedSize = 0; @@ -907,6 +916,36 @@ var MSP = { case MSP_codes.MSP_DATAFLASH_ERASE: console.log("Data flash erase begun..."); break; + case MSP_codes.MSP_SDCARD_SUMMARY: + var flags = data.getUint8(0); + + SDCARD.supported = (flags & 0x01) != 0; + SDCARD.state = data.getUint8(1); + SDCARD.filesystemLastError = data.getUint8(2); + SDCARD.freeSizeKB = data.getUint32(3, 1); + SDCARD.totalSizeKB = data.getUint32(7, 1); + break; + case MSP_codes.MSP_BLACKBOX_CONFIG: + BLACKBOX.supported = (data.getUint8(0) & 1) != 0; + BLACKBOX.blackboxDevice = data.getUint8(1); + BLACKBOX.blackboxRateNum = data.getUint8(2); + BLACKBOX.blackboxRateDenom = data.getUint8(3); + break; + case MSP_codes.MSP_SET_BLACKBOX_CONFIG: + console.log("Blackbox config saved"); + break; + case MSP_codes.MSP_TRANSPONDER_CONFIG: + var offset = 0; + TRANSPONDER.supported = (data.getUint8(offset++) & 1) != 0; + TRANSPONDER.data = []; + var bytesRemaining = data.byteLength - offset; + for (var i = 0; i < bytesRemaining; i++) { + TRANSPONDER.data.push(data.getUint8(offset++)); + } + break; + case MSP_codes.MSP_SET_TRANSPONDER_CONFIG: + console.log("Transponder config saved"); + break; case MSP_codes.MSP_SET_MODE_RANGE: console.log('Mode range saved'); break; @@ -1217,6 +1256,12 @@ MSP.crunch = function (code) { } break; + case MSP_codes.MSP_SET_TRANSPONDER_CONFIG: + for (var i = 0; i < TRANSPONDER.data.length; i++) { + buffer.push(TRANSPONDER.data[i]); + } + break; + case MSP_codes.MSP_SET_CHANNEL_FORWARDING: for (var i = 0; i < SERVO_CONFIG.length; i++) { var out = SERVO_CONFIG[i].indexOfChannelToForward; @@ -1315,6 +1360,19 @@ MSP.setRawRx = function(channels) { MSP.send_message(MSP_codes.MSP_SET_RAW_RC, buffer, false); } +MSP.sendBlackboxConfiguration = function(onDataCallback) { + var + message = [ + BLACKBOX.blackboxDevice & 0xFF, + BLACKBOX.blackboxRateNum & 0xFF, + BLACKBOX.blackboxRateDenom & 0xFF + ]; + + MSP.send_message(MSP_codes.MSP_SET_BLACKBOX_CONFIG, message, false, function(response) { + onDataCallback(); + }); +} + /** * Send a request to read a block of data from the dataflash at the given address and pass that address and a dataview * of the returned data to the given callback (or null for the data if an error occured). @@ -1608,3 +1666,11 @@ MSP.sendRxFailConfig = function(onCompleteCallback) { MSP.send_message(MSP_codes.MSP_SET_RXFAIL_CONFIG, buffer, false, nextFunction); } }; + +MSP.SDCARD_STATE_NOT_PRESENT = 0; +MSP.SDCARD_STATE_FATAL = 1; +MSP.SDCARD_STATE_CARD_INIT = 2; +MSP.SDCARD_STATE_FS_INIT = 3; +MSP.SDCARD_STATE_READY = 4; + + diff --git a/js/serial_backend.js b/js/serial_backend.js index 44d960eb..cef54589 100755 --- a/js/serial_backend.js +++ b/js/serial_backend.js @@ -178,6 +178,7 @@ function onOpen(openInfo) { } }, 10000); + FC.resetState(); // request configuration data MSP.send_message(MSP_codes.MSP_API_VERSION, false, false, function () { @@ -285,7 +286,6 @@ function onClosed(result) { var dataflash = $('#dataflash_wrapper_global'); dataflash.hide(); - } function read_serial(info) { diff --git a/main.css b/main.css index e6cb6ecb..a1944fd9 100644 --- a/main.css +++ b/main.css @@ -784,6 +784,19 @@ li.active .ic_flasher { background-image: url(images/icons/cf_icon_flasher_white.svg); } +.ic_transponder { + background-image: url(images/icons/cf_icon_transponder_grey.svg); +} + +.ic_transponder:hover { + background-image: url(images/icons/cf_icon_transponder_white.svg); +} + +li.active .ic_transponder { + background-image: url(images/icons/cf_icon_transponder_white.svg); +} + + /* SPARE Tab-Icons */ .ic_failsafe { background-image: url(images/icons/cf_icon_failsafe_grey.svg); @@ -1416,7 +1429,7 @@ dialog { } /* fixing padding for all Tabs*/ -.tab-setup, .tab-landing, .tab-adjustments, .tab-auxiliary, .tab-cli, .tab-configuration, .tab-failsafe, .tab-dataflash, +.tab-setup, .tab-landing, .tab-adjustments, .tab-auxiliary, .tab-cli, .tab-configuration, .tab-failsafe, .tab-onboard_logging, .tab-firmware_flasher, .tab-gps, .tab-help, .tab-led-strip, .tab-logging, .tab-modes, .tab-motors, .tab-pid_tuning, .tab-ports, .tab-receiver, .tab-sensors, .tab-servos { height: 100%; @@ -1666,4 +1679,4 @@ input { overflow-y: auto; } - } + } \ No newline at end of file diff --git a/main.html b/main.html index 5d9b9c19..14783c82 100755 --- a/main.html +++ b/main.html @@ -21,11 +21,12 @@ - + + @@ -51,6 +52,7 @@ + @@ -74,9 +76,10 @@ - + + @@ -190,7 +193,7 @@
  • -
  • Failsafe
  • +
  • @@ -198,10 +201,11 @@
  • +
  • -
  • -
  • +
  • +