Merge remote-tracking branch 'upstream/NewPIDFunctions' into NewPIDFunctions
Conflicts: js/backup_restore.js js/data_storage.js js/msp.js10.3.x-maintenance
commit
c1a7452b27
|
@ -266,7 +266,7 @@
|
|||
"defaultSupportSubline2": {
|
||||
"message": "Developer"
|
||||
},
|
||||
"defaultSupport": {
|
||||
"defaultSupport": {
|
||||
"message": "For support please search the forums first or contact your vendor.<br /><br />"
|
||||
},
|
||||
"defaultSupport1": {
|
||||
|
@ -284,6 +284,7 @@
|
|||
"defaultSupport5": {
|
||||
"message": "<a href=\"http://webchat.freenode.net/?channels=cleanflight\" target=\"_blank\">Join via WebClient</a>"
|
||||
},
|
||||
|
||||
"initialSetupBackupAndRestoreApiVersion": {
|
||||
"message": "<span style=\"color: red\">Backup and restore functionality disabled.</span> You have firmware with API version <span style=\"color: red\">$1</span>, backup and restore requires <span style=\"color: #57a929\">$2</span>. Please backup your settings via the CLI, see Cleanflight documentation for procedure."
|
||||
},
|
||||
|
@ -441,8 +442,6 @@
|
|||
"configurationFeatureDescription": {
|
||||
"message": "Description"
|
||||
},
|
||||
|
||||
|
||||
"configurationMixer": {
|
||||
"message": "Mixer"
|
||||
},
|
||||
|
@ -452,23 +451,21 @@
|
|||
"configurationReceiver": {
|
||||
"message": "Receiver Mode"
|
||||
},
|
||||
"configurationFailsafe": {
|
||||
"message": "Receiver failsafe"
|
||||
},
|
||||
"configurationRSSI": {
|
||||
"message": "RSSI (Signal Strength)"
|
||||
},
|
||||
"configurationRSSIHelp": {
|
||||
"message": "RSSI is a measurement of signal strength and is very handy so you know when your aircraft is going out of range or if it is suffering RF interference."
|
||||
},
|
||||
"configurationEscFeatures": {
|
||||
"message": "ESC/Motor Features"
|
||||
},
|
||||
"configurationFeaturesHelp": {
|
||||
"message": "<strong>Note:</strong> Not all combinations of features are valid. When the flight controller firmware detects invalid feature combinations conflicting features will be disabled.<br /><strong>Note:</strong> Configure serial ports <span style=\"color: red\">before</span> enabling the features that will use the ports."
|
||||
},
|
||||
|
||||
"configurationSerialRXHelp": {
|
||||
"message": "<strong>Note:</strong> Rememer to configure a Serial Port (via Ports tab) and choose a Serial Receiver Provider when using RX_SERIAL feature."
|
||||
"message": "<strong>Note:</strong> Remember to configure a Serial Port (via Ports tab) and choose a Serial Receiver Provider when using RX_SERIAL feature."
|
||||
},
|
||||
|
||||
"configurationBoardAlignment": {
|
||||
"message": "Board and Sensor Alignment"
|
||||
},
|
||||
|
@ -498,7 +495,7 @@
|
|||
},
|
||||
"configurationDisarmKillSwitch": {
|
||||
"message": "Disarm motors regardless of throttle value (When arming via AUX channel)"
|
||||
},
|
||||
},
|
||||
"configurationThrottleMinimum": {
|
||||
"message": "Minimum Throttle"
|
||||
},
|
||||
|
@ -508,9 +505,6 @@
|
|||
"configurationThrottleMaximum": {
|
||||
"message": "Maximum Throttle"
|
||||
},
|
||||
"configurationThrottleFailsafe": {
|
||||
"message": "Failsafe Throttle"
|
||||
},
|
||||
"configurationThrottleMinimumCommand": {
|
||||
"message": "Minimum Command"
|
||||
},
|
||||
|
@ -541,7 +535,7 @@
|
|||
"configurationBatteryMultiwiiCurrent": {
|
||||
"message": "Enable support for legacy Multiwii MSP current output"
|
||||
},
|
||||
"configuration3d": {
|
||||
"configuration3d": {
|
||||
"message": "3D"
|
||||
},
|
||||
"configuration3dDeadbandLow": {
|
||||
|
@ -583,7 +577,6 @@
|
|||
"configurationGPSHelp": {
|
||||
"message": "<strong>Note:</strong> Remember to configure a Serial Port (via Ports tab) when using GPS feature."
|
||||
},
|
||||
|
||||
"configurationSerialRX": {
|
||||
"message": "Serial Receiver Provider"
|
||||
},
|
||||
|
@ -621,6 +614,9 @@
|
|||
"portsFunction_TELEMETRY_HOTT": {
|
||||
"message": "HoTT"
|
||||
},
|
||||
"portsFunction_TELEMETRY_LTM": {
|
||||
"message": "LTM"
|
||||
},
|
||||
"portsFunction_TELEMETRY_MSP": {
|
||||
"message": "MSP"
|
||||
},
|
||||
|
@ -942,7 +938,6 @@
|
|||
"servosFirmwareUpgradeRequired": {
|
||||
"message": "Servos requires firmware >= 1.10.0."
|
||||
},
|
||||
|
||||
"servosChangeDirection": {
|
||||
"message": "Change Direction in TX To Match"
|
||||
},
|
||||
|
@ -1135,6 +1130,7 @@
|
|||
"dataflashFileWriteFailed": {
|
||||
"message": "Failed to write to the file you selected, are the permissions on that folder okay?"
|
||||
},
|
||||
|
||||
"firmwareFlasherReleaseSummaryHead": {
|
||||
"message": "Release info"
|
||||
},
|
||||
|
@ -1191,25 +1187,25 @@
|
|||
"message": "Available online firmware releases - Select the correct firmware appropriate for your board."
|
||||
},
|
||||
"firmwareFlasherNoRebootDescription": {
|
||||
"message": "Enable if you are flashing board with bootloader pins shorted"
|
||||
"message": "Enable if you powered your FC while the bootloader pins are jumpered or have your FC's BOOT button pressed."
|
||||
},
|
||||
"firmwareFlasherFlashOnConnect": {
|
||||
"message": "Flash on connect"
|
||||
},
|
||||
"firmwareFlasherFlashOnConnectDescription": {
|
||||
"message": "Attempt to flash the board automatically (triggered by newly detected serial port)"
|
||||
"message": "Attempt to flash the board automatically (triggered by newly detected serial port)."
|
||||
},
|
||||
"firmwareFlasherFullChipErase": {
|
||||
"message": "Full chip erase"
|
||||
},
|
||||
"firmwareFlasherFullChipEraseDescription": {
|
||||
"message": "Wipes all configuration data currently stored on the board"
|
||||
"message": "Wipes all configuration data currently stored on the board."
|
||||
},
|
||||
"firmwareFlasherFlashDevelopmentFirmware": {
|
||||
"message": "Use Development Firmware"
|
||||
},
|
||||
"firmwareFlasherFlashDevelopmentFirmwareDescription": {
|
||||
"message": "Flash most recent (untested) development firmware"
|
||||
"message": "Flash most recent (untested) development firmware."
|
||||
},
|
||||
"firmwareFlasherManualBaud": {
|
||||
"message": "Manual baud rate"
|
||||
|
@ -1218,10 +1214,10 @@
|
|||
"message": "Manual selection of baud rate for boards that don't support the default speed or for flashing via bluetooth."
|
||||
},
|
||||
"firmwareFlasherShowDevelopmentReleases":{
|
||||
"message": "Show unstable releases"
|
||||
"message": "Show unstable releases"
|
||||
},
|
||||
"firmwareFlasherShowDevelopmentReleasesDescription":{
|
||||
"message": "Show Release-Candidates and Development Releases"
|
||||
"message": "Show Release-Candidates and Development Releases."
|
||||
},
|
||||
"firmwareFlasherOptionLabelSelectFirmware": {
|
||||
"message": "Choose a Firmware / Board"
|
||||
|
@ -1253,11 +1249,17 @@
|
|||
"firmwareFlasherMessage": {
|
||||
"message": "Message:"
|
||||
},
|
||||
"firmwareFlasherWarninghead": {
|
||||
"firmwareFlasherWarningHead": {
|
||||
"message": "Warning"
|
||||
},
|
||||
"firmwareFlasherWarningText": {
|
||||
"message": "Please do <span style=\"color: red\">not</span> try to flash <strong>non-cleanflight</strong> hardware with this firmware flasher.<br />Do <span style=\"color: red\">not</span> <strong>disconnect</strong> the board or <strong>turn off</strong> your computer while flashing.<br /><br /><strong>Note: </strong>STM32 bootloader is stored in ROM, it cannot be bricked.<br /><strong>Note: </strong><span style=\"color: red\">Auto-Connect</span> is always disabled while you are inside firmware flasher.<br /><strong>Note: </strong>Make sure you have a backup; some upgrades/downgrades will wipe your configuration.<br /><strong>Note:</strong> If you have problems flashing try disconnecting all cables from your FC.<br /><br /><strong>Note: </strong>If you have lost comminication with your board then power off the board, jumper the bootloader pins, power on, enable 'No reboot sequence', enable 'Full chip erase', re-flash, then power off, remove bootloader jumper, power on and connect (For all firmware except OPBL firmware)."
|
||||
"message": "Please do <span style=\"color: red\">not</span> try to flash <strong>non-cleanflight</strong> hardware with this firmware flasher.<br />Do <span style=\"color: red\">not</span> <strong>disconnect</strong> the board or <strong>turn off</strong> your computer while flashing.<br /><br /><strong>Note: </strong>STM32 bootloader is stored in ROM, it cannot be bricked.<br /><strong>Note: </strong><span style=\"color: red\">Auto-Connect</span> is always disabled while you are inside firmware flasher.<br /><strong>Note: </strong>Make sure you have a backup; some upgrades/downgrades will wipe your configuration.<br /><strong>Note:</strong> If you have problems flashing try disconnecting all cables from your FC first, try rebooting, upgrade chrome, upgrade drivers.<br />"
|
||||
},
|
||||
"firmwareFlasherRecoveryHead": {
|
||||
"message": "<strong>Recovery / Lost communication<strong>"
|
||||
},
|
||||
"firmwareFlasherRecoveryText": {
|
||||
"message": "If you have lost comminication with your board follow these steps to restore communication: <ul><li>Power off</li><li>Enable 'No reboot sequence', enable 'Full chip erase'.</li><li>Jumper the BOOT pins or hold BOOT button.</li><li>Power on (activity LED will NOT flash if done correctly).</li><li>Release BOOT button if your FC has one.</li><li>Flash with correct firmware (using manual baud rate if specified in your FC's manual).</li><li>Power off.</li><li>Remove BOOT jumper.</li><li>Power on (activity LED should flash).</li><li>Connect normally.</li></ul>"
|
||||
},
|
||||
"firmwareFlasherButtonLeave": {
|
||||
"message": "Leave Firmware Flasher"
|
||||
|
@ -1284,6 +1286,7 @@
|
|||
"ledStripEepromSaved": {
|
||||
"message": "EEPROM <span style=\"color: #57a929\">saved</span>"
|
||||
},
|
||||
|
||||
"controlAxisRoll": {
|
||||
"message": "Roll"
|
||||
},
|
||||
|
@ -1344,6 +1347,7 @@
|
|||
"controlAxisAux16": {
|
||||
"message": "AUX 16"
|
||||
},
|
||||
|
||||
"pidTuningBasic": {
|
||||
"message": "Basic/Acro"
|
||||
},
|
||||
|
@ -1367,14 +1371,89 @@
|
|||
},
|
||||
"pidTuningLevelD": {
|
||||
"message": "Transition (Horizon)"
|
||||
},
|
||||
"pidHelp1": {
|
||||
},
|
||||
"pidTuningLevelHelp": {
|
||||
"message": "The values below change the behaviour of the ANGLE and HORIZON flight modes. Different PID controllers handle the LEVEL values differently. Please check the documentation."
|
||||
},
|
||||
"configHelp1": {
|
||||
"message": "RSSI is a measurement of signal strength and is very handy so you know when your aircraft is going out of range or if it is suffering RF interference."
|
||||
},
|
||||
"configHelp2": {
|
||||
"message": "Arbitrary board rotation in degrees, to allow mounting it sideways / upside down / rotated etc. When running external sensors, use the sensor alignments (Gyro, Acc, Mag) to define sensor position independent from board orientation. "
|
||||
},
|
||||
"failsafeFeaturesHelpOld": {
|
||||
"message": "Failsafe configuration has changed considerably. Use Cleanflight <strong>v1.12.0+</strong> to enable the improved configuration panel."
|
||||
},
|
||||
"failsafePaneTitleOld": {
|
||||
"message": "Receiver failsafe"
|
||||
},
|
||||
"failsafeFeatureItemOld": {
|
||||
"message": "Failsafe settings on RX signal loss"
|
||||
},
|
||||
"failsafeThrottleItemOld": {
|
||||
"message": "Failsafe Throttle"
|
||||
},
|
||||
"failsafeFeaturesHelpNew": {
|
||||
"message": "Failsafe has two stages. <strong>Stage 1</strong> is entered when a flightchannel has an invalid pulse length, the receiver reports failsafe mode or there is no signal from the receiver at all, the channel fallback settings are applied to <span style=\"color: red\">all channels</span> and a short amount of time is provided to allow for recovery. <strong>Stage 2</strong> is entered when the error condition takes longer then the configured guard time while the craft is <span style=\"color: red\">armed</span>, all channels will remain at the applied channel fallback setting unless overruled by the chosen procedure. <br /><strong>Note:</strong> Prior to entering stage 1, channel fallback settings are also applied to individual AUX channels that have invalid pulses."
|
||||
},
|
||||
"failsafePulsrangeTitle": {
|
||||
"message": "Valid Pulse Range Settings"
|
||||
},
|
||||
"failsafePulsrangeHelp": {
|
||||
"message": "Pulses shorter then minimum or longer then maximum are invalid and will trigger application of individual channel fallback settings for AUX channels or entering stage 1 for flightchannels"
|
||||
},
|
||||
"failsafeRxMinUsecItem": {
|
||||
"message": "Minimum length"
|
||||
},
|
||||
"failsafeRxMaxUsecItem": {
|
||||
"message": "Maximum length"
|
||||
},
|
||||
"failsafeChannelFallbackSettingsTitle": {
|
||||
"message": "Channel Fallback Settings"
|
||||
},
|
||||
"failsafeChannelFallbackSettingsHelp": {
|
||||
"message": "These settings are applied to invalid individual AUX channels or to all channels when entering stage 1. <strong>Note:</strong> values are saved in steps of 25usec, so small changes disappear"
|
||||
},
|
||||
"failsafeStageTwoSettingsTitle": {
|
||||
"message": "Stage 2 - Settings"
|
||||
},
|
||||
"failsafeFeatureItem": {
|
||||
"message": "Failsafe Stage 2 enabled"
|
||||
},
|
||||
"failsafeFeatureHelp": {
|
||||
"message": "<strong>Note:</strong> When Stage 2 is DISABLED, the fallback setting <strong>Auto</strong> is used instead of the user settings for all flightchannels (Roll, Pitch, Yaw and Throttle)."
|
||||
},
|
||||
"failsafeDelayItem": {
|
||||
"message": "Guard time for stage 2 activation after signal lost [1 = 0.1 sec.]"
|
||||
},
|
||||
"failsafeDelayHelp": {
|
||||
"message": "Time for stage 1 to wait for recovery"
|
||||
},
|
||||
"failsafeThrottleLowItem": {
|
||||
"message": "Failsafe Throttle Low Delay [1 = 0.1 sec.]"
|
||||
},
|
||||
"failsafeThrottleLowHelp": {
|
||||
"message": "Just disarm the craft instead of executing the selected failsafe procedure when the throttle was low for this amount of time"
|
||||
},
|
||||
"failsafeThrottleItem": {
|
||||
"message": "Throttle value used while landing"
|
||||
},
|
||||
"failsafeOffDelayItem": {
|
||||
"message": "Delay for turning off the Motors during Failsafe [1 = 0.1 sec.]"
|
||||
},
|
||||
"failsafeOffDelayHelp": {
|
||||
"message": "Time to stay in landing mode untill the motors are turned off and the craft is disarmed"
|
||||
},
|
||||
"failsafeSubTitle1": {
|
||||
"message": "Stage 2 - Failsafe Procedure"
|
||||
},
|
||||
"failsafeProcedureItemSelect1": {
|
||||
"message": "Land"
|
||||
},
|
||||
"failsafeProcedureItemSelect2": {
|
||||
"message": "Drop"
|
||||
},
|
||||
"failsafeKillSwitchItem": {
|
||||
"message": "Failsafe Kill Switch (setup Failsafe in Modes Tab)"
|
||||
},
|
||||
"failsafeKillSwitchHelp": {
|
||||
"message": "Set this option to make the failsafe switch, configured in the modes tab, act as a direct kill switch, bypassing the selected failsafe procedure. <strong>Note:</strong> Arming is blocked with the failsafe kill switch in the ON position"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-173 349.9 264.9 95.1" style="enable-background:new -173 349.9 264.9 95.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#71B221;}
|
||||
.st1{fill:none;}
|
||||
.st2{enable-background:new ;}
|
||||
.st3{fill:none;stroke:#1B171B;stroke-miterlimit:10;}
|
||||
.st4{fill:#1B171B;}
|
||||
.st5{fill:#B8B8B9;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M-157.2,418.3c-4.7,0-8.5,3.8-8.5,8.5c0,4.7,5.2,8.6,8.5,11.6c2.7-2.7,8.5-7,8.5-11.6
|
||||
C-148.7,422.1-152.5,418.3-157.2,418.3z M-153.9,429.9h-1.9v-2.2h-2.9v2.2h-1.9v-6.2h1.9v2.2h2.9v-2.2h1.9V429.9z"/>
|
||||
<g>
|
||||
<rect x="16.7" y="382" class="st1" width="67.5" height="13.5"/>
|
||||
<g class="st2">
|
||||
<path d="M26.1,387.5c0,1.6-0.4,2.9-1.3,3.8c-0.9,0.9-2.2,1.3-3.9,1.3h-2.8v-10h3.1c1.6,0,2.8,0.4,3.6,1.3S26.1,386,26.1,387.5z
|
||||
M24.9,387.6c0-1.3-0.3-2.3-1-2.9c-0.7-0.7-1.6-1-2.9-1h-1.7v8h1.4c1.4,0,2.4-0.3,3.1-1C24.5,389.9,24.9,388.9,24.9,387.6z"/>
|
||||
<path d="M31.6,385c0.3,0,0.6,0,0.9,0.1l-0.2,1.1c-0.3-0.1-0.6-0.1-0.8-0.1c-0.6,0-1.1,0.2-1.6,0.7s-0.6,1.1-0.6,1.8v4h-1.1v-7.5
|
||||
h0.9l0.1,1.4h0.1c0.3-0.5,0.6-0.9,1-1.1C30.7,385.1,31.1,385,31.6,385z"/>
|
||||
<path d="M40.3,388.9c0,1.2-0.3,2.2-0.9,2.9c-0.6,0.7-1.5,1-2.5,1c-0.7,0-1.3-0.2-1.8-0.5s-0.9-0.8-1.2-1.4
|
||||
c-0.3-0.6-0.4-1.3-0.4-2.1c0-1.2,0.3-2.2,0.9-2.9c0.6-0.7,1.5-1,2.5-1c1,0,1.9,0.3,2.5,1C40,386.7,40.3,387.7,40.3,388.9z
|
||||
M34.6,388.9c0,1,0.2,1.7,0.6,2.2s0.9,0.8,1.7,0.8c0.7,0,1.3-0.2,1.7-0.7c0.4-0.5,0.6-1.2,0.6-2.2c0-1-0.2-1.7-0.6-2.2
|
||||
c-0.4-0.5-1-0.7-1.7-0.7c-0.7,0-1.3,0.2-1.7,0.7C34.8,387.2,34.6,387.9,34.6,388.9z"/>
|
||||
<path d="M45.8,392.8c-0.5,0-0.9-0.1-1.3-0.3c-0.4-0.2-0.7-0.5-1-0.8h-0.1c0.1,0.4,0.1,0.9,0.1,1.2v3.1h-1.1v-10.9h0.9l0.2,1h0.1
|
||||
c0.3-0.4,0.6-0.7,1-0.9c0.4-0.2,0.8-0.3,1.3-0.3c1,0,1.8,0.3,2.3,1s0.8,1.6,0.8,2.9c0,1.2-0.3,2.2-0.8,2.9
|
||||
C47.5,392.4,46.8,392.8,45.8,392.8z M45.6,386c-0.8,0-1.3,0.2-1.7,0.6s-0.5,1.1-0.5,2v0.3c0,1.1,0.2,1.8,0.5,2.3
|
||||
c0.4,0.5,0.9,0.7,1.7,0.7c0.6,0,1.2-0.3,1.5-0.8c0.4-0.5,0.5-1.2,0.5-2.2c0-0.9-0.2-1.7-0.5-2.1C46.8,386.2,46.3,386,45.6,386z"
|
||||
/>
|
||||
</g>
|
||||
<line class="st3" x1="-167.8" y1="441.3" x2="87.2" y2="441.3"/>
|
||||
<polygon points="78.7,432.6 65.4,436.2 74.7,411.2 53.4,439.9 23.4,435.2 42.7,441.2 70.1,441.2 "/>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M51.9,428.6c-2.5-0.9-5.1,0-6.7,1.9l-22.1-7.7l-1.3,3.8l22.1,7.7c0,2.5,1.5,4.8,4,5.6
|
||||
c3.1,1.1,6.6-0.6,7.6-3.7C56.5,433.1,55.1,429.7,51.9,428.6z"/>
|
||||
<path class="st4" d="M12.9,407.5c-6.8-2.4-14.1-0.1-18.4,5.2l-20.7-7.2c0-2.5-1.6-4.8-4-5.6c-3.1-1.1-6.6,0.6-7.6,3.7
|
||||
c-1.1,3.1,0.6,6.6,3.7,7.6c2.5,0.9,5.1,0,6.7-1.9l19.8,6.9l30.1,10.5l1.2,0.4C25.5,418.9,21,410.4,12.9,407.5z"/>
|
||||
</g>
|
||||
|
||||
<rect x="-52.9" y="396.3" transform="matrix(0.944 0.3299 -0.3299 0.944 129.5555 32.1182)" class="st5" width="46" height="2.9"/>
|
||||
<rect x="28.8" y="424.9" transform="matrix(0.944 0.3299 -0.3299 0.944 143.564 6.7675)" class="st5" width="46" height="2.9"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-173 349.9 264.9 95.1" style="enable-background:new -173 349.9 264.9 95.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#71B221;}
|
||||
.st1{fill:#1B171B;}
|
||||
.st2{fill:#B8B8B9;}
|
||||
.st3{fill:none;}
|
||||
.st4{enable-background:new ;}
|
||||
|
||||
.st5{fill:none;stroke:#71B221;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:8,8;}
|
||||
.st6{fill:none;stroke:#1B171B;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M63.1,374.8c-2.6,0-4.8,1.7-5.7,4H34v4h23.4c0.8,2.3,3,4,5.7,4c3.3,0,6-2.7,6-6
|
||||
C69.1,377.5,66.4,374.8,63.1,374.8z"/>
|
||||
<path class="st1" d="M19.2,367.8c-7.2,0-13.3,4.6-15.6,11h-21.9c-0.8-2.3-3-4-5.7-4c-3.3,0-6,2.7-6,6s2.7,6,6,6
|
||||
c2.6,0,4.8-1.7,5.7-4h21h31.8h1.2C35,374.3,27.9,367.8,19.2,367.8z"/>
|
||||
</g>
|
||||
<rect x="-47.3" y="371.3" class="st2" width="46" height="2.9"/>
|
||||
<rect x="39.2" y="371.3" class="st2" width="46" height="2.9"/>
|
||||
</g>
|
||||
<rect x="26.7" y="401.5" class="st3" width="67.5" height="13.5"/>
|
||||
<g class="st4">
|
||||
<path d="M28.1,412.1v-10h1.2v8.9h4.4v1.1H28.1z"/>
|
||||
<path d="M39.8,412.1l-0.2-1.1h-0.1c-0.4,0.5-0.7,0.8-1.1,1c-0.4,0.2-0.8,0.2-1.4,0.2c-0.7,0-1.3-0.2-1.7-0.6
|
||||
c-0.4-0.4-0.6-0.9-0.6-1.6c0-1.5,1.2-2.3,3.6-2.4l1.3,0v-0.5c0-0.6-0.1-1-0.4-1.3c-0.3-0.3-0.7-0.4-1.2-0.4
|
||||
c-0.6,0-1.3,0.2-2.1,0.6l-0.3-0.9c0.4-0.2,0.8-0.4,1.2-0.5c0.4-0.1,0.9-0.2,1.3-0.2c0.9,0,1.6,0.2,2,0.6s0.6,1,0.6,1.9v5.1H39.8z
|
||||
M37.2,411.3c0.7,0,1.3-0.2,1.7-0.6s0.6-0.9,0.6-1.6v-0.7l-1.1,0c-0.9,0-1.6,0.2-2,0.4c-0.4,0.2-0.6,0.6-0.6,1.2
|
||||
c0,0.4,0.1,0.7,0.4,0.9C36.5,411.2,36.8,411.3,37.2,411.3z"/>
|
||||
<path d="M48.1,412.1v-4.8c0-0.6-0.1-1.1-0.4-1.4c-0.3-0.3-0.7-0.5-1.3-0.5c-0.8,0-1.4,0.2-1.7,0.6c-0.4,0.4-0.5,1.1-0.5,2.1v3.9
|
||||
H43v-7.5h0.9l0.2,1h0.1c0.2-0.4,0.6-0.7,1-0.9c0.4-0.2,0.9-0.3,1.4-0.3c0.9,0,1.6,0.2,2,0.7c0.5,0.4,0.7,1.1,0.7,2.1v4.9H48.1z"
|
||||
/>
|
||||
<path d="M56.7,411.1L56.7,411.1c-0.6,0.8-1.4,1.1-2.4,1.1c-1,0-1.7-0.3-2.3-1c-0.5-0.7-0.8-1.6-0.8-2.9s0.3-2.2,0.8-2.9
|
||||
s1.3-1,2.3-1c1,0,1.8,0.4,2.3,1.1h0.1l0-0.5l0-0.5v-3h1.1v10.6h-0.9L56.7,411.1z M54.4,411.3c0.8,0,1.3-0.2,1.7-0.6
|
||||
c0.3-0.4,0.5-1.1,0.5-2v-0.2c0-1.1-0.2-1.8-0.5-2.3c-0.4-0.5-0.9-0.7-1.7-0.7c-0.7,0-1.2,0.3-1.5,0.8c-0.4,0.5-0.5,1.2-0.5,2.2
|
||||
c0,1,0.2,1.7,0.5,2.2C53.2,411.1,53.7,411.3,54.4,411.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M23.1,432.6L23.1,432.6c0.2-0.2,0.3-0.4,0.3-0.7c0-0.6-0.5-1-1-1c-0.3,0-0.6,0.1-0.7,0.3l0,0l-3,3.3l-3-3.3
|
||||
l0,0c-0.2-0.2-0.5-0.3-0.7-0.3c-0.6,0-1,0.5-1,1c0,0.3,0.1,0.5,0.3,0.7l0,0l3.7,4.1c0.2,0.2,0.5,0.3,0.8,0.3s0.6-0.1,0.8-0.3
|
||||
L23.1,432.6z"/>
|
||||
<line class="st5" x1="18.6" y1="392" x2="18.6" y2="430"/>
|
||||
</g>
|
||||
<line class="st6" x1="-167.8" y1="441.3" x2="87.2" y2="441.3"/>
|
||||
</g>
|
||||
<path class="st0" d="M-157.2,420.1c-4.7,0-8.5,3.8-8.5,8.5c0,4.7,5.2,8.6,8.5,11.6c2.7-2.7,8.5-7,8.5-11.6
|
||||
C-148.7,423.9-152.5,420.1-157.2,420.1z M-153.9,431.7h-1.9v-2.2h-2.9v2.2h-1.9v-6.2h1.9v2.2h2.9v-2.2h1.9V431.7z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.2 KiB |
|
@ -0,0 +1,56 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-173 349.9 264.9 95.1" style="enable-background:new -173 349.9 264.9 95.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#71B221;}
|
||||
.st1{fill:#1B171B;}
|
||||
.st2{fill:#B8B8B9;}
|
||||
.st3{fill:none;}
|
||||
.st4{enable-background:new ;}
|
||||
.st5{fill:none;stroke:#71B221;stroke-width:2;stroke-linecap:round;stroke-miterlimit:10;}
|
||||
.st6{fill:none;stroke:#1B171B;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M63.1,374.7c-2.6,0-4.8,1.7-5.7,4H34v4h23.4c0.8,2.3,3,4,5.7,4c3.3,0,6-2.7,6-6
|
||||
C69.1,377.4,66.4,374.7,63.1,374.7z"/>
|
||||
<path class="st1" d="M19.2,367.7c-7.2,0-13.3,4.6-15.6,11h-21.9c-0.8-2.3-3-4-5.7-4c-3.3,0-6,2.7-6,6c0,3.3,2.7,6,6,6
|
||||
c2.6,0,4.8-1.7,5.7-4h21h31.8h1.2C35,374.3,27.9,367.7,19.2,367.7z"/>
|
||||
</g>
|
||||
<rect x="-47.3" y="371.2" class="st2" width="46" height="2.9"/>
|
||||
<rect x="39.2" y="371.2" class="st2" width="46" height="2.9"/>
|
||||
</g>
|
||||
<rect x="26.7" y="401.5" class="st3" width="67.5" height="13.5"/>
|
||||
<g class="st4">
|
||||
<path d="M35.7,412.1h-1.2v-4.7h-5.3v4.7h-1.2v-10h1.2v4.3h5.3v-4.3h1.2V412.1z"/>
|
||||
<path d="M44.7,408.3c0,1.2-0.3,2.2-0.9,2.9c-0.6,0.7-1.5,1-2.5,1c-0.7,0-1.3-0.2-1.8-0.5s-0.9-0.8-1.2-1.4
|
||||
c-0.3-0.6-0.4-1.3-0.4-2.1c0-1.2,0.3-2.2,0.9-2.9c0.6-0.7,1.5-1,2.5-1c1,0,1.9,0.3,2.5,1C44.4,406.2,44.7,407.2,44.7,408.3z
|
||||
M39,408.3c0,1,0.2,1.7,0.6,2.2c0.4,0.5,0.9,0.8,1.7,0.8c0.7,0,1.3-0.2,1.7-0.8c0.4-0.5,0.6-1.2,0.6-2.2c0-1-0.2-1.7-0.6-2.2
|
||||
c-0.4-0.5-1-0.7-1.7-0.7c-0.7,0-1.3,0.2-1.7,0.7C39.2,406.7,39,407.4,39,408.3z"/>
|
||||
<path d="M48.4,412.1l-2.8-7.5h1.2l1.6,4.4c0.4,1,0.6,1.7,0.6,2H49c0.1-0.2,0.2-0.7,0.5-1.5c0.3-0.8,0.9-2.4,1.8-5h1.2l-2.8,7.5
|
||||
H48.4z"/>
|
||||
<path d="M56.9,412.2c-1.1,0-2-0.3-2.6-1c-0.6-0.7-1-1.6-1-2.8c0-1.2,0.3-2.2,0.9-2.9s1.4-1.1,2.4-1.1c0.9,0,1.7,0.3,2.2,0.9
|
||||
c0.5,0.6,0.8,1.4,0.8,2.4v0.7h-5.2c0,0.9,0.2,1.5,0.7,2c0.4,0.5,1,0.7,1.8,0.7c0.8,0,1.6-0.2,2.4-0.5v1c-0.4,0.2-0.8,0.3-1.1,0.4
|
||||
C57.8,412.2,57.4,412.2,56.9,412.2z M56.6,405.4c-0.6,0-1.1,0.2-1.4,0.6c-0.4,0.4-0.6,0.9-0.6,1.6h3.9c0-0.7-0.2-1.3-0.5-1.6
|
||||
C57.6,405.6,57.2,405.4,56.6,405.4z"/>
|
||||
<path d="M65,404.5c0.3,0,0.6,0,0.9,0.1l-0.2,1.1c-0.3-0.1-0.6-0.1-0.8-0.1c-0.6,0-1.1,0.2-1.6,0.7s-0.6,1.1-0.6,1.8v4h-1.1v-7.5
|
||||
h0.9l0.1,1.4h0.1c0.3-0.5,0.6-0.9,1-1.1C64.1,404.6,64.5,404.5,65,404.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M23.1,432.5L23.1,432.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.6-0.5-1-1-1c-0.3,0-0.6,0.1-0.7,0.3l0,0l-3,3.3l-3-3.3
|
||||
l0,0c-0.2-0.2-0.5-0.3-0.7-0.3c-0.6,0-1,0.5-1,1c0,0.3,0.1,0.5,0.3,0.7l0,0l3.7,4.1c0.2,0.2,0.5,0.3,0.8,0.3s0.6-0.1,0.8-0.3
|
||||
L23.1,432.5z"/>
|
||||
<path class="st0" d="M14.2,389.2L14.2,389.2c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.6,0.5,1,1,1c0.3,0,0.6-0.1,0.7-0.3l0,0l3-3.3l3,3.3
|
||||
l0,0c0.2,0.2,0.5,0.3,0.7,0.3c0.6,0,1-0.5,1-1c0-0.3-0.1-0.5-0.3-0.7l0,0l-3.7-4.1c-0.2-0.2-0.5-0.3-0.8-0.3s-0.6,0.1-0.8,0.3
|
||||
L14.2,389.2z"/>
|
||||
<line class="st5" x1="18.6" y1="392" x2="18.6" y2="430"/>
|
||||
</g>
|
||||
<line class="st6" x1="-167.8" y1="441.2" x2="87.2" y2="441.2"/>
|
||||
</g>
|
||||
<path class="st0" d="M-157.2,419.8c-4.7,0-8.5,3.8-8.5,8.5c0,4.7,5.2,8.6,8.5,11.6c2.7-2.7,8.5-7,8.5-11.6
|
||||
C-148.7,423.6-152.5,419.8-157.2,419.8z M-153.9,431.5h-1.9v-2.2h-2.9v2.2h-1.9v-6.2h1.9v2.2h2.9v-2.2h1.9V431.5z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.4 KiB |
|
@ -0,0 +1,82 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="-173 349.9 264.9 95.1" style="enable-background:new -173 349.9 264.9 95.1;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#71B221;}
|
||||
.st1{fill:#1B171B;}
|
||||
.st2{fill:#B8B8B9;}
|
||||
.st3{fill:none;}
|
||||
.st4{enable-background:new ;}
|
||||
.st5{fill:none;stroke:#71B221;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st6{fill:none;stroke:#71B221;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:7.4103,7.4103;}
|
||||
.st7{fill:none;stroke:#71B221;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:7.7778,7.7778;}
|
||||
.st8{fill:none;stroke:#1B171B;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="M-152.8,414.3L-152.8,414.3c0.2-0.2,0.3-0.4,0.3-0.7c0-0.6-0.5-1-1-1c-0.3,0-0.6,0.1-0.7,0.3l0,0l-3,3.3
|
||||
l-3-3.3l0,0c-0.2-0.2-0.5-0.3-0.7-0.3c-0.6,0-1,0.5-1,1c0,0.3,0.1,0.5,0.3,0.7l0,0l3.7,4.1c0.2,0.2,0.5,0.3,0.8,0.3
|
||||
s0.6-0.1,0.8-0.3L-152.8,414.3z"/>
|
||||
<g>
|
||||
<g>
|
||||
<path class="st0" d="M-25.1,375.5c2.6,0,4.8,1.7,5.7,4H4v4h-23.4c-0.8,2.3-3,4-5.7,4c-3.3,0-6-2.7-6-6
|
||||
C-31.1,378.2-28.4,375.5-25.1,375.5z"/>
|
||||
<path class="st1" d="M18.7,368.5c7.2,0,13.3,4.6,15.6,11h21.9c0.8-2.3,3-4,5.7-4c3.3,0,6,2.7,6,6s-2.7,6-6,6
|
||||
c-2.6,0-4.8-1.7-5.7-4h-21H3.4H2.2C3,375.1,10.1,368.5,18.7,368.5z"/>
|
||||
</g>
|
||||
<rect x="39.2" y="372" class="st2" width="46" height="2.9"/>
|
||||
<rect x="-47.3" y="372" class="st2" width="46" height="2.9"/>
|
||||
</g>
|
||||
<rect x="-131" y="396.2" class="st3" width="86.5" height="32.1"/>
|
||||
<g class="st4">
|
||||
<path d="M-128.5,402.7v4.2h-1.2v-10h2.7c1.2,0,2.1,0.2,2.7,0.7s0.9,1.2,0.9,2.1c0,1.3-0.7,2.2-2,2.7l2.7,4.5h-1.4l-2.4-4.2
|
||||
L-128.5,402.7L-128.5,402.7z M-128.5,401.7h1.6c0.8,0,1.4-0.2,1.8-0.5s0.6-0.8,0.6-1.5s-0.2-1.1-0.6-1.4s-1-0.4-1.9-0.4h-1.5
|
||||
V401.7z"/>
|
||||
<path d="M-118,407c-1.1,0-2-0.3-2.6-1s-1-1.6-1-2.8c0-1.2,0.3-2.2,0.9-2.9s1.4-1.1,2.4-1.1c0.9,0,1.7,0.3,2.2,0.9s0.8,1.4,0.8,2.4
|
||||
v0.7h-5.2c0,0.9,0.2,1.5,0.7,2s1,0.7,1.8,0.7s1.6-0.2,2.4-0.5v1c-0.4,0.2-0.8,0.3-1.1,0.4C-117.1,407-117.5,407-118,407z
|
||||
M-118.3,400.2c-0.6,0-1.1,0.2-1.4,0.6s-0.6,0.9-0.6,1.6h3.9c0-0.7-0.2-1.3-0.5-1.6C-117.3,400.4-117.7,400.2-118.3,400.2z"/>
|
||||
<path d="M-110.9,406.1c0.2,0,0.4,0,0.6,0s0.3-0.1,0.4-0.1v0.9c-0.1,0.1-0.3,0.1-0.5,0.1s-0.5,0.1-0.6,0.1c-1.4,0-2.2-0.8-2.2-2.3
|
||||
v-4.5h-1.1v-0.5l1.1-0.5l0.5-1.6h0.7v1.7h2.2v0.9h-2.2v4.4c0,0.5,0.1,0.8,0.3,1S-111.3,406.1-110.9,406.1z"/>
|
||||
<path d="M-107.3,399.4v4.9c0,0.6,0.1,1.1,0.4,1.4s0.7,0.5,1.3,0.5c0.8,0,1.4-0.2,1.7-0.6s0.5-1.1,0.5-2.1v-3.9h1.1v7.5h-0.9
|
||||
l-0.2-1h-0.1c-0.2,0.4-0.6,0.7-1,0.8s-0.9,0.3-1.4,0.3c-0.9,0-1.6-0.2-2-0.6s-0.7-1.1-0.7-2.1v-4.9h1.3V399.4z"/>
|
||||
<path d="M-96.4,399.2c0.3,0,0.6,0,0.9,0.1l-0.2,1.1c-0.3-0.1-0.6-0.1-0.8-0.1c-0.6,0-1.1,0.2-1.6,0.7s-0.6,1.1-0.6,1.8v4h-1.1
|
||||
v-7.5h0.9l0.1,1.4h0.1c0.3-0.5,0.6-0.9,1-1.1S-96.8,399.2-96.4,399.2z"/>
|
||||
<path d="M-88.9,406.9v-4.8c0-0.6-0.1-1.1-0.4-1.4s-0.7-0.5-1.3-0.5c-0.8,0-1.4,0.2-1.7,0.6s-0.5,1.1-0.5,2.1v3.9h-1.1v-7.5h0.9
|
||||
l0.2,1h0.1c0.2-0.4,0.6-0.7,1-0.9c0.4-0.2,0.9-0.3,1.4-0.3c0.9,0,1.6,0.2,2,0.7c0.5,0.4,0.7,1.1,0.7,2.1v4.9L-88.9,406.9
|
||||
L-88.9,406.9z"/>
|
||||
<path d="M-79.4,406.1c0.2,0,0.4,0,0.6,0s0.3-0.1,0.4-0.1v0.9c-0.1,0.1-0.3,0.1-0.5,0.1s-0.5,0.1-0.6,0.1c-1.4,0-2.2-0.8-2.2-2.3
|
||||
v-4.5h-1.1v-0.5l1.1-0.5l0.5-1.6h0.7v1.7h2.2v0.9h-2.2v4.4c0,0.5,0.1,0.8,0.3,1S-79.8,406.1-79.4,406.1z"/>
|
||||
<path d="M-70.4,403.1c0,1.2-0.3,2.2-0.9,2.9c-0.6,0.7-1.5,1-2.5,1c-0.7,0-1.3-0.2-1.8-0.5s-0.9-0.8-1.2-1.4s-0.4-1.3-0.4-2.1
|
||||
c0-1.2,0.3-2.2,0.9-2.9c0.6-0.7,1.5-1,2.5-1s1.9,0.3,2.5,1S-70.4,401.9-70.4,403.1z M-76.1,403.1c0,1,0.2,1.7,0.6,2.2
|
||||
s0.9,0.8,1.7,0.8s1.3-0.2,1.7-0.7c0.4-0.5,0.6-1.2,0.6-2.2s-0.2-1.7-0.6-2.2s-1-0.7-1.7-0.7s-1.3,0.2-1.7,0.7
|
||||
S-76.1,402.1-76.1,403.1z"/>
|
||||
</g>
|
||||
<g class="st4">
|
||||
<path d="M-122.1,423.7h-1.2V419h-5.3v4.7h-1.2v-10h1.2v4.3h5.3v-4.3h1.2C-122.1,413.7-122.1,423.7-122.1,423.7z"/>
|
||||
<path d="M-113,419.9c0,1.2-0.3,2.2-0.9,2.9c-0.6,0.7-1.5,1-2.5,1c-0.7,0-1.3-0.2-1.8-0.5s-0.9-0.8-1.2-1.4s-0.4-1.3-0.4-2.1
|
||||
c0-1.2,0.3-2.2,0.9-2.9c0.6-0.7,1.5-1,2.5-1s1.9,0.3,2.5,1S-113,418.7-113,419.9z M-118.7,419.9c0,1,0.2,1.7,0.6,2.2
|
||||
s0.9,0.8,1.7,0.8s1.3-0.2,1.7-0.7c0.4-0.5,0.6-1.2,0.6-2.2s-0.2-1.7-0.6-2.2s-1-0.7-1.7-0.7s-1.3,0.2-1.7,0.7
|
||||
S-118.7,418.9-118.7,419.9z"/>
|
||||
<path d="M-101.5,423.7v-4.9c0-0.6-0.1-1-0.4-1.3s-0.7-0.4-1.2-0.4c-0.7,0-1.2,0.2-1.6,0.6s-0.5,1-0.5,1.9v4.2h-1.1v-4.9
|
||||
c0-0.6-0.1-1-0.4-1.3s-0.7-0.4-1.2-0.4c-0.7,0-1.2,0.2-1.6,0.6c-0.3,0.4-0.5,1.1-0.5,2.1v3.9h-1.1v-7.5h0.9l0.2,1h0.1
|
||||
c0.2-0.4,0.5-0.6,0.9-0.9s0.8-0.3,1.3-0.3c1.2,0,1.9,0.4,2.3,1.3h0.1c0.2-0.4,0.5-0.7,1-0.9s0.9-0.3,1.4-0.3
|
||||
c0.8,0,1.5,0.2,1.9,0.7c0.4,0.4,0.6,1.1,0.6,2.1v4.9h-1.1V423.7z"/>
|
||||
<path d="M-94.8,423.8c-1.1,0-2-0.3-2.6-1s-1-1.6-1-2.8c0-1.2,0.3-2.2,0.9-2.9s1.4-1.1,2.4-1.1c0.9,0,1.7,0.3,2.2,0.9
|
||||
s0.8,1.4,0.8,2.4v0.7h-5.2c0,0.9,0.2,1.5,0.7,2s1,0.7,1.8,0.7s1.6-0.2,2.4-0.5v1c-0.4,0.2-0.8,0.3-1.1,0.4
|
||||
C-93.9,423.8-94.3,423.8-94.8,423.8z M-95.1,417c-0.6,0-1.1,0.2-1.4,0.6s-0.6,0.9-0.6,1.6h3.9c0-0.7-0.2-1.3-0.5-1.6
|
||||
C-94.1,417.2-94.6,417-95.1,417z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<line class="st5" x1="-52.9" y1="379.2" x2="-56.9" y2="379.2"/>
|
||||
<line class="st6" x1="-64.3" y1="379.2" x2="-149.6" y2="379.2"/>
|
||||
<polyline class="st5" points="-153.3,379.2 -157.3,379.2 -157.3,383.2 "/>
|
||||
<line class="st7" x1="-157.3" y1="391" x2="-157.3" y2="402.6"/>
|
||||
<line class="st5" x1="-157.3" y1="406.5" x2="-157.3" y2="410.5"/>
|
||||
</g>
|
||||
</g>
|
||||
<line class="st8" x1="-167.8" y1="442" x2="87.2" y2="442"/>
|
||||
<path class="st0" d="M-157.2,420.6c-4.7,0-8.5,3.8-8.5,8.5s5.2,8.6,8.5,11.6c2.7-2.7,8.5-7,8.5-11.6
|
||||
C-148.7,424.4-152.5,420.6-157.2,420.6z M-153.9,432.2h-1.9V430h-2.9v2.2h-1.9V426h1.9v2.2h2.9V426h1.9V432.2z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.8 KiB |
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="141.7px" height="141.7px" viewBox="0 0 141.7 141.7" enable-background="new 0 0 141.7 141.7" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#818181" d="M70.9,130l60.9-61.9c0.8-0.8,1.2-1.9,1.1-3h0c-4.2-30.5-30.4-54.1-62-54.1c-31.5,0-57.7,23.5-62,53.8
|
||||
c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1h0c-0.1,1,0.3,2.1,1.1,2.9l42.9,43.8 M79,111.2l14.8-49.6c3.3-4.7,8.7-7.8,14.9-7.8
|
||||
c7.2,0,13.4,4.2,16.4,10.3L79,111.2z M55.7,62c3.2-4.9,8.8-8.2,15.2-8.2c6.2,0,11.7,3.1,15,7.9l-14.9,50L55.7,62z M16.5,63.8
|
||||
c3-6,9.1-10.1,16.2-10.1c6.2,0,11.7,3.1,14.9,7.8l15.1,49.4L16.5,63.8z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 844 B |
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="141.7px" height="141.7px" viewBox="0 0 141.7 141.7" enable-background="new 0 0 141.7 141.7" xml:space="preserve">
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M70.9,130l60.9-61.9c0.8-0.8,1.2-1.9,1.1-3h0c-4.2-30.5-30.4-54.1-62-54.1c-31.5,0-57.7,23.5-62,53.8
|
||||
c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1h0c-0.1,1,0.3,2.1,1.1,2.9l42.9,43.8 M79,111.2l14.8-49.6c3.3-4.7,8.7-7.8,14.9-7.8
|
||||
c7.2,0,13.4,4.2,16.4,10.3L79,111.2z M55.7,62c3.2-4.9,8.8-8.2,15.2-8.2c6.2,0,11.7,3.1,15,7.9l-14.9,50L55.7,62z M16.5,63.8
|
||||
c3-6,9.1-10.1,16.2-10.1c6.2,0,11.7,3.1,14.9,7.8l15.1,49.4L16.5,63.8z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 844 B |
|
@ -107,6 +107,9 @@ function configuration_backup(callback) {
|
|||
}
|
||||
if (semver.gte(CONFIG.apiVersion, "1.15.0")) {
|
||||
uniqueData.push(MSP_codes.MSP_SENSOR_ALIGNMENT);
|
||||
uniqueData.push(MSP_codes.MSP_RX_CONFIG);
|
||||
uniqueData.push(MSP_codes.MSP_FAILSAFE_CONFIG);
|
||||
uniqueData.push(MSP_codes.MSP_RXFAIL_CONFIG);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -137,6 +140,9 @@ function configuration_backup(callback) {
|
|||
}
|
||||
if (semver.gte(CONFIG.apiVersion, "1.15.0")) {
|
||||
configuration.SENSOR_ALIGNMENT = jQuery.extend(true, {}, SENSOR_ALIGNMENT);
|
||||
configuration.RX_CONFIG = jQuery.extend(true, {}, RX_CONFIG);
|
||||
configuration.FAILSAFE_CONFIG = jQuery.extend(true, {}, FAILSAFE_CONFIG);
|
||||
configuration.RXFAIL_CONFIG = jQuery.extend(true, [], RXFAIL_CONFIG);
|
||||
}
|
||||
|
||||
save();
|
||||
|
@ -544,6 +550,51 @@ function configuration_restore(callback) {
|
|||
appliedMigrationsCount++;
|
||||
}
|
||||
|
||||
// api 1.15 exposes RX_CONFIG, FAILSAFE_CONFIG and RXFAIL_CONFIG configuration
|
||||
|
||||
if (configuration.RX_CONFIG == undefined) {
|
||||
configuration.RX_CONFIG = {
|
||||
serialrx_provider: 0,
|
||||
spektrum_sat_bind: 0,
|
||||
midrc: 1500,
|
||||
mincheck: 1100,
|
||||
maxcheck: 1900,
|
||||
rx_min_usec: 885,
|
||||
rx_max_usec: 2115
|
||||
};
|
||||
}
|
||||
|
||||
if (configuration.FAILSAFE_CONFIG == undefined) {
|
||||
configuration.FAILSAFE_CONFIG = {
|
||||
failsafe_delay: 10,
|
||||
failsafe_off_delay: 200,
|
||||
failsafe_throttle: 1000,
|
||||
failsafe_kill_switch: 0,
|
||||
failsafe_throttle_low_delay: 100,
|
||||
failsafe_procedure: 0
|
||||
};
|
||||
}
|
||||
|
||||
if (configuration.RXFAIL_CONFIG == undefined) {
|
||||
configuration.RXFAIL_CONFIG = [
|
||||
{mode: 0, value: 1500},
|
||||
{mode: 0, value: 1500},
|
||||
{mode: 0, value: 1500},
|
||||
{mode: 0, value: 875}
|
||||
];
|
||||
|
||||
for (var i = 0; i < 14; i++) {
|
||||
var rxfailChannel = {
|
||||
mode: 1,
|
||||
value: 1500
|
||||
};
|
||||
configuration.RXFAIL_CONFIG.push(rxfailChannel);
|
||||
}
|
||||
}
|
||||
|
||||
appliedMigrationsCount++;
|
||||
}
|
||||
|
||||
if (appliedMigrationsCount > 0) {
|
||||
GUI.log(chrome.i18n.getMessage('configMigrationSuccessful', [appliedMigrationsCount]));
|
||||
}
|
||||
|
@ -661,6 +712,9 @@ function configuration_restore(callback) {
|
|||
}
|
||||
if (semver.gte(CONFIG.apiVersion, "1.15.0")) {
|
||||
uniqueData.push(MSP_codes.MSP_SET_SENSOR_ALIGNMENT);
|
||||
uniqueData.push(MSP_codes.MSP_SET_RX_CONFIG);
|
||||
uniqueData.push(MSP_codes.MSP_SET_FAILSAFE_CONFIG);
|
||||
uniqueData.push(MSP_codes.MSP_SET_RXFAIL_CONFIG);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -673,7 +727,10 @@ function configuration_restore(callback) {
|
|||
ARMING_CONFIG = configuration.ARMING_CONFIG;
|
||||
FC_CONFIG = configuration.FC_CONFIG;
|
||||
_3D = configuration._3D;
|
||||
SENSOR_ALIGNMENT = configuration.SENSOR_ALIGNMENT;
|
||||
SENSOR_ALIGNMENT = configuration.SENSOR_ALIGNMENT;
|
||||
RX_CONFIG = configuration.RX_CONFIG;
|
||||
FAILSAFE_CONFIG = configuration.FAILSAFE_CONFIG;
|
||||
RXFAIL_CONFIG = configuration.RXFAIL_CONFIG;
|
||||
}
|
||||
|
||||
function send_unique_data_item() {
|
||||
|
@ -726,4 +783,4 @@ function configuration_restore(callback) {
|
|||
|
||||
upload();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -191,3 +191,24 @@ var SENSOR_ALIGNMENT = {
|
|||
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 = [];
|
||||
|
|
|
@ -18,6 +18,7 @@ var GUI_control = function () {
|
|||
'help'
|
||||
];
|
||||
this.defaultAllowedTabsWhenConnected = [
|
||||
'failsafe',
|
||||
'adjustments',
|
||||
'auxiliary',
|
||||
'cli',
|
||||
|
|
104
js/msp.js
104
js/msp.js
|
@ -13,6 +13,8 @@ var MSP_codes = {
|
|||
MSP_SET_CHANNEL_FORWARDING: 33,
|
||||
MSP_MODE_RANGES: 34,
|
||||
MSP_SET_MODE_RANGE: 35,
|
||||
MSP_RX_CONFIG: 44,
|
||||
MSP_SET_RX_CONFIG: 45,
|
||||
MSP_LED_STRIP_CONFIG: 48,
|
||||
MSP_SET_LED_STRIP_CONFIG: 49,
|
||||
MSP_ADJUSTMENT_RANGES: 52,
|
||||
|
@ -29,6 +31,10 @@ var MSP_codes = {
|
|||
MSP_DATAFLASH_ERASE: 72,
|
||||
MSP_LOOP_TIME: 73,
|
||||
MSP_SET_LOOP_TIME: 74,
|
||||
MSP_FAILSAFE_CONFIG: 75,
|
||||
MSP_SET_FAILSAFE_CONFIG: 76,
|
||||
MSP_RXFAIL_CONFIG: 77,
|
||||
MSP_SET_RXFAIL_CONFIG: 78,
|
||||
|
||||
// Multiwii MSP commands
|
||||
MSP_IDENT: 100,
|
||||
|
@ -774,6 +780,7 @@ var MSP = {
|
|||
ADJUSTMENT_RANGES.push(adjustmentRange);
|
||||
}
|
||||
break;
|
||||
|
||||
case MSP_codes.MSP_CHANNEL_FORWARDING:
|
||||
for (var i = 0; i < data.byteLength && i < SERVO_CONFIG.length; i ++) {
|
||||
var channelIndex = data.getUint8(i);
|
||||
|
@ -785,6 +792,56 @@ var MSP = {
|
|||
}
|
||||
break;
|
||||
|
||||
case MSP_codes.MSP_RX_CONFIG:
|
||||
var offset = 0;
|
||||
RX_CONFIG.serialrx_provider = data.getUint8(offset, 1);
|
||||
offset++;
|
||||
RX_CONFIG.maxcheck = data.getUint16(offset, 1);
|
||||
offset += 2;
|
||||
RX_CONFIG.midrc = data.getUint16(offset, 1);
|
||||
offset += 2;
|
||||
RX_CONFIG.mincheck = data.getUint16(offset, 1);
|
||||
offset += 2;
|
||||
RX_CONFIG.spektrum_sat_bind = data.getUint8(offset, 1);
|
||||
offset++;
|
||||
RX_CONFIG.rx_min_usec = data.getUint16(offset, 1);
|
||||
offset += 2;
|
||||
RX_CONFIG.rx_max_usec = data.getUint16(offset, 1);
|
||||
offset += 2;
|
||||
break;
|
||||
|
||||
case MSP_codes.MSP_FAILSAFE_CONFIG:
|
||||
var offset = 0;
|
||||
FAILSAFE_CONFIG.failsafe_delay = data.getUint8(offset, 1);
|
||||
offset++;
|
||||
FAILSAFE_CONFIG.failsafe_off_delay = data.getUint8(offset, 1);
|
||||
offset++;
|
||||
FAILSAFE_CONFIG.failsafe_throttle = data.getUint16(offset, 1);
|
||||
offset += 2;
|
||||
FAILSAFE_CONFIG.failsafe_kill_switch = data.getUint8(offset, 1);
|
||||
offset++;
|
||||
FAILSAFE_CONFIG.failsafe_throttle_low_delay = data.getUint16(offset, 1);
|
||||
offset += 2;
|
||||
FAILSAFE_CONFIG.failsafe_procedure = data.getUint8(offset, 1);
|
||||
offset++;
|
||||
break;
|
||||
|
||||
case MSP_codes.MSP_RXFAIL_CONFIG:
|
||||
RXFAIL_CONFIG = []; // empty the array as new data is coming in
|
||||
|
||||
var channelCount = data.byteLength / 3;
|
||||
|
||||
var offset = 0;
|
||||
for (var i = 0; offset < data.byteLength && i < channelCount; i++, offset++) {
|
||||
var rxfailChannel = {
|
||||
mode: data.getUint8(offset++, 1),
|
||||
value: data.getUint16(offset++, 1)
|
||||
};
|
||||
RXFAIL_CONFIG.push(rxfailChannel);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case MSP_codes.MSP_LED_STRIP_CONFIG:
|
||||
LED_STRIP = [];
|
||||
|
||||
|
@ -877,7 +934,15 @@ var MSP = {
|
|||
case MSP_codes.MSP_SET_SENSOR_ALIGNMENT:
|
||||
console.log('Sensor alignment saved');
|
||||
break;
|
||||
|
||||
case MSP_codes.MSP_SET_RX_CONFIG:
|
||||
console.log('Rx config saved');
|
||||
break;
|
||||
case MSP_codes.MSP_SET_RXFAIL_CONFIG:
|
||||
console.log('Rxfail config saved');
|
||||
break;
|
||||
case MSP_codes.MSP_SET_FAILSAFE_CONFIG:
|
||||
console.log('Failsafe config saved');
|
||||
break;
|
||||
default:
|
||||
console.log('Unknown code detected: ' + code);
|
||||
} else {
|
||||
|
@ -1063,7 +1128,7 @@ MSP.crunch = function (code) {
|
|||
buffer.push(lowByte(RC_tuning.dynamic_THR_breakpoint));
|
||||
buffer.push(highByte(RC_tuning.dynamic_THR_breakpoint));
|
||||
}
|
||||
if (semver.gte(CONFIG.apiVersion, "1.10.0")) {
|
||||
if (semver.gte(CONFIG.apiVersion, "1.10.0")) {
|
||||
buffer.push(Math.round(RC_tuning.RC_YAW_EXPO * 100));
|
||||
}
|
||||
break;
|
||||
|
@ -1119,6 +1184,41 @@ MSP.crunch = function (code) {
|
|||
buffer.push(Math.round(MISC.vbatmaxcellvoltage * 10));
|
||||
buffer.push(Math.round(MISC.vbatwarningcellvoltage * 10));
|
||||
break;
|
||||
|
||||
case MSP_codes.MSP_SET_RX_CONFIG:
|
||||
buffer.push(RX_CONFIG.serialrx_provider);
|
||||
buffer.push(lowByte(RX_CONFIG.maxcheck));
|
||||
buffer.push(highByte(RX_CONFIG.maxcheck));
|
||||
buffer.push(lowByte(RX_CONFIG.midrc));
|
||||
buffer.push(highByte(RX_CONFIG.midrc));
|
||||
buffer.push(lowByte(RX_CONFIG.mincheck));
|
||||
buffer.push(highByte(RX_CONFIG.mincheck));
|
||||
buffer.push(RX_CONFIG.spektrum_sat_bind);
|
||||
buffer.push(lowByte(RX_CONFIG.rx_min_usec));
|
||||
buffer.push(highByte(RX_CONFIG.rx_min_usec));
|
||||
buffer.push(lowByte(RX_CONFIG.rx_max_usec));
|
||||
buffer.push(highByte(RX_CONFIG.rx_max_usec));
|
||||
break;
|
||||
|
||||
case MSP_codes.MSP_SET_FAILSAFE_CONFIG:
|
||||
buffer.push(FAILSAFE_CONFIG.failsafe_delay);
|
||||
buffer.push(FAILSAFE_CONFIG.failsafe_off_delay);
|
||||
buffer.push(lowByte(FAILSAFE_CONFIG.failsafe_throttle));
|
||||
buffer.push(highByte(FAILSAFE_CONFIG.failsafe_throttle));
|
||||
buffer.push(FAILSAFE_CONFIG.failsafe_kill_switch);
|
||||
buffer.push(lowByte(FAILSAFE_CONFIG.failsafe_throttle_low_delay));
|
||||
buffer.push(highByte(FAILSAFE_CONFIG.failsafe_throttle_low_delay));
|
||||
buffer.push(FAILSAFE_CONFIG.failsafe_procedure);
|
||||
break;
|
||||
|
||||
case MSP_codes.MSP_SET_RXFAIL_CONFIG:
|
||||
for (var i = 0; i < RXFAIL_CONFIG.length; i++) {
|
||||
buffer.push(RXFAIL_CONFIG[i].mode);
|
||||
buffer.push(lowByte(RXFAIL_CONFIG[i].value));
|
||||
buffer.push(highByte(RXFAIL_CONFIG[i].value));
|
||||
}
|
||||
break;
|
||||
|
||||
case MSP_codes.MSP_SET_CHANNEL_FORWARDING:
|
||||
for (var i = 0; i < SERVO_CONFIG.length; i++) {
|
||||
var out = SERVO_CONFIG[i].indexOfChannelToForward;
|
||||
|
|
40
main.css
40
main.css
|
@ -726,6 +726,13 @@ li.active .ic_flasher {
|
|||
}
|
||||
|
||||
/* SPARE Tab-Icons */
|
||||
.ic_failsafe {
|
||||
background-image: url(images/icons/cf_icon_failsafe_grey.svg);
|
||||
}
|
||||
|
||||
li.active .ic_failsafe {
|
||||
background-image: url(images/icons/cf_icon_failsafe_white.svg);
|
||||
}
|
||||
.ic_backup {
|
||||
background-image: url(images/icons/cf_icon_backup_grey.svg);
|
||||
}
|
||||
|
@ -1038,6 +1045,35 @@ dialog {
|
|||
font-family: 'open_sansregular', Arial;
|
||||
}
|
||||
|
||||
.gui_warning {
|
||||
background: #ffdddd;
|
||||
}
|
||||
|
||||
.gui_note {
|
||||
background: #ffffdd;
|
||||
}
|
||||
|
||||
.gui_warning .gui_box_titlebar {
|
||||
background-color: #dc0000;
|
||||
background-image: linear-gradient(-45deg, rgba(255, 255, 255, .3) 10%, transparent 10%, transparent 20%,
|
||||
rgba(255, 255, 255, .3) 20%, rgba(255, 255, 255, .3) 30%, transparent 30%, transparent 40%,
|
||||
rgba(255, 255, 255, .3) 40%, rgba(255, 255, 255, .3) 50%, transparent 50%, transparent 60%,
|
||||
rgba(255, 255, 255, .3) 60%, rgba(255, 255, 255, .3) 70%, transparent 70%, transparent 80%,
|
||||
rgba(255, 255, 255, .3) 80%, rgba(255, 255, 255, .3) 90%, transparent 90%, transparent 100%,
|
||||
rgba(255, 255, 255, .4) 100%, transparent);
|
||||
}
|
||||
|
||||
.gui_note .gui_box_titlebar {
|
||||
background-color: #cccc00;
|
||||
background-image: linear-gradient(-45deg, rgba(255, 255, 255, .3) 10%, transparent 10%, transparent 20%,
|
||||
rgba(255, 255, 255, .3) 20%, rgba(255, 255, 255, .3) 30%, transparent 30%, transparent 40%,
|
||||
rgba(255, 255, 255, .3) 40%, rgba(255, 255, 255, .3) 50%, transparent 50%, transparent 60%,
|
||||
rgba(255, 255, 255, .3) 60%, rgba(255, 255, 255, .3) 70%, transparent 70%, transparent 80%,
|
||||
rgba(255, 255, 255, .3) 80%, rgba(255, 255, 255, .3) 90%, transparent 90%, transparent 100%,
|
||||
rgba(255, 255, 255, .4) 100%, transparent);
|
||||
}
|
||||
|
||||
|
||||
.grey {
|
||||
/* background-color:#f5f5f5; */
|
||||
background-color: #f9f9f9
|
||||
|
@ -1307,7 +1343,7 @@ dialog {
|
|||
}
|
||||
|
||||
/* fixing padding for all Tabs*/
|
||||
.tab-setup, .tab-landing, .tab-adjustments, .tab-auxiliary, .tab-cli, .tab-configuration, .tab-dataflash,
|
||||
.tab-setup, .tab-landing, .tab-adjustments, .tab-auxiliary, .tab-cli, .tab-configuration, .tab-failsafe, .tab-dataflash,
|
||||
.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%;
|
||||
|
@ -1469,7 +1505,7 @@ dialog {
|
|||
/* lets see if we really need this? */
|
||||
|
||||
}
|
||||
.tab-setup, .tab-landing, .tab-adjustments, .tab-auxiliary, .tab-cli, .tab-configuration, .tab-dataflash,
|
||||
.tab-setup, .tab-landing, .tab-adjustments, .tab-auxiliary, .tab-cli, .tab-configuration, .tab-failsafe, .tab-dataflash,
|
||||
.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 {
|
||||
|
||||
|
|
36
main.html
36
main.html
|
@ -25,6 +25,7 @@
|
|||
<link type="text/css" rel="stylesheet" href="./tabs/firmware_flasher.css" media="all" />
|
||||
<link type="text/css" rel="stylesheet" href="./tabs/adjustments.css" media="all" />
|
||||
<link type="text/css" rel="stylesheet" href="./tabs/auxiliary.css" media="all" />
|
||||
<link type="text/css" rel="stylesheet" href="./tabs/failsafe.css" media="all" />
|
||||
<link type="text/css" rel="stylesheet" href="./css/opensans_webfontkit/fonts.css" media="all" />
|
||||
<link type="text/css" rel="stylesheet" href="./css/dropdown-lists/css/style_lists.css" media="all" />
|
||||
<link type="text/css" rel="stylesheet" href="./js/libraries/switchery/switchery.css" media="all" />
|
||||
|
@ -75,6 +76,7 @@
|
|||
<script type="text/javascript" src="./tabs/logging.js"></script>
|
||||
<script type="text/javascript" src="./tabs/dataflash.js"></script>
|
||||
<script type="text/javascript" src="./tabs/firmware_flasher.js"></script>
|
||||
<script type="text/javascript" src="./tabs/failsafe.js"></script>
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -180,36 +182,26 @@
|
|||
<div class="tab_container">
|
||||
<div id="tabs">
|
||||
<ul class="mode-disconnected">
|
||||
<li class="tab_landing"><a href="#" i18n="tabLanding" class="tabicon ic_welcome"
|
||||
title="Welcome"></a></li>
|
||||
<li class="tab_help"><a href="#" i18n="tabHelp" class="tabicon ic_help"
|
||||
title="Documentation & Support"></a></li>
|
||||
<li class="tab_firmware_flasher"><a href="#" i18n="tabFirmwareFlasher"
|
||||
class="tabicon ic_flasher" title="Firmware Flasher"></a></li>
|
||||
<li class="tab_landing"><a href="#" i18n="tabLanding" class="tabicon ic_welcome" title="Welcome"></a></li>
|
||||
<li class="tab_help"><a href="#" i18n="tabHelp" class="tabicon ic_help" title="Documentation & Support"></a></li>
|
||||
<li class="tab_firmware_flasher"><a href="#" i18n="tabFirmwareFlasher" class="tabicon ic_flasher" title="Firmware Flasher"></a></li>
|
||||
</ul>
|
||||
<ul class="mode-connected">
|
||||
<li class="tab_setup"><a href="#" i18n="tabSetup" class="tabicon ic_setup" title="Setup"></a></li>
|
||||
<li class="tab_ports"><a href="#" i18n="tabPorts" class="tabicon ic_ports" title="Ports"></a></li>
|
||||
<li class="tab_configuration"><a href="#" i18n="tabConfiguration" class="tabicon ic_config"
|
||||
title="Configuration"></a></li>
|
||||
<li class="tab_pid_tuning"><a href="#" i18n="tabPidTuning" class="tabicon ic_pid"
|
||||
title="PID Tuning"></a></li>
|
||||
<li class="tab_configuration"><a href="#" i18n="tabConfiguration" class="tabicon ic_config" title="Configuration"></a></li>
|
||||
<li class="tab_failsafe"><a href="#" class="tabicon ic_failsafe" title="Failsafe">Failsafe</a></li>
|
||||
<li class="tab_pid_tuning"><a href="#" i18n="tabPidTuning" class="tabicon ic_pid" title="PID Tuning"></a></li>
|
||||
<li class="tab_receiver"><a href="#" i18n="tabReceiver" class="tabicon ic_rx" title="Receiver"></a></li>
|
||||
<li class="tab_auxiliary"><a href="#" i18n="tabAuxiliary" class="tabicon ic_modes"
|
||||
title="Modes"></a></li>
|
||||
<li class="tab_adjustments"><a href="#" i18n="tabAdjustments" class="tabicon ic_adjust"
|
||||
title="Adjustments"></a></li>
|
||||
<li class="tab_auxiliary"><a href="#" i18n="tabAuxiliary" class="tabicon ic_modes" title="Modes"></a></li>
|
||||
<li class="tab_adjustments"><a href="#" i18n="tabAdjustments" class="tabicon ic_adjust" title="Adjustments"></a></li>
|
||||
<li class="tab_servos"><a href="#" i18n="tabServos" class="tabicon ic_servo" title="Servos"></a></li>
|
||||
<li class="tab_gps"><a href="#" i18n="tabGPS" class="tabicon ic_gps" title="GPS"></a></li>
|
||||
<li class="tab_motors"><a href="#" i18n="tabMotorTesting" class="tabicon ic_motor"
|
||||
title="Motors"></a></li>
|
||||
<li class="tab_led_strip"><a href="#" i18n="tabLedStrip" class="tabicon ic_led"
|
||||
title="LED Strip"></a></li>
|
||||
<li class="tab_sensors"><a href="#" i18n="tabRawSensorData" class="tabicon ic_sensors"
|
||||
title="Sensors"></a></li>
|
||||
<li class="tab_motors"><a href="#" i18n="tabMotorTesting" class="tabicon ic_motor" title="Motors"></a></li>
|
||||
<li class="tab_led_strip"><a href="#" i18n="tabLedStrip" class="tabicon ic_led" title="LED Strip"></a></li>
|
||||
<li class="tab_sensors"><a href="#" i18n="tabRawSensorData" class="tabicon ic_sensors" title="Sensors"></a></li>
|
||||
<li class="tab_logging"><a href="#" i18n="tabLogging" class="tabicon ic_log" title="Logging"></a></li>
|
||||
<li class="tab_dataflash"><a href="#" i18n="tabDataflash" class="tabicon ic_data"
|
||||
title="Dataflash"></a></li>
|
||||
<li class="tab_dataflash"><a href="#" i18n="tabDataflash" class="tabicon ic_data" title="Dataflash"></a></li>
|
||||
<li class="tab_cli"><a href="#" i18n="tabCLI" class="tabicon ic_cli" title="CLI"></a></li>
|
||||
<!-- spare icons
|
||||
<li class=""><a href="#"class="tabicon ic_mission">Mission (spare icon)</a></li>
|
||||
|
|
4
main.js
4
main.js
|
@ -133,7 +133,9 @@ $(document).ready(function () {
|
|||
case 'led_strip':
|
||||
TABS.led_strip.initialize(content_ready);
|
||||
break;
|
||||
|
||||
case 'failsafe':
|
||||
TABS.failsafe.initialize(content_ready);
|
||||
break;
|
||||
case 'setup':
|
||||
TABS.setup.initialize(content_ready);
|
||||
break;
|
||||
|
|
|
@ -264,10 +264,13 @@
|
|||
}
|
||||
|
||||
.tab-configuration .current .gui_box {
|
||||
min-height: 230px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.tab-configuration .rxprovider {
|
||||
min-height: 214px;
|
||||
}
|
||||
|
||||
.tab-configuration .current td:nth-child(2) {
|
||||
width: 30px;
|
||||
}
|
||||
|
@ -468,7 +471,6 @@
|
|||
float: left;
|
||||
}
|
||||
.tab-configuration .current .gui_box {
|
||||
min-height: 230px;
|
||||
float: left;
|
||||
}
|
||||
}
|
|
@ -192,7 +192,7 @@
|
|||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gui_box grey">
|
||||
<div class="gui_box grey rxprovider">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" i18n="configurationSerialRX"></div>
|
||||
</div>
|
||||
|
@ -202,35 +202,11 @@
|
|||
<p i18n="configurationSerialRXHelp"></p>
|
||||
</div>
|
||||
</div>
|
||||
<select class="serialRX" size="4">
|
||||
<select class="serialRX" size="8">
|
||||
<!-- list generated here -->
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gui_box grey">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" i18n="configurationFailsafe"></div>
|
||||
</div>
|
||||
<div class="spacer_box">
|
||||
<table cellpadding="0" cellspacing="0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th i18n="configurationFeatureEnabled"></th>
|
||||
<th i18n="configurationFeatureDescription"></th>
|
||||
<th i18n="configurationFeatureName"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="features rxFailsafe">
|
||||
<!-- table generated here -->
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="number">
|
||||
<label> <input type="number" name="failsafe_throttle" min="0" max="2000" /> <span
|
||||
i18n="configurationThrottleFailsafe"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rightWrapper current voltage">
|
||||
<div class="gui_box grey">
|
||||
|
@ -314,10 +290,10 @@
|
|||
<div class="gui_box grey">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" i18n="configurationRSSI"></div>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" i18n="configHelp1" style="display:none;"></div>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" i18n="configurationRSSIHelp" style="display:none;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer_box">
|
||||
<table cellpadding="0" cellspacing="0">
|
||||
<thead>
|
||||
|
|
|
@ -306,6 +306,10 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
|||
'XBUS_MODE_B_RJ01'
|
||||
];
|
||||
|
||||
if (semver.gte(CONFIG.apiVersion, "1.15.0")) {
|
||||
serialRXtypes.push('IBUS');
|
||||
}
|
||||
|
||||
var serialRX_e = $('select.serialRX');
|
||||
for (var i = 0; i < serialRXtypes.length; i++) {
|
||||
serialRX_e.append('<option value="' + i + '">' + serialRXtypes[i] + '</option>');
|
||||
|
@ -357,7 +361,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
|||
$('input[name="minthrottle"]').val(MISC.minthrottle);
|
||||
$('input[name="midthrottle"]').val(MISC.midrc);
|
||||
$('input[name="maxthrottle"]').val(MISC.maxthrottle);
|
||||
$('input[name="failsafe_throttle"]').val(MISC.failsafe_throttle);
|
||||
$('input[name="mincommand"]').val(MISC.mincommand);
|
||||
|
||||
// fill battery
|
||||
|
@ -444,7 +447,6 @@ TABS.configuration.initialize = function (callback, scrollPosition) {
|
|||
MISC.minthrottle = parseInt($('input[name="minthrottle"]').val());
|
||||
MISC.midrc = parseInt($('input[name="midthrottle"]').val());
|
||||
MISC.maxthrottle = parseInt($('input[name="maxthrottle"]').val());
|
||||
MISC.failsafe_throttle = parseInt($('input[name="failsafe_throttle"]').val());
|
||||
MISC.mincommand = parseInt($('input[name="mincommand"]').val());
|
||||
|
||||
MISC.vbatmincellvoltage = parseFloat($('input[name="mincellvoltage"]').val());
|
||||
|
|
|
@ -0,0 +1,222 @@
|
|||
.tab-failsafe {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.tab-failsafe .leftWrapper {
|
||||
float: left;
|
||||
width: calc(50% - 20px);
|
||||
}
|
||||
|
||||
.tab-failsafe .rightWrapper {
|
||||
float: left;
|
||||
width: calc(50% - 0px);
|
||||
margin: 0 0 0 20px;
|
||||
}
|
||||
|
||||
.tab-failsafe .number {
|
||||
margin-bottom: 5px;
|
||||
clear: left;
|
||||
}
|
||||
|
||||
.tab-failsafe .number input {
|
||||
width: 50px;
|
||||
padding-left: 3px;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
text-align: left;
|
||||
border: 1px solid silver;
|
||||
border-radius: 3px;
|
||||
margin-right: 11px;
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.tab-failsafe .number input.disabled {
|
||||
width: 43px;
|
||||
padding: 0px 5px;
|
||||
background-color: #ececec;
|
||||
}
|
||||
|
||||
.tab-failsafe .number span {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.tab-failsafe .checkbox {
|
||||
float: left;
|
||||
width: 100%;
|
||||
margin-bottom: 6px;
|
||||
padding-bottom: 5px;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.tab-failsafe .subline {
|
||||
float:left;
|
||||
width:100%;
|
||||
font-size: 13px;
|
||||
margin-top:15px;
|
||||
margin-bottom:5px;
|
||||
}
|
||||
|
||||
.tab-failsafe .radioarea {
|
||||
float:left;
|
||||
width:100%;
|
||||
border-radius:5px;
|
||||
background-color:#ededed;
|
||||
margin-bottom:0px;
|
||||
margin-top:5px;
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.tab-failsafe .radiobuttons {
|
||||
float: left;
|
||||
width: 50%;
|
||||
margin-top: 38px;
|
||||
margin-left: 15px;
|
||||
font-size: 12px;
|
||||
font-family: 'open_sansregular', Arial;
|
||||
}
|
||||
|
||||
.tab-failsafe .radiobuttons input {
|
||||
margin-right: 8px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.tab-failsafe .proceduresettings {
|
||||
padding:10px;
|
||||
margin-top: 75px;
|
||||
}
|
||||
|
||||
.tab-failsafe .radiobuttons label {
|
||||
float: left;
|
||||
width:130px;
|
||||
margin-top: -2px;
|
||||
}
|
||||
|
||||
.tab-failsafe .pro1 {
|
||||
background-image:url(../images/icons/cf_failsafe_procedure1.svg);
|
||||
background-position: top right 10px;
|
||||
background-size: 200px;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.tab-failsafe .pro2 {
|
||||
background-image:url(../images/icons/cf_failsafe_procedure2.svg);
|
||||
background-position: top right 10px;
|
||||
background-size: 200px;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.tab-failsafe .pro3 {
|
||||
background-image:url(../images/icons/cf_failsafe_procedure3.svg);
|
||||
background-position: top right 10px;
|
||||
background-size: 200px;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.tab-failsafe .pro4 {
|
||||
background-image:url(../images/icons/cf_failsafe_procedure4.svg);
|
||||
background-position: top right 10px;
|
||||
background-size: 200px;
|
||||
background-repeat:no-repeat;
|
||||
}
|
||||
|
||||
.tab-failsafe .spacer_box .helpicon {
|
||||
margin-top:3px;
|
||||
margin-right:0px;
|
||||
|
||||
}
|
||||
|
||||
.tab-failsafe .checkbox:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.tab-failsafe .freelabel {
|
||||
margin-left: 10px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.tab-failsafe input {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.tab-failsafe span {
|
||||
margin: 0px
|
||||
}
|
||||
|
||||
.tab-failsafe .spacer_box {
|
||||
padding-bottom: 10px;
|
||||
float: left;
|
||||
width: calc(100% - 20px);
|
||||
}
|
||||
|
||||
.tab-failsafe .number {
|
||||
padding-bottom: 5px;
|
||||
border-bottom: 1px solid #ddd;
|
||||
width: 100%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.tab-failsafe .number:last-child {
|
||||
border-bottom: none;
|
||||
padding-bottom: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.tab-failsafe .gui_box_titlebar {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.tab-failsafe .numberspacer {
|
||||
float: left;
|
||||
width: 65px;
|
||||
height: 21px;
|
||||
}
|
||||
|
||||
.tab-failsafe .gui_box {
|
||||
font-style: normal;
|
||||
font-family: 'open_sanssemibold', Arial;
|
||||
margin-bottom: 15px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.tab-failsafe .gui_box span {
|
||||
font-style: normal;
|
||||
font-family: 'open_sansregular', Arial;
|
||||
line-height: 19px;
|
||||
color: #7d7d7d;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.tab-failsafe .stage1 .number input {
|
||||
float:right;
|
||||
margin-right:0px;
|
||||
}
|
||||
|
||||
.tab-failsafe .stage1 select {
|
||||
float:left;
|
||||
width: 95%;
|
||||
height: 22px;
|
||||
margin: 0px;
|
||||
border: 1px solid silver;
|
||||
}
|
||||
|
||||
.tab-failsafe .modename {
|
||||
background-color: #828885;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #686c6a;
|
||||
color: #fff !important;
|
||||
font-weight:normal;
|
||||
font-family: 'open_sanssemibold', Arial;
|
||||
padding-left: 3px;
|
||||
padding-right:3px;
|
||||
margin-right:3px;
|
||||
}
|
||||
|
||||
.tab-failsafe .channelname {
|
||||
margin-right:3px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) {
|
||||
|
||||
}
|
|
@ -0,0 +1,151 @@
|
|||
<div class="tab-failsafe toolbar_fixed_bottom">
|
||||
<div class="content_wrapper">
|
||||
<div class="tab_title">Failsafe</div>
|
||||
<div class="cf_doc_version_bt">
|
||||
<a id="button-documentation" href="https://github.com/cleanflight/cleanflight/releases" target="_blank"></a>
|
||||
</div>
|
||||
<div class="note newpane" style="margin-bottom: 20px;">
|
||||
<div class="note_spacer">
|
||||
<p i18n="failsafeFeaturesHelpNew"></p>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="note oldpane" style="margin-bottom: 20px;">
|
||||
<div class="note_spacer">
|
||||
<p i18n="failsafeFeaturesHelpOld"></p>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="leftWrapper">
|
||||
<div class="gui_box grey oldpane">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" i18n="failsafePaneTitleOld"></div>
|
||||
</div>
|
||||
<div class="spacer_box">
|
||||
<div class="checkbox">
|
||||
<div class="numberspacer" >
|
||||
<input type="checkbox" name="failsafe_feature" class="feature toggle rxFailsafe" id="failsafe_feature" />
|
||||
</div>
|
||||
<label for="failsafe_feature"><span i18n="failsafeFeatureItemOld"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="number">
|
||||
<label> <input type="number" name="failsafe_throttle_old" min="0" max="2000" /> <span
|
||||
i18n="failsafeThrottleItemOld"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gui_box grey newpane">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" i18n="failsafePulsrangeTitle"></div>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" style="display:none;" i18n="failsafePulsrangeHelp"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer_box">
|
||||
<div class="number">
|
||||
<label> <input type="number" name="rx_min_usec" min="750" max="2250" /> <span
|
||||
i18n="failsafeRxMinUsecItem"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="number">
|
||||
<label> <input type="number" name="rx_max_usec" min="750" max="2250" /> <span
|
||||
i18n="failsafeRxMaxUsecItem"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gui_box grey stage1 newpane">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" i18n="failsafeChannelFallbackSettingsTitle"></div>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" style="display:none;" i18n="failsafeChannelFallbackSettingsHelp"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer_box">
|
||||
<div class="activechannellist">
|
||||
<!-- list generated here -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rightWrapper">
|
||||
<div class="gui_box grey newpane" style="margin-bottom:0px;">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" i18n="failsafeStageTwoSettingsTitle"></div>
|
||||
</div>
|
||||
<div class="spacer_box" style="padding-bottom:7px;">
|
||||
<div class="checkbox">
|
||||
<div class="numberspacer" >
|
||||
<input type="checkbox" name="failsafe_feature_new" class="feature toggle rxFailsafe" id="failsafe_feature_new" />
|
||||
</div>
|
||||
<label for="failsafe_feature_new"><span i18n="failsafeFeatureItem"></span>
|
||||
</label>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" style="display:none;" i18n="failsafeFeatureHelp"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="checkbox stage2">
|
||||
<div class="numberspacer" >
|
||||
<input type="checkbox" name="failsafe_kill_switch" class="toggle" id="failsafe_kill_switch" />
|
||||
</div>
|
||||
<label for="failsafe_kill_switch"><span i18n="failsafeKillSwitchItem"></span>
|
||||
</label>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" style="display:none;" i18n="failsafeKillSwitchHelp"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="number stage2">
|
||||
<label> <input type="number" name="failsafe_delay" min="0" max="2000" /> <span
|
||||
i18n="failsafeDelayItem"></span>
|
||||
</label>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" style="display:none;"i18n="failsafeDelayHelp"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="number stage2">
|
||||
<label> <input type="number" name="failsafe_throttle_low_delay" min="0" max="2000" /> <span
|
||||
i18n="failsafeThrottleLowItem"></span>
|
||||
</label>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" style="display:none;" i18n="failsafeThrottleLowHelp"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- radio buttons -->
|
||||
<div class="subline stage2" i18n="failsafeSubTitle1"></div>
|
||||
<div class="radioarea pro1 stage2" style="height:90px;">
|
||||
<div class="radiobuttons"><input class="procedure" id="drop" name="group1" type="radio"/>
|
||||
<label for="drop" i18n="failsafeProcedureItemSelect2"></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="radioarea pro2 stage2">
|
||||
<div class="radiobuttons"><input class="procedure" id="land" name="group1" type="radio" checked/>
|
||||
<label for="land" i18n="failsafeProcedureItemSelect1"></label>
|
||||
</div>
|
||||
<div class="proceduresettings">
|
||||
<div class="number">
|
||||
<label> <input type="number" name="failsafe_throttle" min="0" max="2000" /> <span
|
||||
i18n="failsafeThrottleItem"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="number">
|
||||
<label> <input type="number" name="failsafe_off_delay" min="0" max="2000" /> <span
|
||||
i18n="failsafeOffDelayItem"></span>
|
||||
</label>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" style="display:none;" i18n="failsafeOffDelayHelp"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content_toolbar">
|
||||
<div class="btn save_btn">
|
||||
<a class="save" href="#" i18n="configurationButtonSave"></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,382 @@
|
|||
'use strict';
|
||||
|
||||
TABS.failsafe = {};
|
||||
|
||||
TABS.failsafe.initialize = function (callback, scrollPosition) {
|
||||
var self = this;
|
||||
|
||||
if (GUI.active_tab != 'failsafe') {
|
||||
GUI.active_tab = 'failsafe';
|
||||
googleAnalytics.sendAppView('Failsafe');
|
||||
}
|
||||
|
||||
function load_rx_config() {
|
||||
MSP.send_message(MSP_codes.MSP_RX_CONFIG, false, false, load_failssafe_config);
|
||||
}
|
||||
|
||||
function load_failssafe_config() {
|
||||
MSP.send_message(MSP_codes.MSP_FAILSAFE_CONFIG, false, false, load_rxfail_config);
|
||||
}
|
||||
|
||||
function load_rxfail_config() {
|
||||
MSP.send_message(MSP_codes.MSP_RXFAIL_CONFIG, false, false, get_box_names);
|
||||
}
|
||||
|
||||
function get_box_names() {
|
||||
MSP.send_message(MSP_codes.MSP_BOXNAMES, false, false, get_mode_ranges);
|
||||
}
|
||||
|
||||
function get_mode_ranges() {
|
||||
MSP.send_message(MSP_codes.MSP_MODE_RANGES, false, false, get_box_ids);
|
||||
}
|
||||
|
||||
function get_box_ids() {
|
||||
MSP.send_message(MSP_codes.MSP_BOXIDS, false, false, get_rc_data);
|
||||
}
|
||||
|
||||
function get_rc_data() {
|
||||
MSP.send_message(MSP_codes.MSP_RC, false, false, load_config);
|
||||
}
|
||||
|
||||
// BEGIN Support for pre API version 1.15.0
|
||||
function load_config() {
|
||||
MSP.send_message(MSP_codes.MSP_BF_CONFIG, false, false, load_misc);
|
||||
}
|
||||
|
||||
function load_misc() {
|
||||
MSP.send_message(MSP_codes.MSP_MISC, false, false, load_html);
|
||||
}
|
||||
// END (Support for pre API version 1.15.0
|
||||
|
||||
function load_html() {
|
||||
$('#content').load("./tabs/failsafe.html", process_html);
|
||||
}
|
||||
|
||||
var apiVersionGte1_15_0 = semver.gte(CONFIG.apiVersion, "1.15.0");
|
||||
|
||||
// Uncomment next line for testing older functionality on newer API version
|
||||
//apiVersionGte1_15_0 = false;
|
||||
|
||||
if(apiVersionGte1_15_0) {
|
||||
MSP.send_message(MSP_codes.MSP_IDENT, false, false, load_rx_config);
|
||||
} else {
|
||||
MSP.send_message(MSP_codes.MSP_IDENT, false, false, load_config);
|
||||
}
|
||||
|
||||
function process_html() {
|
||||
var failsafeFeature;
|
||||
|
||||
// translate to user-selected language
|
||||
localize();
|
||||
|
||||
// Conditionally hide the old or the new control pane's
|
||||
if(apiVersionGte1_15_0) {
|
||||
var oldPane = $('div.oldpane');
|
||||
oldPane.prop("disabled", true);
|
||||
oldPane.hide();
|
||||
} else {
|
||||
var newPane = $('div.newpane');
|
||||
newPane.prop("disabled", true);
|
||||
newPane.hide();
|
||||
}
|
||||
|
||||
if(apiVersionGte1_15_0) {
|
||||
// generate labels for assigned aux modes
|
||||
var auxAssignment = [],
|
||||
i,
|
||||
element;
|
||||
|
||||
for (var channelIndex = 0; channelIndex < RC.active_channels - 4; channelIndex++) {
|
||||
auxAssignment.push("");
|
||||
}
|
||||
|
||||
for (var modeIndex = 0; modeIndex < AUX_CONFIG.length; modeIndex++) {
|
||||
|
||||
var modeId = AUX_CONFIG_IDS[modeIndex];
|
||||
|
||||
// scan mode ranges to find assignments
|
||||
for (var modeRangeIndex = 0; modeRangeIndex < MODE_RANGES.length; modeRangeIndex++) {
|
||||
var modeRange = MODE_RANGES[modeRangeIndex];
|
||||
|
||||
if (modeRange.id != modeId) {
|
||||
continue;
|
||||
}
|
||||
|
||||
var range = modeRange.range;
|
||||
if (!(range.start < range.end)) {
|
||||
continue; // invalid!
|
||||
}
|
||||
|
||||
auxAssignment[modeRange.auxChannelIndex] += "<span class=\"modename\">" + AUX_CONFIG[modeIndex] + "</span>";
|
||||
}
|
||||
}
|
||||
|
||||
// generate full channel list
|
||||
var channelNames = [
|
||||
chrome.i18n.getMessage('controlAxisRoll'),
|
||||
chrome.i18n.getMessage('controlAxisPitch'),
|
||||
chrome.i18n.getMessage('controlAxisYaw'),
|
||||
chrome.i18n.getMessage('controlAxisThrottle')
|
||||
],
|
||||
fullChannels_e = $('div.activechannellist'),
|
||||
aux_index = 1,
|
||||
aux_assignment_index = 0;
|
||||
|
||||
for (i = 0; i < RXFAIL_CONFIG.length; i++) {
|
||||
if (i < channelNames.length) {
|
||||
fullChannels_e.append('\
|
||||
<div class="number">\
|
||||
<div style="width:60%; float:left;">\
|
||||
<span>' + channelNames[i] + '</span>\
|
||||
</div>\
|
||||
<div class="cf_tip" style="width:25%; float:left;">\
|
||||
<div class="cf_tooltiptext" style="display:none;"><strong>Auto</strong> means Roll, Pitch and Yaw to center and Throttle low. <strong>Hold</strong> means maintain the last good value received.</div>\
|
||||
<select class="aux_set" id="' + i + '">\
|
||||
<option value="0">Auto</option>\
|
||||
<option value="1">Hold</option>\
|
||||
</select>\
|
||||
</div>\
|
||||
<div style="width:15%; float:left;"><input type="number" name="aux_value" min="750" max="2250" id="' + i + '"/></div>\
|
||||
</div>\
|
||||
');
|
||||
} else {
|
||||
fullChannels_e.append('\
|
||||
<div class="number">\
|
||||
<div style="width:60%; float:left; padding-top: 2px;">\
|
||||
<span class="channelname">' + chrome.i18n.getMessage("controlAxisAux" + (aux_index++)) + '</span>\
|
||||
' + auxAssignment[aux_assignment_index++] + '\
|
||||
</div>\
|
||||
<div class="cf_tip" style="width:25%; float:left;">\
|
||||
<div class="cf_tooltiptext" style="display:none;"><strong>Hold</strong> means maintain the last good value received. <strong>Set</strong> means the value given here will be used. </div>\
|
||||
<select class="aux_set" id="' + i + '">\
|
||||
<option value="1">Hold</option>\
|
||||
<option value="2">Set</option>\
|
||||
</select>\
|
||||
</div>\
|
||||
<div style="width:15%; float:left;"><input type="number" name="aux_value" min="750" max="2250" id="' + i + '"/></div>\
|
||||
</div>\
|
||||
');
|
||||
}
|
||||
}
|
||||
|
||||
var channel_mode_array = [];
|
||||
$('.number', fullChannels_e).each(function () {
|
||||
channel_mode_array.push($('select.aux_set' , this));
|
||||
});
|
||||
|
||||
var channel_value_array = [];
|
||||
$('.number', fullChannels_e).each(function () {
|
||||
channel_value_array.push($('input[name="aux_value"]' , this));
|
||||
});
|
||||
|
||||
var channelMode = $('select.aux_set');
|
||||
var channelValue = $('input[name="aux_value"]');
|
||||
|
||||
// UI hooks
|
||||
channelMode.change(function () {
|
||||
var currentMode = parseInt($(this).val());
|
||||
var i = parseInt($(this).prop("id"));
|
||||
RXFAIL_CONFIG[i].mode = currentMode;
|
||||
if (currentMode == 2) {
|
||||
channel_value_array[i].prop("disabled", false);
|
||||
channel_value_array[i].show();
|
||||
} else {
|
||||
channel_value_array[i].prop("disabled", true);
|
||||
channel_value_array[i].hide();
|
||||
}
|
||||
});
|
||||
|
||||
// UI hooks
|
||||
channelValue.change(function () {
|
||||
var i = parseInt($(this).prop("id"));
|
||||
RXFAIL_CONFIG[i].value = parseInt($(this).val());
|
||||
});
|
||||
|
||||
// for some odd reason chrome 38+ changes scroll according to the touched select element
|
||||
// i am guessing this is a bug, since this wasn't happening on 37
|
||||
// code below is a temporary fix, which we will be able to remove in the future (hopefully)
|
||||
$('#content').scrollTop((scrollPosition) ? scrollPosition : 0);
|
||||
|
||||
// fill stage 1 Valid Pulse Range Settings
|
||||
$('input[name="rx_min_usec"]').val(RX_CONFIG.rx_min_usec);
|
||||
$('input[name="rx_max_usec"]').val(RX_CONFIG.rx_max_usec);
|
||||
|
||||
// fill fallback settings (mode and value) for all channels
|
||||
for (i = 0; i < RXFAIL_CONFIG.length; i++) {
|
||||
channel_value_array[i].val(RXFAIL_CONFIG[i].value);
|
||||
channel_mode_array[i].val(RXFAIL_CONFIG[i].mode);
|
||||
channel_mode_array[i].change();
|
||||
}
|
||||
|
||||
// fill stage 2 fields
|
||||
failsafeFeature = $('input[name="failsafe_feature_new"]');
|
||||
failsafeFeature.change(function () {
|
||||
if ($(this).is(':checked')) {
|
||||
$('div.stage2').show();
|
||||
} else {
|
||||
$('div.stage2').hide();
|
||||
}
|
||||
});
|
||||
|
||||
failsafeFeature.prop('checked', bit_check(BF_CONFIG.features, 8));
|
||||
failsafeFeature.change();
|
||||
|
||||
$('input[name="failsafe_throttle"]').val(FAILSAFE_CONFIG.failsafe_throttle);
|
||||
$('input[name="failsafe_off_delay"]').val(FAILSAFE_CONFIG.failsafe_off_delay);
|
||||
$('input[name="failsafe_throttle_low_delay"]').val(FAILSAFE_CONFIG.failsafe_throttle_low_delay);
|
||||
$('input[name="failsafe_delay"]').val(FAILSAFE_CONFIG.failsafe_delay);
|
||||
|
||||
// set stage 2 failsafe procedure
|
||||
$('input[type="radio"].procedure').change(function () {
|
||||
var element = $(this),
|
||||
checked = element.is(':checked'),
|
||||
id = element.attr('id');
|
||||
switch(id) {
|
||||
case 'drop':
|
||||
if (checked) {
|
||||
$('input[name="failsafe_throttle"]').prop("disabled", true);
|
||||
$('input[name="failsafe_off_delay"]').prop("disabled", true);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'land':
|
||||
if (checked) {
|
||||
$('input[name="failsafe_throttle"]').prop("disabled", false);
|
||||
$('input[name="failsafe_off_delay"]').prop("disabled", false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
switch(FAILSAFE_CONFIG.failsafe_procedure) {
|
||||
default:
|
||||
case 0:
|
||||
element = $('input[id="land"]') ;
|
||||
element.prop('checked', true);
|
||||
element.change();
|
||||
break;
|
||||
case 1:
|
||||
element = $('input[id="drop"]');
|
||||
element.prop('checked', true);
|
||||
element.change();
|
||||
break;
|
||||
}
|
||||
|
||||
// set stage 2 kill switch option
|
||||
$('input[name="failsafe_kill_switch"]').prop('checked', FAILSAFE_CONFIG.failsafe_kill_switch);
|
||||
|
||||
} else {
|
||||
|
||||
// set FAILSAFE feature option (pre API 1.15.0)
|
||||
failsafeFeature = $('input[name="failsafe_feature"]');
|
||||
failsafeFeature.prop('checked', bit_check(BF_CONFIG.features, 8));
|
||||
|
||||
// fill failsafe_throttle field (pre API 1.15.0)
|
||||
$('input[name="failsafe_throttle_old"]').val(MISC.failsafe_throttle);
|
||||
}
|
||||
|
||||
$('a.save').click(function () {
|
||||
// gather data that doesn't have automatic change event bound
|
||||
if(apiVersionGte1_15_0) {
|
||||
RX_CONFIG.rx_min_usec = parseInt($('input[name="rx_min_usec"]').val());
|
||||
RX_CONFIG.rx_max_usec = parseInt($('input[name="rx_max_usec"]').val());
|
||||
|
||||
// get FAILSAFE feature option (>= API 1.15.0)
|
||||
if ($('input[name="failsafe_feature_new"]').is(':checked')) {
|
||||
BF_CONFIG.features = bit_set(BF_CONFIG.features, 8);
|
||||
} else {
|
||||
BF_CONFIG.features = bit_clear(BF_CONFIG.features, 8);
|
||||
}
|
||||
|
||||
FAILSAFE_CONFIG.failsafe_throttle = parseInt($('input[name="failsafe_throttle"]').val());
|
||||
FAILSAFE_CONFIG.failsafe_off_delay = parseInt($('input[name="failsafe_off_delay"]').val());
|
||||
FAILSAFE_CONFIG.failsafe_throttle_low_delay = parseInt($('input[name="failsafe_throttle_low_delay"]').val());
|
||||
FAILSAFE_CONFIG.failsafe_delay = parseInt($('input[name="failsafe_delay"]').val());
|
||||
|
||||
if( $('input[id="land"]').is(':checked')) {
|
||||
FAILSAFE_CONFIG.failsafe_procedure = 0;
|
||||
} else if( $('input[id="drop"]').is(':checked')) {
|
||||
FAILSAFE_CONFIG.failsafe_procedure = 1;
|
||||
}
|
||||
|
||||
FAILSAFE_CONFIG.failsafe_kill_switch = $('input[name="failsafe_kill_switch"]').is(':checked') ? 1 : 0;
|
||||
} else {
|
||||
// get FAILSAFE feature option (pre API 1.15.0)
|
||||
if ($('input[name="failsafe_feature"]').is(':checked')) {
|
||||
BF_CONFIG.features = bit_set(BF_CONFIG.features, 8);
|
||||
} else {
|
||||
BF_CONFIG.features = bit_clear(BF_CONFIG.features, 8);
|
||||
}
|
||||
|
||||
// get failsafe_throttle field value (pre API 1.15.0)
|
||||
MISC.failsafe_throttle = parseInt($('input[name="failsafe_throttle_old"]').val());
|
||||
}
|
||||
|
||||
function save_failssafe_config() {
|
||||
MSP.send_message(MSP_codes.MSP_SET_FAILSAFE_CONFIG, MSP.crunch(MSP_codes.MSP_SET_FAILSAFE_CONFIG), false, save_rxfail_config);
|
||||
}
|
||||
|
||||
function save_rxfail_config() {
|
||||
MSP.send_message(MSP_codes.MSP_SET_RXFAIL_CONFIG, MSP.crunch(MSP_codes.MSP_SET_RXFAIL_CONFIG), false, save_bf_config);
|
||||
}
|
||||
|
||||
function save_bf_config() {
|
||||
MSP.send_message(MSP_codes.MSP_SET_BF_CONFIG, MSP.crunch(MSP_codes.MSP_SET_BF_CONFIG), false, save_to_eeprom);
|
||||
}
|
||||
|
||||
// BEGIN pre API 1.15.0 save functions
|
||||
function save_misc() {
|
||||
MSP.send_message(MSP_codes.MSP_SET_MISC, MSP.crunch(MSP_codes.MSP_SET_MISC), false, save_to_eeprom);
|
||||
}
|
||||
// END pre API 1.15.0 save functions
|
||||
|
||||
function save_to_eeprom() {
|
||||
MSP.send_message(MSP_codes.MSP_EEPROM_WRITE, false, false, reboot);
|
||||
}
|
||||
|
||||
function reboot() {
|
||||
GUI.log(chrome.i18n.getMessage('configurationEepromSaved'));
|
||||
|
||||
GUI.tab_switch_cleanup(function() {
|
||||
MSP.send_message(MSP_codes.MSP_SET_REBOOT, false, false, reinitialize);
|
||||
});
|
||||
}
|
||||
|
||||
function reinitialize() {
|
||||
GUI.log(chrome.i18n.getMessage('deviceRebooting'));
|
||||
|
||||
if (BOARD.find_board_definition(CONFIG.boardIdentifier).vcp) { // VCP-based flight controls may crash old drivers, we catch and reconnect
|
||||
$('a.connect').click();
|
||||
GUI.timeout_add('start_connection',function start_connection() {
|
||||
$('a.connect').click();
|
||||
},2000);
|
||||
} else {
|
||||
|
||||
GUI.timeout_add('waiting_for_bootup', function waiting_for_bootup() {
|
||||
MSP.send_message(MSP_codes.MSP_IDENT, false, false, function () {
|
||||
GUI.log(chrome.i18n.getMessage('deviceReady'));
|
||||
TABS.failsafe.initialize(false, $('#content').scrollTop());
|
||||
});
|
||||
},1500); // 1500 ms seems to be just the right amount of delay to prevent data request timeouts
|
||||
}
|
||||
}
|
||||
|
||||
if(apiVersionGte1_15_0) {
|
||||
MSP.send_message(MSP_codes.MSP_SET_RX_CONFIG, MSP.crunch(MSP_codes.MSP_SET_RX_CONFIG), false, save_failssafe_config);
|
||||
} else {
|
||||
MSP.send_message(MSP_codes.MSP_SET_BF_CONFIG, MSP.crunch(MSP_codes.MSP_SET_BF_CONFIG), false, save_misc);
|
||||
}
|
||||
});
|
||||
|
||||
// status data pulled via separate timer with static speed
|
||||
GUI.interval_add('status_pull', function status_pull() {
|
||||
MSP.send_message(MSP_codes.MSP_STATUS);
|
||||
}, 250, true);
|
||||
|
||||
GUI.content_ready(callback);
|
||||
}
|
||||
};
|
||||
|
||||
TABS.failsafe.cleanup = function (callback) {
|
||||
if (callback) callback();
|
||||
};
|
|
@ -17,16 +17,6 @@
|
|||
/* text-shadow: 1px 0px 2px rgba(0, 0, 0, 0.9);*/
|
||||
}
|
||||
|
||||
.red {
|
||||
background-color: #dc0000;
|
||||
background-image: linear-gradient(-45deg, rgba(255, 255, 255, .3) 10%, transparent 10%, transparent 20%,
|
||||
rgba(255, 255, 255, .3) 20%, rgba(255, 255, 255, .3) 30%, transparent 30%, transparent 40%,
|
||||
rgba(255, 255, 255, .3) 40%, rgba(255, 255, 255, .3) 50%, transparent 50%, transparent 60%,
|
||||
rgba(255, 255, 255, .3) 60%, rgba(255, 255, 255, .3) 70%, transparent 70%, transparent 80%,
|
||||
rgba(255, 255, 255, .3) 80%, rgba(255, 255, 255, .3) 90%, transparent 90%, transparent 100%,
|
||||
rgba(255, 255, 255, .4) 100%, transparent);
|
||||
}
|
||||
|
||||
.darkgrey {
|
||||
background-color: #575757;
|
||||
}
|
||||
|
@ -90,6 +80,12 @@
|
|||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.tab-firmware_flasher ul li {
|
||||
list-style: initial;
|
||||
list-style-type: circle;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
.tab-firmware_flasher .options {
|
||||
position: relative;
|
||||
margin-bottom: 10px;
|
||||
|
|
|
@ -75,20 +75,33 @@
|
|||
i18n_title="firmwareFlasherReleaseFileUrl" class="file" href="#" target="_blank"></a><br /> <strong
|
||||
i18n="firmwareFlasherReleaseDate"></strong> <span class="date"></span><br /> <strong
|
||||
i18n="firmwareFlasherReleaseStatus"></strong> <span class="status"></span><br /> <strong
|
||||
i18n="firmwareFlasherReleaseNotes"></strong> <br />
|
||||
i18n="firmwareFlasherReleaseNotes"></strong>
|
||||
<div class=notes></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gui_box">
|
||||
<div class="gui_box_titlebar red">
|
||||
<div class="gui_box gui_warning">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" style="text-align: center; color: white;"
|
||||
i18n="firmwareFlasherWarninghead"></div>
|
||||
i18n="firmwareFlasherWarningHead">
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer" style="margin-bottom: 10px;">
|
||||
<p i18n="firmwareFlasherWarningText">
|
||||
<p i18n="firmwareFlasherWarningText"></p>
|
||||
<br />
|
||||
<p i18n="firmwareFlasherTargetWarning"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="gui_box gui_note">
|
||||
<div class="gui_box_titlebar">
|
||||
<div class="spacer_box_title" style="text-align: center; color: white;"
|
||||
i18n="firmwareFlasherRecoveryHead">
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer" style="margin-bottom: 10px;">
|
||||
<p i18n="firmwareFlasherRecoveryText"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="info"><a name="progressbar"></a>
|
||||
<progress class="progress" value="0" min="0" max="100"></progress>
|
||||
<span class="progressLabel" i18n="firmwareFlasherLoadFirmwareFile"></span>
|
||||
|
|
|
@ -135,7 +135,7 @@
|
|||
<div style="width: 25%; float: left; text-align: left;">
|
||||
<div i18n="pidTuningLevel" style="float:left;"></div>
|
||||
<div class="helpicon cf_tip">
|
||||
<div class="cf_tooltiptext" i18n="pidHelp1" style="display: none;"></div>
|
||||
<div class="cf_tooltiptext" i18n="pidTuningLevelHelp" style="display: none;"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:25%; float:left;" i18n="pidTuningLevelP"></div>
|
||||
|
|
|
@ -12,12 +12,19 @@ TABS.ports.initialize = function (callback, scrollPosition) {
|
|||
{name: 'GPS', groups: ['gps'], maxPorts: 1},
|
||||
{name: 'TELEMETRY_FRSKY', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1},
|
||||
{name: 'TELEMETRY_HOTT', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1},
|
||||
{name: 'TELEMETRY_MSP', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1},
|
||||
{name: 'TELEMETRY_SMARTPORT', groups: ['telemetry'], maxPorts: 1},
|
||||
{name: 'RX_SERIAL', groups: ['rx'], maxPorts: 1},
|
||||
{name: 'BLACKBOX', groups: ['logging', 'blackbox'], sharableWith: ['msp'], notSharableWith: ['telemetry'], maxPorts: 1},
|
||||
];
|
||||
|
||||
|
||||
if (semver.gte(CONFIG.apiVersion, "1.15.0")) {
|
||||
var ltmFunctionRule = {name: 'TELEMETRY_LTM', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1};
|
||||
functionRules.push(ltmFunctionRule);
|
||||
} else {
|
||||
var mspFunctionRule = {name: 'TELEMETRY_MSP', groups: ['telemetry'], sharableWith: ['msp'], notSharableWith: ['blackbox'], maxPorts: 1};
|
||||
functionRules.push(mspFunctionRule);
|
||||
}
|
||||
|
||||
for (var i = 0; i < functionRules.length; i++) {
|
||||
functionRules[i].displayName = chrome.i18n.getMessage('portsFunction_' + functionRules[i].name);
|
||||
}
|
||||
|
@ -125,8 +132,6 @@ TABS.ports.initialize = function (callback, scrollPosition) {
|
|||
|
||||
port_configuration_e.data('serialPort', serialPort);
|
||||
|
||||
// TODO check functions
|
||||
// TODO set baudrate
|
||||
var msp_baudrate_e = port_configuration_e.find('select.msp_baudrate');
|
||||
msp_baudrate_e.val(serialPort.msp_baudrate);
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ TABS.servos.initialize = function (callback) {
|
|||
<td class="middle"><input type="number" min="500" max="2500" value="' + SERVO_CONFIG[obj].middle + '" /></td>\
|
||||
<td class="min"><input type="number" min="500" max="2500" value="' + SERVO_CONFIG[obj].min +'" /></td>\
|
||||
<td class="max"><input type="number" min="500" max="2500" value="' + SERVO_CONFIG[obj].max +'" /></td>\
|
||||
<td class="angleAtMin"><input type="number" min="-90" max="0" value="' + SERVO_CONFIG[obj].angleAtMin +'" /></td>\
|
||||
<td class="angleAtMin"><input type="number" min="-90" max="0" value="' + (-SERVO_CONFIG[obj].angleAtMin) +'" /></td>\
|
||||
<td class="angleAtMax"><input type="number" min="0" max="90" value="' + SERVO_CONFIG[obj].angleAtMax +'" /></td>\
|
||||
' + servoCheckbox + '\
|
||||
<td class="direction">\
|
||||
|
@ -133,7 +133,7 @@ TABS.servos.initialize = function (callback) {
|
|||
SERVO_CONFIG[info.obj].middle = parseInt($('.middle input', this).val());
|
||||
SERVO_CONFIG[info.obj].min = parseInt($('.min input', this).val());
|
||||
SERVO_CONFIG[info.obj].max = parseInt($('.max input', this).val());
|
||||
SERVO_CONFIG[info.obj].angleAtMin = parseInt($('.angleAtMin input', this).val());
|
||||
SERVO_CONFIG[info.obj].angleAtMin = -parseInt($('.angleAtMin input', this).val());
|
||||
SERVO_CONFIG[info.obj].angleAtMax = parseInt($('.angleAtMax input', this).val());
|
||||
|
||||
var val = parseInt($('.direction select', this).val());
|
||||
|
|
Loading…
Reference in New Issue