mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-16 15:13:35 +08:00
Commandline Interface and Mode options
This commit is contained in:
committed by
Lorenz Meier
parent
9bd3f6c9bf
commit
2799525462
@@ -58,3 +58,7 @@ typedef enum {
|
||||
GPS_DRIVER_MODE_ASHTECH
|
||||
} gps_driver_mode_t;
|
||||
|
||||
typedef enum {
|
||||
GPS_DRIVER_UART = 0,
|
||||
GPS_DRIVER_SPI
|
||||
} gps_driver_interface_t;
|
||||
|
||||
+1
-1
Submodule src/drivers/gps/devices updated: 3cac6a5bc5...3fa8711feb
+70
-37
@@ -103,7 +103,8 @@ public:
|
||||
class GPS
|
||||
{
|
||||
public:
|
||||
GPS(const char *uart_path, bool fake_gps, bool enable_sat_info, int gps_num);
|
||||
GPS(const char *path, gps_driver_mode_t mode, gps_driver_interface_t interface, bool fake_gps, bool enable_sat_info,
|
||||
int gps_num);
|
||||
virtual ~GPS();
|
||||
|
||||
virtual int init();
|
||||
@@ -124,6 +125,7 @@ private:
|
||||
bool _baudrate_changed; ///< flag to signal that the baudrate with the GPS has changed
|
||||
bool _mode_changed; ///< flag that the GPS mode has changed
|
||||
gps_driver_mode_t _mode; ///< current mode
|
||||
gps_driver_interface_t _interface;
|
||||
GPSHelper *_helper; ///< instance of GPS parser
|
||||
GPS_Sat_Info *_sat_info; ///< instance of GPS sat info data object
|
||||
struct vehicle_gps_position_s _report_gps_pos; ///< uORB topic for gps position
|
||||
@@ -241,11 +243,13 @@ volatile bool is_gps1_advertised = false; ///< for the second gps we want to mak
|
||||
}
|
||||
|
||||
|
||||
GPS::GPS(const char *uart_path, bool fake_gps, bool enable_sat_info, int gps_num) :
|
||||
GPS::GPS(const char *path, gps_driver_mode_t mode, gps_driver_interface_t interface, bool fake_gps,
|
||||
bool enable_sat_info, int gps_num) :
|
||||
_task_should_exit(false),
|
||||
_healthy(false),
|
||||
_mode_changed(false),
|
||||
_mode(GPS_DRIVER_MODE_UBX),
|
||||
_mode(mode),
|
||||
_interface(interface),
|
||||
_helper(nullptr),
|
||||
_sat_info(nullptr),
|
||||
_report_gps_pos_pub{nullptr},
|
||||
@@ -263,7 +267,7 @@ GPS::GPS(const char *uart_path, bool fake_gps, bool enable_sat_info, int gps_num
|
||||
_dump_from_device(nullptr)
|
||||
{
|
||||
/* store port name */
|
||||
strncpy(_port, uart_path, sizeof(_port));
|
||||
strncpy(_port, path, sizeof(_port));
|
||||
/* enforce null termination */
|
||||
_port[sizeof(_port) - 1] = '\0';
|
||||
|
||||
@@ -699,13 +703,24 @@ GPS::task_main()
|
||||
_helper = nullptr;
|
||||
}
|
||||
|
||||
GPSHelper::Interface helper_interface = GPSHelper::Interface::UART;
|
||||
|
||||
switch (_interface) {
|
||||
case GPS_DRIVER_UART:
|
||||
helper_interface = GPSHelper::Interface::UART;
|
||||
break;
|
||||
|
||||
case GPS_DRIVER_SPI:
|
||||
helper_interface = GPSHelper::Interface::SPI;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
switch (_mode) {
|
||||
case GPS_DRIVER_MODE_UBX:
|
||||
#ifndef __PX4_POSIX_RPI
|
||||
_helper = new GPSDriverUBX(GPSHelper::Interface::UART, &GPS::callback, this, &_report_gps_pos, _p_report_sat_info);
|
||||
#else
|
||||
_helper = new GPSDriverUBX(GPSHelper::Interface::SPI, &GPS::callback, this, &_report_gps_pos, _p_report_sat_info);
|
||||
#endif
|
||||
_helper = new GPSDriverUBX(helper_interface, &GPS::callback, this, &_report_gps_pos, _p_report_sat_info);
|
||||
break;
|
||||
|
||||
case GPS_DRIVER_MODE_MTK:
|
||||
@@ -810,30 +825,7 @@ GPS::task_main()
|
||||
_rate_rtcm_injection = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(__PX4_POSIX_RPI)
|
||||
|
||||
/* select next mode */
|
||||
switch (_mode) {
|
||||
case GPS_DRIVER_MODE_UBX:
|
||||
_mode = GPS_DRIVER_MODE_MTK;
|
||||
break;
|
||||
|
||||
case GPS_DRIVER_MODE_MTK:
|
||||
_mode = GPS_DRIVER_MODE_ASHTECH;
|
||||
break;
|
||||
|
||||
case GPS_DRIVER_MODE_ASHTECH:
|
||||
_mode = GPS_DRIVER_MODE_UBX;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
PX4_INFO("exiting");
|
||||
@@ -955,7 +947,8 @@ namespace gps
|
||||
{
|
||||
|
||||
|
||||
void start(const char *uart_path, bool fake_gps, bool enable_sat_info, int gps_num);
|
||||
void start(const char *path, gps_driver_mode_t mode, gps_driver_interface_t interface, bool fake_gps,
|
||||
bool enable_sat_info, int gps_num);
|
||||
void stop();
|
||||
void test();
|
||||
void reset();
|
||||
@@ -965,7 +958,8 @@ void info();
|
||||
* Start the driver.
|
||||
*/
|
||||
void
|
||||
start(const char *uart_path, bool fake_gps, bool enable_sat_info, int gps_num)
|
||||
start(const char *path, gps_driver_mode_t mode, gps_driver_interface_t interface, bool fake_gps, bool enable_sat_info,
|
||||
int gps_num)
|
||||
{
|
||||
if (g_dev[gps_num - 1] != nullptr) {
|
||||
PX4_WARN("GPS %i already started", gps_num);
|
||||
@@ -973,7 +967,7 @@ start(const char *uart_path, bool fake_gps, bool enable_sat_info, int gps_num)
|
||||
}
|
||||
|
||||
/* create the driver */
|
||||
g_dev[gps_num - 1] = new GPS(uart_path, fake_gps, enable_sat_info, gps_num);
|
||||
g_dev[gps_num - 1] = new GPS(path, mode, interface, fake_gps, enable_sat_info, gps_num);
|
||||
|
||||
if (!g_dev[gps_num - 1] || OK != g_dev[gps_num - 1]->init()) {
|
||||
if (g_dev[gps_num - 1] != nullptr) {
|
||||
@@ -1054,6 +1048,8 @@ gps_main(int argc, char *argv[])
|
||||
const char *device_name2 = nullptr;
|
||||
bool fake_gps = false;
|
||||
bool enable_sat_info = false;
|
||||
gps_driver_interface_t interface = GPS_DRIVER_UART;
|
||||
gps_driver_mode_t mode = GPS_DRIVER_MODE_UBX;
|
||||
|
||||
if (argc < 2) {
|
||||
goto out;
|
||||
@@ -1088,6 +1084,43 @@ gps_main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
/* Detect interface option */
|
||||
for (int i = 2; i < argc; i++) {
|
||||
if (!strcmp(argv[i], "-i")) {
|
||||
|
||||
int interface_arg = i + 1;
|
||||
|
||||
if (interface_arg < argc) {
|
||||
if (!strcmp(argv[interface_arg], "spi")) {
|
||||
interface = GPS_DRIVER_SPI;
|
||||
|
||||
} else if (!strcmp(argv[interface_arg], "uart")) {
|
||||
interface = GPS_DRIVER_UART;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Detect mode/protocol option */
|
||||
for (int i = 2; i < argc; i++) {
|
||||
if (!strcmp(argv[i], "-p")) {
|
||||
|
||||
int mode_arg = i + 1;
|
||||
|
||||
if (mode_arg < argc) {
|
||||
if (!strcmp(argv[mode_arg], "ubx")) {
|
||||
mode = GPS_DRIVER_MODE_UBX;
|
||||
|
||||
} else if (!strcmp(argv[mode_arg], "mtk")) {
|
||||
mode = GPS_DRIVER_MODE_MTK;
|
||||
|
||||
} else if (!strcmp(argv[mode_arg], "ash")) {
|
||||
mode = GPS_DRIVER_MODE_ASHTECH;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Allow to use a second gps device */
|
||||
for (int i = 2; i < argc; i++) {
|
||||
if (!strcmp(argv[i], "-dualgps")) {
|
||||
@@ -1100,10 +1133,10 @@ gps_main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
gps::start(device_name, fake_gps, enable_sat_info, 1);
|
||||
gps::start(device_name, mode, interface, fake_gps, enable_sat_info, 1);
|
||||
|
||||
if (device_name2) {
|
||||
gps::start(device_name2, fake_gps, enable_sat_info, 2);
|
||||
gps::start(device_name2, mode, interface, fake_gps, enable_sat_info, 2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user