gps: fix cli parsing

The gps driver did not give feedback if a non-existing verb was used
such as `gps foo`. Also, the goto out was ugly and the usage always
marked as an error when it's really an info. This cleans it up a bit.
This commit is contained in:
Julian Oes
2016-12-14 19:38:54 +01:00
committed by Lorenz Meier
parent 12c5ed39ae
commit 1c2194c600
+47 -35
View File
@@ -966,12 +966,13 @@ namespace gps
{ {
void start(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interface, bool fake_gps, void start(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interface, bool fake_gps,
bool enable_sat_info, int gps_num); bool enable_sat_info, int gps_num);
void stop(); void stop();
void test(); void test();
void reset(); void reset();
void info(); void info();
void print_usage();
/** /**
* Start the driver. * Start the driver.
@@ -1056,7 +1057,18 @@ info()
return; return;
} }
} // namespace void print_usage()
{
PX4_INFO("Usage: gps {start|stop|status|test|reset|status}");
PX4_INFO(" -f (to enable faking)");
PX4_INFO(" -s (to enable sat info)");
PX4_INFO(" -d " GPS_DEFAULT_UART_PORT);
PX4_INFO(" -dualgps /dev/...");
PX4_INFO(" -i {spi|uart}");
PX4_INFO(" -p {ubx|mtk|ash}");
}
} // namespace gps
int int
@@ -1071,7 +1083,9 @@ gps_main(int argc, char *argv[])
gps_driver_mode_t mode = GPS_DRIVER_MODE_NONE; gps_driver_mode_t mode = GPS_DRIVER_MODE_NONE;
if (argc < 2) { if (argc < 2) {
goto out; PX4_ERR("not enough arguments");
gps::print_usage();
return 1;
} }
/* /*
@@ -1084,8 +1098,9 @@ gps_main(int argc, char *argv[])
device_name = argv[3]; device_name = argv[3];
} else { } else {
PX4_ERR("DID NOT GET -d"); PX4_ERR("did not get -d");
goto out; gps::print_usage();
return 1;
} }
} }
@@ -1115,6 +1130,11 @@ gps_main(int argc, char *argv[])
} else if (!strcmp(argv[interface_arg], "uart")) { } else if (!strcmp(argv[interface_arg], "uart")) {
interface = GPSHelper::Interface::UART; interface = GPSHelper::Interface::UART;
} else {
PX4_ERR("unknown interface");
gps::print_usage();
return 1;
} }
} }
} }
@@ -1135,6 +1155,11 @@ gps_main(int argc, char *argv[])
} else if (!strcmp(argv[mode_arg], "ash")) { } else if (!strcmp(argv[mode_arg], "ash")) {
mode = GPS_DRIVER_MODE_ASHTECH; mode = GPS_DRIVER_MODE_ASHTECH;
} else {
PX4_ERR("unknown protocol");
gps::print_usage();
return 1;
} }
} }
} }
@@ -1147,7 +1172,9 @@ gps_main(int argc, char *argv[])
device_name2 = argv[i + 1]; device_name2 = argv[i + 1];
} else { } else {
PX4_ERR("Did not get second device address"); PX4_ERR("no second device address");
gps::print_usage();
return 1;
} }
} }
} }
@@ -1158,38 +1185,23 @@ gps_main(int argc, char *argv[])
gps::start(device_name2, mode, interface, fake_gps, enable_sat_info, 2); gps::start(device_name2, mode, interface, fake_gps, enable_sat_info, 2);
} }
} } else if (!strcmp(argv[1], "stop")) {
if (!strcmp(argv[1], "stop")) {
gps::stop(); gps::stop();
}
/* } else if (!strcmp(argv[1], "test")) {
* Test the driver/device.
*/
if (!strcmp(argv[1], "test")) {
gps::test(); gps::test();
}
/* } else if (!strcmp(argv[1], "reset")) {
* Reset the driver.
*/
if (!strcmp(argv[1], "reset")) {
gps::reset(); gps::reset();
}
/* } else if (!strcmp(argv[1], "status")) {
* Print driver status.
*/
if (!strcmp(argv[1], "status")) {
gps::info(); gps::info();
} else {
PX4_ERR("unknown action");
gps::print_usage();
return 1;
} }
return 0; return 0;
out:
PX4_ERR("unrecognized command, try 'start', 'stop', 'test', 'reset' or 'status'");
PX4_ERR("[-d " GPS_DEFAULT_UART_PORT
"][-f (for enabling fake)][-s (to enable sat info)] [-i {spi|uart}] [-p {ubx|mtk|ash}]");
return 1;
} }