diff --git a/src/drivers/gps/CMakeLists.txt b/src/drivers/gps/CMakeLists.txt index 55f1ac7e978459af5dec238cf7c1a54da9c2e8bc..95dea2b5d6e53e5e0439bde5105364e36357c212 100644 --- a/src/drivers/gps/CMakeLists.txt +++ b/src/drivers/gps/CMakeLists.txt @@ -44,6 +44,7 @@ px4_add_module( devices/src/ashtech.cpp devices/src/ubx.cpp devices/src/rtcm.cpp + devices/src/emlid_reach.cpp MODULE_CONFIG module.yaml DEPENDS diff --git a/src/drivers/gps/devices b/src/drivers/gps/devices index 2fecb4912dd8c97a9eee42c5dbecfb58c4aeb9ee..a6687961ec328a1694916618f9160eaed555d4be 160000 --- a/src/drivers/gps/devices +++ b/src/drivers/gps/devices @@ -1 +1 @@ -Subproject commit 2fecb4912dd8c97a9eee42c5dbecfb58c4aeb9ee +Subproject commit a6687961ec328a1694916618f9160eaed555d4be diff --git a/src/drivers/gps/gps.cpp b/src/drivers/gps/gps.cpp index 93ffdbd5a803c0027afe325910f6972cde05a7e2..8fac347d82caed167ad6cc10d3f4f6de522ecc81 100644 --- a/src/drivers/gps/gps.cpp +++ b/src/drivers/gps/gps.cpp @@ -86,6 +86,7 @@ #include "devices/src/ubx.h" #include "devices/src/mtk.h" #include "devices/src/ashtech.h" +#include "devices/src/emlid_reach.h" #ifdef __PX4_LINUX #include <linux/spi/spidev.h> @@ -98,7 +99,8 @@ typedef enum { GPS_DRIVER_MODE_NONE = 0, GPS_DRIVER_MODE_UBX, GPS_DRIVER_MODE_MTK, - GPS_DRIVER_MODE_ASHTECH + GPS_DRIVER_MODE_ASHTECH, + GPS_DRIVER_MODE_EMLIDREACH } gps_driver_mode_t; /* struct for dynamic allocation of satellite info data */ @@ -720,6 +722,10 @@ GPS::run() _helper = new GPSDriverAshtech(&GPS::callback, this, &_report_gps_pos, _p_report_sat_info, heading_offset); break; + case GPS_DRIVER_MODE_EMLIDREACH: + _helper = new GPSDriverEmlidReach(&GPS::callback, this, &_report_gps_pos, _p_report_sat_info); + break; + default: break; } @@ -782,6 +788,10 @@ GPS::run() // mode_str = "ASHTECH"; // break; // +// case GPS_DRIVER_MODE_EMLIDREACH: +// mode_str = "EMLID REACH"; +// break; +// // default: // break; // } @@ -809,6 +819,10 @@ GPS::run() break; case GPS_DRIVER_MODE_ASHTECH: + _mode = GPS_DRIVER_MODE_EMLIDREACH; + break; + + case GPS_DRIVER_MODE_EMLIDREACH: _mode = GPS_DRIVER_MODE_UBX; px4_usleep(500000); // tried all possible drivers. Wait a bit before next round break; @@ -877,6 +891,10 @@ GPS::print_status() PX4_INFO("protocol: ASHTECH"); break; + case GPS_DRIVER_MODE_EMLIDREACH: + PX4_INFO("protocol: EMLIDREACH"); + break; + default: break; } @@ -976,7 +994,7 @@ gps start -d /dev/ttyS3 -e /dev/ttyS4 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('p', nullptr, "ubx|mtk|ash", "GPS Protocol (default=auto select)", true); + PRINT_MODULE_USAGE_PARAM_STRING('p', nullptr, "ubx|mtk|ash|eml", "GPS Protocol (default=auto select)", true); PRINT_MODULE_USAGE_DEFAULT_COMMANDS(); @@ -1107,6 +1125,9 @@ GPS *GPS::instantiate(int argc, char *argv[], Instance instance) } else if (!strcmp(myoptarg, "ash")) { mode = GPS_DRIVER_MODE_ASHTECH; + } else if (!strcmp(myoptarg, "eml")) { + mode = GPS_DRIVER_MODE_EMLIDREACH; + } else { PX4_ERR("unknown interface: %s", myoptarg); error_flag = true;