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 : node{ bus.createTx(id, Size) }
39 {
40 }
41
44 CanWriter(const CanWriter& other) = delete;
45
48 : node{ other.node }
49 {
50 }
51
53 void setMessage(const Message& message) noexcept
54 {
55 Udon::Serialize(message, { node->data });
56 }
57
59 void show() const
60 {
61 Udon::Printf("0x%03x ", node->id);
62 if (const auto message = Udon::Deserialize<Message>({ node->data }))
63 {
64 Udon::Show(*message);
65 }
66 else
67 {
68 Udon::Show(F("unpack failed!"));
69 // ここへ到達する: setMessage()で値を設定していない
70 }
71 }
72
74 void showRaw() const
75 {
76 Udon::Printf("0x%03x ", node->id);
77 for (const auto& n : node->data)
78 {
79 Udon::Show(n);
80 }
81 }
82
83 private:
84 CanTxNode* node;
85 };
86
87} // 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:47
CanWriter(ICanBus &bus, const uint32_t id)
コンストラクタ
Definition CanWriter.hpp:37
Message MessageType
受信メッセージ型
Definition CanWriter.hpp:29
void show() const
送信内容を表示
Definition CanWriter.hpp:59
void setMessage(const Message &message) noexcept
メッセージ構造体をセット
Definition CanWriter.hpp:53
void showRaw() const
送信バッファを表示
Definition CanWriter.hpp:74
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