UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
CanWriter.hpp
[詳解]
1//
2// CAN通信 送信クラス
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6
7#pragma once
8
9#include "ICanBus.hpp"
10
12#include <Udon/Utility/Show.hpp>
15
16namespace Udon
17{
18
21 template <typename Message>
23 {
24
25 static_assert(Udon::Traits::IsSerializable<Message>::value, "Message must be parsable.");
26
27 public:
29 using MessageType = Message;
30
32 static constexpr size_t Size = Udon::SerializedSize<MessageType>();
33
37 CanWriter(ICanBus& bus, const uint32_t id)
38 : bus{ bus }
39 , node{ bus.createTx(id, Size) }
40 {
41 }
42
45 CanWriter(const CanWriter& other) = delete;
46
49 : bus{ other.bus }
50 , node{ other.node }
51 {
52 }
53
55 void setMessage(const Message& message) noexcept
56 {
57 Udon::Serialize(message, { node->data });
58 }
59
61 void show() const
62 {
63 Udon::Printf("0x%03x ", node->id);
64 if (const auto message = Udon::Deserialize<Message>({ node->data }))
65 {
66 Udon::Show(*message);
67 }
68 else
69 {
70 Udon::Show(F("unpack failed!"));
71 // ここへ到達する: setMessage()で値を設定していない
72 }
73 }
74
76 void showRaw() const
77 {
78 Udon::Printf("0x%03x ", node->id);
79 for (const auto& n : node->data)
80 {
81 Udon::Show(n);
82 }
83 }
84
85 private:
86 ICanBus& bus;
87
88 CanTxNode* node;
89 };
90
91} // namespace Udon
#define F(x)
Definition Show.hpp:17
CAN通信 送信クラス
Definition CanWriter.hpp:23
static constexpr size_t Size
受信バッファサイズ
Definition CanWriter.hpp:32
CanWriter(const CanWriter &other)=delete
コピーコンストラクタ
CanWriter(CanWriter &&other)
ムーブコンストラクタ
Definition CanWriter.hpp:48
CanWriter(ICanBus &bus, const uint32_t id)
コンストラクタ
Definition CanWriter.hpp:37
Message MessageType
受信メッセージ型
Definition CanWriter.hpp:29
void show() const
送信内容を表示
Definition CanWriter.hpp:61
void setMessage(const Message &message) noexcept
メッセージ構造体をセット
Definition CanWriter.hpp:55
void showRaw() const
送信バッファを表示
Definition CanWriter.hpp:76
CANバス管理クラス インターフェース
Definition ICanBus.hpp:49
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
void Printf(const char *format, Args... args)
Definition Printf.hpp:44
constexpr size_t SerializedSize() noexcept
Tをシリアライズした際のバイト列の要素数を取得する
Definition Serializer.hpp:22
CAN送信ノード
Definition ICanBus.hpp:17
std::vector< uint8_t > data
Definition ICanBus.hpp:20
const uint32_t id
Definition ICanBus.hpp:18
T が シリアライズ可能か判定する
Definition SerializerTraits.hpp:97