Browse Source

drivers/gps: add new GPS_SAT_INFO parameter to enable satelitte_info

- this replaces the command line argument -s
master
Daniel Agar 3 years ago committed by GitHub
parent
commit
ca97b9ba5f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 22
      src/drivers/gps/gps.cpp
  2. 12
      src/drivers/gps/params.c

22
src/drivers/gps/gps.cpp

@ -117,7 +117,7 @@ public:
Count Count
}; };
GPS(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interface, bool enable_sat_info, Instance instance, GPS(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interface, Instance instance,
unsigned configured_baudrate); unsigned configured_baudrate);
~GPS() override; ~GPS() override;
@ -279,8 +279,8 @@ px4::atomic<GPS *> GPS::_secondary_instance{nullptr};
extern "C" __EXPORT int gps_main(int argc, char *argv[]); extern "C" __EXPORT int gps_main(int argc, char *argv[]);
GPS::GPS(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interface, bool enable_sat_info, GPS::GPS(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interface, Instance instance,
Instance instance, unsigned configured_baudrate) : unsigned configured_baudrate) :
Device(MODULE_NAME), Device(MODULE_NAME),
_configured_baudrate(configured_baudrate), _configured_baudrate(configured_baudrate),
_mode(mode), _mode(mode),
@ -295,6 +295,9 @@ GPS::GPS(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interfac
_report_gps_pos.heading = NAN; _report_gps_pos.heading = NAN;
_report_gps_pos.heading_offset = NAN; _report_gps_pos.heading_offset = NAN;
int32_t enable_sat_info = 0;
param_get(param_find("GPS_SAT_INFO"), &enable_sat_info);
/* create satellite info data object if requested */ /* create satellite info data object if requested */
if (enable_sat_info) { if (enable_sat_info) {
_sat_info = new GPS_Sat_Info(); _sat_info = new GPS_Sat_Info();
@ -1254,8 +1257,6 @@ $ gps reset warm
PRINT_MODULE_USAGE_PARAM_STRING('e', nullptr, "<file:dev>", "Optional secondary GPS device", true); PRINT_MODULE_USAGE_PARAM_STRING('e', nullptr, "<file:dev>", "Optional secondary GPS device", true);
PRINT_MODULE_USAGE_PARAM_INT('g', 0, 0, 3000000, "Baudrate (secondary GPS, can also be p:<param_name>)", true); PRINT_MODULE_USAGE_PARAM_INT('g', 0, 0, 3000000, "Baudrate (secondary GPS, can also be p:<param_name>)", true);
PRINT_MODULE_USAGE_PARAM_FLAG('s', "Enable publication of satellite info", true);
PRINT_MODULE_USAGE_PARAM_STRING('i', "uart", "spi|uart", "GPS interface", true); PRINT_MODULE_USAGE_PARAM_STRING('i', "uart", "spi|uart", "GPS interface", true);
PRINT_MODULE_USAGE_PARAM_STRING('j', "uart", "spi|uart", "secondary GPS interface", true); PRINT_MODULE_USAGE_PARAM_STRING('j', "uart", "spi|uart", "secondary GPS interface", true);
PRINT_MODULE_USAGE_PARAM_STRING('p', nullptr, "ubx|mtk|ash|eml|fem|nmea", "GPS Protocol (default=auto select)", true); PRINT_MODULE_USAGE_PARAM_STRING('p', nullptr, "ubx|mtk|ash|eml|fem|nmea", "GPS Protocol (default=auto select)", true);
@ -1324,7 +1325,6 @@ GPS *GPS::instantiate(int argc, char *argv[], Instance instance)
const char *device_name_secondary = nullptr; const char *device_name_secondary = nullptr;
int baudrate_main = 0; int baudrate_main = 0;
int baudrate_secondary = 0; int baudrate_secondary = 0;
bool enable_sat_info = false;
GPSHelper::Interface interface = GPSHelper::Interface::UART; GPSHelper::Interface interface = GPSHelper::Interface::UART;
GPSHelper::Interface interface_secondary = GPSHelper::Interface::UART; GPSHelper::Interface interface_secondary = GPSHelper::Interface::UART;
gps_driver_mode_t mode = gps_driver_mode_t::None; gps_driver_mode_t mode = gps_driver_mode_t::None;
@ -1334,7 +1334,7 @@ GPS *GPS::instantiate(int argc, char *argv[], Instance instance)
int ch; int ch;
const char *myoptarg = nullptr; const char *myoptarg = nullptr;
while ((ch = px4_getopt(argc, argv, "b:d:e:g:si:j:p:", &myoptind, &myoptarg)) != EOF) { while ((ch = px4_getopt(argc, argv, "b:d:e:g:i:j:p:", &myoptind, &myoptarg)) != EOF) {
switch (ch) { switch (ch) {
case 'b': case 'b':
if (px4_get_parameter_value(myoptarg, baudrate_main) != 0) { if (px4_get_parameter_value(myoptarg, baudrate_main) != 0) {
@ -1357,10 +1357,6 @@ GPS *GPS::instantiate(int argc, char *argv[], Instance instance)
device_name_secondary = myoptarg; device_name_secondary = myoptarg;
break; break;
case 's':
enable_sat_info = true;
break;
case 'i': case 'i':
if (!strcmp(myoptarg, "spi")) { if (!strcmp(myoptarg, "spi")) {
interface = GPSHelper::Interface::SPI; interface = GPSHelper::Interface::SPI;
@ -1430,7 +1426,7 @@ GPS *GPS::instantiate(int argc, char *argv[], Instance instance)
GPS *gps = nullptr; GPS *gps = nullptr;
if (instance == Instance::Main) { if (instance == Instance::Main) {
if (device_name && (access(device_name, R_OK|W_OK) == 0)) { if (device_name && (access(device_name, R_OK|W_OK) == 0)) {
gps = new GPS(device_name, mode, interface, enable_sat_info, instance, baudrate_main); gps = new GPS(device_name, mode, interface, instance, baudrate_main);
} else { } else {
PX4_ERR("invalid device (-d) %s", device_name ? device_name : ""); PX4_ERR("invalid device (-d) %s", device_name ? device_name : "");
@ -1453,7 +1449,7 @@ GPS *GPS::instantiate(int argc, char *argv[], Instance instance)
} }
} else { // secondary instance } else { // secondary instance
if (device_name_secondary && (access(device_name_secondary, R_OK|W_OK) == 0)) { if (device_name_secondary && (access(device_name_secondary, R_OK|W_OK) == 0)) {
gps = new GPS(device_name_secondary, mode, interface_secondary, enable_sat_info, instance, baudrate_secondary); gps = new GPS(device_name_secondary, mode, interface_secondary, instance, baudrate_secondary);
} else { } else {
PX4_ERR("invalid secondary device (-g) %s", device_name_secondary ? device_name_secondary : ""); PX4_ERR("invalid secondary device (-g) %s", device_name_secondary ? device_name_secondary : "");

12
src/drivers/gps/params.c

@ -69,6 +69,18 @@ PARAM_DEFINE_INT32(GPS_DUMP_COMM, 0);
*/ */
PARAM_DEFINE_INT32(GPS_UBX_DYNMODEL, 7); PARAM_DEFINE_INT32(GPS_UBX_DYNMODEL, 7);
/**
* Enable sat info (if available)
*
* Enable publication of satellite info (ORB_ID(satellite_info)) if possible.
* Not available on MTK.
*
* @boolean
* @reboot_required true
* @group GPS
*/
PARAM_DEFINE_INT32(GPS_SAT_INFO, 0);
/** /**
* u-blox GPS Mode * u-blox GPS Mode
* *

Loading…
Cancel
Save