diff options
author | Davide Grohmann <davide.grohmann@arm.com> | 2022-05-31 15:24:02 +0200 |
---|---|---|
committer | Kristofer Jonsson <kristofer.jonsson@arm.com> | 2022-06-13 10:35:57 +0000 |
commit | 144b2d2d735d5b2e25894bdeacef7e03761025ad (patch) | |
tree | 39cad431f3f0bbc1491765257d2bd77ddbbf558d /applications/message_handler/lib/include/message_queue.hpp | |
parent | 922d2992bbb2dae379bde9b16a3714e19b698dc5 (diff) | |
download | ethos-u-core-platform-144b2d2d735d5b2e25894bdeacef7e03761025ad.tar.gz |
Refactor message_handler app to be more test friendly
Fix importing indexed models, the inclusion of header files was not
working.
Change-Id: Idab7e002abc31f57acc4eda6a2f1cf2defdfd5c4
Diffstat (limited to 'applications/message_handler/lib/include/message_queue.hpp')
-rw-r--r-- | applications/message_handler/lib/include/message_queue.hpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/applications/message_handler/lib/include/message_queue.hpp b/applications/message_handler/lib/include/message_queue.hpp new file mode 100644 index 0000000..4140c62 --- /dev/null +++ b/applications/message_handler/lib/include/message_queue.hpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2020-2022 Arm Limited. + * + * SPDX-License-Identifier: Apache-2.0 + * + * 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 + * + * 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. + */ + +#ifndef MESSAGE_QUEUE_H +#define MESSAGE_QUEUE_H + +#include <cstddef> +#include <ethosu_core_interface.h> + +namespace MessageQueue { + +template <uint32_t SIZE> +struct Queue { + EthosU::ethosu_core_queue_header header; + uint8_t data[SIZE]; + + constexpr Queue() : header({SIZE, 0, 0}) {} + + constexpr EthosU::ethosu_core_queue *toQueue() { + return reinterpret_cast<EthosU::ethosu_core_queue *>(&header); + } +}; + +class QueueImpl { +public: + struct Vec { + const void *base; + size_t length; + }; + + QueueImpl(EthosU::ethosu_core_queue &queue); + + bool empty() const; + size_t available() const; + size_t capacity() const; + void reset(); + bool read(uint8_t *dst, uint32_t length); + template <typename T> + bool read(T &dst) { + return read(reinterpret_cast<uint8_t *>(&dst), sizeof(dst)); + } + bool write(const Vec *vec, size_t length); + bool write(const uint32_t type, const void *src = nullptr, uint32_t length = 0); + template <typename T> + bool write(const uint32_t type, const T &src) { + return write(type, reinterpret_cast<const void *>(&src), sizeof(src)); + } + +private: + void cleanHeader() const; + void cleanHeaderData() const; + void invalidateHeader() const; + void invalidateHeaderData() const; + + EthosU::ethosu_core_queue &queue; +}; +} // namespace MessageQueue + +#endif |