Mavlink: ifdef networking code

This commit is contained in:
Daniel Agar
2019-09-21 13:46:01 -04:00
parent 86dc4c5a00
commit fe4f6c186e
4 changed files with 156 additions and 97 deletions
+30 -24
View File
@@ -84,14 +84,20 @@
#include "mavlink_ulog.h"
#define DEFAULT_BAUD_RATE 57600
#define DEFAULT_REMOTE_PORT_UDP 14550 ///< GCS port per MAVLink spec
#define DEFAULT_DEVICE_NAME "/dev/ttyS1"
#define HASH_PARAM "_HASH_CHECK"
enum Protocol {
#if defined(CONFIG_NET) || defined(__PX4_POSIX)
# define MAVLINK_UDP
# define DEFAULT_REMOTE_PORT_UDP 14550 ///< GCS port per MAVLink spec
#endif // CONFIG_NET || __PX4_POSIX
enum class Protocol {
SERIAL = 0,
#if defined(MAVLINK_UDP)
UDP,
TCP,
#endif // MAVLINK_UDP
};
using namespace time_literals;
@@ -137,8 +143,6 @@ public:
static Mavlink *get_instance_for_device(const char *device_name);
static Mavlink *get_instance_for_network_port(unsigned long port);
mavlink_message_t *get_buffer() { return &_mavlink_buffer; }
mavlink_status_t *get_status() { return &_mavlink_status; }
@@ -259,9 +263,11 @@ public:
bool is_connected() { return (hrt_elapsed_time(&_tstatus.heartbeat_time) < 3_s); }
#if defined(CONFIG_NET) || defined(__PX4_POSIX)
#if defined(MAVLINK_UDP)
static Mavlink *get_instance_for_network_port(unsigned long port);
bool broadcast_enabled() { return _param_mav_broadcast.get() == BROADCAST_MODE_ON; }
#endif
#endif // MAVLINK_UDP
/**
* Set the boot complete flag on all instances
@@ -450,30 +456,26 @@ public:
unsigned get_system_type() { return _param_mav_type.get(); }
Protocol get_protocol() { return _protocol; }
unsigned short get_network_port() { return _network_port; }
unsigned short get_remote_port() { return _remote_port; }
Protocol get_protocol() const { return _protocol; }
int get_socket_fd() { return _socket_fd; };
bool _task_should_exit{false}; /**< Mavlink task should exit iff true. */
#ifdef __PX4_POSIX
#if defined(MAVLINK_UDP)
unsigned short get_network_port() { return _network_port; }
unsigned short get_remote_port() { return _remote_port; }
const in_addr query_netmask_addr(const int socket_fd, const ifreq &ifreq);
const in_addr compute_broadcast_addr(const in_addr &host_addr, const in_addr &netmask_addr);
#endif
#if defined(CONFIG_NET) || defined(__PX4_POSIX)
struct sockaddr_in &get_client_source_address() { return _src_addr; }
void set_client_source_initialized() { _src_addr_initialized = true; }
bool get_client_source_initialized() { return _src_addr_initialized; }
#else
bool get_client_source_initialized() { return true; }
#endif
uint64_t get_start_time() { return _mavlink_start_time; }
@@ -618,7 +620,7 @@ private:
unsigned _bytes_rx{0};
uint64_t _bytes_timestamp{0};
#if defined(CONFIG_NET) || defined(__PX4_POSIX)
#if defined(MAVLINK_UDP)
sockaddr_in _myaddr {};
sockaddr_in _src_addr {};
sockaddr_in _bcast_addr {};
@@ -629,14 +631,15 @@ private:
bool _broadcast_failed_warned{false};
uint8_t _network_buf[MAVLINK_MAX_PACKET_LEN] {};
unsigned _network_buf_len{0};
#endif
unsigned short _network_port{14556};
unsigned short _remote_port{DEFAULT_REMOTE_PORT_UDP};
#endif // MAVLINK_UDP
const char *_interface_name{nullptr};
int _socket_fd{-1};
Protocol _protocol{SERIAL};
unsigned short _network_port{14556};
unsigned short _remote_port{DEFAULT_REMOTE_PORT_UDP};
Protocol _protocol{Protocol::SERIAL};
radio_status_s _rstatus {};
telemetry_status_s _tstatus {};
@@ -663,9 +666,9 @@ private:
(ParamInt<px4::params::MAV_TYPE>) _param_mav_type,
(ParamBool<px4::params::MAV_USEHILGPS>) _param_mav_usehilgps,
(ParamBool<px4::params::MAV_FWDEXTSP>) _param_mav_fwdextsp,
#if defined(CONFIG_NET) || defined(__PX4_POSIX)
#if defined(MAVLINK_UDP)
(ParamInt<px4::params::MAV_BROADCAST>) _param_mav_broadcast,
#endif
#endif // MAVLINK_UDP
(ParamBool<px4::params::MAV_HASH_CHK_EN>) _param_mav_hash_chk_en,
(ParamBool<px4::params::MAV_HB_FORW_EN>) _param_mav_hb_forw_en,
(ParamBool<px4::params::MAV_ODOM_LP>) _param_mav_odom_lp,
@@ -730,9 +733,12 @@ private:
*/
void update_rate_mult();
#if defined(MAVLINK_UDP)
void find_broadcast_address();
void init_udp();
#endif // MAVLINK_UDP
void set_channel();