mirror of
https://github.com/micro-ROS/micro-ROS-Agent.git
synced 2026-09-06 09:55:15 +02:00
Updated to last version of Micoxrcedds Agent. (#3)
This commit is contained in:
committed by
Borja Outerelo
parent
735babba37
commit
53555aa991
+65
-120
@@ -37,10 +37,15 @@ void showHelp()
|
|||||||
{
|
{
|
||||||
std::cout << "Usage: program <command>" << std::endl;
|
std::cout << "Usage: program <command>" << std::endl;
|
||||||
std::cout << "List of commands:" << std::endl;
|
std::cout << "List of commands:" << std::endl;
|
||||||
|
#ifdef _WIN32
|
||||||
|
std::cout << " udp <local_port>" << std::endl;
|
||||||
|
std::cout << " tcp <local_port>" << std::endl;
|
||||||
|
#else
|
||||||
std::cout << " serial <device_name>" << std::endl;
|
std::cout << " serial <device_name>" << std::endl;
|
||||||
std::cout << " pseudo-serial" << std::endl;
|
std::cout << " pseudo-serial" << std::endl;
|
||||||
std::cout << " udp <local_port> [<discovery_port>]" << std::endl;
|
std::cout << " udp <local_port> [<discovery_port>]" << std::endl;
|
||||||
std::cout << " tcp <local_port> [<discovery_port>]" << std::endl;
|
std::cout << " tcp <local_port> [<discovery_port>]" << std::endl;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void initializationError()
|
void initializationError()
|
||||||
@@ -50,7 +55,7 @@ void initializationError()
|
|||||||
std::exit(EXIT_FAILURE);
|
std::exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t parsePort(const char* str_port)
|
uint16_t parsePort(const std::string& str_port)
|
||||||
{
|
{
|
||||||
uint16_t valid_port = 0;
|
uint16_t valid_port = 0;
|
||||||
try
|
try
|
||||||
@@ -70,73 +75,66 @@ uint16_t parsePort(const char* str_port)
|
|||||||
return valid_port;
|
return valid_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class uros_agent : public rclcpp::Node
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
uros_agent() : Node("uROS_Agent")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
~uros_agent()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
|
eprosima::uxr::Server* server = nullptr;
|
||||||
|
std::vector<std::string> cl(0);
|
||||||
|
|
||||||
#ifdef __unix__
|
if (1 == argc)
|
||||||
char exe_path[200];
|
{
|
||||||
ssize_t count = readlink("/proc/self/exe", exe_path, sizeof(exe_path));
|
showHelp();
|
||||||
if (count != -1) {
|
std::cout << std::endl;
|
||||||
chdir(dirname(exe_path));
|
std::cout << "Enter command: ";
|
||||||
|
|
||||||
|
std::string raw_cl;
|
||||||
|
std::getline(std::cin, raw_cl);
|
||||||
|
std::istringstream iss(raw_cl);
|
||||||
|
cl.insert(cl.begin(), std::istream_iterator<std::string>(iss), std::istream_iterator<std::string>());
|
||||||
|
std::cout << raw_cl << std::endl;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 1; i < argc; ++i)
|
||||||
|
{
|
||||||
|
cl.push_back(argv[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
bool initialized = false;
|
if((1 == cl.size()) && (("-h" == cl[0]) || ("--help" == cl[0])))
|
||||||
|
|
||||||
#ifdef __unix__
|
|
||||||
if(argc == 2 && (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0))
|
|
||||||
{
|
{
|
||||||
showHelp();
|
showHelp();
|
||||||
}
|
}
|
||||||
else if(argc >= 3 && strcmp(argv[1], "udp") == 0)
|
else if((2 <= cl.size()) && ("udp" == cl[0]))
|
||||||
{
|
{
|
||||||
std::cout << "UDP agent initialization... ";
|
std::cout << "UDP agent initialization... ";
|
||||||
uint16_t port = parsePort(argv[2]);
|
uint16_t port = parsePort(cl[1]);
|
||||||
eprosima::uxr::UDPServer* udp_server = (argc == 4) //discovery port
|
#ifdef _WIN32
|
||||||
? new eprosima::uxr::UDPServer(port, parsePort(argv[3]))
|
server = new eprosima::uxr::UDPServer(port);
|
||||||
: new eprosima::uxr::UDPServer(port);
|
#else
|
||||||
if (udp_server->run())
|
server = (3 == cl.size()) //discovery port
|
||||||
{
|
? new eprosima::uxr::UDPServer(port, parsePort(cl[2]))
|
||||||
initialized = true;
|
: new eprosima::uxr::UDPServer(port);
|
||||||
}
|
#endif
|
||||||
std::cout << ((!initialized) ? "ERROR" : "OK") << std::endl;
|
|
||||||
}
|
}
|
||||||
else if(argc >= 3 && strcmp(argv[1], "tcp") == 0)
|
else if((2 <= cl.size()) && ("tcp" == cl[0]))
|
||||||
{
|
{
|
||||||
std::cout << "TCP agent initialization... ";
|
std::cout << "TCP agent initialization... ";
|
||||||
uint16_t port = parsePort(argv[2]);
|
uint16_t port = parsePort(cl[1]);
|
||||||
eprosima::uxr::TCPServer* tcp_server = (argc == 4) //discovery port
|
#ifdef _WIN32
|
||||||
? new eprosima::uxr::TCPServer(port, parsePort(argv[3]))
|
server = new eprosima::uxr::TCPServer(port);
|
||||||
: new eprosima::uxr::TCPServer(port);
|
#else
|
||||||
if (tcp_server->run())
|
server = (3 == cl.size()) //discovery port
|
||||||
{
|
? new eprosima::uxr::TCPServer(port, parsePort(cl[2]))
|
||||||
initialized = true;
|
: new eprosima::uxr::TCPServer(port);
|
||||||
}
|
#endif
|
||||||
std::cout << ((!initialized) ? "ERROR" : "OK") << std::endl;
|
|
||||||
}
|
}
|
||||||
else if(argc == 3 && strcmp(argv[1], "serial") == 0)
|
#ifndef _WIN32
|
||||||
|
else if((2 == cl.size()) && ("serial" == cl[0]))
|
||||||
{
|
{
|
||||||
std::cout << "Serial agent initialization... ";
|
std::cout << "Serial agent initialization... ";
|
||||||
|
|
||||||
/* Open serial device. */
|
/* Open serial device. */
|
||||||
int fd = open(argv[2], O_RDWR | O_NOCTTY);
|
int fd = open(cl[1].c_str(), O_RDWR | O_NOCTTY);
|
||||||
if (0 < fd)
|
if (0 < fd)
|
||||||
{
|
{
|
||||||
struct termios tty_config;
|
struct termios tty_config;
|
||||||
@@ -181,18 +179,12 @@ int main(int argc, char** argv)
|
|||||||
|
|
||||||
if (0 == tcsetattr(fd, TCSANOW, &tty_config))
|
if (0 == tcsetattr(fd, TCSANOW, &tty_config))
|
||||||
{
|
{
|
||||||
eprosima::uxr::SerialServer* serial_server = new eprosima::uxr::SerialServer(fd, 0);
|
server = new eprosima::uxr::SerialServer(fd, 0);
|
||||||
if (serial_server->run())
|
|
||||||
{
|
|
||||||
initialized = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::cout << ((!initialized) ? "ERROR" : "OK") << std::endl;
|
|
||||||
}
|
}
|
||||||
else if (argc == 2 && strcmp(argv[1], "pseudo-serial") == 0)
|
else if ((1 == cl.size()) && ("pseudo-serial" == cl[0]))
|
||||||
{
|
{
|
||||||
std::cout << "Pseudo-Serial initialization... ";
|
std::cout << "Pseudo-Serial initialization... ";
|
||||||
|
|
||||||
@@ -208,79 +200,32 @@ int main(int argc, char** argv)
|
|||||||
cfmakeraw(&attr);
|
cfmakeraw(&attr);
|
||||||
tcflush(fd, TCIOFLUSH);
|
tcflush(fd, TCIOFLUSH);
|
||||||
tcsetattr(fd, TCSANOW, &attr);
|
tcsetattr(fd, TCSANOW, &attr);
|
||||||
|
std::cout << "Device: " << dev << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
server = new eprosima::uxr::SerialServer(fd, 0x00);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
{
|
||||||
|
initializationError();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nullptr != server)
|
||||||
|
{
|
||||||
/* Launch server. */
|
/* Launch server. */
|
||||||
eprosima::uxr::SerialServer* serial_server = new eprosima::uxr::SerialServer(fd, 0x00);
|
if (server->run())
|
||||||
if (serial_server->run())
|
|
||||||
{
|
{
|
||||||
initialized = true;
|
rclcpp::init(argc, argv);
|
||||||
}
|
rclcpp::spin(std::make_shared<uros_agent>());
|
||||||
|
rclcpp::shutdown();
|
||||||
if (initialized)
|
server->stop();
|
||||||
{
|
|
||||||
std::cout << "OK" << std::endl;
|
|
||||||
std::cout << "Device: " << dev << std::endl;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::cout << "ERROR" << std::endl;
|
std::cout << "ERROR" << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
initializationError();
|
|
||||||
}
|
|
||||||
#elif _WIN32
|
|
||||||
(void) argc;
|
|
||||||
(void) argv;
|
|
||||||
|
|
||||||
std::string server_type = "";
|
|
||||||
std::cout << "Select server type [udp|tcp]: ";
|
|
||||||
std::cin >> server_type;
|
|
||||||
|
|
||||||
if ("udp" == server_type)
|
|
||||||
{
|
|
||||||
uint16_t port = 0;
|
|
||||||
std::cout << "Select port: ";
|
|
||||||
std::cin >> port;
|
|
||||||
|
|
||||||
std::cout << "UDP agent initialization.... ";
|
|
||||||
eprosima::uxr::UDPServer* udp_server = new eprosima::uxr::UDPServer(port);
|
|
||||||
if (udp_server->run())
|
|
||||||
{
|
|
||||||
initialized = true;
|
|
||||||
}
|
|
||||||
std::cout << ((!initialized) ? "ERROR" : "OK") << std::endl;
|
|
||||||
}
|
|
||||||
else if ("tcp" == server_type)
|
|
||||||
{
|
|
||||||
uint16_t port = 0;
|
|
||||||
std::cout << "Select port: ";
|
|
||||||
std::cin >> port;
|
|
||||||
|
|
||||||
std::cout << "UDP agent initialization.... ";
|
|
||||||
eprosima::uxr::TCPServer* tcp_server = new eprosima::uxr::TCPServer(port);
|
|
||||||
if (tcp_server->run())
|
|
||||||
{
|
|
||||||
initialized = true;
|
|
||||||
}
|
|
||||||
std::cout << ((!initialized) ? "ERROR" : "OK") << std::endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cout << "Error server type" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(initialized)
|
|
||||||
{
|
|
||||||
rclcpp::init(argc, argv);
|
|
||||||
rclcpp::spin(std::make_shared<uros_agent>());
|
|
||||||
rclcpp::shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user