diff --git a/firmware/application/CMakeLists.txt b/firmware/application/CMakeLists.txt index d481844f..2af3460e 100644 --- a/firmware/application/CMakeLists.txt +++ b/firmware/application/CMakeLists.txt @@ -175,6 +175,8 @@ set(CPPSRC log_file.cpp ${COMMON}/png_writer.cpp capture_thread.cpp + io_file.cpp + io_wave.cpp ${COMMON}/manchester.cpp string_format.cpp temperature_logger.cpp diff --git a/firmware/application/io_file.cpp b/firmware/application/io_file.cpp new file mode 100644 index 00000000..7daa75bc --- /dev/null +++ b/firmware/application/io_file.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2016 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "io_file.hpp" + +File::Result FileWriter::write(const void* const buffer, const File::Size bytes) { + auto write_result = file.write(buffer, bytes) ; + if( write_result.is_ok() ) { + bytes_written += write_result.value(); + } + return write_result; +} diff --git a/firmware/application/io_file.hpp b/firmware/application/io_file.hpp index 65f44826..f0647caf 100644 --- a/firmware/application/io_file.hpp +++ b/firmware/application/io_file.hpp @@ -41,14 +41,8 @@ public: return file.create(filename); } - File::Result write(const void* const buffer, const File::Size bytes) override { - auto write_result = file.write(buffer, bytes) ; - if( write_result.is_ok() ) { - bytes_written += write_result.value(); - } - return write_result; - } - + File::Result write(const void* const buffer, const File::Size bytes) override; + protected: File file; uint64_t bytes_written { 0 }; diff --git a/firmware/application/io_wave.cpp b/firmware/application/io_wave.cpp new file mode 100644 index 00000000..5222c3f9 --- /dev/null +++ b/firmware/application/io_wave.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2016 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "io_wave.hpp" + +Optional WAVFileWriter::create( + const std::filesystem::path& filename, + size_t sampling_rate +) { + sampling_rate = sampling_rate; + const auto create_error = FileWriter::create(filename); + if( create_error.is_valid() ) { + return create_error; + } else { + return update_header(); + } +} + +Optional WAVFileWriter::update_header() { + header_t header { sampling_rate, bytes_written }; + const auto seek_0_result = file.seek(0); + if( seek_0_result.is_error() ) { + return seek_0_result.error(); + } + const auto old_position = seek_0_result.value(); + const auto write_result = file.write(&header, sizeof(header)); + if( write_result.is_error() ) { + return write_result.error(); + } + const auto seek_old_result = file.seek(old_position); + if( seek_old_result.is_error() ) { + return seek_old_result.error(); + } + return { }; +} diff --git a/firmware/application/io_wave.hpp b/firmware/application/io_wave.hpp index 186b2fb2..e048be8e 100644 --- a/firmware/application/io_wave.hpp +++ b/firmware/application/io_wave.hpp @@ -94,35 +94,11 @@ public: Optional create( const std::filesystem::path& filename, size_t sampling_rate - ) { - sampling_rate = sampling_rate; - const auto create_error = FileWriter::create(filename); - if( create_error.is_valid() ) { - return create_error; - } else { - return update_header(); - } - } + ); private: uint32_t sampling_rate; uint32_t bytes_written; - Optional update_header() { - header_t header { sampling_rate, bytes_written }; - const auto seek_0_result = file.seek(0); - if( seek_0_result.is_error() ) { - return seek_0_result.error(); - } - const auto old_position = seek_0_result.value(); - const auto write_result = file.write(&header, sizeof(header)); - if( write_result.is_error() ) { - return write_result.error(); - } - const auto seek_old_result = file.seek(old_position); - if( seek_old_result.is_error() ) { - return seek_old_result.error(); - } - return { }; - } + Optional update_header(); };