tutrcos
読み取り中…
検索中…
一致する文字列を見つけられません
include
tutrcos
module
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
10
#include "
tutrcos/peripheral/uart.hpp
"
11
12
extern
"C"
{
13
14
void
*
microros_allocate
(
size_t
size,
void
*state);
15
void
microros_deallocate
(
void
*pointer,
void
*state);
16
void
*
microros_reallocate
(
void
*pointer,
size_t
size,
void
*state);
17
void
*
microros_zero_allocate
(
size_t
number_of_elements,
size_t
size_of_element,
18
void
*state);
19
}
20
21
namespace
tutrcos
{
22
namespace
module {
23
24
class
MicroROS
{
25
public
:
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
41
private
:
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
tutrcos::core::Kernel::MAX_DELAY
static constexpr uint32_t MAX_DELAY
Definition
kernel.hpp:12
tutrcos::module::MicroROS
Definition
microros.hpp:24
tutrcos::module::MicroROS::init
static bool init(peripheral::UART &uart)
Definition
microros.hpp:26
tutrcos::peripheral::UART
Definition
uart.hpp:51
microros_reallocate
void * microros_reallocate(void *pointer, size_t size, void *state)
microros_zero_allocate
void * microros_zero_allocate(size_t number_of_elements, size_t size_of_element, void *state)
microros_deallocate
void microros_deallocate(void *pointer, void *state)
microros_allocate
void * microros_allocate(size_t size, void *state)
tutrcos
Definition
kernel.hpp:7
uart.hpp
構築:
1.12.0