UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
Im920Writer.hpp
[詳解]
1//
2// IM920 送信クラス
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6
7//
8// Sender --[UART]--> IM920 ~~[920MHz]~~> IM920 --[UART]--> Receiver
9// ^^^^^^
10//
11
12#pragma once
13
14#include "IIm920.hpp"
15
17#include <Udon/Utility/Show.hpp>
18
19namespace Udon
20{
21
24 template <typename Message>
26 {
27 public:
28 static constexpr size_t Size = Udon::SerializedSize<Message>();
29
30 using MessageType = Message;
31
32 private:
33 IIm920& im920;
34
35 uint8_t buffer[Size];
36
37 Im920Node node;
38
39 public:
41 : im920(im920)
42 , buffer()
43 , node{ buffer, Size, 0 }
44 {
45 im920.joinTx(node);
46 }
48 : im920(other.im920)
49 , buffer()
50 , node{ buffer, Size, 0 }
51 {
52 im920.joinTx(node);
53 }
54
55 void setMessage(const Message& message)
56 {
57 Udon::Serialize(message, buffer);
58 }
59
62 void show(char gap = '\t') const
63 {
64 if (const auto message = Udon::Deserialize<Message>(buffer))
65 {
66 Udon::Show(*message, gap);
67 }
68 else
69 {
70 Serial.print(F("unpack failed!"));
71 // ここへ到達する: setMessage()で値を設定していない
72 }
73 }
74
77 void showRaw(char gap = ' ') const
78 {
79 for (auto&& it : buffer)
80 {
81 Serial.print(it);
82 Serial.print(gap);
83 }
84 }
85 };
86} // namespace Udon
#define F(x)
Definition Show.hpp:17
IM920のインターフェース
Definition IIm920.hpp:31
virtual void joinTx(Im920Node &node)=0
送信ノードを登録
IM920送信クラス
Definition Im920Writer.hpp:26
Message MessageType
Definition Im920Writer.hpp:30
static constexpr size_t Size
Definition Im920Writer.hpp:28
void showRaw(char gap=' ') const
送信バッファを表示
Definition Im920Writer.hpp:77
Im920Writer(const Im920Writer &other)
Definition Im920Writer.hpp:47
void show(char gap='\t') const
送信内容を表示
Definition Im920Writer.hpp:62
Im920Writer(IIm920 &im920)
Definition Im920Writer.hpp:40
void setMessage(const Message &message)
Definition Im920Writer.hpp:55
Definition Bit.hpp:12
bool Serialize(const T &object, ArrayView< uint8_t > buffer)
バッファにシリアル化する
Definition Serializer.hpp:35
Udon::Optional< T > Deserialize(ArrayView< const uint8_t > buffer)
バイト列からオブジェクトに逆シリアル化します
Definition Serializer.hpp:87
void Show(Args &&... args)
区切り文字ありで出力する
Definition Show.hpp:339
constexpr size_t SerializedSize() noexcept
Tをシリアライズした際のバイト列の要素数を取得する
Definition Serializer.hpp:22
IM920ノード
Definition IIm920.hpp:20