UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
Ros2SerialReader.hpp
[詳解]
1#pragma once
2
3#include <serial/serial.h>
6
7namespace Udon
8{
9
11 template <typename Message>
13 {
14 static constexpr size_t Size = Udon::SerializedSize<Message>();
15
16 serial::Serial& serial;
17
18 std::vector<uint8_t> buffer;
19
20 public:
23 Ros2SerialReader(serial::Serial& bus)
24 : serial(bus)
25 , buffer(Size)
26 {
27 }
28
30 void update()
31 {
32 if (not serial.isOpen())
33 {
34 serial.open();
35 }
36 if (serial.available() >= static_cast<int>(Size))
37 {
38 std::vector<uint8_t> buf;
39 serial.read(buf, Size);
40 buffer = std::move(buf);
41 serial.flushInput();
42 }
43 }
44
50
52 void show() const
53 {
54 if (const auto message = getMessage())
55 {
56 Udon::Show(*message);
57 }
58 else
59 {
60 Udon::Show("receive failed!");
61 }
62 }
63
65 void showRaw() const
66 {
67 for (int i = 0; i < buffer.size(); i++)
68 {
69 std::cout << static_cast<int>(buffer[i]) << " ";
70 }
71 std::cout << std::endl;
72 }
73 };
74} // namespace Udon
オプショナル型
Definition Optional.hpp:62
ROS2からSerial通信を受信するクラス
Definition Ros2SerialReader.hpp:13
Udon::Optional< Message > getMessage() const
メッセージの取得
Definition Ros2SerialReader.hpp:46
void show() const
メッセージの表示
Definition Ros2SerialReader.hpp:52
Ros2SerialReader(serial::Serial &bus)
コンストラクタ
Definition Ros2SerialReader.hpp:23
void update()
更新
Definition Ros2SerialReader.hpp:30
void showRaw() const
受信バッファを表示
Definition Ros2SerialReader.hpp:65
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