UdonLibrary
1.0.0
機械システム研究部 C++ ライブラリ
Toggle main menu visibility
読み取り中…
検索中…
一致する文字列を見つけられません
CanWriter.hpp
[詳解]
1
//
2
// CAN通信 送信クラス
3
//
4
// Copyright (c) 2022 udonrobo
5
//
6
7
#pragma once
8
9
#include "
ICanBus.hpp
"
10
11
#include <
Udon/Serializer/Serializer.hpp
>
12
#include <
Udon/Utility/Show.hpp
>
13
#include <
Udon/Serializer/SerializerTraits.hpp
>
14
#include <
Udon/Utility/Printf.hpp
>
15
16
namespace
Udon
17
{
18
21
template
<
typename
Message>
22
class
CanWriter
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
47
CanWriter
(
CanWriter
&& other)
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
ICanBus.hpp
Printf.hpp
SerializerTraits.hpp
Serializer.hpp
Show.hpp
F
#define F(x)
Definition
Show.hpp:17
Udon::CanWriter::Size
static constexpr size_t Size
受信バッファサイズ
Definition
CanWriter.hpp:32
Udon::CanWriter::CanWriter
CanWriter(const CanWriter &other)=delete
コピーコンストラクタ
Udon::CanWriter::CanWriter
CanWriter(CanWriter &&other)
ムーブコンストラクタ
Definition
CanWriter.hpp:47
Udon::CanWriter::CanWriter
CanWriter(ICanBus &bus, const uint32_t id)
コンストラクタ
Definition
CanWriter.hpp:37
Udon::CanWriter::MessageType
Message MessageType
受信メッセージ型
Definition
CanWriter.hpp:29
Udon::CanWriter::show
void show() const
送信内容を表示
Definition
CanWriter.hpp:59
Udon::CanWriter::setMessage
void setMessage(const Message &message) noexcept
メッセージ構造体をセット
Definition
CanWriter.hpp:53
Udon::CanWriter::showRaw
void showRaw() const
送信バッファを表示
Definition
CanWriter.hpp:74
Udon::ICanBus
CANバス管理クラス インターフェース
Definition
ICanBus.hpp:49
Udon::Message
Definition
AirCylinder.hpp:16
Udon
Definition
Bit.hpp:12
Udon::Serialize
bool Serialize(const T &object, ArrayView< uint8_t > buffer)
バッファにシリアル化する
Definition
Serializer.hpp:35
Udon::Deserialize
Udon::Optional< T > Deserialize(ArrayView< const uint8_t > buffer)
バイト列からオブジェクトに逆シリアル化します
Definition
Serializer.hpp:87
Udon::Show
void Show(Args &&... args)
区切り文字ありで出力する
Definition
Show.hpp:339
Udon::Printf
void Printf(const char *format, Args... args)
Definition
Printf.hpp:44
Udon::SerializedSize
constexpr size_t SerializedSize() noexcept
Tをシリアライズした際のバイト列の要素数を取得する
Definition
Serializer.hpp:22
Udon::CanTxNode
CAN送信ノード
Definition
ICanBus.hpp:17
Udon::Traits::IsSerializable
T が シリアライズ可能か判定する
Definition
SerializerTraits.hpp:98