From e229c8f8e7c5da98e68c3eac1138a53d078393da Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 11 Sep 2016 14:25:01 +0200 Subject: [PATCH] Log file moved to RAM and aligned for proper DMA access. Log functions renamed. --- radio/src/gui/128x64/radio_sdmanager.cpp | 2 +- radio/src/gui/212x64/model_telemetry.cpp | 2 +- radio/src/gui/212x64/radio_sdmanager.cpp | 2 +- radio/src/gui/480x272/model_telemetry.cpp | 2 +- radio/src/gui/480x272/radio_sdmanager.cpp | 2 +- radio/src/logs.cpp | 22 +++++++++++++++------- radio/src/main_arm.cpp | 2 +- radio/src/main_avr.cpp | 2 +- radio/src/opentx.cpp | 3 ++- radio/src/sdcard.h | 7 +++---- radio/src/storage/eeprom_rlc.cpp | 4 ++-- radio/src/storage/storage_common.cpp | 2 +- radio/src/targets/sky9x/massstorage.cpp | 2 +- 13 files changed, 31 insertions(+), 23 deletions(-) diff --git a/radio/src/gui/128x64/radio_sdmanager.cpp b/radio/src/gui/128x64/radio_sdmanager.cpp index d087771f8..4cd745c01 100644 --- a/radio/src/gui/128x64/radio_sdmanager.cpp +++ b/radio/src/gui/128x64/radio_sdmanager.cpp @@ -101,7 +101,7 @@ void menuRadioSdManager(event_t _event) if (warningResult) { warningResult = 0; showMessageBox(STR_FORMATTING); - closeLogs(); + logsClose(); #if defined(PCBSKY9X) Card_state = SD_ST_DATA; #endif diff --git a/radio/src/gui/212x64/model_telemetry.cpp b/radio/src/gui/212x64/model_telemetry.cpp index e26ac7a7b..f7fbb45b1 100644 --- a/radio/src/gui/212x64/model_telemetry.cpp +++ b/radio/src/gui/212x64/model_telemetry.cpp @@ -348,7 +348,7 @@ void menuModelSensor(event_t event) case SENSOR_FIELD_LOGS: ON_OFF_MENU_ITEM(sensor->logs, SENSOR_2ND_COLUMN, y, STR_LOGS, attr, event); if (attr && checkIncDec_Ret) { - closeLogs(); + logsClose(); } break; diff --git a/radio/src/gui/212x64/radio_sdmanager.cpp b/radio/src/gui/212x64/radio_sdmanager.cpp index 1e4cb95d8..8f590879d 100644 --- a/radio/src/gui/212x64/radio_sdmanager.cpp +++ b/radio/src/gui/212x64/radio_sdmanager.cpp @@ -163,7 +163,7 @@ void menuRadioSdManager(event_t _event) if (warningResult) { warningResult = 0; showMessageBox(STR_FORMATTING); - closeLogs(); + logsClose(); audioQueue.stopSD(); if (f_mkfs(0, 1, 0) == FR_OK) { f_chdir("/"); diff --git a/radio/src/gui/480x272/model_telemetry.cpp b/radio/src/gui/480x272/model_telemetry.cpp index 4f0e8a009..80e7c76e7 100644 --- a/radio/src/gui/480x272/model_telemetry.cpp +++ b/radio/src/gui/480x272/model_telemetry.cpp @@ -358,7 +358,7 @@ bool menuModelSensor(event_t event) lcdDrawText(MENUS_MARGIN_LEFT, y, STR_LOGS); sensor->logs = editCheckBox(sensor->logs, SENSOR_2ND_COLUMN, y, attr, event); if (attr && checkIncDec_Ret) { - closeLogs(); + logsClose(); } break; } diff --git a/radio/src/gui/480x272/radio_sdmanager.cpp b/radio/src/gui/480x272/radio_sdmanager.cpp index 983c3d15e..1ef189300 100644 --- a/radio/src/gui/480x272/radio_sdmanager.cpp +++ b/radio/src/gui/480x272/radio_sdmanager.cpp @@ -153,7 +153,7 @@ bool menuRadioSdManager(event_t _event) if (warningResult) { warningResult = 0; showMessageBox(STR_FORMATTING); - closeLogs(); + logsClose(); audioQueue.stopSD(); if (f_mkfs(0, 1, 0) == FR_OK) { f_chdir("/"); diff --git a/radio/src/logs.cpp b/radio/src/logs.cpp index d7ba17673..58bb59838 100644 --- a/radio/src/logs.cpp +++ b/radio/src/logs.cpp @@ -21,10 +21,12 @@ #include "opentx.h" #include "ff.h" -FIL g_oLogFile = {0}; +FIL g_oLogFile __DMA; const pm_char * g_logError = NULL; uint8_t logDelay; +void writeHeader(); + #if defined(PCBTARANIS) || defined(PCBFLAMENCO) || defined(PCBHORUS) #define GET_2POS_STATE(sw) (switchState(SW_ ## sw ## 0) ? -1 : 1) #else @@ -33,7 +35,13 @@ uint8_t logDelay; #define GET_3POS_STATE(sw) (switchState(SW_ ## sw ## 0) ? -1 : (switchState(SW_ ## sw ## 2) ? 1 : 0)) -const pm_char * openLogs() + +void logsInit() +{ + memset(&g_oLogFile, 0, sizeof(g_oLogFile)); +} + +const pm_char * logsOpen() { // Determine and set log file filename FRESULT result; @@ -111,7 +119,7 @@ const pm_char * openLogs() tmr10ms_t lastLogTime = 0; -void closeLogs() +void logsClose() { if (f_close(&g_oLogFile) != FR_OK) { // close failed, forget file @@ -204,7 +212,7 @@ uint32_t getLogicalSwitchesStates(uint8_t first) return result; } -void writeLogs() +void logsWrite() { static const pm_char * error_displayed = NULL; @@ -214,7 +222,7 @@ void writeLogs() lastLogTime = tmr10ms; if (!g_oLogFile.fs) { - const pm_char * result = openLogs(); + const pm_char * result = logsOpen(); if (result != NULL) { if (result != error_displayed) { error_displayed = result; @@ -370,14 +378,14 @@ void writeLogs() if (result<0 && !error_displayed) { error_displayed = STR_SDCARD_ERROR; POPUP_WARNING(STR_SDCARD_ERROR); - closeLogs(); + logsClose(); } } } else { error_displayed = NULL; if (g_oLogFile.fs) { - closeLogs(); + logsClose(); } } } diff --git a/radio/src/main_arm.cpp b/radio/src/main_arm.cpp index e7a3a48ef..a2f712358 100644 --- a/radio/src/main_arm.cpp +++ b/radio/src/main_arm.cpp @@ -391,7 +391,7 @@ void perMain() #endif checkSpeakerVolume(); checkEeprom(); - writeLogs(); + logsWrite(); handleUsbConnection(); checkTrainerSettings(); periodicTick(); diff --git a/radio/src/main_avr.cpp b/radio/src/main_avr.cpp index 33b29cfb6..24aaa1e9f 100644 --- a/radio/src/main_avr.cpp +++ b/radio/src/main_avr.cpp @@ -97,7 +97,7 @@ void perMain() #if defined(SDCARD) sdMountPoll(); - writeLogs(); + logsWrite(); #endif event_t evt = getEvent(); diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index a47cd5fb4..c225b47e6 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -1993,7 +1993,7 @@ void opentxClose(uint8_t shutdown) } #if defined(SDCARD) - closeLogs(); + logsClose(); #endif saveTimers(); @@ -2551,6 +2551,7 @@ void opentxInit(OPENTX_INIT_ARGS) else { #if defined(SDCARD) && !defined(PCBMEGA2560) sdInit(); + logsInit(); #endif } diff --git a/radio/src/sdcard.h b/radio/src/sdcard.h index a2269fd62..2db7fe0f5 100644 --- a/radio/src/sdcard.h +++ b/radio/src/sdcard.h @@ -80,10 +80,9 @@ extern FATFS g_FATFS_Obj; extern FIL g_oLogFile; extern uint8_t logDelay; -const pm_char *openLogs(); -void writeHeader(); -void closeLogs(); -void writeLogs(); +void logsInit(); +void logsClose(); +void logsWrite(); uint32_t sdGetNoSectors(); uint32_t sdGetSize(); diff --git a/radio/src/storage/eeprom_rlc.cpp b/radio/src/storage/eeprom_rlc.cpp index 65e9b867a..6735d8e6b 100644 --- a/radio/src/storage/eeprom_rlc.cpp +++ b/radio/src/storage/eeprom_rlc.cpp @@ -484,7 +484,7 @@ const pm_char * eeBackupModel(uint8_t i_fileSrc) UINT written; // we must close the logs as we reuse the same FIL structure - closeLogs(); + logsClose(); // check and create folder here strcpy_P(buf, STR_MODELS_PATH); @@ -567,7 +567,7 @@ const pm_char * eeRestoreModel(uint8_t i_fileDst, char *model_name) UINT read; // we must close the logs as we reuse the same FIL structure - closeLogs(); + logsClose(); strcpy_P(buf, STR_MODELS_PATH); buf[sizeof(MODELS_PATH)-1] = '/'; diff --git a/radio/src/storage/storage_common.cpp b/radio/src/storage/storage_common.cpp index 216fb1c2d..2f3342c41 100644 --- a/radio/src/storage/storage_common.cpp +++ b/radio/src/storage/storage_common.cpp @@ -46,7 +46,7 @@ void preModelLoad() #endif #if defined(SDCARD) - closeLogs(); + logsClose(); #endif if (pulsesStarted()) { diff --git a/radio/src/targets/sky9x/massstorage.cpp b/radio/src/targets/sky9x/massstorage.cpp index 8cedee5d3..ce18cca83 100644 --- a/radio/src/targets/sky9x/massstorage.cpp +++ b/radio/src/targets/sky9x/massstorage.cpp @@ -170,7 +170,7 @@ void usbMassStorage() if (sdMounted()) { Card_state = SD_ST_DATA; audioQueue.stopSD(); - closeLogs(); + logsClose(); f_mount(NULL, "", 0); // unmount SD }