support library for C027 helper functions for Buffer Pipes, Buffered Serial Port (rtos capable) and GPS parsing. It includes modem APIs for USSD, SMS and Sockets.

Dependents:   HTTPClient_Cellular_HelloWorld Cellular_HelloMQTT MbedSmartRestMain Car_Bon_car_module ... more

This library is intended to be used with u-blox products such as the C027 or a shield with u-blox cellular and GPS modules like the cellular and positioning shield from Embedded Artist.

For 2G/GSM and 3G/UMTS you need to:

  • have a SIM card and know its PIN number
  • need to know you network operators APN setting These setting should be passed to the connect or init and join functions. You can also extend the APN database in MDMAPN.h.

For CDMA products you need to make sure that you have provisioned and activated the modem with either Sprint or Verizon.

Committer:
mazgch
Date:
Fri Oct 25 08:47:22 2013 +0000
Revision:
2:b6012cd91657
Parent:
1:f41579f4e2ed
Child:
3:c7cd4887560d
GPS for Serial and I2c

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 #include "C027_PinNames.h"
mazgch 2:b6012cd91657 7
mazgch 2:b6012cd91657 8 class GPSParser
mazgch 2:b6012cd91657 9 {
mazgch 2:b6012cd91657 10 public:
mazgch 2:b6012cd91657 11 #define WAIT -1
mazgch 2:b6012cd91657 12 #define NOT_FOUND 0
mazgch 2:b6012cd91657 13
mazgch 2:b6012cd91657 14 #define UBX 0x100000
mazgch 2:b6012cd91657 15 #define NMEA 0x200000
mazgch 2:b6012cd91657 16 #define LENGTH(x) (x & 0x00FFFF)
mazgch 2:b6012cd91657 17 #define PROTOCOL(x) (x & 0xFF0000)
mazgch 1:f41579f4e2ed 18
mazgch 2:b6012cd91657 19 virtual int getMessage(char* buf, int len) = 0;
mazgch 2:b6012cd91657 20 virtual int putNmea(const char* buf, int len) = 0;
mazgch 2:b6012cd91657 21 virtual int putUbx(const unsigned char cls, unsigned char id, unsigned char* buf, int len) = 0;
mazgch 2:b6012cd91657 22
mazgch 2:b6012cd91657 23 static const char* findNmeaItemPos(int ix, const char* start, const char* end);
mazgch 2:b6012cd91657 24 static bool getNmeaItem(int ix, char* buf, int len, double& val);
mazgch 2:b6012cd91657 25 static bool getNmeaItem(int ix, char* buf, int len, int& val, int base/*=10*/);
mazgch 2:b6012cd91657 26 static bool getNmeaItem(int ix, char* buf, int len, char& val);
mazgch 2:b6012cd91657 27 protected:
mazgch 2:b6012cd91657 28 static int _getMessage(Pipe<char>* pipe, char* buf, int len);
mazgch 2:b6012cd91657 29 static int _parseNmea(Pipe<char>* pipe, int len);
mazgch 2:b6012cd91657 30 static int _parseUbx(Pipe<char>* pipe, int len);
mazgch 2:b6012cd91657 31 static int _putNmea(Stream* stream, const char* buf, int len);
mazgch 2:b6012cd91657 32 static int _putUbx(Stream* stream, const unsigned char cls, unsigned char id, unsigned char* buf, int len);
mazgch 2:b6012cd91657 33 static const char toHex[16];
mazgch 2:b6012cd91657 34 };
mazgch 2:b6012cd91657 35
mazgch 2:b6012cd91657 36 class GPSSerial : public Serial, public GPSParser
mazgch 1:f41579f4e2ed 37 {
mazgch 1:f41579f4e2ed 38 public:
mazgch 2:b6012cd91657 39 GPSSerial(PinName tx = GPSTXD, PinName rx = GPSRXD, int baudrate = GPSBAUD);
mazgch 2:b6012cd91657 40 virtual ~GPSSerial(void);
mazgch 2:b6012cd91657 41
mazgch 2:b6012cd91657 42 virtual int getMessage(char* buf, int len);
mazgch 2:b6012cd91657 43 virtual int putNmea(const char* buf, int len)
mazgch 2:b6012cd91657 44 { return _putNmea(this, buf, len); }
mazgch 2:b6012cd91657 45 virtual int putUbx(const unsigned char cls, unsigned char id, unsigned char* buf, int len)
mazgch 2:b6012cd91657 46 { return _putUbx(this, cls, id, buf, len); }
mazgch 2:b6012cd91657 47 protected:
mazgch 2:b6012cd91657 48 void serialRxIrq(void);
mazgch 2:b6012cd91657 49 virtual char next(void) { return _pipe.next(); }
mazgch 2:b6012cd91657 50 Pipe<char> _pipe;
mazgch 1:f41579f4e2ed 51 };
mazgch 2:b6012cd91657 52
mazgch 2:b6012cd91657 53 class GPSI2C : public I2C, public GPSParser
mazgch 2:b6012cd91657 54 {
mazgch 2:b6012cd91657 55 public:
mazgch 2:b6012cd91657 56 GPSI2C(PinName sda = GPSSDA, PinName scl = GPSSCL);
mazgch 2:b6012cd91657 57 bool detect(void);
mazgch 2:b6012cd91657 58
mazgch 2:b6012cd91657 59 virtual int getMessage(char* buf, int len);
mazgch 2:b6012cd91657 60 //
mazgch 2:b6012cd91657 61 virtual int putNmea(const char* buf, int len)
mazgch 2:b6012cd91657 62 { return 0/*_putNmea(NULL, buf, len)*/; }
mazgch 2:b6012cd91657 63 virtual int putUbx(const unsigned char cls, unsigned char id, unsigned char* buf, int len)
mazgch 2:b6012cd91657 64 { return 0/*_putUbx(NULL, cls, id, buf, len)*/; }
mazgch 2:b6012cd91657 65 protected:
mazgch 2:b6012cd91657 66 virtual char next(void) { return _pipe.next(); }
mazgch 2:b6012cd91657 67 int _get(char* buf, int len); // read the NMEA or UBX stream
mazgch 2:b6012cd91657 68 int _put(const char* buf, int len); // Write the NMEA or UBX stream
mazgch 2:b6012cd91657 69
mazgch 2:b6012cd91657 70 Pipe<char> _pipe;
mazgch 2:b6012cd91657 71 bool found;
mazgch 2:b6012cd91657 72 static const char REGLEN;
mazgch 2:b6012cd91657 73 static const char REGSTREAM;
mazgch 2:b6012cd91657 74 };