Browse Source

Adds Auto Mode Scanning

sbg
Miguel Arroyo 9 years ago committed by Lorenz Meier
parent
commit
c6f43689e7
  1. 2
      posix-configs/rpi/px4.config
  2. 32
      src/drivers/gps/gps.cpp

2
posix-configs/rpi/px4.config

@ -7,7 +7,7 @@ df_lsm9ds1_wrapper start -R 4
#df_mpu9250_wrapper start -R 10 #df_mpu9250_wrapper start -R 10
#df_hmc5883_wrapper start #df_hmc5883_wrapper start
df_ms5611_wrapper start df_ms5611_wrapper start
gps start -d /dev/spidev0.0 gps start -d /dev/spidev0.0 -i spi -p ubx
sensors start sensors start
commander start commander start
attitude_estimator_q start attitude_estimator_q start

32
src/drivers/gps/gps.cpp

@ -124,8 +124,9 @@ private:
bool _healthy; ///< flag to signal if the GPS is ok bool _healthy; ///< flag to signal if the GPS is ok
bool _baudrate_changed; ///< flag to signal that the baudrate with the GPS has changed bool _baudrate_changed; ///< flag to signal that the baudrate with the GPS has changed
bool _mode_changed; ///< flag that the GPS mode has changed bool _mode_changed; ///< flag that the GPS mode has changed
bool _mode_auto;
gps_driver_mode_t _mode; ///< current mode gps_driver_mode_t _mode; ///< current mode
gps_driver_interface_t _interface; gps_driver_interface_t _interface; ///< interface
GPSHelper *_helper; ///< instance of GPS parser GPSHelper *_helper; ///< instance of GPS parser
GPS_Sat_Info *_sat_info; ///< instance of GPS sat info data object 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 struct vehicle_gps_position_s _report_gps_pos; ///< uORB topic for gps position
@ -279,6 +280,10 @@ GPS::GPS(const char *path, gps_driver_mode_t mode, gps_driver_interface_t interf
_p_report_sat_info = &_sat_info->_data; _p_report_sat_info = &_sat_info->_data;
memset(_p_report_sat_info, 0, sizeof(*_p_report_sat_info)); memset(_p_report_sat_info, 0, sizeof(*_p_report_sat_info));
} }
if (mode == GPS_DRIVER_MODE_NONE) {
_mode_auto = true;
}
} }
GPS::~GPS() GPS::~GPS()
@ -719,6 +724,9 @@ GPS::task_main()
} }
switch (_mode) { switch (_mode) {
case GPS_DRIVER_MODE_NONE:
_mode = GPS_DRIVER_MODE_UBX;
case GPS_DRIVER_MODE_UBX: case GPS_DRIVER_MODE_UBX:
_helper = new GPSDriverUBX(helper_interface, &GPS::callback, this, &_report_gps_pos, _p_report_sat_info); _helper = new GPSDriverUBX(helper_interface, &GPS::callback, this, &_report_gps_pos, _p_report_sat_info);
break; break;
@ -825,6 +833,26 @@ GPS::task_main()
_rate_rtcm_injection = 0.0f; _rate_rtcm_injection = 0.0f;
} }
} }
if (_mode_auto) {
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;
}
}
} }
} }
@ -1049,7 +1077,7 @@ gps_main(int argc, char *argv[])
bool fake_gps = false; bool fake_gps = false;
bool enable_sat_info = false; bool enable_sat_info = false;
gps_driver_interface_t interface = GPS_DRIVER_UART; gps_driver_interface_t interface = GPS_DRIVER_UART;
gps_driver_mode_t mode = GPS_DRIVER_MODE_UBX; gps_driver_mode_t mode = GPS_DRIVER_MODE_NONE;
if (argc < 2) { if (argc < 2) {
goto out; goto out;

Loading…
Cancel
Save