Skip to content

Commit 50ce825

Browse files
Felipe Nevespablogs9
authored andcommitted
boards: move board specific configurations (#63)
* 4.0.0 * boards: move board specifc details to its own folder Signed-off-by: Felipe <felipe.neves@linaro.org> * transports: use zephyr DT macros to set the serial port for serial transport. Signed-off-by: Felipe <felipe.neves@linaro.org> * boards: disco_l475_iot1: add zephyr UDC0 nodelabel replacing the CONFIG_USB symbol dropped in version 2.6 Signed-off-by: Felipe Neves <felipe.neves@linaro.org> * Update CHANGELOG.rst Signed-off-by: Felipe <felipe.neves@linaro.org> Signed-off-by: Felipe Neves <felipe.neves@linaro.org> Co-authored-by: Pablo Garrido <pablogs9@gmail.com> (cherry picked from commit 7e07006)
1 parent a2de2cd commit 50ce825

File tree

8 files changed

+59
-57
lines changed

8 files changed

+59
-57
lines changed

boards/disco_l475_iot1.conf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
CONFIG_USB_DEVICE_STACK=y
2+
CONFIG_USB_DEVICE_PRODUCT="Zephyr micro-ROS"
3+
CONFIG_LOG=y
4+
CONFIG_USB_CDC_ACM=y
5+
CONFIG_USB_DRIVER_LOG_LEVEL_ERR=y
6+
CONFIG_USB_DEVICE_LOG_LEVEL_ERR=y
7+
CONFIG_USB_CDC_ACM_RINGBUF_SIZE=2048

boards/disco_l475_iot1.overlay

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/ {
2+
aliases {
3+
uros-serial-port = &usart1;
4+
};
5+
};
6+
7+
&usart1 {
8+
status = "okay";
9+
};
10+
11+
zephyr_udc0: &usbotg_fs {
12+
status = "okay";
13+
};
14+
15+
&zephyr_udc0 {
16+
cdc_acm_uart0: cdc_acm_uart0 {
17+
compatible = "zephyr,cdc-acm-uart";
18+
label = "CDC_ACM_0";
19+
};
20+
};

modules/libmicroros/microros_transports/serial-usb/microros_transports.c

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ char uart_out_buffer[RING_BUF_SIZE];
2222

2323
struct ring_buf out_ringbuf, in_ringbuf;
2424

25-
static void uart_fifo_callback(const struct device *dev, void * user_data){
25+
static void uart_fifo_callback(const struct device *dev, void *user_data){
2626
while (uart_irq_update(dev) && uart_irq_is_pending(dev)) {
2727
if (uart_irq_rx_ready(dev)) {
2828
int recv_len;
@@ -53,14 +53,15 @@ static void uart_fifo_callback(const struct device *dev, void * user_data){
5353
}
5454

5555
bool zephyr_transport_open(struct uxrCustomTransport * transport){
56-
zephyr_transport_params_t * params = (zephyr_transport_params_t*) transport->args;
57-
5856
int ret;
5957
uint32_t baudrate, dtr = 0U;
58+
const struct device *uart_dev;
6059

61-
62-
params->uart_dev = device_get_binding("CDC_ACM_0");
63-
if (!params->uart_dev) {
60+
/* for serial-usb transport we just override the device pointer
61+
* with USB to use the same interface
62+
*/
63+
transport->args = (void *)device_get_binding("CDC_ACM_0");
64+
if (!transport->args) {
6465
printk("CDC ACM device not found\n");
6566
return false;
6667
}
@@ -71,13 +72,15 @@ bool zephyr_transport_open(struct uxrCustomTransport * transport){
7172
return false;
7273
}
7374

75+
uart_dev = (const struct device *)transport->args;
7476
ring_buf_init(&out_ringbuf, sizeof(uart_out_buffer), uart_out_buffer);
7577
ring_buf_init(&in_ringbuf, sizeof(uart_in_buffer), uart_out_buffer);
7678

7779
printk("Waiting for agent connection\n");
7880

7981
while (true) {
80-
uart_line_ctrl_get(params->uart_dev, UART_LINE_CTRL_DTR, &dtr);
82+
83+
uart_line_ctrl_get(uart_dev, UART_LINE_CTRL_DTR, &dtr);
8184
if (dtr) {
8285
break;
8386
} else {
@@ -89,47 +92,46 @@ bool zephyr_transport_open(struct uxrCustomTransport * transport){
8992
printk("Serial port connected!\n");
9093

9194
/* They are optional, we use them to test the interrupt endpoint */
92-
ret = uart_line_ctrl_set(params->uart_dev, UART_LINE_CTRL_DCD, 1);
95+
ret = uart_line_ctrl_set(uart_dev, UART_LINE_CTRL_DCD, 1);
9396
if (ret) {
9497
printk("Failed to set DCD, ret code %d\n", ret);
9598
}
9699

97-
ret = uart_line_ctrl_set(params->uart_dev, UART_LINE_CTRL_DSR, 1);
100+
ret = uart_line_ctrl_set(uart_dev, UART_LINE_CTRL_DSR, 1);
98101
if (ret) {
99102
printk("Failed to set DSR, ret code %d\n", ret);
100103
}
101104

102105
/* Wait 1 sec for the host to do all settings */
103106
k_busy_wait(1000*1000);
104107

105-
ret = uart_line_ctrl_get(params->uart_dev, UART_LINE_CTRL_BAUD_RATE, &baudrate);
108+
ret = uart_line_ctrl_get(uart_dev, UART_LINE_CTRL_BAUD_RATE, &baudrate);
106109
if (ret) {
107110
printk("Failed to get baudrate, ret code %d\n", ret);
108111
}
109112

110-
uart_irq_callback_set(params->uart_dev, uart_fifo_callback);
113+
uart_irq_callback_set(uart_dev, uart_fifo_callback);
111114

112115
/* Enable rx interrupts */
113-
uart_irq_rx_enable(params->uart_dev);
116+
uart_irq_rx_enable(uart_dev);
114117

115118
return true;
116119
}
117120

118121
bool zephyr_transport_close(struct uxrCustomTransport * transport){
119-
zephyr_transport_params_t * params = (zephyr_transport_params_t*) transport->args;
120-
(void) params;
122+
(void)transport;
121123

122124
return true;
123125
}
124126

125127
size_t zephyr_transport_write(struct uxrCustomTransport* transport, const uint8_t * buf, size_t len, uint8_t * err){
126-
zephyr_transport_params_t * params = (zephyr_transport_params_t*) transport->args;
128+
const struct device * uart_dev = (const struct device *) transport->args;
127129

128130
size_t wrote;
129131

130132
wrote = ring_buf_put(&out_ringbuf, buf, len);
131-
132-
uart_irq_tx_enable(params->uart_dev);
133+
134+
uart_irq_tx_enable(uart_dev);
133135

134136
while (!ring_buf_is_empty(&out_ringbuf)){
135137
k_sleep(K_MSEC(5));
@@ -139,7 +141,7 @@ size_t zephyr_transport_write(struct uxrCustomTransport* transport, const uint8_
139141
}
140142

141143
size_t zephyr_transport_read(struct uxrCustomTransport* transport, uint8_t* buf, size_t len, int timeout, uint8_t* err){
142-
zephyr_transport_params_t * params = (zephyr_transport_params_t*) transport->args;
144+
const struct device * uart_dev = (const struct device *) transport->args;
143145

144146
size_t read = 0;
145147
int spent_time = 0;
@@ -149,9 +151,9 @@ size_t zephyr_transport_read(struct uxrCustomTransport* transport, uint8_t* buf,
149151
spent_time++;
150152
}
151153

152-
uart_irq_rx_disable(params->uart_dev);
154+
uart_irq_rx_disable(uart_dev);
153155
read = ring_buf_get(&in_ringbuf, buf, len);
154-
uart_irq_rx_enable(params->uart_dev);
156+
uart_irq_rx_enable(uart_dev);
155157

156158
return read;
157159
}

modules/libmicroros/microros_transports/serial-usb/microros_transports.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,7 @@ extern "C"
2424
{
2525
#endif
2626

27-
typedef struct {
28-
size_t fd;
29-
const struct device *uart_dev;
30-
} zephyr_transport_params_t;
31-
3227
#define MICRO_ROS_FRAMING_REQUIRED true
33-
static zephyr_transport_params_t default_params;
3428

3529
bool zephyr_transport_open(struct uxrCustomTransport * transport);
3630
bool zephyr_transport_close(struct uxrCustomTransport * transport);

modules/libmicroros/microros_transports/serial/microros_transports.c

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,15 @@ static void uart_fifo_callback(const struct device * dev, void * args){
4040
}
4141
}
4242

43-
4443
bool zephyr_transport_open(struct uxrCustomTransport * transport){
45-
zephyr_transport_params_t * params = (zephyr_transport_params_t*) transport->args;
46-
47-
char uart_descriptor[8];
48-
sprintf(uart_descriptor,"UART_%d", params->fd);
49-
params->uart_dev = device_get_binding(uart_descriptor);
50-
if (!params->uart_dev) {
51-
printk("Serial device not found\n");
52-
return false;
53-
}
44+
const struct device * uart_dev = (const struct device *) transport->args;
5445

5546
ring_buf_init(&in_ringbuf, sizeof(uart_in_buffer), uart_out_buffer);
5647

57-
uart_irq_callback_set(params->uart_dev, uart_fifo_callback);
48+
uart_irq_callback_set(uart_dev, uart_fifo_callback);
5849

5950
/* Enable rx interrupts */
60-
uart_irq_rx_enable(params->uart_dev);
51+
uart_irq_rx_enable(uart_dev);
6152

6253
return true;
6354
}
@@ -69,18 +60,18 @@ bool zephyr_transport_close(struct uxrCustomTransport * transport){
6960
}
7061

7162
size_t zephyr_transport_write(struct uxrCustomTransport* transport, const uint8_t * buf, size_t len, uint8_t * err){
72-
zephyr_transport_params_t * params = (zephyr_transport_params_t*) transport->args;
63+
const struct device * uart_dev = (const struct device *) transport->args;
7364

7465
for (size_t i = 0; i < len; i++)
7566
{
76-
uart_poll_out(params->uart_dev, buf[i]);
67+
uart_poll_out(uart_dev, buf[i]);
7768
}
7869

7970
return len;
8071
}
8172

8273
size_t zephyr_transport_read(struct uxrCustomTransport* transport, uint8_t* buf, size_t len, int timeout, uint8_t* err){
83-
zephyr_transport_params_t * params = (zephyr_transport_params_t*) transport->args;
74+
const struct device * uart_dev = (const struct device *) transport->args;
8475

8576
size_t read = 0;
8677
int spent_time = 0;
@@ -90,9 +81,9 @@ size_t zephyr_transport_read(struct uxrCustomTransport* transport, uint8_t* buf,
9081
spent_time++;
9182
}
9283

93-
uart_irq_rx_disable(params->uart_dev);
84+
uart_irq_rx_disable(uart_dev);
9485
read = ring_buf_get(&in_ringbuf, buf, len);
95-
uart_irq_rx_enable(params->uart_dev);
86+
uart_irq_rx_enable(uart_dev);
9687

9788
return read;
9889
}

modules/libmicroros/microros_transports/serial/microros_transports.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,7 @@ extern "C"
2424
{
2525
#endif
2626

27-
typedef struct {
28-
size_t fd;
29-
const struct device * uart_dev;
30-
} zephyr_transport_params_t;
31-
3227
#define MICRO_ROS_FRAMING_REQUIRED true
33-
volatile static zephyr_transport_params_t default_params = {.fd = 1};
3428

3529
bool zephyr_transport_open(struct uxrCustomTransport * transport);
3630
bool zephyr_transport_close(struct uxrCustomTransport * transport);

prj.conf

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,7 @@ CONFIG_APP_LINK_WITH_POSIX_SUBSYS=y
1313
CONFIG_POSIX_CLOCK=y
1414

1515
CONFIG_STDOUT_CONSOLE=y
16-
CONFIG_USB_DEVICE_STACK=y
17-
CONFIG_USB_DEVICE_PRODUCT="Zephyr micro-ROS"
18-
CONFIG_LOG=y
19-
CONFIG_USB_CDC_ACM=y
2016
CONFIG_SERIAL=y
2117
CONFIG_UART_INTERRUPT_DRIVEN=y
2218
CONFIG_UART_LINE_CTRL=y
23-
CONFIG_USB_DRIVER_LOG_LEVEL_ERR=y
24-
CONFIG_USB_DEVICE_LOG_LEVEL_ERR=y
25-
CONFIG_USB_CDC_ACM_RINGBUF_SIZE=2048
19+
CONFIG_RING_BUFFER=y

src/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ void main(void)
3333
{
3434
rmw_uros_set_custom_transport(
3535
MICRO_ROS_FRAMING_REQUIRED,
36-
(void *) &default_params,
36+
(void *) DEVICE_DT_GET(DT_ALIAS(uros_serial_port)),
3737
zephyr_transport_open,
3838
zephyr_transport_close,
3939
zephyr_transport_write,

0 commit comments

Comments
 (0)