gpgsa.cpp
Go to the documentation of this file.
00001 // *****************************************************************************
00002 //
00003 // Copyright (c) 2017, Southwest Research Institute® (SwRI®)
00004 // All rights reserved.
00005 //
00006 // Redistribution and use in source and binary forms, with or without
00007 // modification, are permitted provided that the following conditions are met:
00008 //     * Redistributions of source code must retain the above copyright
00009 //       notice, this list of conditions and the following disclaimer.
00010 //     * Redistributions in binary form must reproduce the above copyright
00011 //       notice, this list of conditions and the following disclaimer in the
00012 //       documentation and/or other materials provided with the distribution.
00013 //     * Neither the name of Southwest Research Institute® (SwRI®) nor the
00014 //       names of its contributors may be used to endorse or promote products
00015 //       derived from this software without specific prior written permission.
00016 //
00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00018 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020 // ARE DISCLAIMED. IN NO EVENT SHALL SOUTHWEST RESEARCH INSTITUTE BE LIABLE FOR ANY
00021 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00022 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00023 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00024 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00026 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027 //
00028 // *****************************************************************************
00029 
00030 #include <novatel_gps_driver/parsers/gpgsa.h>
00031 #include <boost/make_shared.hpp>
00032 
00033 const std::string novatel_gps_driver::GpgsaParser::MESSAGE_NAME = "GPGSA";
00034 
00035 uint32_t novatel_gps_driver::GpgsaParser::GetMessageId() const
00036 {
00037   return 0;
00038 }
00039 
00040 const std::string novatel_gps_driver::GpgsaParser::GetMessageName() const
00041 {
00042   return MESSAGE_NAME;
00043 }
00044 
00045 novatel_gps_msgs::GpgsaPtr novatel_gps_driver::GpgsaParser::ParseAscii(const novatel_gps_driver::NmeaSentence& sentence) throw(ParseException)
00046 {
00047   // Check the length first -- should be 18 elements long
00048   const size_t LENGTH = 18;
00049   if (sentence.body.size() != LENGTH)
00050   {
00051     std::stringstream error;
00052     error << "Expected GPGSA length " << LENGTH
00053           << ", actual length " << sentence.body.size();
00054     throw ParseException(error.str());
00055   }
00056 
00057   novatel_gps_msgs::GpgsaPtr msg = boost::make_shared<novatel_gps_msgs::Gpgsa>();
00058   msg->message_id = sentence.body[0];
00059   msg->auto_manual_mode = sentence.body[1];
00060   ParseUInt8(sentence.body[2], msg->fix_mode);
00061   // Words 3-14 of the sentence are SV IDs. Copy only the non-null strings.
00062   msg->sv_ids.resize(12, 0);
00063   size_t n_svs = 0;
00064   for (std::vector<std::string>::const_iterator id = sentence.body.begin()+3; id < sentence.body.begin()+15; ++id)
00065   {
00066     if (! id->empty())
00067     {
00068       ParseUInt8(*id, msg->sv_ids[n_svs]);
00069       ++n_svs;
00070     }
00071   }
00072   msg->sv_ids.resize(n_svs);
00073 
00074   ParseFloat(sentence.body[15], msg->pdop);
00075   ParseFloat(sentence.body[16], msg->hdop);
00076   ParseFloat(sentence.body[17], msg->vdop);
00077   return msg;
00078 }


novatel_gps_driver
Author(s):
autogenerated on Sun Oct 8 2017 02:40:29