* add C027_Support fork
Fork of C027_Support by
Diff: GPS.h
- Revision:
- 38:e6cab4632d84
- Parent:
- 31:a0bed6c1e05d
- Child:
- 39:9b4b9433e220
diff -r cc3433329d66 -r e6cab4632d84 GPS.h --- a/GPS.h Thu Apr 10 13:44:54 2014 +0000 +++ b/GPS.h Fri Apr 11 16:30:54 2014 +0000 @@ -13,6 +13,8 @@ #define _C027DEFAULT(name) #endif +/** basic gps parser class +*/ class GPSParser { public: @@ -44,41 +46,120 @@ static const char toHex[16]; }; +/** gps class which uses a serial port + as physical interface. +*/ class GPSSerial : public SerialPipe, public GPSParser { public: + /** Constructor + \param tx is the serial ports transmit pin (gps to CPU) + \param rx is the serial ports receive pin (CPU to gps) + \param baudrate the baudrate of the gps use 9600 + \param rxSize the size of the serial rx buffer + \param txSize the size of the serial tx buffer + */ GPSSerial(PinName tx _C027DEFAULT( GPSTXD ), PinName rx _C027DEFAULT( GPSRXD ), int baudrate _C027DEFAULT( GPSBAUD ), int rxSize = 256 , int txSize = 128 ); + /** Get a line from the physical interface. + \param buf the buffer to store it + \param len size of the buffer + \return type and length if something was found, + WAIT if not enough data is available + NOT_FOUND if nothing was found + */ virtual int getMessage(char* buf, int len); protected: + /** Write bytes to the physical interface. + \param buf the buffer to write + \param len size of the buffer to write + \return bytes written + */ virtual int _send(const void* buf, int len); }; +/** gps class which uses a i2c as physical interface. +*/ class GPSI2C : public I2C, public GPSParser { public: + /** Constructor + \param sda is the I2C SDA pin (between CPU and GPS) + \param scl is the I2C SCL pin (CPU to GPS) + \param adr the I2C address of the GPS set to (66<<1) + \param rxSize the size of the serial rx buffer + */ GPSI2C(PinName sda _C027DEFAULT( GPSSDA ), PinName scl _C027DEFAULT( GPSSCL ), unsigned char i2cAdr _C027DEFAULT( GPSADR ), int rxSize = 256 ); + /** helper function to probe the i2c device + \return true if successfully detected the gps. + */ bool detect(void); + /** Get a line from the physical interface. + \param buf the buffer to store it + \param len size of the buffer + \return type and length if something was found, + WAIT if not enough data is available + NOT_FOUND if nothing was found + */ virtual int getMessage(char* buf, int len); + + /** send a buffer + \param buf the buffer to write + \param len size of the buffer to write + \return bytes written + */ virtual int send(const char* buf, int len); + + /** send a NMEA message, this function just takes the + payload and calculates and adds checksum. ($ and *XX\r\n will be added) + \param buf the message payload to write + \param len size of the message payload to write + \return total bytes written + */ virtual int sendNmea(const char* buf, int len); + + /** send a UBX message, this function just takes the + payload and calculates and adds checksum. + \param cls the UBX class id + \param id the UBX message id + \param buf the message payload to write + \param len size of the message payload to write + \return total bytes written + */ virtual int sendUbx(unsigned char cls, unsigned char id, const void* buf = NULL, int len = 0); protected: + /** check if the port is writeable (like SerialPipe) + \return true if writeable + */ bool writeable(void) { return true; } + /** Write a character (like SerialPipe) + \param c the character to write + \return true if succesffully written + */ bool putc(int c) { char ch = c; return send(&ch, 1); } + /** Write bytes to the physical interface. + \param buf the buffer to write + \param len size of the buffer to write + \return bytes written + */ virtual int _send(const void* buf, int len); - int _get(char* buf, int len); // read the NMEA or UBX stream + /** read bytes from the physical interface. + \param buf the buffer to read into + \param len size of the read buffer + \return bytes read + */ + int _get(char* buf, int len); - Pipe<char> _pipe; - bool found; - unsigned char _i2cAdr; - static const char REGLEN; - static const char REGSTREAM; + Pipe<char> _pipe; //!< the rx pipe + bool found; //!< flag if device is detected. + unsigned char _i2cAdr; //!< the i2c address + static const char REGLEN; //!< the length i2c register address + static const char REGSTREAM;//!< the stream i2c register address };