An implementation of the Sirf Binary and NMEA Protocol for gps devices using the SiRFstarIII chipset
GpsInterface.h
- Committer:
- p3p
- Date:
- 2012-06-28
- Revision:
- 0:43da35949666
File content as of revision 0:43da35949666:
#ifndef SIRF_PROTOCOL_GPS_INTERFACE #define SIRF_PROTOCOL_GPS_INTERFACE #include "sIRFstarIII.h" namespace SirfStarIII { class GpsInterface : public SirfStarIII { public: GpsInterface(PinName tx, PinName rx); virtual ~GpsInterface() {} void onReceiveGeodeticNavigationData(SimpleSerialProtocol::Packet* packet); void onReceiveMeasuredTrackingData(SimpleSerialProtocol::Packet* packet); void onReceiveDGPSStatus(SimpleSerialProtocol::Packet* packet); void onReceiveRMC(SimpleSerialProtocol::Packet* packet); class Coordinate { public: Coordinate() { _gps_format = 0; _dec_degrees = 0; _degrees = 0; _minutes = 0; _seconds = 0; } ~Coordinate() {} float _gps_format; char _indicator; float _dec_degrees; uint16_t _degrees; uint16_t _minutes; float _seconds; void set(float raw, char indicator) { if(indicator == '0')return; if (raw < 10000) { raw = raw / 100; } else { raw = raw / 1000; } _gps_format = raw; _degrees = static_cast<uint16_t>(raw); raw = (raw - _degrees)*100; _minutes = static_cast<uint16_t>(raw); _seconds = 60 * (raw - _minutes); _dec_degrees = _degrees + (float)((float)_minutes/60) + (float)(_seconds/3600); _indicator = indicator; if(indicator == 'S' || indicator == 'W') _dec_degrees *= -1; } void operator= (float param) { _dec_degrees = param; } }; struct FixData { enum Type { NoFix, Fixed, DifFix, Reserved1, Reserved2, Reserved3, DeadReckFix }; uint8_t valid; uint8_t fix_type; uint8_t sats; } _fix; struct Position { Coordinate longitude; Coordinate latitude; float altitude; float speed; float course; uint8_t fix_type; } _position; struct Time { uint16_t year; uint8_t month; uint8_t day; uint8_t hours; uint8_t minutes; uint8_t seconds; } _time; }; } #endif