forked from Archive/PX4-Autopilot
microRTPS_transport: use preprocessor declarations to setup different build contexts for client and agent code
This commit is contained in:
parent
f0447e0009
commit
b3435dd1f5
|
@ -36,10 +36,12 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#if __has_include("px4_log.h") && __has_include("px4_time.h")
|
||||||
#include <px4_log.h>
|
#include <px4_log.h>
|
||||||
#include <px4_time.h>
|
#include <px4_time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <microRTPS_transport.h>
|
#include "microRTPS_transport.h"
|
||||||
|
|
||||||
#define DEFAULT_UART "/dev/ttyACM0"
|
#define DEFAULT_UART "/dev/ttyACM0"
|
||||||
|
|
||||||
|
@ -117,7 +119,11 @@ ssize_t Transport_node::read(uint8_t *topic_ID, char out_buffer[], size_t buffer
|
||||||
int errsv = errno;
|
int errsv = errno;
|
||||||
|
|
||||||
if (errsv && EAGAIN != errsv && ETIMEDOUT != errsv) {
|
if (errsv && EAGAIN != errsv && ETIMEDOUT != errsv) {
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("Read fail %d\n", errsv);
|
||||||
|
#else
|
||||||
PX4_ERR("Read fail %d", errsv);
|
PX4_ERR("Read fail %d", errsv);
|
||||||
|
#endif /* PX4_ERR */
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
@ -143,7 +149,12 @@ ssize_t Transport_node::read(uint8_t *topic_ID, char out_buffer[], size_t buffer
|
||||||
|
|
||||||
// Start not found
|
// Start not found
|
||||||
if (msg_start_pos > rx_buff_pos - header_size) {
|
if (msg_start_pos > rx_buff_pos - header_size) {
|
||||||
|
#ifndef PX4_INFO
|
||||||
|
printf(" (↓↓ %u)", msg_start_pos);
|
||||||
|
#else
|
||||||
PX4_INFO(" (↓↓ %u)", msg_start_pos);
|
PX4_INFO(" (↓↓ %u)", msg_start_pos);
|
||||||
|
#endif /* PX4_INFO */
|
||||||
|
|
||||||
// All we've checked so far is garbage, drop it - but save unchecked bytes
|
// All we've checked so far is garbage, drop it - but save unchecked bytes
|
||||||
memmove(rx_buffer, rx_buffer + msg_start_pos, rx_buff_pos - msg_start_pos);
|
memmove(rx_buffer, rx_buffer + msg_start_pos, rx_buff_pos - msg_start_pos);
|
||||||
rx_buff_pos = rx_buff_pos - msg_start_pos;
|
rx_buff_pos = rx_buff_pos - msg_start_pos;
|
||||||
|
@ -166,7 +177,11 @@ ssize_t Transport_node::read(uint8_t *topic_ID, char out_buffer[], size_t buffer
|
||||||
if (msg_start_pos + header_size + payload_len > rx_buff_pos) {
|
if (msg_start_pos + header_size + payload_len > rx_buff_pos) {
|
||||||
// If there's garbage at the beginning, drop it
|
// If there's garbage at the beginning, drop it
|
||||||
if (msg_start_pos > 0) {
|
if (msg_start_pos > 0) {
|
||||||
|
#ifndef PX4_INFO
|
||||||
|
printf(" (↓ %u)", msg_start_pos);
|
||||||
|
#else
|
||||||
PX4_INFO(" (↓ %u)", msg_start_pos);
|
PX4_INFO(" (↓ %u)", msg_start_pos);
|
||||||
|
#endif /* PX4_INFO */
|
||||||
memmove(rx_buffer, rx_buffer + msg_start_pos, rx_buff_pos - msg_start_pos);
|
memmove(rx_buffer, rx_buffer + msg_start_pos, rx_buff_pos - msg_start_pos);
|
||||||
rx_buff_pos -= msg_start_pos;
|
rx_buff_pos -= msg_start_pos;
|
||||||
}
|
}
|
||||||
|
@ -178,8 +193,13 @@ ssize_t Transport_node::read(uint8_t *topic_ID, char out_buffer[], size_t buffer
|
||||||
uint16_t calc_crc = crc16((uint8_t *)rx_buffer + msg_start_pos + header_size, payload_len);
|
uint16_t calc_crc = crc16((uint8_t *)rx_buffer + msg_start_pos + header_size, payload_len);
|
||||||
|
|
||||||
if (read_crc != calc_crc) {
|
if (read_crc != calc_crc) {
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("Bad CRC %u != %u", read_crc, calc_crc);
|
||||||
|
printf(" (↓ %lu)", (unsigned long)(header_size + payload_len));
|
||||||
|
#else
|
||||||
PX4_ERR("Bad CRC %u != %u", read_crc, calc_crc);
|
PX4_ERR("Bad CRC %u != %u", read_crc, calc_crc);
|
||||||
PX4_ERR(" (↓ %lu)", (unsigned long)(header_size + payload_len));
|
PX4_ERR(" (↓ %lu)", (unsigned long)(header_size + payload_len));
|
||||||
|
#endif /* PX4_ERR */
|
||||||
len = -1;
|
len = -1;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -270,7 +290,11 @@ int UART_node::init()
|
||||||
uart_fd = open(uart_name, O_RDWR | O_NOCTTY | O_NONBLOCK);
|
uart_fd = open(uart_name, O_RDWR | O_NOCTTY | O_NONBLOCK);
|
||||||
|
|
||||||
if (uart_fd < 0) {
|
if (uart_fd < 0) {
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("Failed to open device: %s (%d)", uart_name, errno);
|
||||||
|
#else
|
||||||
PX4_ERR("Failed to open device: %s (%d)", uart_name, errno);
|
PX4_ERR("Failed to open device: %s (%d)", uart_name, errno);
|
||||||
|
#endif /* PX4_ERR */
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,11 +310,14 @@ int UART_node::init()
|
||||||
// Back up the original uart configuration to restore it after exit
|
// Back up the original uart configuration to restore it after exit
|
||||||
if ((termios_state = tcgetattr(uart_fd, &uart_config)) < 0) {
|
if ((termios_state = tcgetattr(uart_fd, &uart_config)) < 0) {
|
||||||
int errno_bkp = errno;
|
int errno_bkp = errno;
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("ERR GET CONF %s: %d (%d)", uart_name, termios_state, errno);
|
||||||
|
#else
|
||||||
PX4_ERR("ERR GET CONF %s: %d (%d)", uart_name, termios_state, errno);
|
PX4_ERR("ERR GET CONF %s: %d (%d)", uart_name, termios_state, errno);
|
||||||
|
#endif /* PX4_ERR */
|
||||||
close();
|
close();
|
||||||
return -errno_bkp;
|
return -errno_bkp;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Set up the UART for non-canonical binary communication: 8 bits, 1 stop bit, no parity,
|
//Set up the UART for non-canonical binary communication: 8 bits, 1 stop bit, no parity,
|
||||||
//no flow control, no modem control
|
//no flow control, no modem control
|
||||||
uart_config.c_iflag &= !(INPCK | ISTRIP | INLCR | IGNCR | ICRNL | IXON | IXANY | IXOFF);
|
uart_config.c_iflag &= !(INPCK | ISTRIP | INLCR | IGNCR | ICRNL | IXON | IXANY | IXOFF);
|
||||||
|
@ -310,15 +337,24 @@ int UART_node::init()
|
||||||
speed_t speed;
|
speed_t speed;
|
||||||
|
|
||||||
if (!baudrate_to_speed(baudrate, &speed)) {
|
if (!baudrate_to_speed(baudrate, &speed)) {
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("ERR SET BAUD %s: Unsupported baudrate: %d\n\tsupported examples:\n\t9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000, 921600, 1000000\n",
|
||||||
|
uart_name, baudrate);
|
||||||
|
#else
|
||||||
PX4_ERR("ERR SET BAUD %s: Unsupported baudrate: %d\n\tsupported examples:\n\t9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000, 921600, 1000000\n",
|
PX4_ERR("ERR SET BAUD %s: Unsupported baudrate: %d\n\tsupported examples:\n\t9600, 19200, 38400, 57600, 115200, 230400, 460800, 500000, 921600, 1000000\n",
|
||||||
uart_name, baudrate);
|
uart_name, baudrate);
|
||||||
|
#endif /* PX4_ERR */
|
||||||
close();
|
close();
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfsetispeed(&uart_config, speed) < 0 || cfsetospeed(&uart_config, speed) < 0) {
|
if (cfsetispeed(&uart_config, speed) < 0 || cfsetospeed(&uart_config, speed) < 0) {
|
||||||
int errno_bkp = errno;
|
int errno_bkp = errno;
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("ERR SET BAUD %s: %d (%d)", uart_name, termios_state, errno);
|
||||||
|
#else
|
||||||
PX4_ERR("ERR SET BAUD %s: %d (%d)", uart_name, termios_state, errno);
|
PX4_ERR("ERR SET BAUD %s: %d (%d)", uart_name, termios_state, errno);
|
||||||
|
#endif /* PX4_ERR */
|
||||||
close();
|
close();
|
||||||
return -errno_bkp;
|
return -errno_bkp;
|
||||||
}
|
}
|
||||||
|
@ -326,7 +362,11 @@ int UART_node::init()
|
||||||
|
|
||||||
if ((termios_state = tcsetattr(uart_fd, TCSANOW, &uart_config)) < 0) {
|
if ((termios_state = tcsetattr(uart_fd, TCSANOW, &uart_config)) < 0) {
|
||||||
int errno_bkp = errno;
|
int errno_bkp = errno;
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("ERR SET CONF %s (%d)", uart_name, errno);
|
||||||
|
#else
|
||||||
PX4_ERR("ERR SET CONF %s (%d)", uart_name, errno);
|
PX4_ERR("ERR SET CONF %s (%d)", uart_name, errno);
|
||||||
|
#endif /* PX4_ERR */
|
||||||
close();
|
close();
|
||||||
return -errno_bkp;
|
return -errno_bkp;
|
||||||
}
|
}
|
||||||
|
@ -335,16 +375,30 @@ int UART_node::init()
|
||||||
bool flush = false;
|
bool flush = false;
|
||||||
|
|
||||||
while (0 < ::read(uart_fd, (void *)&aux, 64)) {
|
while (0 < ::read(uart_fd, (void *)&aux, 64)) {
|
||||||
//PX4_INFO("%s ", aux);
|
|
||||||
flush = true;
|
flush = true;
|
||||||
|
/**
|
||||||
|
* According to px4_time.h, px4_usleep() is only defined when lockstep is set
|
||||||
|
* to be used
|
||||||
|
*/
|
||||||
|
#ifndef ENABLE_LOCKSTEP_SCHEDULER
|
||||||
|
usleep(1000);
|
||||||
|
#else
|
||||||
px4_usleep(1000);
|
px4_usleep(1000);
|
||||||
|
#endif /* ENABLE_LOCKSTEP_SCHEDULER */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flush) {
|
if (flush) {
|
||||||
|
#ifndef PX4_INFO
|
||||||
|
printf("Flush");
|
||||||
|
#else
|
||||||
PX4_INFO("Flush");
|
PX4_INFO("Flush");
|
||||||
|
#endif /* PX4_INFO */
|
||||||
} else {
|
} else {
|
||||||
|
#ifndef PX4_INFO
|
||||||
|
printf("No flush");
|
||||||
|
#else
|
||||||
PX4_INFO("No flush");
|
PX4_INFO("No flush");
|
||||||
|
#endif /* PX4_INFO */
|
||||||
}
|
}
|
||||||
|
|
||||||
poll_fd[0].fd = uart_fd;
|
poll_fd[0].fd = uart_fd;
|
||||||
|
@ -361,7 +415,11 @@ bool UART_node::fds_OK()
|
||||||
uint8_t UART_node::close()
|
uint8_t UART_node::close()
|
||||||
{
|
{
|
||||||
if (-1 != uart_fd) {
|
if (-1 != uart_fd) {
|
||||||
|
#ifndef PX4_WARN
|
||||||
|
printf("Closed UART...");
|
||||||
|
#else
|
||||||
PX4_WARN("Closed UART...");
|
PX4_WARN("Closed UART...");
|
||||||
|
#endif /* PX4_WARN */
|
||||||
::close(uart_fd);
|
::close(uart_fd);
|
||||||
uart_fd = -1;
|
uart_fd = -1;
|
||||||
memset(&poll_fd, 0, sizeof(poll_fd));
|
memset(&poll_fd, 0, sizeof(poll_fd));
|
||||||
|
@ -514,20 +572,33 @@ int UDP_node::init_receiver(uint16_t udp_port)
|
||||||
receiver_inaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
receiver_inaddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||||
|
|
||||||
if ((receiver_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
if ((receiver_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("Create socket failed");
|
||||||
|
#else
|
||||||
PX4_ERR("Create socket failed");
|
PX4_ERR("Create socket failed");
|
||||||
|
#endif /* PX4_ERR */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#ifndef PX4_INFO
|
||||||
|
printf("Trying to connect...");
|
||||||
|
#else
|
||||||
PX4_INFO("Trying to connect...");
|
PX4_INFO("Trying to connect...");
|
||||||
|
#endif /* PX4_INFO */
|
||||||
|
|
||||||
if (bind(receiver_fd, (struct sockaddr *)&receiver_inaddr, sizeof(receiver_inaddr)) < 0) {
|
if (bind(receiver_fd, (struct sockaddr *)&receiver_inaddr, sizeof(receiver_inaddr)) < 0) {
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("Bind failed");
|
||||||
|
#else
|
||||||
PX4_ERR("Bind failed");
|
PX4_ERR("Bind failed");
|
||||||
|
#endif /* PX4_ERR */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
#ifndef PX4_INFO
|
||||||
|
printf("Connected to server!");
|
||||||
|
#else
|
||||||
PX4_INFO("Connected to server!");
|
PX4_INFO("Connected to server!");
|
||||||
|
#endif /* PX4_INFO */
|
||||||
#endif /* __PX4_NUTTX */
|
#endif /* __PX4_NUTTX */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -536,7 +607,11 @@ int UDP_node::init_sender(uint16_t udp_port)
|
||||||
#ifndef __PX4_NUTTX
|
#ifndef __PX4_NUTTX
|
||||||
|
|
||||||
if ((sender_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
if ((sender_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("Create socket failed");
|
||||||
|
#else
|
||||||
PX4_ERR("Create socket failed");
|
PX4_ERR("Create socket failed");
|
||||||
|
#endif /* PX4_ERR */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -545,7 +620,11 @@ int UDP_node::init_sender(uint16_t udp_port)
|
||||||
sender_outaddr.sin_port = htons(udp_port);
|
sender_outaddr.sin_port = htons(udp_port);
|
||||||
|
|
||||||
if (inet_aton("127.0.0.1", &sender_outaddr.sin_addr) == 0) {
|
if (inet_aton("127.0.0.1", &sender_outaddr.sin_addr) == 0) {
|
||||||
|
#ifndef PX4_ERR
|
||||||
|
printf("inet_aton() failed");
|
||||||
|
#else
|
||||||
PX4_ERR("inet_aton() failed");
|
PX4_ERR("inet_aton() failed");
|
||||||
|
#endif /* PX4_ERR */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -559,14 +638,22 @@ uint8_t UDP_node::close()
|
||||||
#ifndef __PX4_NUTTX
|
#ifndef __PX4_NUTTX
|
||||||
|
|
||||||
if (sender_fd != -1) {
|
if (sender_fd != -1) {
|
||||||
|
#ifndef PX4_WARN
|
||||||
|
printf("Closed sender socket!");
|
||||||
|
#else
|
||||||
PX4_WARN("Closed sender socket!");
|
PX4_WARN("Closed sender socket!");
|
||||||
|
#endif /* PX4_WARN */
|
||||||
shutdown(sender_fd, SHUT_RDWR);
|
shutdown(sender_fd, SHUT_RDWR);
|
||||||
::close(sender_fd);
|
::close(sender_fd);
|
||||||
sender_fd = -1;
|
sender_fd = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (receiver_fd != -1) {
|
if (receiver_fd != -1) {
|
||||||
|
#ifndef PX4_WARN
|
||||||
|
printf("Closed receiver socket!");
|
||||||
|
#else
|
||||||
PX4_WARN("Closed receiver socket!");
|
PX4_WARN("Closed receiver socket!");
|
||||||
|
#endif /* PX4_WARN */
|
||||||
shutdown(receiver_fd, SHUT_RDWR);
|
shutdown(receiver_fd, SHUT_RDWR);
|
||||||
::close(receiver_fd);
|
::close(receiver_fd);
|
||||||
receiver_fd = -1;
|
receiver_fd = -1;
|
||||||
|
|
Loading…
Reference in New Issue