diff --git a/_locales/en/messages.json b/_locales/en/messages.json index ff0b4b1e..77a03a0b 100755 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -103,10 +103,10 @@ "message": "CLI" }, "tabLogging": { - "message": "Logging" + "message": "Tethered Logging" }, - "tabDataflash": { - "message": "Dataflash" + "tabOnboardLogging": { + "message": "Blackbox" }, "tabAdjustments": { "message": "Adjustments" @@ -988,10 +988,30 @@ "message": "Automatically loaded previous log file: $1" }, - "dataflashNote": { - "message": "Blackbox flight logs can be recorded to your flight controller's onboard dataflash chip." + "blackboxNotSupported": { + "message": "Your flight controller's firmware does not support Blackbox logging." }, - "dataflashNotSupportedNote": { + "blackboxMaybeSupported": { + "message": "Your flight controller's firmware is too old to support this tab, or the Blackbox feature is disabled on the Configuration tab." + }, + "blackboxConfiguration": { + "message": "Blackbox configuration" + }, + "blackboxButtonSave": { + "message": "Save and reboot" + }, + + "serialLoggingSupportedNote": { + "message": "You can log to an external logging device (such as an OpenLog or compatible clone) by using a serial port. Configure the port on the Ports tab." + }, + "sdcardNote": { + "message": "Flight logs can be recorded to your flight controller's onboard SD card slot." + }, + + "dataflashNote": { + "message": "Flight logs can be recorded to your flight controller's onboard dataflash chip." + }, + "dataflashNotPresentNote": { "message": "Your flight controller does not have a compatible dataflash chip available." }, "dataflashFirmwareUpgradeRequired": { diff --git a/images/icons/cf_icon_sdcard.svg b/images/icons/cf_icon_sdcard.svg new file mode 100644 index 00000000..c429edd8 --- /dev/null +++ b/images/icons/cf_icon_sdcard.svg @@ -0,0 +1,83 @@ + + + + diff --git a/js/data_storage.js b/js/data_storage.js index 2d75ed18..b3a7f821 100755 --- a/js/data_storage.js +++ b/js/data_storage.js @@ -174,7 +174,23 @@ var _3D = { var DATAFLASH = { ready: false, + supported: false, sectors: 0, totalSize: 0, usedSize: 0 }; + +var SDCARD = { + supported: false, + state: 0, + filesystemLastError: 0, + freeSizeKB: 0, + totalSizeKB: 0, +}; + +var BLACKBOX = { + supported: false, + blackboxDevice: 0, + blackboxRateNum: 1, + blackboxRateDenom: 1 +}; diff --git a/js/gui.js b/js/gui.js index 466b35a1..b3b955d2 100644 --- a/js/gui.js +++ b/js/gui.js @@ -25,7 +25,7 @@ var GUI_control = function () { 'gps', 'led_strip', 'logging', - 'dataflash', + 'onboard_logging', 'modes', 'motors', 'pid_tuning', diff --git a/js/msp.js b/js/msp.js index cfde7dc0..5c42ffed 100644 --- a/js/msp.js +++ b/js/msp.js @@ -29,6 +29,10 @@ var MSP_codes = { MSP_DATAFLASH_ERASE: 72, MSP_LOOP_TIME: 73, MSP_SET_LOOP_TIME: 74, + + MSP_SDCARD_SUMMARY: 79, + MSP_BLACKBOX_CONFIG: 80, + MSP_SET_BLACKBOX_CONFIG: 81, // Multiwii MSP commands MSP_IDENT: 100, @@ -811,13 +815,17 @@ var MSP = { break; case MSP_codes.MSP_DATAFLASH_SUMMARY: if (data.byteLength >= 13) { - DATAFLASH.ready = (data.getUint8(0) & 1) != 0; + var + flags = data.getUint8(0); + DATAFLASH.ready = (flags & 1) != 0; + DATAFLASH.supported = (flags & 2) != 0 || DATAFLASH.ready; DATAFLASH.sectors = data.getUint32(1, 1); DATAFLASH.totalSize = data.getUint32(5, 1); DATAFLASH.usedSize = data.getUint32(9, 1); } else { // Firmware version too old to support MSP_DATAFLASH_SUMMARY DATAFLASH.ready = false; + DATAFLASH.supported = false; DATAFLASH.sectors = 0; DATAFLASH.totalSize = 0; DATAFLASH.usedSize = 0; @@ -829,6 +837,24 @@ var MSP = { case MSP_codes.MSP_DATAFLASH_ERASE: console.log("Data flash erase begun..."); break; + case MSP_codes.MSP_SDCARD_SUMMARY: + var flags = data.getUint8(0); + + SDCARD.supported = (flags & 0x01) != 0; + SDCARD.state = data.getUint8(1); + SDCARD.filesystemLastError = data.getUint8(2); + SDCARD.freeSizeKB = data.getUint32(3, 1); + SDCARD.totalSizeKB = data.getUint32(7, 1); + break; + case MSP_codes.MSP_BLACKBOX_CONFIG: + BLACKBOX.supported = (data.getUint8(0) & 1) != 0; + BLACKBOX.blackboxDevice = data.getUint8(1); + BLACKBOX.blackboxRateNum = data.getUint8(2); + BLACKBOX.blackboxRateDenom = data.getUint8(3); + break; + case MSP_codes.MSP_SET_BLACKBOX_CONFIG: + console.log("Blackbox config saved"); + break; case MSP_codes.MSP_SET_MODE_RANGE: console.log('Mode range saved'); break; @@ -1176,6 +1202,19 @@ MSP.setRawRx = function(channels) { MSP.send_message(MSP_codes.MSP_SET_RAW_RC, buffer, false); } +MSP.sendBlackboxConfiguration = function(onDataCallback) { + var + message = [ + BLACKBOX.blackboxDevice & 0xFF, + BLACKBOX.blackboxRateNum & 0xFF, + BLACKBOX.blackboxRateDenom & 0xFF + ]; + + MSP.send_message(MSP_codes.MSP_SET_BLACKBOX_CONFIG, message, false, function(response) { + onDataCallback(); + }); +} + /** * Send a request to read a block of data from the dataflash at the given address and pass that address and a dataview * of the returned data to the given callback (or null for the data if an error occured). @@ -1438,3 +1477,9 @@ MSP.serialPortFunctionsToMask = function(functions) { } return mask; } + +MSP.SDCARD_STATE_NOT_PRESENT = 0; +MSP.SDCARD_STATE_FATAL = 1; +MSP.SDCARD_STATE_CARD_INIT = 2; +MSP.SDCARD_STATE_FS_INIT = 3; +MSP.SDCARD_STATE_READY = 4; diff --git a/main.html b/main.html index 88320b86..e1136e5b 100755 --- a/main.html +++ b/main.html @@ -1,4 +1,4 @@ - +
@@ -21,7 +21,7 @@ - + @@ -73,7 +73,7 @@ - +