From 2e298301412c18b48446549a9da4da7fbdb28338 Mon Sep 17 00:00:00 2001 From: Vaughn Kottler Date: Thu, 26 Oct 2023 03:06:28 -0500 Subject: [PATCH] 0.2.3 - Add FullDuplexBuffer interface --- .vimrc | 3 ++ README.md | 6 +-- config | 2 +- local/configs/project.yaml | 2 +- src/apps/buffer/SampleFdBuffer.h | 20 ++++++++ src/apps/buffer/common.h | 13 +++++ src/apps/buffer/test_full_duplex_buffer.cc | 16 ++++++ src/apps/buffer/test_pc_buffer.cc | 9 +--- src/buffer/FullDuplexBuffer.h | 57 ++++++++++++++++++++++ yambs.yaml | 6 +-- 10 files changed, 118 insertions(+), 16 deletions(-) create mode 100644 src/apps/buffer/SampleFdBuffer.h create mode 100644 src/apps/buffer/common.h create mode 100644 src/apps/buffer/test_full_duplex_buffer.cc create mode 100644 src/buffer/FullDuplexBuffer.h diff --git a/.vimrc b/.vimrc index ec110ed..ae7d9d1 100644 --- a/.vimrc +++ b/.vimrc @@ -1,4 +1,7 @@ let gcc_suffix = '-12' +let clang_suffix = '-15' + +let g:ale_c_clangformat_executable = 'clang-format' . clang_suffix let g:ale_c_cc_executable = 'gcc' . gcc_suffix let g:ale_cpp_cc_executable = 'g++' . gcc_suffix diff --git a/README.md b/README.md index 74a35ed..75c8e4e 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -# coral ([0.2.2](https://github.com/vkottler/coral/releases/tag/0.2.2)) +# coral ([0.2.3](https://github.com/vkottler/coral/releases/tag/0.2.3)) [![codecov](https://codecov.io/gh/vkottler/coral/branch/master/graph/badge.svg)](https://codecov.io/gh/vkottler/coral) ![Build Status](https://github.com/vkottler/coral/actions/workflows/yambs-project.yml/badge.svg) diff --git a/config b/config index 100095c..3e6f08b 160000 --- a/config +++ b/config @@ -1 +1 @@ -Subproject commit 100095ccebe7a8a758cea9cb8d45130467064761 +Subproject commit 3e6f08b43beebcb79eb559222e3e336cc32b8bee diff --git a/local/configs/project.yaml b/local/configs/project.yaml index c7e05d0..8c3afcb 100644 --- a/local/configs/project.yaml +++ b/local/configs/project.yaml @@ -5,4 +5,4 @@ description: Core C++ project utilities. version: major: 0 minor: 2 - patch: 2 + patch: 3 diff --git a/src/apps/buffer/SampleFdBuffer.h b/src/apps/buffer/SampleFdBuffer.h new file mode 100644 index 0000000..fc3b213 --- /dev/null +++ b/src/apps/buffer/SampleFdBuffer.h @@ -0,0 +1,20 @@ +#pragma once + +#include "common.h" + +class SampleFdBuffer + : public FullDuplexBuffer +{ + public: + inline void service_tx_impl(TxBuffer *buf) + { + (void)buf; + std::cout << "Serviced TX." << std::endl; + } + + inline void service_rx_impl(RxBuffer *buf) + { + (void)buf; + std::cout << "Serviced RX." << std::endl; + } +}; diff --git a/src/apps/buffer/common.h b/src/apps/buffer/common.h new file mode 100644 index 0000000..0716cf2 --- /dev/null +++ b/src/apps/buffer/common.h @@ -0,0 +1,13 @@ +#pragma once + +/* toolchain */ +#include +#include + +/* internal */ +#include "../../buffer/FullDuplexBuffer.h" + +static constexpr std::size_t depth = 1024; +using element_t = char; + +using namespace Coral; diff --git a/src/apps/buffer/test_full_duplex_buffer.cc b/src/apps/buffer/test_full_duplex_buffer.cc new file mode 100644 index 0000000..d92501b --- /dev/null +++ b/src/apps/buffer/test_full_duplex_buffer.cc @@ -0,0 +1,16 @@ +/* internal */ +#include "SampleFdBuffer.h" + +int main(void) +{ + SampleFdBuffer buffer(true); + + /* Feed TX buffer. */ + std::stringstream("Hello, world! (tx)\n") >> buffer.tx; + + /* Feed RX buffer. */ + std::stringstream("Hello, world! (rx)\n") >> buffer.rx; + std::cout << buffer.rx; + + return 0; +} diff --git a/src/apps/buffer/test_pc_buffer.cc b/src/apps/buffer/test_pc_buffer.cc index 2abfdf0..9310505 100644 --- a/src/apps/buffer/test_pc_buffer.cc +++ b/src/apps/buffer/test_pc_buffer.cc @@ -1,17 +1,10 @@ /* toolchain */ #include -#include #include -#include #include /* internal */ -#include "../../buffer/PcBuffer.h" - -static constexpr std::size_t depth = 1024; -using element_t = char; - -using namespace Coral; +#include "common.h" using Buffer = PcBuffer; diff --git a/src/buffer/FullDuplexBuffer.h b/src/buffer/FullDuplexBuffer.h new file mode 100644 index 0000000..6226a95 --- /dev/null +++ b/src/buffer/FullDuplexBuffer.h @@ -0,0 +1,57 @@ +#pragma once + +/* internal */ +#include "PcBuffer.h" + +namespace Coral +{ + +template +class FullDuplexBuffer +{ + public: + using TxBuffer = PcBuffer; + using RxBuffer = PcBuffer; + + FullDuplexBuffer(bool _auto_service = false) + : tx(_auto_service), rx(_auto_service) + { + /* + * Attempt to service the writing end whenever data is ready to be + * written. + */ + tx.set_data_available([this](TxBuffer *buf) { service_tx(buf); }); + + /* + * Attempt to service the reading end whenever the read buffer has + * space. + */ + rx.set_space_available([this](RxBuffer *buf) { service_rx(buf); }); + } + + /* + * A method that can be polled at runtime if it's useful for hardware + * resources to be interacted with regularly. + */ + inline void dispatch(void) + { + service_tx(&tx); + service_rx(&rx); + } + + inline void service_tx(TxBuffer *buf) + { + static_cast(this)->service_tx_impl(buf); + } + + inline void service_rx(RxBuffer *buf) + { + static_cast(this)->service_rx_impl(buf); + } + + TxBuffer tx; + RxBuffer rx; +}; + +} // namespace Coral diff --git a/yambs.yaml b/yambs.yaml index aec202f..30250c5 100644 --- a/yambs.yaml +++ b/yambs.yaml @@ -1,14 +1,14 @@ # ===================================== # generator=datazen -# version=3.1.2 -# hash=0be48a27b528ad11ed38b581f40b9443 +# version=3.1.4 +# hash=cd30ca828c268bf5b3847d3052de73df # ===================================== --- project: name: coral github: {owner: &self vkottler} - version: {major: 0, minor: 2, patch: 2} + version: {major: 0, minor: 2, patch: 3} variants: clang: suffix: &clang_version "-15"