mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-31 10:26:52 +08:00
microRTPS bridge: fix UART baudrate set
This commit is contained in:
@@ -76,8 +76,7 @@ recv_topics = [(alias[idx] if alias[idx] else s.short_name) for idx, s in enumer
|
|||||||
// Default values
|
// Default values
|
||||||
#define DEVICE "/dev/ttyACM0"
|
#define DEVICE "/dev/ttyACM0"
|
||||||
#define SLEEP_US 1
|
#define SLEEP_US 1
|
||||||
#define BAUDRATE B460800
|
#define BAUDRATE 460800
|
||||||
#define BAUDRATE_VAL 460800
|
|
||||||
#define POLL_MS 0
|
#define POLL_MS 0
|
||||||
#define WAIT_CNST 2
|
#define WAIT_CNST 2
|
||||||
#define DEFAULT_RECV_PORT 2020
|
#define DEFAULT_RECV_PORT 2020
|
||||||
@@ -92,23 +91,6 @@ Transport_node *transport_node = nullptr;
|
|||||||
RtpsTopics topics;
|
RtpsTopics topics;
|
||||||
uint32_t total_sent = 0, sent = 0;
|
uint32_t total_sent = 0, sent = 0;
|
||||||
|
|
||||||
struct baudtype {
|
|
||||||
speed_t code;
|
|
||||||
uint32_t val;
|
|
||||||
};
|
|
||||||
|
|
||||||
const baudtype baudlist[] = {
|
|
||||||
[0] = {.code = B0, .val = 0},
|
|
||||||
[1] = {.code = B9600, .val = 9600},
|
|
||||||
[2] = {.code = B19200, .val = 19200},
|
|
||||||
[3] = {.code = B38400, .val = 38400},
|
|
||||||
[4] = {.code = B57600, .val = 57600},
|
|
||||||
[5] = {.code = B115200, .val = 115200},
|
|
||||||
[6] = {.code = B230400, .val = 230400},
|
|
||||||
[7] = {.code = B460800, .val = 460800},
|
|
||||||
[8] = {.code = B921600, .val = 921600},
|
|
||||||
};
|
|
||||||
|
|
||||||
struct options {
|
struct options {
|
||||||
enum class eTransports
|
enum class eTransports
|
||||||
{
|
{
|
||||||
@@ -118,7 +100,7 @@ struct options {
|
|||||||
eTransports transport = options::eTransports::UART;
|
eTransports transport = options::eTransports::UART;
|
||||||
char device[64] = DEVICE;
|
char device[64] = DEVICE;
|
||||||
int sleep_us = SLEEP_US;
|
int sleep_us = SLEEP_US;
|
||||||
baudtype baudrate = {.code=BAUDRATE,.val=BAUDRATE_VAL};
|
uint32_t baudrate = BAUDRATE;
|
||||||
int poll_ms = POLL_MS;
|
int poll_ms = POLL_MS;
|
||||||
uint16_t recv_port = DEFAULT_RECV_PORT;
|
uint16_t recv_port = DEFAULT_RECV_PORT;
|
||||||
uint16_t send_port = DEFAULT_SEND_PORT;
|
uint16_t send_port = DEFAULT_SEND_PORT;
|
||||||
@@ -139,15 +121,6 @@ static void usage(const char *name)
|
|||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
|
|
||||||
baudtype getbaudrate(char *valstr)
|
|
||||||
{
|
|
||||||
uint32_t baudval = strtoul(valstr, nullptr, 10);
|
|
||||||
for (unsigned int i=1; i<sizeof(baudlist)/sizeof(baudtype); i++) {
|
|
||||||
if (baudlist[i].val==baudval) return baudlist[i];
|
|
||||||
}
|
|
||||||
return baudlist[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_options(int argc, char **argv)
|
static int parse_options(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
@@ -161,7 +134,7 @@ static int parse_options(int argc, char **argv)
|
|||||||
:options::eTransports::UART; break;
|
:options::eTransports::UART; break;
|
||||||
case 'd': if (nullptr != optarg) strcpy(_options.device, optarg); break;
|
case 'd': if (nullptr != optarg) strcpy(_options.device, optarg); break;
|
||||||
case 'w': _options.sleep_us = strtol(optarg, nullptr, 10); break;
|
case 'w': _options.sleep_us = strtol(optarg, nullptr, 10); break;
|
||||||
case 'b': _options.baudrate = getbaudrate(optarg); break;
|
case 'b': _options.baudrate = strtoul(optarg, nullptr, 10); break;
|
||||||
case 'p': _options.poll_ms = strtol(optarg, nullptr, 10); break;
|
case 'p': _options.poll_ms = strtol(optarg, nullptr, 10); break;
|
||||||
case 'r': _options.recv_port = strtoul(optarg, nullptr, 10); break;
|
case 'r': _options.recv_port = strtoul(optarg, nullptr, 10); break;
|
||||||
case 's': _options.send_port = strtoul(optarg, nullptr, 10); break;
|
case 's': _options.send_port = strtoul(optarg, nullptr, 10); break;
|
||||||
@@ -242,9 +215,9 @@ int main(int argc, char** argv)
|
|||||||
{
|
{
|
||||||
case options::eTransports::UART:
|
case options::eTransports::UART:
|
||||||
{
|
{
|
||||||
transport_node = new UART_node(_options.device, _options.baudrate.code, _options.poll_ms);
|
transport_node = new UART_node(_options.device, _options.baudrate, _options.poll_ms);
|
||||||
printf("\nUART transport: device: %s; baudrate: %d; sleep: %dus; poll: %dms\n\n",
|
printf("\nUART transport: device: %s; baudrate: %d; sleep: %dus; poll: %dms\n\n",
|
||||||
_options.device, _options.baudrate.val, _options.sleep_us, _options.poll_ms);
|
_options.device, _options.baudrate, _options.sleep_us, _options.poll_ms);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case options::eTransports::UDP:
|
case options::eTransports::UDP:
|
||||||
|
|||||||
@@ -52,14 +52,7 @@
|
|||||||
#define UPDATE_TIME_MS 0
|
#define UPDATE_TIME_MS 0
|
||||||
#define LOOPS -1
|
#define LOOPS -1
|
||||||
#define SLEEP_MS 1
|
#define SLEEP_MS 1
|
||||||
#define BAUDRATE B460800
|
#define BAUDRATE 460800
|
||||||
#define BAUDRATE_VAL 460800
|
|
||||||
#ifndef B460800
|
|
||||||
#define B460800 460800
|
|
||||||
#endif
|
|
||||||
#ifndef B921600
|
|
||||||
#define B921600 921600
|
|
||||||
#endif
|
|
||||||
#define DEVICE "/dev/ttyACM0"
|
#define DEVICE "/dev/ttyACM0"
|
||||||
#define POLL_MS 1
|
#define POLL_MS 1
|
||||||
#define IP "127.0.0.1"
|
#define IP "127.0.0.1"
|
||||||
@@ -84,7 +77,7 @@ struct options {
|
|||||||
int update_time_ms = UPDATE_TIME_MS;
|
int update_time_ms = UPDATE_TIME_MS;
|
||||||
int loops = LOOPS;
|
int loops = LOOPS;
|
||||||
int sleep_ms = SLEEP_MS;
|
int sleep_ms = SLEEP_MS;
|
||||||
struct baudtype baudrate = {.code = BAUDRATE, .val = BAUDRATE_VAL};
|
uint32_t baudrate = BAUDRATE;
|
||||||
int poll_ms = POLL_MS;
|
int poll_ms = POLL_MS;
|
||||||
char ip[16] = IP;
|
char ip[16] = IP;
|
||||||
uint16_t recv_port = DEFAULT_RECV_PORT;
|
uint16_t recv_port = DEFAULT_RECV_PORT;
|
||||||
|
|||||||
@@ -54,20 +54,6 @@ bool _should_exit_task = false;
|
|||||||
Transport_node *transport_node = nullptr;
|
Transport_node *transport_node = nullptr;
|
||||||
struct options _options;
|
struct options _options;
|
||||||
|
|
||||||
const baudtype baudlist[] = {
|
|
||||||
[0] = {.code = B0, .val = 0},
|
|
||||||
[1] = {.code = B9600, .val = 9600},
|
|
||||||
[2] = {.code = B19200, .val = 19200},
|
|
||||||
[3] = {.code = B38400, .val = 38400},
|
|
||||||
[4] = {.code = B57600, .val = 57600},
|
|
||||||
[5] = {.code = B115200, .val = 115200},
|
|
||||||
[6] = {.code = B230400, .val = 230400},
|
|
||||||
[7] = {.code = B460800, .val = 460800},
|
|
||||||
[8] = {.code = B921600, .val = 921600}
|
|
||||||
};
|
|
||||||
|
|
||||||
baudtype getbaudrate(const char *valstr);
|
|
||||||
|
|
||||||
static void usage(const char *name)
|
static void usage(const char *name)
|
||||||
{
|
{
|
||||||
PRINT_MODULE_USAGE_NAME("micrortps_client", "communication");
|
PRINT_MODULE_USAGE_NAME("micrortps_client", "communication");
|
||||||
@@ -90,19 +76,6 @@ static void usage(const char *name)
|
|||||||
PRINT_MODULE_USAGE_COMMAND("status");
|
PRINT_MODULE_USAGE_COMMAND("status");
|
||||||
}
|
}
|
||||||
|
|
||||||
baudtype getbaudrate(const char *valstr)
|
|
||||||
{
|
|
||||||
int baudval;
|
|
||||||
|
|
||||||
if (px4_get_parameter_value(valstr, baudval) == 0) {
|
|
||||||
for (unsigned int i = 1; i < sizeof(baudlist) / sizeof(baudtype); i++) {
|
|
||||||
if (baudlist[i].val == (unsigned)baudval) { return baudlist[i]; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return baudlist[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
static int parse_options(int argc, char *argv[])
|
static int parse_options(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
@@ -123,7 +96,7 @@ static int parse_options(int argc, char *argv[])
|
|||||||
|
|
||||||
case 'w': _options.sleep_ms = strtol(myoptarg, nullptr, 10); break;
|
case 'w': _options.sleep_ms = strtol(myoptarg, nullptr, 10); break;
|
||||||
|
|
||||||
case 'b': _options.baudrate = getbaudrate(myoptarg); break;
|
case 'b': _options.baudrate = strtoul(myoptarg, nullptr, 10); break;
|
||||||
|
|
||||||
case 'p': _options.poll_ms = strtol(myoptarg, nullptr, 10); break;
|
case 'p': _options.poll_ms = strtol(myoptarg, nullptr, 10); break;
|
||||||
|
|
||||||
@@ -162,9 +135,9 @@ static int micrortps_start(int argc, char *argv[])
|
|||||||
|
|
||||||
switch (_options.transport) {
|
switch (_options.transport) {
|
||||||
case options::eTransports::UART: {
|
case options::eTransports::UART: {
|
||||||
transport_node = new UART_node(_options.device, _options.baudrate.code, _options.poll_ms);
|
transport_node = new UART_node(_options.device, _options.baudrate, _options.poll_ms);
|
||||||
PX4_INFO("UART transport: device: %s; baudrate: %d; sleep: %dms; poll: %dms",
|
PX4_INFO("UART transport: device: %s; baudrate: %d; sleep: %dms; poll: %dms",
|
||||||
_options.device, _options.baudrate.val, _options.sleep_ms, _options.poll_ms);
|
_options.device, _options.baudrate, _options.sleep_ms, _options.poll_ms);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user