From bd07e4e7e5e5a797dc161be3165b954bc6ac6dad Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 13 Jan 2016 23:11:19 -0800 Subject: [PATCH] Modify LogFile to open/close file on SD card status. Previously, would only open on construction, which was only when the receiver mode changed, which wasn't all that useful. --- firmware/application/ais_app.cpp | 4 ---- firmware/application/ais_app.hpp | 4 +--- firmware/application/ert_app.cpp | 2 -- firmware/application/ert_app.hpp | 2 +- firmware/application/log_file.cpp | 23 ++++++++++++++++++++++- firmware/application/log_file.hpp | 10 +++++++++- firmware/application/tpms_app.cpp | 2 -- firmware/application/tpms_app.hpp | 2 +- 8 files changed, 34 insertions(+), 15 deletions(-) diff --git a/firmware/application/ais_app.cpp b/firmware/application/ais_app.cpp index 28ef4b0d..d45004ec 100644 --- a/firmware/application/ais_app.cpp +++ b/firmware/application/ais_app.cpp @@ -80,10 +80,6 @@ static std::string navigational_status(const unsigned int value) { } /* namespace format */ } /* namespace ais */ -AISLogger::AISLogger() { - log_file.open_for_append("ais.txt"); -} - void AISLogger::on_packet(const ais::Packet& packet) { // TODO: Unstuff here, not in baseband! if( log_file.is_ready() ) { diff --git a/firmware/application/ais_app.hpp b/firmware/application/ais_app.hpp index b80ca6bd..7b272895 100644 --- a/firmware/application/ais_app.hpp +++ b/firmware/application/ais_app.hpp @@ -98,12 +98,10 @@ private: class AISLogger { public: - AISLogger(); - void on_packet(const ais::Packet& packet); private: - LogFile log_file; + LogFile log_file { "ais.txt" }; }; namespace ui { diff --git a/firmware/application/ert_app.cpp b/firmware/application/ert_app.cpp index c17c2ac8..86d637fa 100644 --- a/firmware/application/ert_app.cpp +++ b/firmware/application/ert_app.cpp @@ -38,8 +38,6 @@ ERTModel::ERTModel() { .decimation_factor = 1, }); receiver_model.set_baseband_bandwidth(2500000); - - log_file.open_for_append("ert.txt"); } bool ERTModel::on_packet(const ert::Packet& packet) { diff --git a/firmware/application/ert_app.hpp b/firmware/application/ert_app.hpp index c00474e0..173093fb 100644 --- a/firmware/application/ert_app.hpp +++ b/firmware/application/ert_app.hpp @@ -38,7 +38,7 @@ public: bool on_packet(const ert::Packet& packet); private: - LogFile log_file; + LogFile log_file { "ert.txt" }; }; namespace ui { diff --git a/firmware/application/log_file.cpp b/firmware/application/log_file.cpp index 7bcfefbb..8cf4c3c2 100644 --- a/firmware/application/log_file.cpp +++ b/firmware/application/log_file.cpp @@ -26,11 +26,24 @@ #include "lpc43xx_cpp.hpp" using namespace lpc43xx; +LogFile::LogFile( + const std::string file_path +) : file_path { file_path } +{ + open(); + + sd_card_status_signal_token = sd_card::status_signal += [this](const sd_card::Status status) { + this->on_sd_card_status(status); + }; +} + LogFile::~LogFile() { + sd_card::status_signal -= sd_card_status_signal_token; + close(); } -bool LogFile::open_for_append(const std::string& file_path) { +bool LogFile::open() { const auto open_result = f_open(&f, file_path.c_str(), FA_WRITE | FA_OPEN_ALWAYS); if( open_result == FR_OK ) { const auto seek_result = f_lseek(&f, f_size(&f)); @@ -70,3 +83,11 @@ bool LogFile::write(const std::string& message) { const auto sync_result = f_sync(&f); return (puts_result >= 0) && (sync_result == FR_OK); } + +void LogFile::on_sd_card_status(const sd_card::Status status) { + if( status == sd_card::Status::Mounted ) { + open(); + } else { + close(); + } +} diff --git a/firmware/application/log_file.hpp b/firmware/application/log_file.hpp index 3f7024c3..c0f3138c 100644 --- a/firmware/application/log_file.hpp +++ b/firmware/application/log_file.hpp @@ -25,24 +25,32 @@ #include #include "ff.h" +#include "sd_card.hpp" #include "lpc43xx_cpp.hpp" using namespace lpc43xx; class LogFile { public: + LogFile(const std::string file_path); ~LogFile(); - bool open_for_append(const std::string& file_path); + bool open(); bool close(); bool is_ready(); bool write_entry(const rtc::RTC& datetime, const std::string& entry); private: + const std::string file_path; + FIL f; + SignalToken sd_card_status_signal_token; + bool write(const std::string& message); + + void on_sd_card_status(const sd_card::Status status); }; #endif/*__LOG_FILE_H__*/ diff --git a/firmware/application/tpms_app.cpp b/firmware/application/tpms_app.cpp index 39af6c07..c05b6244 100644 --- a/firmware/application/tpms_app.cpp +++ b/firmware/application/tpms_app.cpp @@ -35,8 +35,6 @@ TPMSModel::TPMSModel() { .decimation_factor = 1, }); receiver_model.set_baseband_bandwidth(1750000); - - log_file.open_for_append("tpms.txt"); } ManchesterFormatted TPMSModel::on_packet(const TPMSPacketMessage& message) { diff --git a/firmware/application/tpms_app.hpp b/firmware/application/tpms_app.hpp index 37fb2542..b1417a8f 100644 --- a/firmware/application/tpms_app.hpp +++ b/firmware/application/tpms_app.hpp @@ -35,7 +35,7 @@ public: ManchesterFormatted on_packet(const TPMSPacketMessage& message); private: - LogFile log_file; + LogFile log_file { "tpms.txt" }; }; namespace ui {