mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-15 20:35:19 +03:00
upload
This commit is contained in:
parent
3a9c7f3794
commit
d61970e177
5 changed files with 251 additions and 221 deletions
38
README.md
38
README.md
|
@ -1,4 +1,3 @@
|
||||||
<<<<<<< HEAD
|
|
||||||
# Cleanflight Configurator
|
# Cleanflight Configurator
|
||||||
|
|
||||||
Cleanflight Configurator is a crossplatform configuration tool for the [Cleanflight](http://cleanflight.com/) flight control system.
|
Cleanflight Configurator is a crossplatform configuration tool for the [Cleanflight](http://cleanflight.com/) flight control system.
|
||||||
|
@ -42,43 +41,6 @@ You can find the Cleanflight Configurator icon in your application tab "Apps"
|
||||||
|
|
||||||
### WebGL
|
### WebGL
|
||||||
|
|
||||||
=======
|
|
||||||
*NOTICE*
|
|
||||||
========
|
|
||||||
|
|
||||||
This code is dead, cTn made the original closed source. All new development should happen on the cleanflight/development branch.
|
|
||||||
|
|
||||||
https://github.com/cleanflight/cleanflight-configurator/tree/development
|
|
||||||
|
|
||||||
This copy of the old baseflight code is placed in the cleanflight repository as a courtesy to the Open Source community.
|
|
||||||
|
|
||||||
Baseflight Configurator
|
|
||||||
=======================
|
|
||||||
Configurator based on chrome.serial API running on Google Chrome/Chromium core
|
|
||||||
|
|
||||||
Keep in mind that this configurator is the most up-to-date configurator implementation for Baseflight flight software,
|
|
||||||
in many cases it requires latest firmware on the flight controller, if you are experiencing any problems,
|
|
||||||
please make sure you are running the latest version of firmware.
|
|
||||||
|
|
||||||
Installation
|
|
||||||
------------
|
|
||||||
1. - Visit [Chrome web store](https://chrome.google.com/webstore/detail/baseflight-multiwii-confi/mppkgnedeapfejgfimkdoninnofofigk)
|
|
||||||
2. - Click <strong>+ Free</strong>
|
|
||||||
|
|
||||||
Alternative way
|
|
||||||
---------------
|
|
||||||
1. - Clone the repo to any local directory or download it as zip
|
|
||||||
2. - Start chromium or google chrome and go to tools -> extension
|
|
||||||
3. - Check the "Developer mode" checkbox
|
|
||||||
4. - Click on load unpacked extension and point it to the baseflight configurator directory (for example D:/baseflight-configurator)
|
|
||||||
|
|
||||||
How to use
|
|
||||||
-----------
|
|
||||||
You can find the Baseflight - Configurator icon in your application tab "Apps"
|
|
||||||
|
|
||||||
WebGL
|
|
||||||
-----
|
|
||||||
>>>>>>> origin/baseflight-configurator-development
|
|
||||||
Make sure Settings -> System -> "User hardware acceleration when available" is checked to achieve the best performance
|
Make sure Settings -> System -> "User hardware acceleration when available" is checked to achieve the best performance
|
||||||
|
|
||||||
### Linux users
|
### Linux users
|
||||||
|
|
16
js/libraries/d3.min.js
vendored
16
js/libraries/d3.min.js
vendored
File diff suppressed because one or more lines are too long
299
js/msp.js
299
js/msp.js
|
@ -51,7 +51,7 @@ var MSP_codes = {
|
||||||
MSP_PIDNAMES: 117,
|
MSP_PIDNAMES: 117,
|
||||||
MSP_WP: 118,
|
MSP_WP: 118,
|
||||||
MSP_BOXIDS: 119,
|
MSP_BOXIDS: 119,
|
||||||
MSP_SERVO_CONF: 120,
|
MSP_SERVO_CONFIGURATIONS: 120,
|
||||||
|
|
||||||
MSP_SET_RAW_RC: 200,
|
MSP_SET_RAW_RC: 200,
|
||||||
MSP_SET_RAW_GPS: 201,
|
MSP_SET_RAW_GPS: 201,
|
||||||
|
@ -65,10 +65,13 @@ var MSP_codes = {
|
||||||
MSP_SET_WP: 209,
|
MSP_SET_WP: 209,
|
||||||
MSP_SELECT_SETTING: 210,
|
MSP_SELECT_SETTING: 210,
|
||||||
MSP_SET_HEAD: 211,
|
MSP_SET_HEAD: 211,
|
||||||
MSP_SET_SERVO_CONF: 212,
|
MSP_SET_SERVO_CONFIGURATION: 212,
|
||||||
MSP_SET_MOTOR: 214,
|
MSP_SET_MOTOR: 214,
|
||||||
|
|
||||||
// MSP_BIND: 240,
|
// MSP_BIND: 240,
|
||||||
|
|
||||||
|
MSP_SERVO_MIX_RULES: 241,
|
||||||
|
MSP_SET_SERVO_MIX_RULE: 242,
|
||||||
|
|
||||||
MSP_EEPROM_WRITE: 250,
|
MSP_EEPROM_WRITE: 250,
|
||||||
|
|
||||||
|
@ -80,7 +83,7 @@ var MSP_codes = {
|
||||||
MSP_ACC_TRIM: 240, // get acc angle trim values
|
MSP_ACC_TRIM: 240, // get acc angle trim values
|
||||||
MSP_SET_ACC_TRIM: 239, // set acc angle trim values
|
MSP_SET_ACC_TRIM: 239, // set acc angle trim values
|
||||||
MSP_GPS_SV_INFO: 164, // get Signal Strength
|
MSP_GPS_SV_INFO: 164, // get Signal Strength
|
||||||
|
|
||||||
// Additional private MSP for baseflight configurator (yes thats us \o/)
|
// Additional private MSP for baseflight configurator (yes thats us \o/)
|
||||||
MSP_RX_MAP: 64, // get channel map (also returns number of channels total)
|
MSP_RX_MAP: 64, // get channel map (also returns number of channels total)
|
||||||
MSP_SET_RX_MAP: 65, // set rc map, numchannels to set comes from MSP_RX_MAP
|
MSP_SET_RX_MAP: 65, // set rc map, numchannels to set comes from MSP_RX_MAP
|
||||||
|
@ -102,6 +105,7 @@ var MSP = {
|
||||||
|
|
||||||
callbacks: [],
|
callbacks: [],
|
||||||
packet_error: 0,
|
packet_error: 0,
|
||||||
|
unsupported: 0,
|
||||||
|
|
||||||
ledDirectionLetters: ['n', 'e', 's', 'w', 'u', 'd'], // in LSB bit order
|
ledDirectionLetters: ['n', 'e', 's', 'w', 'u', 'd'], // in LSB bit order
|
||||||
ledFunctionLetters: ['i', 'w', 'f', 'a', 't', 'r', 'c'], // in LSB bit order
|
ledFunctionLetters: ['i', 'w', 'f', 'a', 't', 'r', 'c'], // in LSB bit order
|
||||||
|
@ -138,10 +142,14 @@ var MSP = {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2: // direction (should be >)
|
case 2: // direction (should be >)
|
||||||
|
this.unsupported = 0;
|
||||||
if (data[i] == 62) { // >
|
if (data[i] == 62) { // >
|
||||||
this.message_direction = 1;
|
this.message_direction = 1;
|
||||||
} else { // <
|
} else if (data[i] == 60) { // <
|
||||||
this.message_direction = 0;
|
this.message_direction = 0;
|
||||||
|
} else if (data[i] == 33) { // !
|
||||||
|
// FC reports unsupported message error
|
||||||
|
this.unsupported = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.state++;
|
this.state++;
|
||||||
|
@ -202,7 +210,7 @@ var MSP = {
|
||||||
process_data: function (code, message_buffer, message_length) {
|
process_data: function (code, message_buffer, message_length) {
|
||||||
var data = new DataView(message_buffer, 0); // DataView (allowing us to view arrayBuffer as struct/union)
|
var data = new DataView(message_buffer, 0); // DataView (allowing us to view arrayBuffer as struct/union)
|
||||||
|
|
||||||
switch (code) {
|
if (!this.unsupported) switch (code) {
|
||||||
case MSP_codes.MSP_IDENT:
|
case MSP_codes.MSP_IDENT:
|
||||||
console.log('Using deprecated msp command: MSP_IDENT');
|
console.log('Using deprecated msp command: MSP_IDENT');
|
||||||
// Deprecated
|
// Deprecated
|
||||||
|
@ -377,7 +385,6 @@ var MSP = {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MSP_codes.MSP_MISC: // 22 bytes
|
case MSP_codes.MSP_MISC: // 22 bytes
|
||||||
<<<<<<< HEAD
|
|
||||||
var offset = 0;
|
var offset = 0;
|
||||||
MISC.midrc = data.getInt16(offset, 1);
|
MISC.midrc = data.getInt16(offset, 1);
|
||||||
offset += 2;
|
offset += 2;
|
||||||
|
@ -401,24 +408,6 @@ var MSP = {
|
||||||
MISC.vbatmincellvoltage = data.getUint8(offset++, 1) / 10; // 10-50
|
MISC.vbatmincellvoltage = data.getUint8(offset++, 1) / 10; // 10-50
|
||||||
MISC.vbatmaxcellvoltage = data.getUint8(offset++, 1) / 10; // 10-50
|
MISC.vbatmaxcellvoltage = data.getUint8(offset++, 1) / 10; // 10-50
|
||||||
MISC.vbatwarningcellvoltage = data.getUint8(offset++, 1) / 10; // 10-50
|
MISC.vbatwarningcellvoltage = data.getUint8(offset++, 1) / 10; // 10-50
|
||||||
=======
|
|
||||||
MISC.midrc = data.getInt16(0, 1);
|
|
||||||
MISC.minthrottle = data.getUint16(2, 1); // 0-2000
|
|
||||||
MISC.maxthrottle = data.getUint16(4, 1); // 0-2000
|
|
||||||
MISC.mincommand = data.getUint16(6, 1); // 0-2000
|
|
||||||
MISC.failsafe_throttle = data.getUint16(8, 1); // 1000-2000
|
|
||||||
MISC.gps_type = data.getUint8(10);
|
|
||||||
MISC.gps_baudrate = data.getUint8(11);
|
|
||||||
MISC.gps_ubx_sbas = data.getInt8(12);
|
|
||||||
MISC.multiwiicurrentoutput = data.getUint8(13);
|
|
||||||
MISC.rssi_aux_channel = data.getUint8(14);
|
|
||||||
MISC.placeholder2 = data.getUint8(15);
|
|
||||||
MISC.mag_declination = data.getInt16(16, 1) / 10; // -18000-18000
|
|
||||||
MISC.vbatscale = data.getUint8(18, 1); // 10-200
|
|
||||||
MISC.vbatmincellvoltage = data.getUint8(19, 1) / 10; // 10-50
|
|
||||||
MISC.vbatmaxcellvoltage = data.getUint8(20, 1) / 10; // 10-50
|
|
||||||
MISC.vbatwarningcellvoltage = data.getUint8(21, 1) / 10; // 10-50
|
|
||||||
>>>>>>> origin/baseflight-configurator-development
|
|
||||||
break;
|
break;
|
||||||
case MSP_codes.MSP_MOTOR_PINS:
|
case MSP_codes.MSP_MOTOR_PINS:
|
||||||
console.log(data);
|
console.log(data);
|
||||||
|
@ -463,19 +452,52 @@ var MSP = {
|
||||||
AUX_CONFIG_IDS.push(data.getUint8(i));
|
AUX_CONFIG_IDS.push(data.getUint8(i));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MSP_codes.MSP_SERVO_CONF:
|
case MSP_codes.MSP_SERVO_MIX_RULES:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MSP_codes.MSP_SERVO_CONFIGURATIONS:
|
||||||
SERVO_CONFIG = []; // empty the array as new data is coming in
|
SERVO_CONFIG = []; // empty the array as new data is coming in
|
||||||
|
|
||||||
if (data.byteLength % 7 == 0) {
|
if (semver.gte(CONFIG.apiVersion, "1.12.0")) {
|
||||||
for (var i = 0; i < data.byteLength; i += 7) {
|
if (data.byteLength % 14 == 0) {
|
||||||
var arr = {
|
for (var i = 0; i < data.byteLength; i += 14) {
|
||||||
'min': data.getInt16(i, 1),
|
var arr = {
|
||||||
'max': data.getInt16(i + 2, 1),
|
'min': data.getInt16(i + 0, 1),
|
||||||
'middle': data.getInt16(i + 4, 1),
|
'max': data.getInt16(i + 2, 1),
|
||||||
'rate': data.getInt8(i + 6)
|
'middle': data.getInt16(i + 4, 1),
|
||||||
};
|
'rate': data.getInt8(i + 6),
|
||||||
|
'angleAtMin': data.getInt8(i + 7),
|
||||||
SERVO_CONFIG.push(arr);
|
'angleAtMax': data.getInt8(i + 8),
|
||||||
|
'indexOfChannelToForward': data.getInt8(i + 9),
|
||||||
|
'reversedInputSources': data.getUint32(i + 10)
|
||||||
|
};
|
||||||
|
|
||||||
|
SERVO_CONFIG.push(arr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (data.byteLength % 7 == 0) {
|
||||||
|
for (var i = 0; i < data.byteLength; i += 7) {
|
||||||
|
var arr = {
|
||||||
|
'min': data.getInt16(i + 0, 1),
|
||||||
|
'max': data.getInt16(i + 2, 1),
|
||||||
|
'middle': data.getInt16(i + 4, 1),
|
||||||
|
'rate': data.getInt8(i + 6),
|
||||||
|
'angleAtMin': 90,
|
||||||
|
'angleAtMax': 90,
|
||||||
|
'indexOfChannelToForward': undefined,
|
||||||
|
'reversedInputSources': 0
|
||||||
|
};
|
||||||
|
|
||||||
|
SERVO_CONFIG.push(arr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (semver.eq(CONFIG.apiVersion, '1.10.0')) {
|
||||||
|
// drop two unused servo configurations due to MSP rx buffer to small)
|
||||||
|
while (SERVO_CONFIG.length > 8) {
|
||||||
|
SERVO_CONFIG.pop();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -509,7 +531,7 @@ var MSP = {
|
||||||
case MSP_codes.MSP_SELECT_SETTING:
|
case MSP_codes.MSP_SELECT_SETTING:
|
||||||
console.log('Profile selected');
|
console.log('Profile selected');
|
||||||
break;
|
break;
|
||||||
case MSP_codes.MSP_SET_SERVO_CONF:
|
case MSP_codes.MSP_SET_SERVO_CONFIGURATION:
|
||||||
console.log('Servo Configuration saved');
|
console.log('Servo Configuration saved');
|
||||||
break;
|
break;
|
||||||
case MSP_codes.MSP_EEPROM_WRITE:
|
case MSP_codes.MSP_EEPROM_WRITE:
|
||||||
|
@ -817,6 +839,8 @@ var MSP = {
|
||||||
|
|
||||||
default:
|
default:
|
||||||
console.log('Unknown code detected: ' + code);
|
console.log('Unknown code detected: ' + code);
|
||||||
|
} else {
|
||||||
|
console.log('FC reports unsupported message error: ' + code);
|
||||||
}
|
}
|
||||||
|
|
||||||
// trigger callbacks, cleanup/remove callback after trigger
|
// trigger callbacks, cleanup/remove callback after trigger
|
||||||
|
@ -963,43 +987,43 @@ MSP.crunch = function (code) {
|
||||||
case 7:
|
case 7:
|
||||||
case 8:
|
case 8:
|
||||||
case 9:
|
case 9:
|
||||||
buffer.push(parseInt(PIDs[i][0] * 10));
|
buffer.push(Math.round(PIDs[i][0] * 10));
|
||||||
buffer.push(parseInt(PIDs[i][1] * 1000));
|
buffer.push(Math.round(PIDs[i][1] * 1000));
|
||||||
buffer.push(parseInt(PIDs[i][2]));
|
buffer.push(parseInt(PIDs[i][2]));
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
buffer.push(parseInt(PIDs[i][0] * 100));
|
buffer.push(Math.round(PIDs[i][0] * 100));
|
||||||
buffer.push(parseInt(PIDs[i][1] * 100));
|
buffer.push(Math.round(PIDs[i][1] * 100));
|
||||||
buffer.push(parseInt(PIDs[i][2]));
|
buffer.push(parseInt(PIDs[i][2]));
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
case 6:
|
case 6:
|
||||||
buffer.push(parseInt(PIDs[i][0] * 10));
|
buffer.push(Math.round(PIDs[i][0] * 10));
|
||||||
buffer.push(parseInt(PIDs[i][1] * 100));
|
buffer.push(Math.round(PIDs[i][1] * 100));
|
||||||
buffer.push(parseInt(PIDs[i][2] * 1000));
|
buffer.push(Math.round(PIDs[i][2] * 1000));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MSP_codes.MSP_SET_RC_TUNING:
|
case MSP_codes.MSP_SET_RC_TUNING:
|
||||||
buffer.push(parseInt(RC_tuning.RC_RATE * 100));
|
buffer.push(Math.round(RC_tuning.RC_RATE * 100));
|
||||||
buffer.push(parseInt(RC_tuning.RC_EXPO * 100));
|
buffer.push(Math.round(RC_tuning.RC_EXPO * 100));
|
||||||
if (semver.lt(CONFIG.apiVersion, "1.7.0")) {
|
if (semver.lt(CONFIG.apiVersion, "1.7.0")) {
|
||||||
buffer.push(parseInt(RC_tuning.roll_pitch_rate * 100));
|
buffer.push(Math.round(RC_tuning.roll_pitch_rate * 100));
|
||||||
} else {
|
} else {
|
||||||
buffer.push(parseInt(RC_tuning.roll_rate * 100));
|
buffer.push(Math.round(RC_tuning.roll_rate * 100));
|
||||||
buffer.push(parseInt(RC_tuning.pitch_rate * 100));
|
buffer.push(Math.round(RC_tuning.pitch_rate * 100));
|
||||||
}
|
}
|
||||||
buffer.push(parseInt(RC_tuning.yaw_rate * 100));
|
buffer.push(Math.round(RC_tuning.yaw_rate * 100));
|
||||||
buffer.push(parseInt(RC_tuning.dynamic_THR_PID * 100));
|
buffer.push(Math.round(RC_tuning.dynamic_THR_PID * 100));
|
||||||
buffer.push(parseInt(RC_tuning.throttle_MID * 100));
|
buffer.push(Math.round(RC_tuning.throttle_MID * 100));
|
||||||
buffer.push(parseInt(RC_tuning.throttle_EXPO * 100));
|
buffer.push(Math.round(RC_tuning.throttle_EXPO * 100));
|
||||||
if (semver.gte(CONFIG.apiVersion, "1.7.0")) {
|
if (semver.gte(CONFIG.apiVersion, "1.7.0")) {
|
||||||
buffer.push(lowByte(RC_tuning.dynamic_THR_breakpoint));
|
buffer.push(lowByte(RC_tuning.dynamic_THR_breakpoint));
|
||||||
buffer.push(highByte(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(parseInt(RC_tuning.RC_YAW_EXPO * 100));
|
buffer.push(Math.round(RC_tuning.RC_YAW_EXPO * 100));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// Disabled, cleanflight does not use MSP_SET_BOX.
|
// Disabled, cleanflight does not use MSP_SET_BOX.
|
||||||
|
@ -1047,26 +1071,12 @@ MSP.crunch = function (code) {
|
||||||
buffer.push(MISC.multiwiicurrentoutput);
|
buffer.push(MISC.multiwiicurrentoutput);
|
||||||
buffer.push(MISC.rssi_channel);
|
buffer.push(MISC.rssi_channel);
|
||||||
buffer.push(MISC.placeholder2);
|
buffer.push(MISC.placeholder2);
|
||||||
buffer.push(lowByte(MISC.mag_declination * 10));
|
buffer.push(lowByte(Math.round(MISC.mag_declination * 10)));
|
||||||
buffer.push(highByte(MISC.mag_declination * 10));
|
buffer.push(highByte(Math.round(MISC.mag_declination * 10)));
|
||||||
buffer.push(MISC.vbatscale);
|
buffer.push(MISC.vbatscale);
|
||||||
buffer.push(MISC.vbatmincellvoltage * 10);
|
buffer.push(Math.round(MISC.vbatmincellvoltage * 10));
|
||||||
buffer.push(MISC.vbatmaxcellvoltage * 10);
|
buffer.push(Math.round(MISC.vbatmaxcellvoltage * 10));
|
||||||
buffer.push(MISC.vbatwarningcellvoltage * 10);
|
buffer.push(Math.round(MISC.vbatwarningcellvoltage * 10));
|
||||||
break;
|
|
||||||
case MSP_codes.MSP_SET_SERVO_CONF:
|
|
||||||
for (var i = 0; i < SERVO_CONFIG.length; i++) {
|
|
||||||
buffer.push(lowByte(SERVO_CONFIG[i].min));
|
|
||||||
buffer.push(highByte(SERVO_CONFIG[i].min));
|
|
||||||
|
|
||||||
buffer.push(lowByte(SERVO_CONFIG[i].max));
|
|
||||||
buffer.push(highByte(SERVO_CONFIG[i].max));
|
|
||||||
|
|
||||||
buffer.push(lowByte(SERVO_CONFIG[i].middle));
|
|
||||||
buffer.push(highByte(SERVO_CONFIG[i].middle));
|
|
||||||
|
|
||||||
buffer.push(lowByte(SERVO_CONFIG[i].rate));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case MSP_codes.MSP_SET_CHANNEL_FORWARDING:
|
case MSP_codes.MSP_SET_CHANNEL_FORWARDING:
|
||||||
for (var i = 0; i < SERVO_CONFIG.length; i++) {
|
for (var i = 0; i < SERVO_CONFIG.length; i++) {
|
||||||
|
@ -1127,6 +1137,22 @@ MSP.crunch = function (code) {
|
||||||
return buffer;
|
return buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set raw Rx values over MSP protocol.
|
||||||
|
*
|
||||||
|
* Channels is an array of 16-bit unsigned integer channel values to be sent. 8 channels is probably the maximum.
|
||||||
|
*/
|
||||||
|
MSP.setRawRx = function(channels) {
|
||||||
|
var buffer = [];
|
||||||
|
|
||||||
|
for (var i = 0; i < channels.length; i++) {
|
||||||
|
buffer.push(specificByte(channels[i], 0));
|
||||||
|
buffer.push(specificByte(channels[i], 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
MSP.send_message(MSP_codes.MSP_SET_RAW_RC, buffer, false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a request to read a block of data from the dataflash at the given address and pass that address and a dataview
|
* Send a request to read a block of data from the dataflash at the given address and pass that address and a dataview
|
||||||
* of the returned data to the given callback (or null for the data if an error occured).
|
* of the returned data to the given callback (or null for the data if an error occured).
|
||||||
|
@ -1147,7 +1173,102 @@ MSP.dataflashRead = function(address, onDataCallback) {
|
||||||
onDataCallback(address, null);
|
onDataCallback(address, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} ;
|
};
|
||||||
|
|
||||||
|
MSP.sendServoMixRules = function(onCompleteCallback) {
|
||||||
|
// TODO implement
|
||||||
|
onCompleteCallback();
|
||||||
|
};
|
||||||
|
|
||||||
|
MSP.sendServoConfigurations = function(onCompleteCallback) {
|
||||||
|
var nextFunction = send_next_servo_configuration;
|
||||||
|
|
||||||
|
var servoIndex = 0;
|
||||||
|
|
||||||
|
if (SERVO_CONFIG.length == 0) {
|
||||||
|
onCompleteCallback();
|
||||||
|
}
|
||||||
|
|
||||||
|
nextFunction();
|
||||||
|
|
||||||
|
function send_next_servo_configuration() {
|
||||||
|
|
||||||
|
var buffer = [];
|
||||||
|
|
||||||
|
if (semver.lt(CONFIG.apiVersion, "1.12.0")) {
|
||||||
|
// send all in one go
|
||||||
|
// 1.9.0 had a bug where the MSP input buffer was too small, limit to 8.
|
||||||
|
for (var i = 0; i < SERVO_CONFIG.length && i < 8; i++) {
|
||||||
|
buffer.push(lowByte(SERVO_CONFIG[i].min));
|
||||||
|
buffer.push(highByte(SERVO_CONFIG[i].min));
|
||||||
|
|
||||||
|
buffer.push(lowByte(SERVO_CONFIG[i].max));
|
||||||
|
buffer.push(highByte(SERVO_CONFIG[i].max));
|
||||||
|
|
||||||
|
buffer.push(lowByte(SERVO_CONFIG[i].middle));
|
||||||
|
buffer.push(highByte(SERVO_CONFIG[i].middle));
|
||||||
|
|
||||||
|
buffer.push(lowByte(SERVO_CONFIG[i].rate));
|
||||||
|
}
|
||||||
|
|
||||||
|
nextFunction = send_channel_forwarding;
|
||||||
|
} else {
|
||||||
|
// send one at a time, with index
|
||||||
|
|
||||||
|
var servoConfiguration = SERVO_CONFIG[servoIndex];
|
||||||
|
|
||||||
|
buffer.push(servoIndex);
|
||||||
|
|
||||||
|
buffer.push(lowByte(servoConfiguration.min));
|
||||||
|
buffer.push(highByte(servoConfiguration.min));
|
||||||
|
|
||||||
|
buffer.push(lowByte(servoConfiguration.max));
|
||||||
|
buffer.push(highByte(servoConfiguration.max));
|
||||||
|
|
||||||
|
buffer.push(lowByte(servoConfiguration.middle));
|
||||||
|
buffer.push(highByte(servoConfiguration.middle));
|
||||||
|
|
||||||
|
buffer.push(lowByte(servoConfiguration.rate));
|
||||||
|
|
||||||
|
buffer.push(servoConfiguration.angleAtMin);
|
||||||
|
buffer.push(servoConfiguration.angleAtMax);
|
||||||
|
|
||||||
|
var out = servoConfiguration.indexOfChannelToForward;
|
||||||
|
if (out == undefined) {
|
||||||
|
out = 255; // Cleanflight defines "CHANNEL_FORWARDING_DISABLED" as "(uint8_t)0xFF"
|
||||||
|
}
|
||||||
|
buffer.push(out);
|
||||||
|
|
||||||
|
buffer.push(specificByte(servoConfiguration.reversedInputSources, 0));
|
||||||
|
buffer.push(specificByte(servoConfiguration.reversedInputSources, 1));
|
||||||
|
buffer.push(specificByte(servoConfiguration.reversedInputSources, 2));
|
||||||
|
buffer.push(specificByte(servoConfiguration.reversedInputSources, 3));
|
||||||
|
|
||||||
|
// prepare for next iteration
|
||||||
|
servoIndex++;
|
||||||
|
if (servoIndex == SERVO_CONFIG.length) {
|
||||||
|
nextFunction = onCompleteCallback;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MSP.send_message(MSP_codes.MSP_SET_SERVO_CONFIGURATION, buffer, false, nextFunction);
|
||||||
|
}
|
||||||
|
|
||||||
|
function send_channel_forwarding() {
|
||||||
|
var buffer = [];
|
||||||
|
|
||||||
|
for (var i = 0; i < SERVO_CONFIG.length; i++) {
|
||||||
|
var out = SERVO_CONFIG[i].indexOfChannelToForward;
|
||||||
|
if (out == undefined) {
|
||||||
|
out = 255; // Cleanflight defines "CHANNEL_FORWARDING_DISABLED" as "(uint8_t)0xFF"
|
||||||
|
}
|
||||||
|
buffer.push(out);
|
||||||
|
}
|
||||||
|
|
||||||
|
nextFunction = onCompleteCallback;
|
||||||
|
|
||||||
|
MSP.send_message(MSP_codes.MSP_SET_CHANNEL_FORWARDING, buffer, false, nextFunction);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
MSP.sendModeRanges = function(onCompleteCallback) {
|
MSP.sendModeRanges = function(onCompleteCallback) {
|
||||||
var nextFunction = send_next_mode_range;
|
var nextFunction = send_next_mode_range;
|
||||||
|
@ -1165,12 +1286,12 @@ MSP.sendModeRanges = function(onCompleteCallback) {
|
||||||
|
|
||||||
var modeRange = MODE_RANGES[modeRangeIndex];
|
var modeRange = MODE_RANGES[modeRangeIndex];
|
||||||
|
|
||||||
var AUX_val_buffer_out = [];
|
var buffer = [];
|
||||||
AUX_val_buffer_out.push(modeRangeIndex);
|
buffer.push(modeRangeIndex);
|
||||||
AUX_val_buffer_out.push(modeRange.id);
|
buffer.push(modeRange.id);
|
||||||
AUX_val_buffer_out.push(modeRange.auxChannelIndex);
|
buffer.push(modeRange.auxChannelIndex);
|
||||||
AUX_val_buffer_out.push((modeRange.range.start - 900) / 25);
|
buffer.push((modeRange.range.start - 900) / 25);
|
||||||
AUX_val_buffer_out.push((modeRange.range.end - 900) / 25);
|
buffer.push((modeRange.range.end - 900) / 25);
|
||||||
|
|
||||||
// prepare for next iteration
|
// prepare for next iteration
|
||||||
modeRangeIndex++;
|
modeRangeIndex++;
|
||||||
|
@ -1178,7 +1299,7 @@ MSP.sendModeRanges = function(onCompleteCallback) {
|
||||||
nextFunction = onCompleteCallback;
|
nextFunction = onCompleteCallback;
|
||||||
|
|
||||||
}
|
}
|
||||||
MSP.send_message(MSP_codes.MSP_SET_MODE_RANGE, AUX_val_buffer_out, false, nextFunction);
|
MSP.send_message(MSP_codes.MSP_SET_MODE_RANGE, buffer, false, nextFunction);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1198,14 +1319,14 @@ MSP.sendAdjustmentRanges = function(onCompleteCallback) {
|
||||||
|
|
||||||
var adjustmentRange = ADJUSTMENT_RANGES[adjustmentRangeIndex];
|
var adjustmentRange = ADJUSTMENT_RANGES[adjustmentRangeIndex];
|
||||||
|
|
||||||
var ADJUSTMENT_val_buffer_out = [];
|
var buffer = [];
|
||||||
ADJUSTMENT_val_buffer_out.push(adjustmentRangeIndex);
|
buffer.push(adjustmentRangeIndex);
|
||||||
ADJUSTMENT_val_buffer_out.push(adjustmentRange.slotIndex);
|
buffer.push(adjustmentRange.slotIndex);
|
||||||
ADJUSTMENT_val_buffer_out.push(adjustmentRange.auxChannelIndex);
|
buffer.push(adjustmentRange.auxChannelIndex);
|
||||||
ADJUSTMENT_val_buffer_out.push((adjustmentRange.range.start - 900) / 25);
|
buffer.push((adjustmentRange.range.start - 900) / 25);
|
||||||
ADJUSTMENT_val_buffer_out.push((adjustmentRange.range.end - 900) / 25);
|
buffer.push((adjustmentRange.range.end - 900) / 25);
|
||||||
ADJUSTMENT_val_buffer_out.push(adjustmentRange.adjustmentFunction);
|
buffer.push(adjustmentRange.adjustmentFunction);
|
||||||
ADJUSTMENT_val_buffer_out.push(adjustmentRange.auxSwitchChannelIndex);
|
buffer.push(adjustmentRange.auxSwitchChannelIndex);
|
||||||
|
|
||||||
// prepare for next iteration
|
// prepare for next iteration
|
||||||
adjustmentRangeIndex++;
|
adjustmentRangeIndex++;
|
||||||
|
@ -1213,7 +1334,7 @@ MSP.sendAdjustmentRanges = function(onCompleteCallback) {
|
||||||
nextFunction = onCompleteCallback;
|
nextFunction = onCompleteCallback;
|
||||||
|
|
||||||
}
|
}
|
||||||
MSP.send_message(MSP_codes.MSP_SET_ADJUSTMENT_RANGE, ADJUSTMENT_val_buffer_out, false, nextFunction);
|
MSP.send_message(MSP_codes.MSP_SET_ADJUSTMENT_RANGE, buffer, false, nextFunction);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
Official "specs" are from 115200 to 1200
|
Official "specs" are from 115200 to 1200
|
||||||
|
|
||||||
popular choices - 921600, 460800, 256000, 230400, 153600, 128000, 115200, 57600, 38400, 28800, 19200
|
popular choices - 921600, 460800, 256000, 230400, 153600, 128000, 115200, 57600, 38400, 28800, 19200
|
||||||
|
|
||||||
Documentation reference: http://www.st.com/web/en/resource/technical/document/application_note/CD00264342.pdf
|
|
||||||
*/
|
*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
@ -386,7 +384,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// get version of the bootloader and supported commands
|
// get version of the bootloader and supported commands
|
||||||
self.send([self.command.get, self.command.get ^ 0xFF], 2, function (data) {
|
self.send([self.command.get, 0xFF], 2, function (data) { // 0x00 ^ 0xFF
|
||||||
if (self.verify_response(self.status.ACK, data)) {
|
if (self.verify_response(self.status.ACK, data)) {
|
||||||
self.retrieve(data[1] + 1 + 1, function (data) { // data[1] = number of bytes that will follow [– 1 except current and ACKs]
|
self.retrieve(data[1] + 1 + 1, function (data) { // data[1] = number of bytes that will follow [– 1 except current and ACKs]
|
||||||
console.log('STM32 - Bootloader version: ' + (parseInt(data[0].toString(16)) / 10).toFixed(1)); // convert dec to hex, hex to dec and add floating point
|
console.log('STM32 - Bootloader version: ' + (parseInt(data[0].toString(16)) / 10).toFixed(1)); // convert dec to hex, hex to dec and add floating point
|
||||||
|
@ -401,7 +399,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
// get ID (device signature)
|
// get ID (device signature)
|
||||||
self.send([self.command.get_ID, self.command.get_ID ^ 0xFF], 2, function (data) {
|
self.send([self.command.get_ID, 0xFD], 2, function (data) { // 0x01 ^ 0xFF
|
||||||
if (self.verify_response(self.status.ACK, data)) {
|
if (self.verify_response(self.status.ACK, data)) {
|
||||||
self.retrieve(data[1] + 1 + 1, function (data) { // data[1] = number of bytes that will follow [– 1 (N = 1 for STM32), except for current byte and ACKs]
|
self.retrieve(data[1] + 1 + 1, function (data) { // data[1] = number of bytes that will follow [– 1 (N = 1 for STM32), except for current byte and ACKs]
|
||||||
var signature = (data[0] << 8) | data[1];
|
var signature = (data[0] << 8) | data[1];
|
||||||
|
@ -496,7 +494,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
|
||||||
console.log(message);
|
console.log(message);
|
||||||
$('span.progressLabel').text(message + ' ...');
|
$('span.progressLabel').text(message + ' ...');
|
||||||
|
|
||||||
self.send([self.command.erase, self.command.erase ^ 0xFF], 1, function (reply) {
|
self.send([self.command.erase, 0xBC], 1, function (reply) { // 0x43 ^ 0xFF
|
||||||
if (self.verify_response(self.status.ACK, reply)) {
|
if (self.verify_response(self.status.ACK, reply)) {
|
||||||
self.send([0xFF, 0x00], 1, function (reply) {
|
self.send([0xFF, 0x00], 1, function (reply) {
|
||||||
if (self.verify_response(self.status.ACK, reply)) {
|
if (self.verify_response(self.status.ACK, reply)) {
|
||||||
|
@ -512,7 +510,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
|
||||||
console.log(message);
|
console.log(message);
|
||||||
$('span.progressLabel').text(message + ' ...');
|
$('span.progressLabel').text(message + ' ...');
|
||||||
|
|
||||||
self.send([self.command.erase, self.command.erase ^ 0xFF], 1, function (reply) {
|
self.send([self.command.erase, 0xBC], 1, function (reply) { // 0x43 ^ 0xFF
|
||||||
if (self.verify_response(self.status.ACK, reply)) {
|
if (self.verify_response(self.status.ACK, reply)) {
|
||||||
// the bootloader receives one byte that contains N, the number of pages to be erased – 1
|
// the bootloader receives one byte that contains N, the number of pages to be erased – 1
|
||||||
var max_address = self.hex.data[self.hex.data.length - 1].address + self.hex.data[self.hex.data.length - 1].bytes - 0x8000000,
|
var max_address = self.hex.data[self.hex.data.length - 1].address + self.hex.data[self.hex.data.length - 1].bytes - 0x8000000,
|
||||||
|
@ -557,7 +555,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
|
||||||
|
|
||||||
// console.log('STM32 - Writing to: 0x' + address.toString(16) + ', ' + bytes_to_write + ' bytes');
|
// console.log('STM32 - Writing to: 0x' + address.toString(16) + ', ' + bytes_to_write + ' bytes');
|
||||||
|
|
||||||
self.send([self.command.write_memory, self.command.write_memory ^ 0xFF], 1, function (reply) {
|
self.send([self.command.write_memory, 0xCE], 1, function (reply) { // 0x31 ^ 0xFF
|
||||||
if (self.verify_response(self.status.ACK, reply)) {
|
if (self.verify_response(self.status.ACK, reply)) {
|
||||||
// address needs to be transmitted as 32 bit integer, we need to bit shift each byte out and then calculate address checksum
|
// address needs to be transmitted as 32 bit integer, we need to bit shift each byte out and then calculate address checksum
|
||||||
var address_arr = [(address >> 24), (address >> 16), (address >> 8), address];
|
var address_arr = [(address >> 24), (address >> 16), (address >> 8), address];
|
||||||
|
@ -637,7 +635,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
|
||||||
|
|
||||||
// console.log('STM32 - Reading from: 0x' + address.toString(16) + ', ' + bytes_to_read + ' bytes');
|
// console.log('STM32 - Reading from: 0x' + address.toString(16) + ', ' + bytes_to_read + ' bytes');
|
||||||
|
|
||||||
self.send([self.command.read_memory, self.command.read_memory ^ 0xFF], 1, function (reply) {
|
self.send([self.command.read_memory, 0xEE], 1, function (reply) { // 0x11 ^ 0xFF
|
||||||
if (self.verify_response(self.status.ACK, reply)) {
|
if (self.verify_response(self.status.ACK, reply)) {
|
||||||
var address_arr = [(address >> 24), (address >> 16), (address >> 8), address];
|
var address_arr = [(address >> 24), (address >> 16), (address >> 8), address];
|
||||||
var address_checksum = address_arr[0] ^ address_arr[1] ^ address_arr[2] ^ address_arr[3];
|
var address_checksum = address_arr[0] ^ address_arr[1] ^ address_arr[2] ^ address_arr[3];
|
||||||
|
@ -721,7 +719,7 @@ STM32_protocol.prototype.upload_procedure = function (step) {
|
||||||
// memory address = 4 bytes, 1st high byte, 4th low byte, 5th byte = checksum XOR(byte 1, byte 2, byte 3, byte 4)
|
// memory address = 4 bytes, 1st high byte, 4th low byte, 5th byte = checksum XOR(byte 1, byte 2, byte 3, byte 4)
|
||||||
console.log('Sending GO command: 0x8000000');
|
console.log('Sending GO command: 0x8000000');
|
||||||
|
|
||||||
self.send([self.command.go, self.command.go ^ 0xFF], 1, function (reply) {
|
self.send([self.command.go, 0xDE], 1, function (reply) { // 0x21 ^ 0xFF
|
||||||
if (self.verify_response(self.status.ACK, reply)) {
|
if (self.verify_response(self.status.ACK, reply)) {
|
||||||
var gt_address = 0x8000000,
|
var gt_address = 0x8000000,
|
||||||
address = [(gt_address >> 24), (gt_address >> 16), (gt_address >> 8), gt_address],
|
address = [(gt_address >> 24), (gt_address >> 16), (gt_address >> 8), gt_address],
|
||||||
|
|
103
main.html
103
main.html
|
@ -14,8 +14,7 @@
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/help.css" media="all" />
|
<link type="text/css" rel="stylesheet" href="./tabs/help.css" media="all" />
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/ports.css" media="all" />
|
<link type="text/css" rel="stylesheet" href="./tabs/ports.css" media="all" />
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/configuration.css" media="all" />
|
<link type="text/css" rel="stylesheet" href="./tabs/configuration.css" media="all" />
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/pid_tuning.css" media="all" />
|
<link type="text/css" rel="stylesheet" href="./tabs/pid_tuning.css" media="all" />
|
||||||
|
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/receiver.css" media="all" />
|
<link type="text/css" rel="stylesheet" href="./tabs/receiver.css" media="all" />
|
||||||
<!-- <link type="text/css" rel="stylesheet" href="./tabs/modes.css" media="all" /> -->
|
<!-- <link type="text/css" rel="stylesheet" href="./tabs/modes.css" media="all" /> -->
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/servos.css" media="all" />
|
<link type="text/css" rel="stylesheet" href="./tabs/servos.css" media="all" />
|
||||||
|
@ -27,21 +26,14 @@
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/logging.css" media="all" />
|
<link type="text/css" rel="stylesheet" href="./tabs/logging.css" media="all" />
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/dataflash.css" media="all" />
|
<link type="text/css" rel="stylesheet" href="./tabs/dataflash.css" media="all" />
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/firmware_flasher.css" media="all" />
|
<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/adjustments.css" media="all" />
|
||||||
<link type="text/css" rel="stylesheet" href="./tabs/auxiliary.css" media="all" />
|
<link type="text/css" rel="stylesheet" href="./tabs/auxiliary.css" media="all" />
|
||||||
|
|
||||||
<link type="text/css" rel="stylesheet" href="./styles/opensans_webfontkit/fonts.css" media="all" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="./styles/dropdown-lists/css/style_lists.css" media="all" />
|
|
||||||
<link type="text/css" rel="stylesheet" href="./js/libraries/switchery/switchery.css" media="all" />
|
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript" src="./js/libraries/q.js"></script>
|
<script type="text/javascript" src="./js/libraries/q.js"></script>
|
||||||
<script type="text/javascript" src="./js/libraries/google-analytics-bundle.js"></script>
|
<script type="text/javascript" src="./js/libraries/google-analytics-bundle.js"></script>
|
||||||
<script type="text/javascript" src="./js/libraries/jquery-2.1.3.min.js"></script>
|
<script type="text/javascript" src="./js/libraries/jquery-2.1.4.min.js"></script>
|
||||||
<<<<<<< HEAD
|
<script type="text/javascript" src="./js/libraries/jquery-ui-1.11.4.min.js"></script>
|
||||||
<script type="text/javascript" src="./js/libraries/jquery-ui-1.11.2.min.js"></script>
|
|
||||||
=======
|
|
||||||
>>>>>>> origin/baseflight-configurator-development
|
|
||||||
<script type="text/javascript" src="./js/libraries/d3.min.js"></script>
|
<script type="text/javascript" src="./js/libraries/d3.min.js"></script>
|
||||||
<script type="text/javascript" src="./js/libraries/jquery.nouislider.all.min.js"></script>
|
<script type="text/javascript" src="./js/libraries/jquery.nouislider.all.min.js"></script>
|
||||||
<script type="text/javascript" src="./js/libraries/three/three.min.js"></script>
|
<script type="text/javascript" src="./js/libraries/three/three.min.js"></script>
|
||||||
|
@ -85,27 +77,20 @@
|
||||||
<script type="text/javascript" src="./tabs/logging.js"></script>
|
<script type="text/javascript" src="./tabs/logging.js"></script>
|
||||||
<script type="text/javascript" src="./tabs/dataflash.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/firmware_flasher.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="./js/libraries/switchery/switchery.js"></script>
|
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="main-wrapper">
|
<div id="main-wrapper">
|
||||||
<div class="headerbar">
|
|
||||||
<div id="logo"></div>
|
|
||||||
<div id="port-picker">
|
<div id="port-picker">
|
||||||
|
<ul>
|
||||||
<div class="dropdown dropdown-dark" style="margin-bottom:3px;">
|
<li class="port">
|
||||||
<select class="dropdown-select" id="port" title="Port">
|
<select id="port" title="Port">
|
||||||
<option value="manual">Manual</option>
|
<option vlaue="manual">Manual</option>
|
||||||
<!-- port list gets generated here -->
|
<!-- port list gets generated here -->
|
||||||
|
</select>
|
||||||
</select>
|
</li>
|
||||||
</div>
|
<li>
|
||||||
|
<select id="baud" title="Baud Rate">
|
||||||
<div class="dropdown dropdown-dark" style="margin-bottom:5px;">
|
<option value="115200" selected="selected">115200</option>
|
||||||
<select class="dropdown-select" id="baud" title="Baud Rate">
|
|
||||||
<option value="115200" selected="selected">115200</option>
|
|
||||||
<option value="57600">57600</option>
|
<option value="57600">57600</option>
|
||||||
<option value="38400">38400</option>
|
<option value="38400">38400</option>
|
||||||
<option value="28800">28800</option>
|
<option value="28800">28800</option>
|
||||||
|
@ -115,49 +100,23 @@
|
||||||
<option value="4800">4800</option>
|
<option value="4800">4800</option>
|
||||||
<option value="2400">2400</option>
|
<option value="2400">2400</option>
|
||||||
<option value="1200">1200</option>
|
<option value="1200">1200</option>
|
||||||
|
</select>
|
||||||
</select>
|
</li>
|
||||||
</div>
|
<li id="port-override-option">
|
||||||
|
<label for="port-override">Port: </label><input id="port-override" type="text" value="/dev/rfcomm0"/>
|
||||||
<div id="port-override-option" style="width:195px; float:left;">
|
</li>
|
||||||
<label for="port-override" style="background-color:#2b2b2b; border-radius:3px; padding:3px; margin-bottom:5px; color:#ddd; float:left;">Port: <input id="port-override" type="text" value="/dev/rfcomm0" style="background-color:rgba(0, 0, 0, 0.1);; color:#888888; width:154px; margin-left:2px; margin-top:-2px; padding:1px; border-radius:3px; height:15px; float:right;"/></label>
|
<li>
|
||||||
</div>
|
<a class="connect" href="#" i18n="connect"></a>
|
||||||
<div>
|
<label>
|
||||||
<label style="color:#888888;">
|
|
||||||
<input class="auto_connect" type="checkbox" />
|
<input class="auto_connect" type="checkbox" />
|
||||||
<span class="auto_connect" i18n="autoConnect"></span>
|
<span class="auto_connect" i18n="autoConnect"></span>
|
||||||
</label>
|
</label>
|
||||||
<a class="connect" href="#" i18n="connect" style="color:#FFFFFF;"></a>
|
</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a id="options" href="#" i18n_title="options_title"></a>
|
<a id="options" href="#" i18n_title="options_title"></a>
|
||||||
|
|
||||||
<div class="tab-dataflash" id="flashstate" style="width:120px; float:right; height:12px;"
|
|
||||||
>
|
|
||||||
<div class="require-dataflash" id="header_dataflash">
|
|
||||||
<ul class="dataflash-contents" style="height:7px; margin:12px;">
|
|
||||||
<li class="dataflash-free" style="height:10px; text-align:left;">
|
|
||||||
<div class="legend" align="left" style="font-size:10px; margin-top:-40px; float:left; line-height:12px; width:100%; color:white;"></div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="header-wrapper">
|
<div class="header-wrapper">
|
||||||
<div id="sensor-status" class="sensor_state">
|
<div id="sensor-status">
|
||||||
<ul>
|
<ul>
|
||||||
<li class="gyro" title="Gyroscope">Gyro</li>
|
<li class="gyro" title="Gyroscope">Gyro</li>
|
||||||
<li class="accel" title="Accelerometer">Accel</li>
|
<li class="accel" title="Accelerometer">Accel</li>
|
||||||
|
@ -168,18 +127,17 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div id="documentation-controls">
|
<div id="documentation-controls">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a id="button-documentation" href="#" target="_blank"></a></li>
|
<li><a id="button-documentation" href="#" target="_blank"></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div> </div>
|
</div>
|
||||||
|
|
||||||
<div class="clear-both"></div>
|
<div class="clear-both"></div>
|
||||||
<div id="log">
|
<div id="log">
|
||||||
|
<div id="watermark"></div>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tab_container">
|
|
||||||
<div id="tabs">
|
<div id="tabs">
|
||||||
<ul class="mode-disconnected">
|
<ul class="mode-disconnected">
|
||||||
<li class="tab_landing"><a href="#" i18n="tabLanding"></a></li>
|
<li class="tab_landing"><a href="#" i18n="tabLanding"></a></li>
|
||||||
|
@ -206,7 +164,6 @@
|
||||||
</ul>
|
</ul>
|
||||||
<div class="clear-both"></div>
|
<div class="clear-both"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div id="content">
|
<div id="content">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue