• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

/home/jgoppert/Projects/ap/libraries/AP_GPS/AP_GPS_SIRF.h

Go to the documentation of this file.
00001 // -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: t -*-
00002 //
00003 //  SiRF Binary GPS driver for ArduPilot and ArduPilotMega.
00004 //      Code by Michael Smith.
00005 //
00006 //      This library is free software; you can redistribute it and / or
00007 //      modify it under the terms of the GNU Lesser General Public
00008 //      License as published by the Free Software Foundation; either
00009 //      version 2.1 of the License, or (at your option) any later version.
00010 //
00011 #ifndef AP_GPS_SIRF_h
00012 #define AP_GPS_SIRF_h
00013 
00014 #include <GPS.h>
00015 
00016 #define SIRF_SET_BINARY "$PSRF100,0,38400,8,1,0*3C"
00017 
00018 class AP_GPS_SIRF : public GPS {
00019 public:
00020         AP_GPS_SIRF(Stream *s);
00021 
00022         virtual void    init();
00023         virtual bool    read();
00024 
00025 private:
00026 #pragma pack(1)
00027         struct sirf_geonav {
00028                 uint16_t        fix_invalid;
00029                 uint16_t        fix_type;
00030                 uint16_t        week;
00031                 uint32_t        time;
00032                 uint16_t        year;
00033                 uint8_t         month;
00034                 uint8_t         day;
00035                 uint8_t         hour;
00036                 uint8_t         minute;
00037                 uint16_t        second;
00038                 uint32_t        satellites_used;
00039                 int32_t         latitude;
00040                 int32_t         longitude;
00041                 int32_t         altitude_ellipsoid;
00042                 int32_t         altitude_msl;
00043                 int8_t          map_datum;
00044                 int16_t         ground_speed;
00045                 int16_t         ground_course;
00046                 int16_t         res1;
00047                 int16_t         climb_rate;
00048                 uint16_t        heading_rate;
00049                 uint32_t        horizontal_position_error;
00050                 uint32_t        vertical_position_error;
00051                 uint32_t        time_error;
00052                 int16_t         horizontal_velocity_error;
00053                 int32_t         clock_bias;
00054                 uint32_t        clock_bias_error;
00055                 int32_t         clock_drift;
00056                 uint32_t        clock_drift_error;
00057                 uint32_t        distance;
00058                 uint16_t        distance_error;
00059                 uint16_t        heading_error;
00060                 uint8_t         satellites;
00061                 uint8_t         hdop;
00062                 uint8_t         mode_info;
00063         };
00064 #pragma pack(pop)
00065         enum sirf_protocol_bytes {
00066                 PREAMBLE1 = 0xa0,
00067                 PREAMBLE2 = 0xa2,
00068                 POSTAMBLE1 = 0xb0,
00069                 POSTAMBLE2 = 0xb3,
00070                 MSG_GEONAV = 0x29
00071         };
00072         enum sirf_fix_type {
00073                 FIX_3D = 0x6,
00074                 FIX_MASK = 0x7
00075         };
00076 
00077 
00078         // State machine state
00079         uint8_t                 _step;
00080         uint16_t                _checksum;
00081         bool                    _gather;
00082         uint16_t                _payload_length;
00083         uint16_t                _payload_counter;
00084         uint8_t                 _msg_id;
00085 
00086         // Message buffer
00087         union {
00088                 sirf_geonav             nav;
00089                 uint8_t                 bytes[];
00090         } _buffer;
00091 
00092         bool                    _parse_gps(void);
00093         void                    _accumulate(uint8_t val);
00094 };
00095 
00096 #endif // AP_GPS_SIRF_h

Generated for ArduPilot Libraries by doxygen