An implementation of the Sirf Binary and NMEA Protocol for gps devices using the SiRFstarIII chipset

sIRFstarIII.h

Committer:
p3p
Date:
2012-06-28
Revision:
0:43da35949666

File content as of revision 0:43da35949666:

#ifndef SIRF_PROTOCOL
#define SIRF_PROTOCOL

#include "mbed.h"
#include "MODSERIAL.h"
#include "Protocol.h"
#include "BinaryPackets.h"
#include "NmeaPackets.h"

namespace SirfStarIII {

enum ProtocolMode {
    BINARY,
    NMEA    
};

class SirfStarIII : public SimpleSerialProtocol::Protocol {
public:
    SirfStarIII(PinName tx, PinName rx);
    virtual ~SirfStarIII();
    
    virtual void initialise();
    virtual void initialise(ProtocolMode mode, uint32_t baud_rate);
    virtual void receive();
    virtual void sendPacket(SimpleSerialProtocol::Packet* packet);
    
    void receiveBinary();
    uint16_t checksumBinary(uint8_t* packet, uint16_t packet_size);
    void sendBinaryPacket(SimpleSerialProtocol::Packet* packet);
    
    void receiveNMEA();
    uint8_t checksumNMEA(const char * command);
    void sendNMEAPacket(SimpleSerialProtocol::Packet* packet);
    
    void selectMode(ProtocolMode mode, uint32_t baud, bool find_baud = false);
    void selectBaud(uint32_t baud);
    
    void NMEAChangeBaud(uint32_t baud_rate);
    void BinaryChangeBaud(uint32_t baud_rate);
        
    ProtocolMode _mode;
};

}

#endif