UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
I2cSlaveWriter.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
45
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
73 void show(char gap = '\t') const
74 {
75 if (const auto message = Udon::Deserialize<MessageType>(buffer))
76 {
77 Udon::Show(*message, gap);
78 }
79 else
80 {
81 Udon::Show(F("unpack failed!")); // ここへ到達する: setMessage()で値を設定していない
82 }
83 }
84
87 void showRaw(char gap = ' ') const
88 {
89 Udon::Show(buffer, gap);
90 }
91
92 private:
93 Udon::II2cBus& bus;
94
95 uint8_t buffer[Size];
96
97 static I2cSlaveWriter* self;
98 };
99
100 template <typename Message>
101 I2cSlaveWriter<Message>* I2cSlaveWriter<Message>::self;
102
103} // namespace Udon
#define F(x)
Definition Show.hpp:17
I2c スレーブ側送信クラス
Definition I2cSlaveWriter.hpp:26
I2cSlaveWriter(I2cSlaveWriter &&other)
ムーブコンストラクタ
Definition I2cSlaveWriter.hpp:47
I2cSlaveWriter(const I2cSlaveWriter &)=delete
コピーコンストラクタ
Message MessageType
受信メッセージ型
Definition I2cSlaveWriter.hpp:29
void setMessage(const MessageType &message)
送信するメッセージを設定
Definition I2cSlaveWriter.hpp:66
void showRaw(char gap=' ') const
送信バッファを表示
Definition I2cSlaveWriter.hpp:87
I2cSlaveWriter(Udon::II2cBus &bus)
コンストラクタ
Definition I2cSlaveWriter.hpp:36
void show(char gap='\t') const
送信内容を表示
Definition I2cSlaveWriter.hpp:73
static constexpr size_t Size
受信バッファサイズ
Definition I2cSlaveWriter.hpp:32
void begin()
送信開始
Definition I2cSlaveWriter.hpp:55
I2cBus クラスのインターフェース
Definition I2cBus.hpp:21
virtual size_t write(uint8_t data)=0
virtual void onRequest(void(*function)())=0
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
constexpr size_t SerializedSize() noexcept
Tをシリアライズした際のバイト列の要素数を取得する
Definition Serializer.hpp:22