From b01aa0fb0e73d655fb4a844fca59adf8c23ffa7b Mon Sep 17 00:00:00 2001 From: Perry Naseck Date: Tue, 8 Nov 2022 10:19:06 -0500 Subject: [PATCH] NodeArrayOutputOLA separate non-template class member definitions from header --- CMakeLists.txt | 7 +- include/aniray/DMXAddr.hpp | 7 +- include/aniray/NodeArray.hpp | 2 - include/aniray/NodeArrayOutput.hpp | 6 +- include/aniray/NodeArrayOutputOLA.hpp | 54 ++------------- src/NodeArrayOutputOLA.cpp | 96 ++++++++++++++++++++++++++ src/lintHelpers/NodeArrayOutputOLA.cpp | 27 -------- 7 files changed, 110 insertions(+), 89 deletions(-) create mode 100644 src/NodeArrayOutputOLA.cpp delete mode 100644 src/lintHelpers/NodeArrayOutputOLA.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 15bc435..7792ca3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,7 +73,9 @@ set_target_properties( if(NOT ANIRAY_WITHOUT_OLA) # Private to avoid double linking https://stackoverflow.com/a/34533415 - target_sources(${CMAKE_PROJECT_NAME} PRIVATE include/aniray/NodeArrayOutputOLA.hpp) + target_sources(${CMAKE_PROJECT_NAME} PRIVATE + include/aniray/NodeArrayOutputOLA.hpp + src/NodeArrayOutputOLA.cpp) endif() if(ANIRAY_WITH_LINT) @@ -85,9 +87,6 @@ if(ANIRAY_WITH_LINT) src/lintHelpers/NodeArray.cpp src/lintHelpers/NodeArrayOutput.cpp src/lintHelpers/NodeArraySampler.cpp) - if(NOT ANIRAY_WITHOUT_OLA) - target_sources(${CMAKE_PROJECT_NAME} PRIVATE src/lintHelpers/NodeArrayOutputOLA.cpp) - endif() set_target_properties( ${CMAKE_PROJECT_NAME} PROPERTIES diff --git a/include/aniray/DMXAddr.hpp b/include/aniray/DMXAddr.hpp index 10287e6..da8c098 100644 --- a/include/aniray/DMXAddr.hpp +++ b/include/aniray/DMXAddr.hpp @@ -32,12 +32,9 @@ namespace aniray { -using std::uint32_t; -using std::uint8_t; - struct DMXAddr { - uint32_t mUniverse; - uint8_t mAddr; + std::uint32_t mUniverse; + std::uint8_t mAddr; }; auto operator<<(std::ostream &out, const DMXAddr &d) -> std::ostream &; diff --git a/include/aniray/NodeArray.hpp b/include/aniray/NodeArray.hpp index 724d39b..7f33a55 100644 --- a/include/aniray/NodeArray.hpp +++ b/include/aniray/NodeArray.hpp @@ -48,8 +48,6 @@ #include #include #include // IWYU pragma: keep -#include -#include #include // IWYU pragma: keep #include #include diff --git a/include/aniray/NodeArrayOutput.hpp b/include/aniray/NodeArrayOutput.hpp index 3c85552..814bf9e 100644 --- a/include/aniray/NodeArrayOutput.hpp +++ b/include/aniray/NodeArrayOutput.hpp @@ -34,9 +34,6 @@ namespace aniray { -using std::uint32_t; -using std::uint8_t; - template class NodeArrayOutput { public: using InnerNodeArrayT = NodeArrayT; @@ -65,7 +62,8 @@ template class NodeArrayOutput { } protected: - virtual void setChannel(uint32_t universe, uint8_t channel, uint8_t data) {} + virtual void setChannel(std::uint32_t universe, std::uint8_t channel, + std::uint8_t data) {} virtual auto sendData() -> bool { return false; } private: diff --git a/include/aniray/NodeArrayOutputOLA.hpp b/include/aniray/NodeArrayOutputOLA.hpp index 35239f7..a62a357 100644 --- a/include/aniray/NodeArrayOutputOLA.hpp +++ b/include/aniray/NodeArrayOutputOLA.hpp @@ -33,7 +33,6 @@ #include #include #include -#include #include #include @@ -41,13 +40,10 @@ #include #include #include -#include #include #include #include -#include #include -#include #include #include @@ -63,42 +59,16 @@ using std::uint8_t; class NodeArrayOutputOLAThread : public ola::thread::Thread { public: - NodeArrayOutputOLAThread(const Options &options) - : ola::thread::Thread(options) {} + NodeArrayOutputOLAThread(const Options &options); auto Start(const ola::TimeInterval &period, - std::unordered_map &universesToBuffers) -> bool { - mPeriod = period; - mUniversesToBuffers = universesToBuffers; - if (!mOLAClientWrapper.Setup()) { - return false; - } - return ola::thread::Thread::Start(); - } - - void Stop() { - mOLAClientWrapper.GetSelectServer()->Terminate(); - } - - auto GetSelectServer() -> ola::io::SelectServer* { - return mOLAClientWrapper.GetSelectServer(); - } - - void updateData(std::vector buffers) { - const std::lock_guard lock(mUpdateMutex); - mBuffers = std::move(buffers); - } + std::unordered_map &universesToBuffers) -> bool; + void Stop(); + auto GetSelectServer() -> ola::io::SelectServer*; + void updateData(std::vector buffers); protected: - auto Run() -> void* override { - mOLAClientWrapper.GetSelectServer()->RegisterRepeatingTimeout( - mPeriod, - ola::NewCallback( - this, - &NodeArrayOutputOLAThread::InternalSendUniverses)); - mOLAClientWrapper.GetSelectServer()->Run(); - return nullptr; - } + auto Run() -> void* override; private: ola::client::OlaClientWrapper mOLAClientWrapper; @@ -107,17 +77,7 @@ class NodeArrayOutputOLAThread : public ola::thread::Thread { std::vector mBuffers; std::mutex mUpdateMutex; - auto InternalSendUniverses() -> bool { - auto *olaClient = mOLAClientWrapper.GetClient(); - const std::lock_guard lock(mUpdateMutex); - for (auto const &[universe, i] : mUniversesToBuffers) { - if (i >= mBuffers.size()) { - continue; - } - olaClient->SendDMX(universe, mBuffers[i], ola::client::SendDMXArgs()); - } - return true; - } + auto InternalSendUniverses() -> bool; }; template diff --git a/src/NodeArrayOutputOLA.cpp b/src/NodeArrayOutputOLA.cpp new file mode 100644 index 0000000..ec3b9a5 --- /dev/null +++ b/src/NodeArrayOutputOLA.cpp @@ -0,0 +1,96 @@ +/* NodeArrayOutputOLA.cpp: Aniray system OLA output + * + * Created by Perry Naseck on 2022-09-22. + * + * This file is a part of Aniray + * https://github.com/HypersonicED/aniray + * + * Copyright (c) 2022, Hypersonic + * Copyright (c) 2022, Perry Naseck + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace aniray { + +NodeArrayOutputOLAThread::NodeArrayOutputOLAThread(const Options &options) + : ola::thread::Thread(options) {} + +auto NodeArrayOutputOLAThread::Start(const ola::TimeInterval &period, + std::unordered_map &universesToBuffers) -> bool { + mPeriod = period; + mUniversesToBuffers = universesToBuffers; + if (!mOLAClientWrapper.Setup()) { + return false; + } + return ola::thread::Thread::Start(); +} + +void NodeArrayOutputOLAThread::Stop() { + mOLAClientWrapper.GetSelectServer()->Terminate(); +} + +auto NodeArrayOutputOLAThread::GetSelectServer() -> ola::io::SelectServer* { + return mOLAClientWrapper.GetSelectServer(); +} + +void NodeArrayOutputOLAThread::updateData(std::vector buffers) { + const std::lock_guard lock(mUpdateMutex); + mBuffers = std::move(buffers); +} + +auto NodeArrayOutputOLAThread::Run() -> void* { + mOLAClientWrapper.GetSelectServer()->RegisterRepeatingTimeout( + mPeriod, + ola::NewCallback( + this, + &NodeArrayOutputOLAThread::InternalSendUniverses)); + mOLAClientWrapper.GetSelectServer()->Run(); + return nullptr; +} + +auto NodeArrayOutputOLAThread::InternalSendUniverses() -> bool { + auto *olaClient = mOLAClientWrapper.GetClient(); + const std::lock_guard lock(mUpdateMutex); + for (auto const &[universe, i] : mUniversesToBuffers) { + if (i >= mBuffers.size()) { + continue; + } + olaClient->SendDMX(universe, mBuffers[i], ola::client::SendDMXArgs()); + } + return true; +} + +} // namespace aniray + diff --git a/src/lintHelpers/NodeArrayOutputOLA.cpp b/src/lintHelpers/NodeArrayOutputOLA.cpp deleted file mode 100644 index ca9c3be..0000000 --- a/src/lintHelpers/NodeArrayOutputOLA.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/* NodeArrayOutputOLA.cpp: Source file to activate linters. - * - * Created by Perry Naseck on 2022-09-22. - * - * This file is a part of Aniray - * https://github.com/HypersonicED/aniray - * - * Copyright (c) 2022, Hypersonic - * Copyright (c) 2022, Perry Naseck - * All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include