Browse Source

gps: add generic nmea driver

master
Beat Küng 4 years ago committed by Daniel Agar
parent
commit
4b49f9261e
  1. 1
      src/drivers/drv_sensor.h
  2. 1
      src/drivers/gps/CMakeLists.txt
  3. 2
      src/drivers/gps/devices
  4. 21
      src/drivers/gps/gps.cpp
  5. 2
      src/drivers/gps/params.c

1
src/drivers/drv_sensor.h

@ -193,6 +193,7 @@ @@ -193,6 +193,7 @@
#define DRV_GPS_DEVTYPE_UBX_8 0xA8
#define DRV_GPS_DEVTYPE_UBX_9 0xA9
#define DRV_GPS_DEVTYPE_UBX_F9P 0xAA
#define DRV_GPS_DEVTYPE_NMEA 0xAB
#define DRV_GPS_DEVTYPE_SIM 0xAF

1
src/drivers/gps/CMakeLists.txt

@ -48,6 +48,7 @@ px4_add_module( @@ -48,6 +48,7 @@ px4_add_module(
devices/src/rtcm.cpp
devices/src/emlid_reach.cpp
devices/src/femtomes.cpp
devices/src/nmea.cpp
MODULE_CONFIG
module.yaml
DEPENDS

2
src/drivers/gps/devices

@ -1 +1 @@ @@ -1 +1 @@
Subproject commit 6815e1d3b294cd6ea583294ebadf191321e4beba
Subproject commit 8af5336d3f112278fd321e2c512453f23a350540

21
src/drivers/gps/gps.cpp

@ -68,6 +68,7 @@ @@ -68,6 +68,7 @@
# include "devices/src/emlid_reach.h"
# include "devices/src/mtk.h"
# include "devices/src/femtomes.h"
# include "devices/src/nmea.h"
#endif // CONSTRAINED_FLASH
#include "devices/src/ubx.h"
@ -85,7 +86,8 @@ enum class gps_driver_mode_t { @@ -85,7 +86,8 @@ enum class gps_driver_mode_t {
MTK,
ASHTECH,
EMLIDREACH,
FEMTOMES
FEMTOMES,
NMEA
};
enum class gps_dump_comm_mode_t : int32_t {
@ -321,6 +323,8 @@ GPS::GPS(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interfac @@ -321,6 +323,8 @@ GPS::GPS(const char *path, gps_driver_mode_t mode, GPSHelper::Interface interfac
case 4: _mode = gps_driver_mode_t::EMLIDREACH; break;
case 5: _mode = gps_driver_mode_t::FEMTOMES; break;
case 6: _mode = gps_driver_mode_t::NMEA; break;
#endif // CONSTRAINED_FLASH
}
}
@ -793,6 +797,11 @@ GPS::run() @@ -793,6 +797,11 @@ GPS::run()
_helper = new GPSDriverFemto(&GPS::callback, this, &_report_gps_pos, _p_report_sat_info, heading_offset);
set_device_type(DRV_GPS_DEVTYPE_FEMTOMES);
break;
case gps_driver_mode_t::NMEA:
_helper = new GPSDriverNMEA(&GPS::callback, this, &_report_gps_pos, _p_report_sat_info, heading_offset);
set_device_type(DRV_GPS_DEVTYPE_NMEA);
break;
#endif // CONSTRAINED_FLASH
default:
@ -953,6 +962,7 @@ GPS::run() @@ -953,6 +962,7 @@ GPS::run()
break;
case gps_driver_mode_t::FEMTOMES:
case gps_driver_mode_t::NMEA: // skip NMEA for auto-detection to avoid false positive matching
#endif // CONSTRAINED_FLASH
_mode = gps_driver_mode_t::UBX;
px4_usleep(500000); // tried all possible drivers. Wait a bit before next round
@ -1009,6 +1019,10 @@ GPS::print_status() @@ -1009,6 +1019,10 @@ GPS::print_status()
case gps_driver_mode_t::FEMTOMES:
PX4_INFO("protocol: FEMTOMES");
break;
case gps_driver_mode_t::NMEA:
PX4_INFO("protocol: NMEA");
break;
#endif // CONSTRAINED_FLASH
default:
@ -1175,7 +1189,7 @@ $ gps reset warm @@ -1175,7 +1189,7 @@ $ gps reset warm
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('p', nullptr, "ubx|mtk|ash|eml|fem", "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);
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();
PRINT_MODULE_USAGE_COMMAND_DESCR("reset", "Reset GPS device");
@ -1319,6 +1333,9 @@ GPS *GPS::instantiate(int argc, char *argv[], Instance instance) @@ -1319,6 +1333,9 @@ GPS *GPS::instantiate(int argc, char *argv[], Instance instance)
} else if (!strcmp(myoptarg, "fem")) {
mode = gps_driver_mode_t::FEMTOMES;
} else if (!strcmp(myoptarg, "nmea")) {
mode = gps_driver_mode_t::NMEA;
#endif // CONSTRAINED_FLASH
} else {
PX4_ERR("unknown protocol: %s", myoptarg);

2
src/drivers/gps/params.c

@ -127,6 +127,7 @@ PARAM_DEFINE_FLOAT(GPS_YAW_OFFSET, 0.f); @@ -127,6 +127,7 @@ PARAM_DEFINE_FLOAT(GPS_YAW_OFFSET, 0.f);
* @value 3 Ashtech / Trimble
* @value 4 Emlid Reach
* @value 5 Femtomes
* @value 6 NMEA (generic)
*
* @reboot_required true
* @group GPS
@ -148,6 +149,7 @@ PARAM_DEFINE_INT32(GPS_1_PROTOCOL, 1); @@ -148,6 +149,7 @@ PARAM_DEFINE_INT32(GPS_1_PROTOCOL, 1);
* @value 3 Ashtech / Trimble
* @value 4 Emlid Reach
* @value 5 Femtomes
* @value 6 NMEA (generic)
*
* @reboot_required true
* @group GPS

Loading…
Cancel
Save