diff options
author | michael-west <michael.west@ettus.com> | 2017-02-01 12:59:09 -0800 |
---|---|---|
committer | Ashish Chaudhari <ashish.chaudhari@ettus.com> | 2017-02-01 15:20:04 -0800 |
commit | 63fcfb9574d64797b807a0dd356f5d7bfc48f082 (patch) | |
tree | f863850874cd0898af6142faec623bc89121d95a /host/lib | |
parent | a8a638d5f848f20b1cce1fa3456a0671e9a0675f (diff) | |
download | uhd-63fcfb9574d64797b807a0dd356f5d7bfc48f082.tar.gz uhd-63fcfb9574d64797b807a0dd356f5d7bfc48f082.tar.bz2 uhd-63fcfb9574d64797b807a0dd356f5d7bfc48f082.zip |
GPSDO: Improved detection
- Added re-sending of *IDN? command if no reply or unexpected string (i.e. during GPSDO firmware initialization)
- Shortened detection timeout to return sooner if no GPSDO present (faster initialization)
Diffstat (limited to 'host/lib')
-rw-r--r-- | host/lib/usrp/gps_ctrl.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/host/lib/usrp/gps_ctrl.cpp b/host/lib/usrp/gps_ctrl.cpp index f4a42af34..447a13c33 100644 --- a/host/lib/usrp/gps_ctrl.cpp +++ b/host/lib/usrp/gps_ctrl.cpp @@ -203,13 +203,15 @@ public: //first we look for an internal GPSDO _flush(); //get whatever junk is in the rx buffer right now, and throw it away + _send("*IDN?\r\n"); //request identity from the GPSDO //then we loop until we either timeout, or until we get a response that indicates we're a JL device - const boost::system_time comm_timeout = boost::get_system_time() + milliseconds(GPS_COMM_TIMEOUT_MS); + //maximum response time was measured at ~320ms, so we set the timeout at 650ms + const boost::system_time comm_timeout = boost::get_system_time() + milliseconds(650); while(boost::get_system_time() < comm_timeout) { reply = _recv(); - //known devices are JL "FireFly" and "LC_XO" + //known devices are JL "FireFly", "GPSTCXO", and "LC_XO" if(reply.find("FireFly") != std::string::npos or reply.find("LC_XO") != std::string::npos or reply.find("GPSTCXO") != std::string::npos) { @@ -218,14 +220,22 @@ public: } else if(reply.substr(0, 3) == "$GP") { i_heard_some_nmea = true; //but keep looking } else if(not reply.empty()) { - i_heard_something_weird = true; //probably wrong baud rate + // wrong baud rate or firmware still initializing + i_heard_something_weird = true; + _send("*IDN?\r\n"); //re-send identity request + } else { + // _recv timed out + _send("*IDN?\r\n"); //re-send identity request } } - if((i_heard_some_nmea) && (_gps_type != GPS_TYPE_INTERNAL_GPSDO)) _gps_type = GPS_TYPE_GENERIC_NMEA; - - if((_gps_type == GPS_TYPE_NONE) && i_heard_something_weird) { - UHD_MSG(error) << "GPS invalid reply \"" << reply << "\", assuming none available" << std::endl; + if (_gps_type == GPS_TYPE_NONE) + { + if(i_heard_some_nmea) { + _gps_type = GPS_TYPE_GENERIC_NMEA; + } else if(i_heard_something_weird) { + UHD_MSG(error) << "GPS invalid reply \"" << reply << "\", assuming none available" << std::endl; + } } switch(_gps_type) { |