UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
CanBusTeensy.hpp
[詳解]
1//
2// CAN通信 Teensy用バスクラス
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6
7#pragma once
8
9#include <FlexCAN_T4.h> // https://github.com/tonton81/FlexCan_T4.git
10
11#include "ICanBus.hpp"
12#include "CanUtility.hpp"
13
16#include <deque>
17
18namespace Udon
19{
20
28 template <CAN_DEV_TABLE Bus>
30 : public ICanBus
31 {
32 public:
33 struct Config
34 {
35 uint32_t transmitInterval = 5; // 送信間隔 [ms]
36 uint32_t transmitTimeout = 100; // 送信タイムアウト時間 [ms]
37 uint32_t receiveTimeout = 100; // 受信タイムアウト時間 [ms]
38 uint32_t canBaudrate = 1'000'000; // CAN通信速度 [bps]
39 };
40
43 explicit CanBusTeensy(const Config& config = {});
44
46 CanBusTeensy(const CanBusTeensy&) = delete;
47
50
53
56 void begin();
57
59 void end();
60
63 void update();
64
68 explicit operator bool() const;
69
71 void show() const;
72
73 CanTxNode* createTx(uint32_t id, size_t length) override;
74
75 CanRxNode* createRx(uint32_t id, size_t length) override;
76
77 private:
78 static CanBusTeensy* self; // コールバック関数から自身のインスタンスを参照するためのポインタ (本クラスはテンプレート引数を持つクラスであるため、引数が異なる実体化されたクラスは別のstatic変数をもつことになる)
79
80 Config config;
81
82 FlexCAN_T4<Bus, RX_SIZE_256, TX_SIZE_256> bus;
83
84 constexpr static uint8_t SingleFrameSize = 8;
85
86 std::deque<CanTxNode> txNodes; // 送信ノード(実体)
87 std::deque<CanRxNode> rxNodes; // 受信ノード(実体)
88
89 Udon::StaticVector<CAN_message_t, 1024> rxBuffer; // 受信バッファ
90
91 uint32_t transmitMs = 0; // 最終送信成功時刻
92 uint32_t receiveMs = 0; // 最終受信成功時刻
93
95 void onReceive();
96
98 void onTransmit();
99
101 bool txTimeout() const;
102
104 bool rxTimeout() const;
105 };
106
107} // namespace Udon
108
109#include "Impl/CanBusTeensy.hpp"
Teensy用 CANバスクラス
Definition CanBusTeensy.hpp:31
CanRxNode * createRx(uint32_t id, size_t length) override
受信ノードをバスに参加させる
Definition CanBusTeensy.hpp:192
void show() const
バス情報を表示する
Definition CanBusTeensy.hpp:125
void update()
バス更新
Definition CanBusTeensy.hpp:89
CanTxNode * createTx(uint32_t id, size_t length) override
送信ノードをバスに参加させる
Definition CanBusTeensy.hpp:177
void begin()
通信開始
Definition CanBusTeensy.hpp:37
CanBusTeensy(const Config &config={})
コンストラクタ
Definition CanBusTeensy.hpp:11
void end()
通信終了
Definition CanBusTeensy.hpp:81
CanBusTeensy(const CanBusTeensy &)=delete
コピーコンストラクタ
~CanBusTeensy()
デストラクタ
Definition CanBusTeensy.hpp:30
CANバス管理クラス インターフェース
Definition ICanBus.hpp:49
疑似可変長配列コンテナ
Definition StaticVector.hpp:22
Definition Bit.hpp:12
Definition CanBusTeensy.hpp:34
uint32_t canBaudrate
Definition CanBusTeensy.hpp:38
uint32_t transmitTimeout
Definition CanBusTeensy.hpp:36
uint32_t transmitInterval
Definition CanBusTeensy.hpp:35
uint32_t receiveTimeout
Definition CanBusTeensy.hpp:37
CAN受信ノード
Definition ICanBus.hpp:28
CAN送信ノード
Definition ICanBus.hpp:17