UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
Forwarding.hpp
[詳解]
1//
2// 通信転送クラス
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6
7//
8// Sender --[CAN ect.]--> Forwarding --[UART etc.]--> Receiver
9// ^^^^^^^^^^
10//
11
12#pragma once
13
14#include <Udon/Utility/Show.hpp>
17
18namespace Udon
19{
20
25 template <
26 template <typename> class Reader,
27 template <typename> class Writer,
28 typename Message>
30 {
31
32 static_assert(Udon::Traits::IsReader<Reader>::value, "Reader must be reader.");
33 static_assert(Udon::Traits::IsWriter<Writer>::value, "Writer must be writer.");
34
36 using ReaderType = Reader<Message>;
37
39 using WriterType = Writer<Message>;
40
42 ReaderType reader;
43
45 WriterType writer;
46
47 public:
51 Forwarding(ReaderType&& reader, WriterType&& writer)
52 : reader(std::move(reader))
53 , writer(std::move(writer))
54 {
55 }
56
64
67 void update()
68 {
70 if (const auto message = reader.getMessage())
71 {
72 writer.setMessage(*message);
73 }
74 else
75 {
76 writer.setMessage({});
77 }
79 }
80
83 void show()
84 {
85 Udon::Show(F("read: "));
87 Udon::Show(F(" write: "));
89 Udon::Show(F(" "));
90 }
91
94 void showRaw()
95 {
96 Udon::Show(F("read: "));
98 Udon::Show(F(" write: "));
100 Udon::Show(F(" "));
101 }
102
105 ReaderType& getReader()
106 {
107 return reader;
108 }
109
112 WriterType& getWriter()
113 {
114 return writer;
115 }
116 };
117} // namespace Udon
#define F(x)
Definition Show.hpp:17
異なる通信間にメッセージを転送するクラス
Definition Forwarding.hpp:30
void begin()
開始
Definition Forwarding.hpp:59
void showRaw()
通信状態を表示する
Definition Forwarding.hpp:94
Forwarding(ReaderType &&reader, WriterType &&writer)
コンストラクタ
Definition Forwarding.hpp:51
ReaderType & getReader()
受信クラスの参照を取得する
Definition Forwarding.hpp:105
void update()
更新
Definition Forwarding.hpp:67
void show()
通信状態を表示する
Definition Forwarding.hpp:83
WriterType & getWriter()
送信クラスの参照を取得する
Definition Forwarding.hpp:112
void MaybeInvokeShow(const HasMemberFunctionShow &rhs)
T に T::show const 関数が存在する場合呼び出す。それ以外の場合何もしない。
Definition HasMemberFunction.hpp:57
void MaybeInvokeBegin(HasMemberFunctionBegin &rhs)
T に T::begin 関数が存在する場合呼び出す。それ以外の場合何もしない。
Definition HasMemberFunction.hpp:30
void MaybeInvokeUpdate(HasMemberFunctionUpdate &rhs)
T に T::update 関数が存在する場合呼び出す。それ以外の場合何もしない。
Definition HasMemberFunction.hpp:111
void MaybeInvokeShowRaw(const HasMemberFunctionShowRaw &rhs)
T に T::showRaw const 関数が存在する場合呼び出す。それ以外の場合何もしない。
Definition HasMemberFunction.hpp:84
Definition Bit.hpp:12
void Show(Args &&... args)
区切り文字ありで出力する
Definition Show.hpp:339
Definition Typedef.hpp:94
送信クラスであるか判定
Definition ReaderWriterTraits.hpp:42
送信クラスであるか判定
Definition ReaderWriterTraits.hpp:25