UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
SivSerialReader.hpp
[詳解]
1//
2// OpenSiv3D用 Serial 受信クラス
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6// Sender --[Serial]--> Receiver
7// ^^^^^^^^
8//
9
10#pragma once
11
12#include <Siv3D/Serial.hpp>
14#include <Udon/Utility/Show.hpp>
15
16namespace Udon
17{
18
21 template <typename Message>
23 {
24 static constexpr size_t Size = Udon::SerializedSize<Message>();
25
26 s3d::Serial& serial;
27
28 s3d::Array<uint8_t> buffer;
29
30 std::thread thread;
31
32 std::atomic_bool isRunning; // thread stop token
33
34 public:
35 using MessageType = Message;
36
39 SivSerialReader(s3d::Serial& bus)
40 : serial(bus)
41 , buffer(Size)
42 , thread([this]()
43 { receive(); })
44 , isRunning(true)
45 {
46 }
47
50 {
51 isRunning = false;
52 thread.join();
53 }
54
61
63 void show() const
64 {
65 if (const auto message = getMessage())
66 {
67 Udon::Show(*message);
68 s3d::Print.writeln();
69 }
70 else
71 {
72 s3d::Print << U"receive failed!";
73 }
74 }
75
76 void showRaw() const
77 {
78 s3d::Print << buffer;
79 }
80
81 private:
82 void receive()
83 {
84 while (isRunning)
85 {
86 if (not serial)
87 continue;
88
89 if (serial.available() < Size)
90 continue;
91
92 s3d::Array<uint8> temp;
93 if (serial.readBytes(temp) && temp.size() == Size)
94 {
95 buffer = std::move(temp);
96 }
97
98 serial.clearInput();
99 }
100 }
101 };
102} // namespace Udon
オプショナル型
Definition Optional.hpp:62
OpenSiv3D用 Serial 受信クラス
Definition SivSerialReader.hpp:23
~SivSerialReader()
デストラクタ
Definition SivSerialReader.hpp:49
SivSerialReader(s3d::Serial &bus)
コンストラクタ
Definition SivSerialReader.hpp:39
Message MessageType
Definition SivSerialReader.hpp:35
void showRaw() const
Definition SivSerialReader.hpp:76
Udon::Optional< Message > getMessage() const
メッセージの取得
Definition SivSerialReader.hpp:57
void show() const
メッセージの表示
Definition SivSerialReader.hpp:63
Definition Bit.hpp:12
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