UdonLibrary
1.0.0
機械システム研究部 C++ ライブラリ
Toggle main menu visibility
読み取り中…
検索中…
一致する文字列を見つけられません
I2cSlaveWriter.hpp
[詳解]
1
//
2
// I2c スレーブ側送信クラス
3
//
4
// Copyright (c) 2022 udonrobo
5
//
6
7
//
8
// master <--[I2C]-- slave
9
// ^^^^^
10
//
11
12
#pragma once
13
14
#include "
I2cBus.hpp
"
15
16
#include <
Udon/Serializer/Serializer.hpp
>
17
#include <
Udon/Utility/Show.hpp
>
18
19
namespace
Udon
20
{
21
24
template
<
typename
Message>
25
class
I2cSlaveWriter
26
{
27
public
:
29
using
MessageType
=
Message
;
30
32
static
constexpr
size_t
Size
=
Udon::SerializedSize<MessageType>
();
33
36
I2cSlaveWriter
(
Udon::II2cBus
& bus)
37
: bus(bus)
38
, buffer()
39
{
40
self =
this
;
41
}
42
44
I2cSlaveWriter
(
const
I2cSlaveWriter
&) =
delete
;
45
47
I2cSlaveWriter
(
I2cSlaveWriter
&& other)
48
: bus(other.bus)
49
, buffer()
50
{
51
self =
this
;
52
}
53
55
void
begin
()
56
{
57
bus.onRequest(
58
[]()
59
{
60
self->bus.write(self->buffer,
Size
);
61
});
62
}
63
66
void
setMessage
(
const
MessageType
& message)
67
{
68
Udon::Serialize
(message, buffer);
69
}
70
72
void
show
()
const
73
{
74
if
(
const
auto
message =
Udon::Deserialize<MessageType>
(buffer))
75
{
76
Udon::Show
(*message);
77
}
78
else
79
{
80
Udon::Show
(
F
(
"unpack failed!"
));
// ここへ到達する: setMessage()で値を設定していない
81
}
82
}
83
85
void
showRaw
()
const
86
{
87
Udon::Show
(buffer);
88
}
89
90
private
:
91
Udon::II2cBus
& bus;
92
93
uint8_t buffer[
Size
];
94
95
static
I2cSlaveWriter
*
self
;
96
};
97
98
template
<
typename
Message>
99
I2cSlaveWriter<Message>
* I2cSlaveWriter<Message>::self;
100
101
}
// namespace Udon
I2cBus.hpp
Serializer.hpp
Show.hpp
F
#define F(x)
Definition
Show.hpp:17
Udon::I2cSlaveWriter
I2c スレーブ側送信クラス
Definition
I2cSlaveWriter.hpp:26
Udon::I2cSlaveWriter::I2cSlaveWriter
I2cSlaveWriter(I2cSlaveWriter &&other)
ムーブコンストラクタ
Definition
I2cSlaveWriter.hpp:47
Udon::I2cSlaveWriter::I2cSlaveWriter
I2cSlaveWriter(const I2cSlaveWriter &)=delete
コピーコンストラクタ
Udon::I2cSlaveWriter::showRaw
void showRaw() const
送信バッファを表示
Definition
I2cSlaveWriter.hpp:85
Udon::I2cSlaveWriter::MessageType
Message MessageType
受信メッセージ型
Definition
I2cSlaveWriter.hpp:29
Udon::I2cSlaveWriter::setMessage
void setMessage(const MessageType &message)
送信するメッセージを設定
Definition
I2cSlaveWriter.hpp:66
Udon::I2cSlaveWriter::I2cSlaveWriter
I2cSlaveWriter(Udon::II2cBus &bus)
コンストラクタ
Definition
I2cSlaveWriter.hpp:36
Udon::I2cSlaveWriter::show
void show() const
送信内容を表示
Definition
I2cSlaveWriter.hpp:72
Udon::I2cSlaveWriter::Size
static constexpr size_t Size
受信バッファサイズ
Definition
I2cSlaveWriter.hpp:32
Udon::I2cSlaveWriter::begin
void begin()
送信開始
Definition
I2cSlaveWriter.hpp:55
Udon::II2cBus
I2cBus クラスのインターフェース
Definition
I2cBus.hpp:21
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::SerializedSize
constexpr size_t SerializedSize() noexcept
Tをシリアライズした際のバイト列の要素数を取得する
Definition
Serializer.hpp:22
Udon::self
CanBusTeensy< Bus > * CanBusTeensy< Bus >::self
Definition
CanBusTeensy.hpp:275