tutrcos
読み取り中…
検索中…
一致する文字列を見つけられません
microros.hpp
[詳解]
1#pragma once
2
3#include <cstddef>
4
5#include <rcl/rcl.h>
6#include <rmw_microros/rmw_microros.h>
7#include <rmw_microxrcedds_c/config.h>
8#include <uxr/client/transport.h>
9
11
12extern "C" {
13
14void *microros_allocate(size_t size, void *state);
15void microros_deallocate(void *pointer, void *state);
16void *microros_reallocate(void *pointer, size_t size, void *state);
17void *microros_zero_allocate(size_t number_of_elements, size_t size_of_element,
18 void *state);
19}
20
21namespace tutrcos {
22namespace module {
23
24class MicroROS {
25public:
26 static inline bool init(peripheral::UART &uart) {
27 if (rmw_uros_set_custom_transport(true, &uart, open_cb, close_cb, write_cb,
28 read_cb) != RMW_RET_OK) {
29 return false;
30 }
31
32 rcl_allocator_t allocator = rcutils_get_zero_initialized_allocator();
33 allocator.allocate = microros_allocate;
34 allocator.deallocate = microros_deallocate;
35 allocator.reallocate = microros_reallocate;
36 allocator.zero_allocate = microros_zero_allocate;
37
38 return rcutils_set_default_allocator(&allocator);
39 };
40
41private:
42 static inline bool open_cb(uxrCustomTransport *) {
43 // 何もしない
44 return true;
45 }
46
47 static inline bool close_cb(uxrCustomTransport *) {
48 // 何もしない
49 return true;
50 }
51
52 static inline size_t write_cb(uxrCustomTransport *transport,
53 const uint8_t *buffer, size_t length,
54 uint8_t *) {
55 auto uart = reinterpret_cast<tutrcos::peripheral::UART *>(transport->args);
56 if (!uart->transmit(buffer, length, tutrcos::core::Kernel::MAX_DELAY)) {
57 return 0;
58 }
59 return length;
60 }
61
62 static inline size_t read_cb(uxrCustomTransport *transport, uint8_t *buffer,
63 size_t length, int timeout, uint8_t *) {
64 auto uart = reinterpret_cast<tutrcos::peripheral::UART *>(transport->args);
65 if (!uart->receive(buffer, length, timeout)) {
66 return 0;
67 }
68 return length;
69 }
70};
71
72} // namespace module
73} // namespace tutrcos
static constexpr uint32_t MAX_DELAY
Definition kernel.hpp:12
Definition microros.hpp:24
static bool init(peripheral::UART &uart)
Definition microros.hpp:26
Definition uart.hpp:51
void * microros_reallocate(void *pointer, size_t size, void *state)
void * microros_zero_allocate(size_t number_of_elements, size_t size_of_element, void *state)
void microros_deallocate(void *pointer, void *state)
void * microros_allocate(size_t size, void *state)
Definition kernel.hpp:7