mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-21 09:33:34 +08:00
Added support in Mavlink Ethernet channel parameters
Mavlink Ethernet channel settings such as udp port, remote port and broadcast mode now can be changed dynamically via parameters.
This commit is contained in:
@@ -1809,11 +1809,10 @@ Mavlink::task_main(int argc, char *argv[])
|
||||
int myoptind = 1;
|
||||
const char *myoptarg = nullptr;
|
||||
#if defined(CONFIG_NET) || defined(__PX4_POSIX)
|
||||
char *eptr;
|
||||
int temp_int_arg;
|
||||
#endif
|
||||
|
||||
while ((ch = px4_getopt(argc, argv, "b:r:d:n:u:o:m:t:c:fswxzZ", &myoptind, &myoptarg)) != EOF) {
|
||||
while ((ch = px4_getopt(argc, argv, "b:r:d:n:u:o:m:t:c:fswxzZp", &myoptind, &myoptarg)) != EOF) {
|
||||
switch (ch) {
|
||||
case 'b':
|
||||
if (px4_get_parameter_value(myoptarg, _baudrate) != 0) {
|
||||
@@ -1859,29 +1858,25 @@ Mavlink::task_main(int argc, char *argv[])
|
||||
#if defined(MAVLINK_UDP)
|
||||
|
||||
case 'u':
|
||||
temp_int_arg = strtoul(myoptarg, &eptr, 10);
|
||||
|
||||
if (*eptr == '\0') {
|
||||
_network_port = temp_int_arg;
|
||||
set_protocol(Protocol::UDP);
|
||||
if (px4_get_parameter_value(myoptarg, temp_int_arg) != 0) {
|
||||
PX4_ERR("invalid data udp_port");
|
||||
err_flag = true;
|
||||
|
||||
} else {
|
||||
PX4_ERR("invalid data udp_port '%s'", myoptarg);
|
||||
err_flag = true;
|
||||
_network_port = temp_int_arg;
|
||||
set_protocol(Protocol::UDP);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
temp_int_arg = strtoul(myoptarg, &eptr, 10);
|
||||
|
||||
if (*eptr == '\0') {
|
||||
_remote_port = temp_int_arg;
|
||||
set_protocol(Protocol::UDP);
|
||||
if (px4_get_parameter_value(myoptarg, temp_int_arg) != 0) {
|
||||
PX4_ERR("invalid remote udp_port");
|
||||
err_flag = true;
|
||||
|
||||
} else {
|
||||
PX4_ERR("invalid remote udp_port '%s'", myoptarg);
|
||||
err_flag = true;
|
||||
_remote_port = temp_int_arg;
|
||||
set_protocol(Protocol::UDP);
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -1899,6 +1894,10 @@ Mavlink::task_main(int argc, char *argv[])
|
||||
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
_mav_broadcast = BROADCAST_MODE_ON;
|
||||
break;
|
||||
|
||||
#if defined(CONFIG_NET_IGMP) && defined(CONFIG_NET_ROUTE)
|
||||
|
||||
// multicast
|
||||
@@ -1907,6 +1906,7 @@ Mavlink::task_main(int argc, char *argv[])
|
||||
|
||||
if (inet_aton(myoptarg, &_src_addr.sin_addr)) {
|
||||
_src_addr_initialized = true;
|
||||
_mav_broadcast = BROADCAST_MODE_MULTICAST;
|
||||
|
||||
} else {
|
||||
PX4_ERR("invalid partner ip '%s'", myoptarg);
|
||||
@@ -1923,6 +1923,7 @@ Mavlink::task_main(int argc, char *argv[])
|
||||
#endif
|
||||
#else
|
||||
|
||||
case 'p':
|
||||
case 'u':
|
||||
case 'o':
|
||||
case 't':
|
||||
@@ -2206,7 +2207,7 @@ Mavlink::task_main(int argc, char *argv[])
|
||||
|
||||
#if defined(CONFIG_NET)
|
||||
|
||||
if (_param_mav_broadcast.get() != BROADCAST_MODE_MULTICAST) {
|
||||
if (!multicast_enabled()) {
|
||||
_src_addr_initialized = false;
|
||||
}
|
||||
|
||||
@@ -2767,6 +2768,12 @@ Mavlink::display_status()
|
||||
|
||||
case Protocol::UDP:
|
||||
printf("UDP (%i, remote port: %i)\n", _network_port, _remote_port);
|
||||
printf("\tBroadcast enabled: %s\n",
|
||||
broadcast_enabled() ? "YES" : "NO");
|
||||
#if defined(CONFIG_NET_IGMP) && defined(CONFIG_NET_ROUTE)
|
||||
printf("\tMulticast enabled: %s\n",
|
||||
multicast_enabled() ? "YES" : "NO");
|
||||
#endif
|
||||
#ifdef __PX4_POSIX
|
||||
|
||||
if (get_client_source_initialized()) {
|
||||
@@ -2833,7 +2840,6 @@ Mavlink::stream_command(int argc, char *argv[])
|
||||
float rate = -1.0f;
|
||||
const char *stream_name = nullptr;
|
||||
#ifdef MAVLINK_UDP
|
||||
char *eptr;
|
||||
int temp_int_arg;
|
||||
unsigned short network_port = 0;
|
||||
#endif // MAVLINK_UDP
|
||||
@@ -2879,13 +2885,12 @@ Mavlink::stream_command(int argc, char *argv[])
|
||||
|
||||
} else if (0 == strcmp(argv[i], "-u") && i < argc - 1) {
|
||||
provided_network_port = true;
|
||||
temp_int_arg = strtoul(argv[i + 1], &eptr, 10);
|
||||
|
||||
if (*eptr == '\0') {
|
||||
network_port = temp_int_arg;
|
||||
if (px4_get_parameter_value(argv[i + 1], temp_int_arg) != 0) {
|
||||
err_flag = true;
|
||||
|
||||
} else {
|
||||
err_flag = true;
|
||||
network_port = temp_int_arg;
|
||||
}
|
||||
|
||||
i++;
|
||||
@@ -2963,7 +2968,7 @@ Mavlink::set_boot_complete()
|
||||
if (inst && (inst->get_mode() != MAVLINK_MODE_ONBOARD) &&
|
||||
!inst->broadcast_enabled() && inst->get_protocol() == Protocol::UDP) {
|
||||
|
||||
PX4_INFO("MAVLink only on localhost (set param MAV_BROADCAST = 1 to enable network)");
|
||||
PX4_INFO("MAVLink only on localhost (set param MAV_{i}_BROADCAST = 1 to enable network)");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3010,16 +3015,17 @@ $ mavlink stream -u 14556 -s HIGHRES_IMU -r 50
|
||||
PRINT_MODULE_USAGE_PARAM_INT('b', 57600, 9600, 3000000, "Baudrate (can also be p:<param_name>)", true);
|
||||
PRINT_MODULE_USAGE_PARAM_INT('r', 0, 10, 10000000, "Maximum sending data rate in B/s (if 0, use baudrate / 20)", true);
|
||||
#if defined(CONFIG_NET) || defined(__PX4_POSIX)
|
||||
PRINT_MODULE_USAGE_PARAM_FLAG('p', "Enable Broadcast", true);
|
||||
PRINT_MODULE_USAGE_PARAM_INT('u', 14556, 0, 65536, "Select UDP Network Port (local)", true);
|
||||
PRINT_MODULE_USAGE_PARAM_INT('o', 14550, 0, 65536, "Select UDP Network Port (remote)", true);
|
||||
PRINT_MODULE_USAGE_PARAM_STRING('t', "127.0.0.1", nullptr,
|
||||
"Partner IP (broadcasting can be enabled via MAV_BROADCAST param)", true);
|
||||
"Partner IP (broadcasting can be enabled via MAV_{i}_BROADCAST param)", true);
|
||||
#endif
|
||||
PRINT_MODULE_USAGE_PARAM_STRING('m', "normal", "custom|camera|onboard|osd|magic|config|iridium|minimal|extvision|extvisionmin|gimbal",
|
||||
"Mode: sets default streams and rates", true);
|
||||
PRINT_MODULE_USAGE_PARAM_STRING('n', nullptr, "<interface_name>", "wifi/ethernet interface name", true);
|
||||
#if defined(CONFIG_NET_IGMP) && defined(CONFIG_NET_ROUTE)
|
||||
PRINT_MODULE_USAGE_PARAM_STRING('c', nullptr, "Multicast address in the range [239.0.0.0,239.255.255.255]", "Multicast address (multicasting can be enabled via MAV_BROADCAST param)", true);
|
||||
PRINT_MODULE_USAGE_PARAM_STRING('c', nullptr, "Multicast address in the range [239.0.0.0,239.255.255.255]", "Multicast address (multicasting can be enabled via MAV_{i}_BROADCAST param)", true);
|
||||
#endif
|
||||
PRINT_MODULE_USAGE_PARAM_FLAG('f', "Enable message forwarding to other Mavlink instances", true);
|
||||
PRINT_MODULE_USAGE_PARAM_FLAG('w', "Wait to send, until first message received", true);
|
||||
|
||||
Reference in New Issue
Block a user