Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/iNavFlight/inav-configurator.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominic Clifton <me@dominicclifton.name>2015-12-15 02:29:11 +0300
committerDominic Clifton <me@dominicclifton.name>2015-12-15 02:51:42 +0300
commitbd98aca67f2f70153ee635bb4b573ee87ec0cb58 (patch)
treedbbed77bd8ad78ece563bde20dbf9968971c8792
parentb38f7139eb34df279554fad958ea5b4a8d8c6d3b (diff)
parent0761cd31a9abacffdf95b8e9390075a67c4915dc (diff)
Merge branch 'new_stuff' of
https://github.com/skaman82/cleanflight-configurator into skaman82-new_stuff Fix up messages.json formatting. Conflicts: _locales/en/messages.json
-rwxr-xr-x_locales/en/messages.json105
-rw-r--r--images/icons/cf_icon_position.pngbin0 -> 25551 bytes
-rw-r--r--js/msp.js2
-rwxr-xr-xjs/serial_backend.js94
-rw-r--r--main.css108
-rwxr-xr-xmain.html27
-rw-r--r--main.js77
-rw-r--r--manifest.json7
-rw-r--r--tabs/configuration.html2
-rw-r--r--tabs/dataflash.css2
-rw-r--r--tabs/dataflash.js12
-rw-r--r--tabs/gps.css113
-rw-r--r--tabs/gps.html21
-rw-r--r--tabs/gps.js85
-rw-r--r--tabs/help.css27
-rw-r--r--tabs/help.html19
-rw-r--r--tabs/map.html99
-rw-r--r--tabs/pid_tuning.css4
-rwxr-xr-xtabs/pid_tuning.html9
-rwxr-xr-xtabs/pid_tuning.js15
-rw-r--r--tabs/receiver.css16
-rwxr-xr-xtabs/setup.js4
22 files changed, 721 insertions, 127 deletions
diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 62767eca..57033e3a 100755
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -249,14 +249,42 @@
"message": "Documentation / Manual"
},
"defaultDocumentation": {
- "message": "Cleanflight documentation is available in Markdown and PDF formats.<br /><br />The PDF manual appropriate to the firmware can be downloaded from the github releases page, <a href=\"https://github.com/cleanflight/cleanflight/releases\" target=\"_blank\">here</a>.<br />The Markdown latest online documentation is available <a href=\"https://github.com/cleanflight/cleanflight/tree/master/docs\" target=\"_blank\">here</a> - you can switch to the appropriate version of the documentation by selecting the tag."
+ "message": "Cleanflight documentation is available in Markdown and PDF formats.<br /><br />"
+ },
+ "defaultDocumentation1": {
+ "message": "The PDF manual appropriate to the firmware can be downloaded from the github releases page, <a href=\"https://github.com/cleanflight/cleanflight/releases\" target=\"_blank\">here</a>."
+ },
+ "defaultDocumentation2": {
+ "message": "The Markdown latest online documentation is available <a href=\"https://github.com/cleanflight/cleanflight/tree/master/docs\" target=\"_blank\">here</a> - you can switch to the appropriate version of the documentation by selecting the tag."
},
"defaultSupportHead": {
"message": "Support"
},
+ "defaultSupportSubline1": {
+ "message": "Support Scources"
+ },
+ "defaultSupportSubline2": {
+ "message": "Developer"
+ },
"defaultSupport": {
- "message": "For support please search the forums first or contact your vendor.<br /><br />RC Groups thread is <a href=\"http://www.rcgroups.com/forums/showthread.php?t=2249574&page=1\" target=\"_blank\">here</a>. MultiWii forums thread is <a href=\"http://www.multiwii.com/forum/viewtopic.php?f=23&t=5149\" target=\"_blank\">here</a>.<br /><br />Developers and users hang out in IRC channel on freenode<br /><a href=\"irc://irc.freenode.net/#cleanflight\" target=\"_blank\">irc://irc.freenode.net/#cleanflight</a> or <a href=\"http://webchat.freenode.net/?channels=cleanflight\" target=\"_blank\">Join via web client</a>."
+ "message": "For support please search the forums first or contact your vendor.<br /><br />"
+ },
+ "defaultSupport1": {
+ "message": "<a href=\"http://www.rcgroups.com/forums/showthread.php?t=2249574&page=1\" target=\"_blank\">RC Groups thread</a>"
+ },
+ "defaultSupport2": {
+ "message": "<a href=\"http://www.multiwii.com/forum/viewtopic.php?f=23&t=5149\" target=\"_blank\">MultiWii forums thread</a>"
+ },
+ "defaultSupport3": {
+ "message": "<a href=\"https://github.com/cleanflight\" target=\"_blank\">GitHub</a>"
+ },
+ "defaultSupport4": {
+ "message": "<a href=\"irc://irc.freenode.net/#cleanflight\" target=\"_blank\">IRC channel on freenode</a>"
},
+ "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."
},
@@ -414,8 +442,6 @@
"configurationFeatureDescription": {
"message": "Description"
},
-
-
"configurationMixer": {
"message": "Mixer"
},
@@ -428,17 +454,18 @@
"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> Remember to configure a Serial Port (via Ports tab) and choose a Serial Receiver Provider when using RX_SERIAL feature."
},
-
"configurationBoardAlignment": {
"message": "Board Alignment"
},
@@ -468,7 +495,7 @@
},
"configurationDisarmKillSwitch": {
"message": "Disarm motors regardless of throttle value (When arming via AUX channel)"
- },
+ },
"configurationThrottleMinimum": {
"message": "Minimum Throttle"
},
@@ -508,7 +535,7 @@
"configurationBatteryMultiwiiCurrent": {
"message": "Enable support for legacy Multiwii MSP current output"
},
- "configuration3d": {
+ "configuration3d": {
"message": "3D"
},
"configuration3dDeadbandLow": {
@@ -550,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"
},
@@ -846,7 +872,6 @@
"servosFirmwareUpgradeRequired": {
"message": "Servos requires firmware &gt;= 1.10.0."
},
-
"servosChangeDirection": {
"message": "Change Direction in TX To Match"
},
@@ -890,6 +915,15 @@
"gpsHead": {
"message": "GPS"
},
+ "gpsMapHead": {
+ "message": "Current GPS location"
+ },
+ "gpsMapMessage1": {
+ "message": "Please check your internet connection"
+ },
+ "gpsMapMessage2": {
+ "message": "Waiting for GPS 3D fix…"
+ },
"gps3dFix": {
"message": "3D Fix:"
},
@@ -1030,6 +1064,7 @@
"dataflashFileWriteFailed": {
"message": "Failed to write to the file you selected, are the permissions on that folder okay?"
},
+
"firmwareFlasherReleaseSummaryHead": {
"message": "Release info"
},
@@ -1113,10 +1148,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"
@@ -1185,6 +1220,7 @@
"ledStripEepromSaved": {
"message": "EEPROM <span style=\"color: #57a929\">saved</span>"
},
+
"controlAxisRoll": {
"message": "Roll"
},
@@ -1245,6 +1281,7 @@
"controlAxisAux16": {
"message": "AUX 16"
},
+
"pidTuningBasic": {
"message": "Basic/Acro"
},
@@ -1268,13 +1305,11 @@
},
"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."
- },
+
"failsafeFeaturesHelpOld": {
"message": "Failsafe configuration has changed considerably. Use Cleanflight <strong>v1.12.0+</strong> to enable the improved configuration panel."
},
@@ -1297,60 +1332,60 @@
"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"
+ "message": "Minimum length"
},
"failsafeRxMaxUsecItem": {
- "message": "Maximum length"
+ "message": "Maximum length"
},
"failsafeChannelFallbackSettingsTitle": {
- "message": "Channel Fallback Settings"
+ "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"
+ "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"
+ "message": "Stage 2 - Settings"
},
"failsafeFeatureItem": {
- "message": "Failsafe Stage 2 enabled"
+ "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)."
+ "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.]"
+ "message": "Guard time for stage 2 activation after signal lost [1 = 0.1 sec.]"
},
"failsafeDelayHelp": {
- "message": "Time for stage 1 to wait for recovery"
+ "message": "Time for stage 1 to wait for recovery"
},
"failsafeThrottleLowItem": {
- "message": "Failsafe Throttle Low Delay [1 = 0.1 sec.]"
+ "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"
+ "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.]"
+ "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"
+ "message": "Time to stay in landing mode untill the motors are turned off and the craft is disarmed"
},
"failsafeSubTitle1": {
- "message": "Stage 2 - Failsafe Procedure"
+ "message": "Stage 2 - Failsafe Procedure"
},
"failsafeProcedureItemSelect1": {
- "message": "Land"
+ "message": "Land"
},
"failsafeProcedureItemSelect2": {
- "message": "Drop"
+ "message": "Drop"
},
"failsafeKillSwitchItem": {
- "message": "Failsafe Kill Switch (setup Failsafe in Modes Tab)"
+ "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"
+ "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"
}
}
diff --git a/images/icons/cf_icon_position.png b/images/icons/cf_icon_position.png
new file mode 100644
index 00000000..48f8c9da
--- /dev/null
+++ b/images/icons/cf_icon_position.png
Binary files differ
diff --git a/js/msp.js b/js/msp.js
index bbe56949..6b662d7b 100644
--- a/js/msp.js
+++ b/js/msp.js
@@ -233,6 +233,7 @@ var MSP = {
CONFIG.activeSensors = data.getUint16(4, 1);
CONFIG.mode = data.getUint32(6, 1);
CONFIG.profile = data.getUint8(10);
+ $('select[name="profilechange"]').val(CONFIG.profile);
sensor_status(CONFIG.activeSensors);
$('span.i2c-error').text(CONFIG.i2cError);
@@ -879,6 +880,7 @@ var MSP = {
DATAFLASH.totalSize = 0;
DATAFLASH.usedSize = 0;
}
+ update_dataflash_global();
break;
case MSP_codes.MSP_DATAFLASH_READ:
// No-op, let callback handle it
diff --git a/js/serial_backend.js b/js/serial_backend.js
index 57a02655..44d960eb 100755
--- a/js/serial_backend.js
+++ b/js/serial_backend.js
@@ -250,13 +250,21 @@ function onConnect() {
$('div#connectbutton a.connect_state').text(chrome.i18n.getMessage('disconnect')).addClass('active');
$('div#connectbutton a.connect').addClass('active');
$('#tabs ul.mode-disconnected').hide();
- $('#tabs ul.mode-connected').show();
-
+ $('#tabs ul.mode-connected').show();
+
+ MSP.send_message(MSP_codes.MSP_STATUS, false, false);
+
+ MSP.send_message(MSP_codes.MSP_DATAFLASH_SUMMARY, false, false);
+
var sensor_state = $('#sensor-status');
sensor_state.show();
-
+
var port_picker = $('#portsinput');
port_picker.hide();
+
+ var dataflash = $('#dataflash_wrapper_global');
+ dataflash.show();
+
}
function onClosed(result) {
@@ -269,12 +277,15 @@ function onClosed(result) {
$('#tabs ul.mode-connected').hide();
$('#tabs ul.mode-disconnected').show();
+ var sensor_state = $('#sensor-status');
+ sensor_state.hide();
+
var port_picker = $('#portsinput');
port_picker.show();
+
+ var dataflash = $('#dataflash_wrapper_global');
+ dataflash.hide();
- var sensor_state = $('#sensor-status');
- sensor_state.hide();
-
}
function read_serial(info) {
@@ -374,7 +385,34 @@ function highByte(num) {
function lowByte(num) {
return 0x00FF & num;
-}
+}function update_dataflash_global() {
+ var supportsDataflash = DATAFLASH.totalSize > 0;
+ if (supportsDataflash){
+
+ $(".noflash_global").css({
+ display: 'none'
+ });
+
+ $(".dataflash-contents_global").css({
+ display: 'block'
+ });
+
+ $(".dataflash-free_global").css({
+ width: (100-(DATAFLASH.totalSize - DATAFLASH.usedSize) / DATAFLASH.totalSize * 100) + "%",
+ display: 'block'
+ });
+ $(".dataflash-free_global div").text('Dataflash: free ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize));
+ } else {
+ $(".noflash_global").css({
+ display: 'block'
+ });
+
+ $(".dataflash-contents_global").css({
+ display: 'none'
+ });
+ }
+
+ }
function specificByte(num, pos) {
return 0x000000FF & (num >> (8 * pos));
@@ -392,3 +430,45 @@ function bit_clear(num, bit) {
return num & ~(1 << bit);
}
+function update_dataflash_global() {
+ function formatFilesize(bytes) {
+ if (bytes < 1024) {
+ return bytes + "B";
+ }
+ var kilobytes = bytes / 1024;
+
+ if (kilobytes < 1024) {
+ return Math.round(kilobytes) + "kB";
+ }
+
+ var megabytes = kilobytes / 1024;
+
+ return megabytes.toFixed(1) + "MB";
+ }
+
+ var supportsDataflash = DATAFLASH.totalSize > 0;
+
+ if (supportsDataflash){
+ $(".noflash_global").css({
+ display: 'none'
+ });
+
+ $(".dataflash-contents_global").css({
+ display: 'block'
+ });
+
+ $(".dataflash-free_global").css({
+ width: (100-(DATAFLASH.totalSize - DATAFLASH.usedSize) / DATAFLASH.totalSize * 100) + "%",
+ display: 'block'
+ });
+ $(".dataflash-free_global div").text('Dataflash: free ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize));
+ } else {
+ $(".noflash_global").css({
+ display: 'block'
+ });
+
+ $(".dataflash-contents_global").css({
+ display: 'none'
+ });
+ }
+}
diff --git a/main.css b/main.css
index a6280308..6cf8becb 100644
--- a/main.css
+++ b/main.css
@@ -489,12 +489,16 @@ input[type="number"]::-webkit-inner-spin-button {
width: 200px;
border-right: 4px solid #59aa29;
background-color: #2e2e2e;
+ transition: all 0.2s;
+
}
.tab_container.logopen {
height: calc(100% - 235px);
overflow-x: hidden;
overflow-y: auto;
+ transition: all 0.5s;
+
}
@@ -1159,6 +1163,7 @@ dialog {
line-height: 13px;
display: block;
transition: all ease 0.2s;
+ text-decoration:none;
}
.default_btn a:hover {
@@ -1166,6 +1171,8 @@ dialog {
color: #fff;
text-shadow: 0px 1px rgba(0, 0, 0, 0.25);
transition: all ease 0.2s;
+ text-decoration:none;
+
}
.default_btn a:active {
@@ -1366,7 +1373,8 @@ dialog {
border-radius: 3px;
color: #fff;
font-size: 10px;
- }
+}
+
.fixfalse {
background-color: #e60000;
@@ -1377,19 +1385,111 @@ dialog {
color: #fff;
font-size: 10px;
}
+/* Dataflash element styling*/
+
+#dataflash_wrapper_global {
+ color:white;
+ font-size:10px;
+ margin-top: 20px;
+ width:125px;
+ float: right;
+ margin-right: 20px;
+ line-height: 12px;
+ height: 33px;
+ border-radius: 5px;
+ border: 1px solid #272727;
+ box-shadow: 0px 1px 0px rgba(92, 92, 92, 0.5);
+ background-color: #434343;
+ background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.55));
+ padding-top:5px;
+ display:none;
+ text-shadow: 0px 1px rgba(0, 0, 0, 1.0);
+
+}
+
+#profile_change {
+ color:white;
+ margin-top: 16px;
+ width:125px;
+ float: right;
+ margin-right: 0px;
+ line-height: 12px;
+}
+
+.dataflash-contents_global {
+ margin-top: 18px;
+ border: 1px solid #4A4A4A;
+ background-color: #4A4A4A;
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+ justify-content: flex-start;
+ border-radius: 3px;
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
+
+.dataflash-free_global {
+ background-color: #59AA29;
+ border-radius: 4px;
+}
+
+
+.dataflash-contents_global .notsupported_global {
+ display: none;
+}
+
+.dataflash-contents_global li {
+ height: 5px;
+ position: relative;
+ box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.20);
+ border-radius: 2px;
+
+}
+
+.dataflash-contents_global li div {
+ position: absolute;
+ top: -18px;
+ margin-top: 0px;
+ text-align: center;
+ left: 0;
+ right: 0;
+ width:120px;
+ text-align:left;
+ color:silver;
+}
+
+.dataflash-contents_global progress::-webkit-progress-bar {
+ height: 8px;
+ background-color: #eee;
+}
+
+.dataflash-contents progress::-webkit-progress-value {
+ background-color: #bcf;
+}
+
+.noflash_global {
+ display:none;
+ color: #868686;
+ text-align: center;
+ text-shadow: 0px 1px rgba(0, 0, 0, 1.0);
+ margin-top:2px;
+}
+
+
@media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) {
.content_wrapper {
padding: 15px;
- /*width:calc(100% - 30px);*/
- }
+}
.tab_title {
font-size: 16px;
line-height: 18px;
font-family: 'open_sanslight', Arial;
margin-bottom: 10px;
height: 22px;
- }
+}
.cf_doc_version_bt a {
padding: 1px 5px 1px 5px;
margin-top: -35px;
diff --git a/main.html b/main.html
index 3ace3e17..5d9b9c19 100755
--- a/main.html
+++ b/main.html
@@ -128,6 +128,25 @@
</div>
</div>
<div class="header-wrapper">
+ <div id="dataflash_wrapper_global">
+ <div class="noflash_global" align="center">No dataflash <br>chip found</div>
+ <ul class="dataflash-contents_global">
+ <li class="dataflash-free_global">
+ <div class="legend">Dataflash: free space</div>
+ </li>
+ </ul>
+ <div id="profile_change">
+ <div class="dropdown dropdown-dark">
+ <form name="profile-change" id="profile-change">
+ <select class="dropdown-select" name="profilechange">
+ <option value="0">Profile 1</option>
+ <option value="1">Profile 2</option>
+ <option value="2">Profile 3</option>
+ </select>
+ </form>
+ </div>
+ </div>
+ </div>
<div id="sensor-status" class="sensor_state mode-connected">
<ul>
<li class="gyro" title="Gyroscope">
@@ -185,10 +204,10 @@
<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>
- <li class=""><a href="#"class="tabicon ic_advanced">Advanced (spare icon)</a></li>
- <li class=""><a href="#"class="tabicon ic_wizzard">Wizzard (spare icon)</a></li>
- -->
+ <li class=""><a href="#"class="tabicon ic_mission">Mission (spare icon)</a></li>
+ <li class=""><a href="#"class="tabicon ic_advanced">Advanced (spare icon)</a></li>
+ <li class=""><a href="#"class="tabicon ic_wizzard">Wizzard (spare icon)</a></li>
+ -->
</ul>
</div>
<div class="clear-both"></div>
diff --git a/main.js b/main.js
index 2e418d6c..3a5bf7e7 100644
--- a/main.js
+++ b/main.js
@@ -42,6 +42,13 @@ $(document).ready(function () {
console.log('Application version expired');
GUI.log('You are using an old version of ' + chrome.runtime.getManifest().name + '. There may be a more recent version with improvements and fixes.');
}
+
+ chrome.storage.local.get('logopen', function (result) {
+ if (result.logopen) {
+ $("#showlog").trigger('click');
+ }
+ });
+
// log webgl capability
// it would seem the webgl "enabling" through advanced settings will be ignored in the future
@@ -306,6 +313,45 @@ $(document).ready(function () {
}
}
});
+
+ $("#showlog").on('click', function() {
+ var state = $(this).data('state');
+ if ( state ) {
+ $("#log").animate({height: 27}, 200, function() {
+ var command_log = $('div#log');
+ command_log.scrollTop($('div.wrapper', command_log).height());
+ });
+ $("#log").removeClass('active');
+ $("#content").removeClass('logopen');
+ $(".tab_container").removeClass('logopen');
+ $("#scrollicon").removeClass('active');
+ chrome.storage.local.set({'logopen': false});
+
+ state = false;
+ }else{
+ $("#log").animate({height: 111}, 200);
+ $("#log").addClass('active');
+ $("#content").addClass('logopen');
+ $(".tab_container").addClass('logopen');
+ $("#scrollicon").addClass('active');
+ chrome.storage.local.set({'logopen': true});
+
+ state = true;
+ }
+ $(this).text(state ? 'Hide Log' : 'Show Log');
+ $(this).data('state', state);
+
+ });
+
+ var profile_e = $('select[name="profilechange"]');
+
+ profile_e.change(function () {
+ var profile = parseInt($(this).val());
+ MSP.send_message(MSP_codes.MSP_SELECT_SETTING, [profile], false, function () {
+ GUI.log(chrome.i18n.getMessage('pidTuningLoadedProfile', [profile + 1]));
+ updateActivatedTab();
+ });
+ });
});
function catch_startup_time(startTime) {
@@ -361,31 +407,10 @@ String.prototype.format = function () {
});
};
-/** log trigger **/
-$(document).ready(function () {
-
-$("#showlog").on('click', function() {
- var state = $(this).data('state');
- if ( state ) {
- $("#log").animate({height: 27}, 200);
- $("#log").removeClass('active');
- $("#content").removeClass('logopen');
- $(".tab_container").removeClass('logopen');
- $("#scrollicon").removeClass('active');
-
- state = false;
- }else{
- $("#log").animate({height: 111}, 200);
- $("#log").addClass('active');
- $("#content").addClass('logopen');
- $(".tab_container").addClass('logopen');
- $("#scrollicon").addClass('active');
- state = true;
- }
- $(this).text(state ? 'Hide Log' : 'Show Log');
- $(this).data('state', state);
-
-});
-}); \ No newline at end of file
+function updateActivatedTab() {
+ var activeTab = $('#tabs > ul li.active');
+ activeTab.removeClass('active');
+ $('a', activeTab).trigger('click');
+} \ No newline at end of file
diff --git a/manifest.json b/manifest.json
index 41c97a62..6eff7b39 100644
--- a/manifest.json
+++ b/manifest.json
@@ -18,8 +18,13 @@
}
},
- "permissions": [
+ "sandbox": {
+ "pages": ["tabs/map.html"]
+ },
+
+ "permissions": [
"https://www.google-analytics.com/",
+ "https://maps.googleapis.com/*",
"https://*.github.com/",
"https://*.githubusercontent.com/",
"http://*.baseflight.net/",
diff --git a/tabs/configuration.html b/tabs/configuration.html
index e34f19a1..c6cf20d0 100644
--- a/tabs/configuration.html
+++ b/tabs/configuration.html
@@ -258,7 +258,7 @@
<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="cf_tooltiptext" i18n="configurationRSSIHelp" style="display:none;"></div>
</div>
</div>
<div class="spacer_box">
diff --git a/tabs/dataflash.css b/tabs/dataflash.css
index 01ebdb04..653f3c04 100644
--- a/tabs/dataflash.css
+++ b/tabs/dataflash.css
@@ -98,6 +98,8 @@
text-align: center;
left: 0;
right: 0;
+ width: 100%;
+ color: black;
}
.tab-dataflash .dataflash-used {
diff --git a/tabs/dataflash.js b/tabs/dataflash.js
index 60e9214e..91f5f8e2 100644
--- a/tabs/dataflash.js
+++ b/tabs/dataflash.js
@@ -54,26 +54,26 @@ TABS.dataflash.initialize = function (callback) {
function update_html() {
if (DATAFLASH.usedSize > 0) {
- $(".tab-dataflash .dataflash-used").css({
+ $(".dataflash-used").css({
width: (DATAFLASH.usedSize / DATAFLASH.totalSize * 100) + "%",
display: 'block'
});
- $(".tab-dataflash .dataflash-used div").text('Used space ' + formatFilesize(DATAFLASH.usedSize));
+ $(".dataflash-used div").text('Used space ' + formatFilesize(DATAFLASH.usedSize));
} else {
- $(".tab-dataflash .dataflash-used").css({
+ $(".dataflash-used").css({
display: 'none'
});
}
if (DATAFLASH.totalSize - DATAFLASH.usedSize > 0) {
- $(".tab-dataflash .dataflash-free").css({
+ $(".dataflash-free").css({
width: ((DATAFLASH.totalSize - DATAFLASH.usedSize) / DATAFLASH.totalSize * 100) + "%",
display: 'block'
});
- $(".tab-dataflash .dataflash-free div").text('Free space ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize));
+ $(".dataflash-free div").text('Free space ' + formatFilesize(DATAFLASH.totalSize - DATAFLASH.usedSize));
} else {
- $(".tab-dataflash .dataflash-free").css({
+ $(".dataflash-free").css({
display: 'none'
});
}
diff --git a/tabs/gps.css b/tabs/gps.css
index 59f147b2..d5e78ab3 100644
--- a/tabs/gps.css
+++ b/tabs/gps.css
@@ -16,14 +16,104 @@
background-color: #ececec;
}
-.tab-gps a {
+.tab-gps .gps_map {
+ height: 460px;
+}
+
+
+.tab-gps #connect {
+ display:none;
+ text-align:center;
+ padding-top:40%;
+}
+
+.tab-gps #waiting {
+ margin-top: 0px;
+ display: none;
+ text-align: center;
+ padding-top: 0px;
+ background-image: url(../images/loading-bars.svg);
+ background-position: center 40%;
+ background-size: 15%;
+ height: 100%;
+ background-repeat: no-repeat;
+ float: left;
+ width: 100%;
+}
+
+.tab-gps #waiting .info {
+ margin-top: 50%;
+}
+
+.tab-gps #loadmap {
+ margin-top:0px;
+ display:none;
+}
+
+.tab-gps #connect a {
font-weight: bold;
+ margin-top:10px;
+}
+
+
+.tab-gps #loadmap {
+ height: 100%;
+ width: 100%;
+ float: left;
}
-.tab-gps a:hover {
- text-decoration: underline;
+
+.tab-gps #loadmap .controls {
+ width: 100%;
+ float: left;
+ height: 33px;
+ border-bottom-left-radius: 3px;
+ border-bottom-right-radius: 3px;
+ background-color: #D1D1D1;
+}
+
+.tab-gps #loadmap .controls a {
+ background-color: white;
+ border-radius: 4px;
+ border: 1px silver solid;
+ color: grey;
+ height: 10px;
+ width: 10px;
+ text-align: center;
+ font-size: 20px;
+ line-height: 10px;
+ padding: 6px;
+ margin-top: 5px;
+ float: right;
}
+.tab-gps #loadmap .controls a:hover {
+ background-color: #f5f5f5;
+}
+
+.tab-gps #loadmap .controls a:active {
+ background-color: #e6e6e6;
+}
+
+.tab-gps #loadmap .controls a:first-child {
+ margin-left: -1px;
+ margin-right: 5px;
+ border-bottom-left-radius: 0px;
+ border-top-left-radius: 0px;
+}
+.tab-gps #loadmap .controls a:last-child {
+ margin-right: 0px;
+ border-bottom-right-radius: 0px;
+ border-top-right-radius: 0px;
+}
+
+.tab-gps iframe {
+ height: 400px;
+ width: 100%;
+ float: left;
+}
+
+
progress[value]::-webkit-progress-bar {
background-color: #d2d2d2;
border-radius: 2px;
@@ -36,4 +126,19 @@ progress[value]::-webkit-progress-value {
-webkit-linear-gradient(left, #59aa29, #59aa29);
border-radius: 2px;
box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.25) inset;
-} \ No newline at end of file
+}
+
+
+@media only screen and (max-width: 1055px) , only screen and (max-device-width: 1055px) {
+
+.tab-gps iframe {
+ height: 347px;
+ width: 100%;
+ float: left;
+}
+
+.tab-gps .gps_map {
+ height: 403px;
+}
+
+}
diff --git a/tabs/gps.html b/tabs/gps.html
index 5276868e..e2ad57e6 100644
--- a/tabs/gps.html
+++ b/tabs/gps.html
@@ -145,6 +145,27 @@
</div>
</div>
</div>
+ <div class="cf_column half">
+ <div class="gui_box grey gps_map">
+ <div class="gui_box_titlebar" style="margin-bottom: 0px;">
+ <div class="spacer_box_title" i18n="gpsMapHead"></div>
+ </div>
+ <div id="connect" i18n="gpsMapMessage1">
+ <div class="default_btn" style="width:50px; margin-left:auto; margin-right:auto; float:none;"><a id="check">retry</a></div>
+ </div>
+ <div id="waiting" >
+ <div class="info" i18n="gpsMapMessage2"></span>
+ </div>
+ </div>
+ <div id="loadmap">
+ <iframe src="tabs/map.html" id="map"></iframe>
+ <div class="controls">
+ <a href="#" id="zoom_in">+</a>
+ <a href="#" id="zoom_out">–</a>
+ </div>
+ </div>
+ </div>
+
</div>
</div>
</div> \ No newline at end of file
diff --git a/tabs/gps.js b/tabs/gps.js
index b6657f61..f0e4967f 100644
--- a/tabs/gps.js
+++ b/tabs/gps.js
@@ -14,9 +14,21 @@ TABS.gps.initialize = function (callback) {
}
MSP.send_message(MSP_codes.MSP_STATUS, false, false, load_html);
-
+
+ function set_online(){
+ $('#connect').hide();
+ $('#waiting').show();
+ $('#loadmap').hide();
+ }
+
+ function set_offline(){
+ $('#connect').show();
+ $('#waiting').hide();
+ $('#loadmap').hide();
+ }
+
function process_html() {
- // translate to user-selected language
+ // translate to user-selected languageconsole.log('Online');
localize();
function get_raw_gps_data() {
@@ -54,13 +66,39 @@ TABS.gps.initialize = function (callback) {
$('td', row).eq(1).text(GPS_DATA.quality[i]);
$('td', row).eq(2).find('progress').val(GPS_DATA.cno[i]);
}
+
+
+ var message = {
+ action: 'center',
+ lat: lat,
+ lon: lon,
+ };
+
+ var frame = document.getElementById('map');
+ if (navigator.onLine) {
+ $('#connect').hide();
+
+ //if(lat != 0 && lon != 0){
+ if(GPS_DATA.fix){
+ frame.contentWindow.postMessage(message, '*');
+ $('#loadmap').show();
+ $('#waiting').hide();
+ }else{
+ $('#loadmap').hide();
+ $('#waiting').show();
+ }
+ }else{
+ $('#connect').show();
+ $('#waiting').hide();
+ $('#loadmap').hide();
+ }
}
// enable data pulling
GUI.interval_add('gps_pull', function gps_update() {
// avoid usage of the GPS commands until a GPS sensor is detected for targets that are compiled without GPS support.
if (!have_sensor(CONFIG.activeSensors, 'gps')) {
- return;
+ //return;
}
get_raw_gps_data();
@@ -71,10 +109,51 @@ TABS.gps.initialize = function (callback) {
MSP.send_message(MSP_codes.MSP_STATUS);
}, 250, true);
+
+ //check for internet connection on load
+ if (navigator.onLine) {
+ console.log('Online');
+ set_online();
+ } else {
+ console.log('Offline');
+ set_offline();
+ }
+
+ $("#check").on('click',function(){
+ if (navigator.onLine) {
+ console.log('Online');
+ set_online();
+ } else {
+ console.log('Offline');
+ set_offline();
+ }
+ });
+
+ var frame = document.getElementById('map');
+
+ $('#zoom_in').click(function() {
+ console.log('zoom in');
+ var message = {
+ action: 'zoom_in',
+ };
+ frame.contentWindow.postMessage(message, '*');
+ });
+
+ $('#zoom_out').click(function() {
+ console.log('zoom out');
+ var message = {
+ action: 'zoom_out'
+ };
+ frame.contentWindow.postMessage(message, '*');
+ });
+
GUI.content_ready(callback);
}
+
};
+
+
TABS.gps.cleanup = function (callback) {
if (callback) callback();
}; \ No newline at end of file
diff --git a/tabs/help.css b/tabs/help.css
index 2793355e..15af925b 100644
--- a/tabs/help.css
+++ b/tabs/help.css
@@ -6,4 +6,31 @@
.tab-help .gui_box {
min-height: 500px;
margin-bottom: 0px;
+}
+
+.tab-help ul {
+ margin-bottom:15px;
+}
+
+.tab-help li {
+ border-top: 1px dotted silver;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ background-image: url(../images/arrow.svg);
+ background-repeat: no-repeat;
+ background-position: 0px 8px;
+ background-size: 12px;
+}
+
+.tab-help li span {
+ margin-left: 17px;
+ display:block;
+}
+
+.tab-help li span a {
+ color: #59aa29;
+}
+
+.tab-help .subline {
+ margin-bottom: 5px;
} \ No newline at end of file
diff --git a/tabs/help.html b/tabs/help.html
index 59bc0eb1..e5323895 100644
--- a/tabs/help.html
+++ b/tabs/help.html
@@ -7,6 +7,10 @@
</div>
<div class="spacer">
<p i18n="defaultDocumentation"></p>
+ <ul>
+ <li><span i18n="defaultDocumentation1"></span></li>
+ <li><span i18n="defaultDocumentation2"></span></li>
+ </ul>
</div>
</div>
</div>
@@ -16,7 +20,20 @@
<div class="spacer_box_title" i18n="defaultSupportHead"></div>
</div>
<div class="spacer">
- <p i18n="defaultSupport"></p>
+ <p i18n="defaultSupport"></p>
+ <div class="subline"><strong i18n="defaultSupportSubline1"></strong></div>
+ <ul>
+ <li><span i18n="defaultSupport1"></span></li>
+ <li><span i18n="defaultSupport2"></span></li>
+ </ul>
+
+ <div class="subline"><strong i18n="defaultSupportSubline2"></strong></div>
+ <ul>
+ <li><span i18n="defaultSupport3"></span></li>
+ <li><span i18n="defaultSupport4"></span></li>
+ <li><span i18n="defaultSupport5"></span></li>
+ </ul>
+
</div>
</div>
</div>
diff --git a/tabs/map.html b/tabs/map.html
new file mode 100644
index 00000000..27bb7698
--- /dev/null
+++ b/tabs/map.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Asynchronous Loading</title>
+ <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
+ <meta charset="utf-8">
+ <style>
+ html, body, #map-canvas {
+ height: 100%;
+ margin: 0px;
+ padding: 0px;
+ }
+ </style>
+ <script>
+
+ window.addEventListener('message', function (e) {
+ var mainWindow = e.source;
+ var result = '';
+ try {
+ switch(e.data.action){
+ case 'zoom_in':
+ var zoom = map.getZoom();
+ zoom++;
+ map.setZoom(zoom);
+ break;
+
+ case 'zoom_out':
+ var zoom = map.getZoom();
+ zoom--;
+ map.setZoom(zoom);
+ break;
+ case 'center':
+ map.setCenter(new google.maps.LatLng(e.data.lat, e.data.lon));
+ marker.setPosition( new google.maps.LatLng( e.data.lat, e.data.lon ) );
+ map.panTo( new google.maps.LatLng( e.data.lat, e.data.lon ) );
+ }
+ } catch (e) {
+ console.log('message error');
+ }
+ });
+
+ function loadMapScript() {
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=true&callback=initialize';
+ document.head.appendChild(script);
+ }
+
+ window.onload = loadMapScript;
+
+ var map;
+ var marker;
+
+ function initialize() {
+
+ var mapOptions = {
+ zoom: 17,
+ zoomControl: false,
+ streetViewControl: false,
+ center: {lat: 53.570645, lng: 10.001362}
+ };
+ map = new google.maps.Map(document.getElementById('map-canvas'),mapOptions);
+
+ var image = {
+ url: '../images/icons/cf_icon_position.png',
+ scaledSize: new google.maps.Size(70, 70)
+ };
+
+ marker = new google.maps.Marker({
+ icon : image,
+ position: new google.maps.LatLng(53.570645, 10.001362),
+ map:map
+ });
+
+
+ // You can use a LatLng literal in place of a google.maps.LatLng object when
+ // creating the Marker object. Once the Marker object is instantiated, its
+ // position will be available as a google.maps.LatLng object. In this case,
+ // we retrieve the marker's position using the
+ // google.maps.LatLng.getPosition() method.
+ var infowindow = new google.maps.InfoWindow({
+ content: '<p>Your Location: ' + marker.getPosition() + '</p>'
+ });
+
+ google.maps.event.addListener(marker, 'click', function() {
+ infowindow.open(map, marker);
+ });
+
+ window.addEventListener('message', function(e) {
+ var data = e.data;
+ var origin = e.origin;
+ });
+}
+
+ </script>
+ </head>
+ <body>
+ <div id="map-canvas"></div>
+ </body> \ No newline at end of file
diff --git a/tabs/pid_tuning.css b/tabs/pid_tuning.css
index 10ed639f..4f81f0b1 100644
--- a/tabs/pid_tuning.css
+++ b/tabs/pid_tuning.css
@@ -144,8 +144,8 @@
.tab-pid_tuning .controller {
float: left;
- width: calc(50% - 12px);
- margin-left: 10px;
+ width: calc(50% - 2px);
+ margin-left: 0px;
margin-bottom: 10px;
border-radius: 3px;
border: 1px solid #ccc;
diff --git a/tabs/pid_tuning.html b/tabs/pid_tuning.html
index 3d6ae3f3..db121a4a 100755
--- a/tabs/pid_tuning.html
+++ b/tabs/pid_tuning.html
@@ -6,13 +6,6 @@
<a id="button-documentation" href="https://github.com/cleanflight/cleanflight/releases" target="_blank"></a>
</div>
<div class="cf_column half">
- <div class="profile">
- <span class="head" i18n="pidTuningProfileHead"></span> <select name="profile">
- <option value="0">1</option>
- <option value="1">2</option>
- <option value="2">3</option>
- </select>
- </div>
<div class="controller">
<span class="head" i18n="pidTuningControllerHead"></span> <select name="controller">
<!-- list generated here -->
@@ -136,7 +129,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>
diff --git a/tabs/pid_tuning.js b/tabs/pid_tuning.js
index 55504b21..cbda94a9 100755
--- a/tabs/pid_tuning.js
+++ b/tabs/pid_tuning.js
@@ -314,7 +314,6 @@ TABS.pid_tuning.initialize = function (callback) {
}
- var profile_e = $('select[name="profile"]');
var form_e = $('#pid-tuning');
if (GUI.canChangePidController) {
@@ -336,21 +335,7 @@ TABS.pid_tuning.initialize = function (callback) {
$('.rate-tpa .roll-pitch').hide();
}
- // Fill in currently selected profile
-
- profile_e.val(CONFIG.profile);
-
// UI Hooks
- profile_e.change(function () {
- var profile = parseInt($(this).val());
- MSP.send_message(MSP_codes.MSP_SELECT_SETTING, [profile], false, function () {
- GUI.log(chrome.i18n.getMessage('pidTuningLoadedProfile', [profile + 1]));
-
- GUI.tab_switch_cleanup(function () {
- TABS.pid_tuning.initialize();
- });
- });
- });
$('a.refresh').click(function () {
GUI.tab_switch_cleanup(function () {
diff --git a/tabs/receiver.css b/tabs/receiver.css
index 6bfa23f8..1ab80c8c 100644
--- a/tabs/receiver.css
+++ b/tabs/receiver.css
@@ -193,11 +193,11 @@
}
.tab-receiver .tunings table td:first-child {
- border-bottom-left-radius: 5px;
+ border-bottom-left-radius: 3px;
}
.tab-receiver .tunings table td:last-child {
- border-bottom-right-radius: 5px;
+ border-bottom-right-radius: 3px;
border-right: 0px;
}
@@ -224,8 +224,8 @@
margin: 0px 0px 10px 0;
border-left: 0;
width: 30%;
- border-top-right-radius: 5px;
- border-bottom-right-radius: 5px;
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
background-color: #DEDEDE;
}
@@ -237,7 +237,7 @@
font-weight: normal;
background: #828885;
color: white;
- border-top-right-radius: 5px;
+ border-top-right-radius: 3px;
}
.tab-receiver .rssi_channel_wrapper select {
@@ -253,8 +253,8 @@
position: relative;
margin: 0px 0px 10px 0;
width: calc(70% - 0px);
- border-top-left-radius: 5px;
- border-bottom-left-radius: 5px;
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
background-color: #DEDEDE;
}
@@ -266,7 +266,7 @@
font-weight: normal;
background: #828885;
color: white;
- border-top-left-radius: 5px;
+ border-top-left-radius: 3px;
border-right: 1px solid silver;
}
diff --git a/tabs/setup.js b/tabs/setup.js
index 2868454f..6223cd12 100755
--- a/tabs/setup.js
+++ b/tabs/setup.js
@@ -228,7 +228,7 @@ TABS.setup.initialize3D = function (compatibility) {
renderer = new THREE.CanvasRenderer({canvas: canvas.get(0), alpha: true});
}
// initialize render size for current canvas size
- renderer.setSize(wrapper.width(), wrapper.height());
+ renderer.setSize(wrapper.width()*2, wrapper.height()*2);
// // modelWrapper adds an extra axis of rotation to avoid gimbal lock with the euler angles
@@ -295,7 +295,7 @@ TABS.setup.initialize3D = function (compatibility) {
// handle canvas resize
this.resize3D = function () {
- renderer.setSize(wrapper.width(), wrapper.height());
+ renderer.setSize(wrapper.width()*2, wrapper.height()*2);
camera.aspect = wrapper.width() / wrapper.height();
camera.updateProjectionMatrix();