From 6a17be1f2c187d765a379d8134ee6c76b28f3d10 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 30 Apr 2016 16:34:50 -0700 Subject: [PATCH] Abstract CaptureThread target class into Writer, implement RawFileWriter. --- firmware/application/capture_thread.hpp | 29 +++++++++++++++++++++---- firmware/application/ui_record_view.cpp | 5 ++--- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/firmware/application/capture_thread.hpp b/firmware/application/capture_thread.hpp index 5dc29b008..c68fc8e18 100644 --- a/firmware/application/capture_thread.hpp +++ b/firmware/application/capture_thread.hpp @@ -35,6 +35,27 @@ using namespace hackrf::one; #include +class Writer { +public: + virtual bool write(const void* const write_buffer, const size_t write_size) = 0; +}; + +class RawFileWriter : public Writer { +public: + RawFileWriter( + const std::string& filename + ) : file { filename, File::openmode::out | File::openmode::binary | File::openmode::trunc } + { + } + + bool write(const void* const write_buffer, const size_t write_size) override { + return file.write(write_buffer, write_size); + } + +private: + File file; +}; + class StreamOutput { public: StreamOutput( @@ -71,11 +92,11 @@ private: class CaptureThread { public: CaptureThread( - std::unique_ptr file, + std::unique_ptr writer, size_t write_size_log2, size_t buffer_count_log2 ) : config { write_size_log2, buffer_count_log2 }, - file { std::move(file) } + writer { std::move(writer) } { // Need significant stack for FATFS thread = chThdCreateFromHeap(NULL, 2048, NORMALPRIO + 10, CaptureThread::static_fn, this); @@ -109,7 +130,7 @@ public: private: CaptureConfig config; - std::unique_ptr file; + std::unique_ptr writer; static Thread* thread; static msg_t static_fn(void* arg) { @@ -146,7 +167,7 @@ private: const auto bytes_to_write = stream.read(write_buffer, write_size); if( bytes_to_write == write_size ) { - if( file->write(write_buffer, write_size) ) { + if( writer->write(write_buffer, write_size) ) { success = true; } } diff --git a/firmware/application/ui_record_view.cpp b/firmware/application/ui_record_view.cpp index 04c71ef86..b37678ff0 100644 --- a/firmware/application/ui_record_view.cpp +++ b/firmware/application/ui_record_view.cpp @@ -96,9 +96,8 @@ void RecordView::start() { write_metadata_file(filename_stem + ".TXT"); capture_thread = std::make_unique( - std::make_unique( - filename_stem + filename_extension, - File::openmode::out | File::openmode::binary | File::openmode::trunc + std::make_unique( + filename_stem + filename_extension ), buffer_size_k, buffer_count_k );