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.

Revision:
39:9b4b9433e220
Parent:
38:e6cab4632d84
Child:
40:295099ff5338
--- a/GPS.h	Fri Apr 11 16:30:54 2014 +0000
+++ b/GPS.h	Fri Apr 11 19:16:03 2014 +0000
@@ -18,32 +18,139 @@
 class GPSParser
 {
 public:
-    #define WAIT      -1
-    #define NOT_FOUND  0
+    // 
+    #define WAIT      -1 //!< wait for more incoming data (the start of a message was found, or no data available)
+    #define NOT_FOUND  0 //!< a parser concluded the the current offset of the pipe doe not contain a valid message
+    
+    #define UNKNOWN     0x000000        //!< message type is unknown 
+    #define UBX         0x100000        //!< message if of protocol NMEA
+    #define NMEA        0x200000        //!< message if of protocol UBX
+    #define LENGTH(x)   (x & 0x00FFFF)  //!< extract/mask the length
+    #define PROTOCOL(x) (x & 0xFF0000)  //!< extract/mask the type
+
+    /** Get a line from the physical interface. This fucntion 
+        needs to be implemented in the inherited class.
+        \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) = 0;
     
-    #define UNKNOWN     0x000000
-    #define UBX         0x100000
-    #define NMEA        0x200000
-    #define LENGTH(x)   (x & 0x00FFFF)
-    #define PROTOCOL(x) (x & 0xFF0000)
-
-    virtual int getMessage(char* buf, int len) = 0; 
+    /** 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);
-    virtual int sendUbx(unsigned char cls, unsigned char id, const void* buf = NULL, int len = 0);
+    
+    /** 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 send(const char* buf, int len);
+    
+    /** Power off the gps, it can be again woken up by an 
+        edge on the serial port on the external interrupt pin. 
+    */
     void powerOff(void);
     
+    /** get the first character of a NMEA field
+        \param ix the index of the field to find
+        \param start the start of the buffer
+        \param end the end of the buffer
+        \return the pointer to the first character of the field. 
+    */
     static const char* findNmeaItemPos(int ix, const char* start, const char* end);
+    
+    /** extract a double value from a buffer containing a NMEA message
+        \param ix the index of the field to extract
+        \param buf the NMEA message
+        \param len the size of the NMEA message
+        \param val the extracted value
+        \return true if successful, false otherwise
+    */
     static bool getNmeaItem(int ix, char* buf, int len, double& val);
+    
+    /** extract a interger value from a buffer containing a NMEA message
+        \param ix the index of the field to extract
+        \param buf the NMEA message
+        \param len the size of the NMEA message
+        \param val the extracted value
+        \param base the numeric base to be used (e.g. 8, 10 or 16)
+        \return true if successful, false otherwise
+    */
     static bool getNmeaItem(int ix, char* buf, int len, int& val, int base/*=10*/);
+    
+    /** extract a char value from a buffer containing a NMEA message
+        \param ix the index of the field to extract
+        \param buf the NMEA message
+        \param len the size of the NMEA message
+        \param val the extracted value
+        \return true if successful, false otherwise
+    */
     static bool getNmeaItem(int ix, char* buf, int len, char& val);
+    
+    /** extract a latitude/longitude value from a buffer containing a NMEA message
+        \param ix the index of the field to extract (will extract ix and ix + 1)
+        \param buf the NMEA message
+        \param len the size of the NMEA message
+        \param val the extracted latitude or longitude
+        \return true if successful, false otherwise
+    */
     static bool getNmeaAngle(int ix, char* buf, int len, double& val);
+    
 protected:
+    /** Get a line from the physical interface. 
+        \param pipe the receiveing pipe to parse messages 
+        \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
+    */ 
     static int _getMessage(Pipe<char>* pipe, char* buf, int len);
+    
+    /** Check if the current offset of the pipe contains a NMEA message.
+        \param pipe the receiveing pipe to parse messages 
+        \param len numer of bytes to parse at maximum
+        \return length if something was found (including the NMEA frame) 
+                WAIT if not enough data is available
+                NOT_FOUND if nothing was found
+    */ 
     static int _parseNmea(Pipe<char>* pipe, int len);
+    
+    /** Check if the current offset of the pipe contains a UBX message.
+        \param pipe the receiveing pipe to parse messages 
+        \param len numer of bytes to parse at maximum
+        \return length if something was found (including the UBX frame)
+                WAIT if not enough data is available
+                NOT_FOUND if nothing was found
+    */ 
     static int _parseUbx(Pipe<char>* pipe, int len);
+    
+    /** Write bytes to the physical interface. This function 
+        needs to be implemented by the inherited class. 
+        \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) = 0;
-    static const char toHex[16];
+    
+    static const char toHex[16]; //!< num to hex conversion
 };
 
 /** gps class which uses a serial port 
@@ -64,6 +171,7 @@
               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
@@ -72,6 +180,7 @@
                 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
@@ -96,6 +205,7 @@
            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. 
     */ 
@@ -133,23 +243,28 @@
         \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);
+    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);
+    
     /** read bytes from the physical interface.
         \param buf the buffer to read into
         \param len size of the read buffer