UdonLibrary
1.0.0
機械システム研究部 C++ ライブラリ
Toggle main menu visibility
読み取り中…
検索中…
一致する文字列を見つけられません
CanBusTeensy.hpp
[詳解]
1
//
2
// CAN通信 Teensy用バスクラス
3
//
4
// Copyright (c) 2022 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
14
#include <
Udon/Types/StaticVector.hpp
>
15
#include <
Udon/Algorithm/ScopedInterruptLocker.hpp
>
16
#include <deque>
17
18
namespace
Udon
19
{
20
28
template
<CAN_DEV_TABLE Bus>
29
class
CanBusTeensy
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
49
CanBusTeensy
(
CanBusTeensy
&&);
50
52
~CanBusTeensy
();
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
"
CanUtility.hpp
ICanBus.hpp
CanBusTeensy.hpp
ScopedInterruptLocker.hpp
StaticVector.hpp
Udon::CanBusTeensy::createRx
CanRxNode * createRx(uint32_t id, size_t length) override
受信ノードをバスに参加させる
Definition
CanBusTeensy.hpp:192
Udon::CanBusTeensy::show
void show() const
バス情報を表示する
Definition
CanBusTeensy.hpp:125
Udon::CanBusTeensy::update
void update()
バス更新
Definition
CanBusTeensy.hpp:89
Udon::CanBusTeensy::createTx
CanTxNode * createTx(uint32_t id, size_t length) override
送信ノードをバスに参加させる
Definition
CanBusTeensy.hpp:177
Udon::CanBusTeensy::begin
void begin()
通信開始
Definition
CanBusTeensy.hpp:37
Udon::CanBusTeensy::CanBusTeensy
CanBusTeensy(const Config &config={})
コンストラクタ
Definition
CanBusTeensy.hpp:11
Udon::CanBusTeensy::end
void end()
通信終了
Definition
CanBusTeensy.hpp:81
Udon::CanBusTeensy::CanBusTeensy
CanBusTeensy(const CanBusTeensy &)=delete
コピーコンストラクタ
Udon::CanBusTeensy::~CanBusTeensy
~CanBusTeensy()
デストラクタ
Definition
CanBusTeensy.hpp:30
Udon::ICanBus
CANバス管理クラス インターフェース
Definition
ICanBus.hpp:49
Udon::StaticVector
疑似可変長配列コンテナ
Definition
StaticVector.hpp:22
Udon
Definition
Bit.hpp:12
Udon::CanBusTeensy::Config
Definition
CanBusTeensy.hpp:34
Udon::CanBusTeensy::Config::canBaudrate
uint32_t canBaudrate
Definition
CanBusTeensy.hpp:38
Udon::CanBusTeensy::Config::transmitTimeout
uint32_t transmitTimeout
Definition
CanBusTeensy.hpp:36
Udon::CanBusTeensy::Config::transmitInterval
uint32_t transmitInterval
Definition
CanBusTeensy.hpp:35
Udon::CanBusTeensy::Config::receiveTimeout
uint32_t receiveTimeout
Definition
CanBusTeensy.hpp:37
Udon::CanRxNode
CAN受信ノード
Definition
ICanBus.hpp:28
Udon::CanTxNode
CAN送信ノード
Definition
ICanBus.hpp:17