* add C027_Support fork

Fork of C027_Support by u-blox

Committer:
mazgch
Date:
Wed Apr 09 11:48:04 2014 +0000
Revision:
31:a0bed6c1e05d
Parent:
24:0e287a85ac9e
Child:
38:e6cab4632d84
restructure the modem APIs make them more robust

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mazgch 1:f41579f4e2ed 1 #pragma once
mazgch 1:f41579f4e2ed 2
mazgch 2:b6012cd91657 3 #include "mbed.h"
mazgch 2:b6012cd91657 4 #include "Pipe.h"
mazgch 1:f41579f4e2ed 5 #include "SerialPipe.h"
mazgch 2:b6012cd91657 6
mazgch 19:2b5d097ca15d 7 #ifdef TARGET_UBLOX_C027
mazgch 19:2b5d097ca15d 8 // if we detect the C027 platform we will assign the
mazgch 19:2b5d097ca15d 9 // default pinname and baudrate in the constructor
mazgch 19:2b5d097ca15d 10 // this helper macro will be used.
mazgch 19:2b5d097ca15d 11 #define _C027DEFAULT(name) = name
mazgch 19:2b5d097ca15d 12 #else
mazgch 19:2b5d097ca15d 13 #define _C027DEFAULT(name)
mazgch 19:2b5d097ca15d 14 #endif
mazgch 9:e7a5959ffae1 15
mazgch 2:b6012cd91657 16 class GPSParser
mazgch 2:b6012cd91657 17 {
mazgch 2:b6012cd91657 18 public:
mazgch 2:b6012cd91657 19 #define WAIT -1
mazgch 2:b6012cd91657 20 #define NOT_FOUND 0
mazgch 2:b6012cd91657 21
mazgch 31:a0bed6c1e05d 22 #define UNKNOWN 0x000000
mazgch 2:b6012cd91657 23 #define UBX 0x100000
mazgch 2:b6012cd91657 24 #define NMEA 0x200000
mazgch 2:b6012cd91657 25 #define LENGTH(x) (x & 0x00FFFF)
mazgch 2:b6012cd91657 26 #define PROTOCOL(x) (x & 0xFF0000)
mazgch 1:f41579f4e2ed 27
mazgch 2:b6012cd91657 28 virtual int getMessage(char* buf, int len) = 0;
mazgch 4:c959dd4c5fe8 29 virtual int send(const char* buf, int len);
mazgch 4:c959dd4c5fe8 30 virtual int sendNmea(const char* buf, int len);
mazgch 11:b084552b03fe 31 virtual int sendUbx(unsigned char cls, unsigned char id, const void* buf = NULL, int len = 0);
mazgch 31:a0bed6c1e05d 32 void powerOff(void);
mazgch 2:b6012cd91657 33
mazgch 2:b6012cd91657 34 static const char* findNmeaItemPos(int ix, const char* start, const char* end);
mazgch 2:b6012cd91657 35 static bool getNmeaItem(int ix, char* buf, int len, double& val);
mazgch 2:b6012cd91657 36 static bool getNmeaItem(int ix, char* buf, int len, int& val, int base/*=10*/);
mazgch 2:b6012cd91657 37 static bool getNmeaItem(int ix, char* buf, int len, char& val);
mazgch 20:535ef78655df 38 static bool getNmeaAngle(int ix, char* buf, int len, double& val);
mazgch 2:b6012cd91657 39 protected:
mazgch 2:b6012cd91657 40 static int _getMessage(Pipe<char>* pipe, char* buf, int len);
mazgch 2:b6012cd91657 41 static int _parseNmea(Pipe<char>* pipe, int len);
mazgch 2:b6012cd91657 42 static int _parseUbx(Pipe<char>* pipe, int len);
mazgch 4:c959dd4c5fe8 43 virtual int _send(const void* buf, int len) = 0;
mazgch 2:b6012cd91657 44 static const char toHex[16];
mazgch 2:b6012cd91657 45 };
mazgch 2:b6012cd91657 46
mazgch 9:e7a5959ffae1 47 class GPSSerial : public SerialPipe, public GPSParser
mazgch 1:f41579f4e2ed 48 {
mazgch 1:f41579f4e2ed 49 public:
mazgch 19:2b5d097ca15d 50 GPSSerial(PinName tx _C027DEFAULT( GPSTXD ),
mazgch 19:2b5d097ca15d 51 PinName rx _C027DEFAULT( GPSRXD ),
mazgch 19:2b5d097ca15d 52 int baudrate _C027DEFAULT( GPSBAUD ),
mazgch 19:2b5d097ca15d 53 int rxSize = 256 ,
mazgch 19:2b5d097ca15d 54 int txSize = 128 );
mazgch 2:b6012cd91657 55 virtual int getMessage(char* buf, int len);
mazgch 2:b6012cd91657 56 protected:
mazgch 4:c959dd4c5fe8 57 virtual int _send(const void* buf, int len);
mazgch 1:f41579f4e2ed 58 };
mazgch 2:b6012cd91657 59
mazgch 2:b6012cd91657 60 class GPSI2C : public I2C, public GPSParser
mazgch 2:b6012cd91657 61 {
mazgch 2:b6012cd91657 62 public:
mazgch 19:2b5d097ca15d 63 GPSI2C(PinName sda _C027DEFAULT( GPSSDA ),
mazgch 19:2b5d097ca15d 64 PinName scl _C027DEFAULT( GPSSCL ),
mazgch 19:2b5d097ca15d 65 unsigned char i2cAdr _C027DEFAULT( GPSADR ),
mazgch 19:2b5d097ca15d 66 int rxSize = 256 );
mazgch 2:b6012cd91657 67 bool detect(void);
mazgch 2:b6012cd91657 68
mazgch 2:b6012cd91657 69 virtual int getMessage(char* buf, int len);
mazgch 4:c959dd4c5fe8 70 virtual int send(const char* buf, int len);
mazgch 3:c7cd4887560d 71 virtual int sendNmea(const char* buf, int len);
mazgch 11:b084552b03fe 72 virtual int sendUbx(unsigned char cls, unsigned char id, const void* buf = NULL, int len = 0);
mazgch 2:b6012cd91657 73 protected:
mazgch 9:e7a5959ffae1 74 bool writeable(void) { return true; }
mazgch 9:e7a5959ffae1 75 bool putc(int c) { char ch = c; return send(&ch, 1); }
mazgch 4:c959dd4c5fe8 76 virtual int _send(const void* buf, int len);
mazgch 3:c7cd4887560d 77 int _get(char* buf, int len); // read the NMEA or UBX stream
mazgch 3:c7cd4887560d 78
mazgch 2:b6012cd91657 79 Pipe<char> _pipe;
mazgch 2:b6012cd91657 80 bool found;
mazgch 19:2b5d097ca15d 81 unsigned char _i2cAdr;
mazgch 2:b6012cd91657 82 static const char REGLEN;
mazgch 2:b6012cd91657 83 static const char REGSTREAM;
mazgch 2:b6012cd91657 84 };