UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
I2cSlaveReader.hpp
[詳解]
1//
2// I2c スレーブ側受信クラス
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6
7//
8// master --[I2C]--> slave
9// ^^^^^
10//
11
12#pragma once
13
14#include "I2cBus.hpp"
15
17#include <Udon/Utility/Show.hpp>
18
19namespace Udon
20{
21
24 template <typename Message>
26 {
27 public:
29 using MessageType = Message;
30
32 static constexpr size_t Size = Udon::SerializedSize<MessageType>();
33
37 : bus(bus)
38 , buffer()
39 {
40 self = this;
41 }
42
46
47
50 : bus(other.bus)
51 , buffer()
52 {
53 self = this;
54 }
55
57 void begin()
58 {
59 bus.onReceive(
60 [](int)
61 {
62 for (auto& buf : self->buffer)
63 {
64 buf = Wire.read();
65 }
66 });
67 }
68
72 {
73 if (bus)
74 {
75 return Udon::Deserialize<MessageType>(buffer);
76 }
77 else
78 {
79 return Udon::nullopt;
80 }
81 }
82
85 void show(char gap = '\t') const
86 {
87 if (const auto message = getMessage())
88 {
89 Udon::Show(*message, gap);
90 }
91 else
92 {
93 Udon::Show(F("receive failed!"));
94 }
95 }
96
99 void showRaw(char gap = ' ') const
100 {
101 Udon::Show(buffer, gap);
102 }
103
104 private:
105 Udon::II2cBus& bus;
106
107 uint8_t buffer[Size];
108
109 static I2cSlaveReader* self;
110 };
111
112 template <typename Message>
113 I2cSlaveReader<Message>* I2cSlaveReader<Message>::self;
114
115} // namespace Udon
#define F(x)
Definition Show.hpp:17
I2c スレーブ側受信クラス
Definition I2cSlaveReader.hpp:26
void showRaw(char gap=' ') const
受信バッファを表示
Definition I2cSlaveReader.hpp:99
Message MessageType
受信メッセージ型
Definition I2cSlaveReader.hpp:29
void show(char gap='\t') const
受信内容を表示
Definition I2cSlaveReader.hpp:85
static constexpr size_t Size
受信バッファサイズ
Definition I2cSlaveReader.hpp:32
void begin()
受信開始
Definition I2cSlaveReader.hpp:57
I2cSlaveReader(const I2cSlaveReader &)=delete
コピーコンストラクタ
I2cSlaveReader(I2cSlaveReader &&other)
ムーブコンストラクタ
Definition I2cSlaveReader.hpp:49
Udon::Optional< MessageType > getMessage() const
受信したメッセージを取得
Definition I2cSlaveReader.hpp:71
I2cSlaveReader(Udon::II2cBus &bus)
コンストラクタ
Definition I2cSlaveReader.hpp:36
I2cBus クラスのインターフェース
Definition I2cBus.hpp:21
virtual void onReceive(void(*function)(int))=0
オプショナル型
Definition Optional.hpp:62
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
constexpr NulloptT nullopt
無効値
Definition Optional.hpp:52