halx
読み取り中…
検索中…
一致する文字列を見つけられません
halx::peripheral::CanBase クラスabstract

#include <common.hpp>

公開メンバ関数

virtual ~CanBase ()
 
virtual bool start ()=0
 
virtual bool stop ()=0
 
virtual bool transmit (const CanMessage &msg, uint32_t timeout)=0
 
virtual std::optional< size_t > attach_rx_filter (const CanFilter &filter, void(*callback)(const CanMessage &msg, void *context), void *context)=0
 
virtual bool detach_rx_filter (size_t filter_index)=0
 
std::optional< size_t > attach_rx_filter (const CanFilter &filter, std::function< void(const CanMessage &)> &&callback)
 
template<class Queue>
std::optional< size_t > attach_rx_queue (const CanFilter &filter, Queue &queue)
 

詳解

#include <cstdio>
#include <halx/core.hpp>
extern UART_HandleTypeDef huart2;
extern FDCAN_HandleTypeDef hfdcan1;
extern "C" void main_thread(void *) {
using namespace halx::core;
using namespace halx::peripheral;
Uart<&huart2> uart2;
enable_stdout(uart2);
// 受信フィルター、受信キューの設定
CanFilter rx_filter = {
.id = 0x0,
.mask = 0x0,
.ide = false,
};
RingBuffer<CanMessage> rx_queue(10);
can1.attach_rx_queue(rx_filter, rx_queue);
// CAN通信開始
can1.start();
// 送信するメッセージの作成
CanMessage tx_message = {
.id = 0x3,
.ide = false,
.dlc = 1,
.data = {0x0},
};
for (int i = 0; i < 10; ++i) {
// 送信
can1.transmit(tx_message, MAX_DELAY);
tx_message.data[0]++;
}
while (true) {
// 受信
CanMessage rx_message;
if (rx_queue.pop(rx_message, MAX_DELAY)) {
printf("id: %d, data: %d\r\n", (int)rx_message.id,
(int)rx_message.data[0]);
}
delay(10);
}
}
Definition ring_buffer.hpp:13
Definition can.hpp:15
Definition common.hpp:11
constexpr uint32_t MAX_DELAY
Definition common.hpp:16
void delay(uint32_t tick)
Definition common.hpp:27
Definition can.hpp:13
bool enable_stdout(UartBase &uart)
Definition common.hpp:12
Definition common.hpp:18
std::array< uint8_t, 8 > data
Definition common.hpp:22
uint32_t id
Definition common.hpp:19

構築子と解体子

◆ ~CanBase()

virtual halx::peripheral::CanBase::~CanBase ( )
inlinevirtual

関数詳解

◆ attach_rx_filter() [1/2]

std::optional< size_t > halx::peripheral::CanBase::attach_rx_filter ( const CanFilter & filter,
std::function< void(const CanMessage &)> && callback )
inline

◆ attach_rx_filter() [2/2]

virtual std::optional< size_t > halx::peripheral::CanBase::attach_rx_filter ( const CanFilter & filter,
void(* callback )(const CanMessage &msg, void *context),
void * context )
pure virtual

◆ attach_rx_queue()

template<class Queue>
std::optional< size_t > halx::peripheral::CanBase::attach_rx_queue ( const CanFilter & filter,
Queue & queue )
inline

◆ detach_rx_filter()

virtual bool halx::peripheral::CanBase::detach_rx_filter ( size_t filter_index)
pure virtual

◆ start()

virtual bool halx::peripheral::CanBase::start ( )
pure virtual

◆ stop()

virtual bool halx::peripheral::CanBase::stop ( )
pure virtual

◆ transmit()

virtual bool halx::peripheral::CanBase::transmit ( const CanMessage & msg,
uint32_t timeout )
pure virtual

このクラス詳解は次のファイルから抽出されました: