diff --git a/src/modules/simulator/simulator.cpp b/src/modules/simulator/simulator.cpp index 60e2a3ae45..7ca1f52f45 100644 --- a/src/modules/simulator/simulator.cpp +++ b/src/modules/simulator/simulator.cpp @@ -79,6 +79,12 @@ int Simulator::start(int argc, char *argv[]) _instance->set_port(atoi(argv[4])); } + if (argc == 5 && strcmp(argv[2], "-t") == 0) { + _instance->set_ip(InternetProtocol::TCP); + _instance->set_tcp_remote_ipaddr(argv[3]); + _instance->set_port(atoi(argv[4])); + } + _instance->run(); return 0; @@ -95,6 +101,7 @@ static void usage() PX4_INFO("Start simulator: simulator start"); PX4_INFO("Connect using UDP: simulator start -u udp_port"); PX4_INFO("Connect using TCP: simulator start -c tcp_port"); + PX4_INFO("Connect to a remote server using TCP: simulator start -t ip_addr tcp_port"); } __BEGIN_DECLS diff --git a/src/modules/simulator/simulator.h b/src/modules/simulator/simulator.h index a76b63e34f..ffdeb2aa2c 100644 --- a/src/modules/simulator/simulator.h +++ b/src/modules/simulator/simulator.h @@ -123,6 +123,7 @@ public: void set_ip(InternetProtocol ip) { _ip = ip; } void set_port(unsigned port) { _port = port; } + void set_tcp_remote_ipaddr(char *tcp_remote_ipaddr) { _tcp_remote_ipaddr = tcp_remote_ipaddr; } #if defined(ENABLE_LOCKSTEP_SCHEDULER) bool has_initialized() { return _has_initialized.load(); } @@ -201,6 +202,8 @@ private: InternetProtocol _ip{InternetProtocol::UDP}; + char *_tcp_remote_ipaddr{nullptr}; + double _realtime_factor{1.0}; ///< How fast the simulation runs in comparison to real system time hrt_abstime _last_sim_timestamp{0}; diff --git a/src/modules/simulator/simulator_mavlink.cpp b/src/modules/simulator/simulator_mavlink.cpp index 9853194d5a..a9f1cf3abc 100644 --- a/src/modules/simulator/simulator_mavlink.cpp +++ b/src/modules/simulator/simulator_mavlink.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include @@ -673,6 +674,10 @@ void Simulator::run() _myaddr.sin_addr.s_addr = htonl(INADDR_ANY); _myaddr.sin_port = htons(_port); + if (_tcp_remote_ipaddr != nullptr) { + _myaddr.sin_addr.s_addr = inet_addr(_tcp_remote_ipaddr); + } + if (_ip == InternetProtocol::UDP) { if ((_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {