C027_Support library test

Dependencies:   C027_Support

Dependents:   C027_SupportTest_xively_location software_test_v1

Fork of Seeed_GPRS_Library_HelloWorld by wei zou

When running this example make sure you have:

  • edited the SIM PIN, APN, USER and PASSWORD for you network operator
  • have inserted a SIM card with enough credits
  • the antennas connected
  • have good reception (especially for GPS)
  • installed the mbed CDC drivers if you run windows
  • connected a terminal program, such as teraterm

The example will connect the modem to the network and attach it. I will place a post request to download a file from mbed website. It will do a USSD request and finally wait for incoming SMS. It will try to answer your SMS (try asking "where are you").

You should see a similar output in your preferred console program:

C027 Support Example
Device Init
Device Status:
  Device:       SARA-G350
  Power Save:   Active
  SIM:          Ready
  CCID:         xxxxxxxxxxxxxxxxxxxxxxxxxxx
  IMEI:         xxxxxxxxxxxxxxxxxxx
  IMSI:         xxxxxxxxxxxxxxxxxxx
  Manufacturer: u-blox
  Model:        SARA-G350
  Version:      08.49
Network Check
Network Status:
  Registration:       Home
  Signal Strength:    -87 dBm
  Operator:           Swisscom
  Phone Number:       +41xxxxxxxxxxx
Network Join
  IP Address: xx.xx.xx.xx
Socket Create
Socket Connect
Make a Http Post Request
Socket Send
Socket Recving
Socket 0: 337 bytes pending
Socket 0: 145 bytes pending
Socket 0: closed by remote host
Socket Recv "HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Thu, 10 Apr 2014 13:09:02 GMT
Content-Type: text/plain
Connection: close
Last-Modified: Fri, 27 Jul 2012 13:30:34 GMT
Cache-Control: max-age=36000
Expires: Thu, 10 Apr 2014 20:43:53 GMT
Vary: Accept-Encoding
X-Mystery-Header: 260358892
X-be: web0_prod_sjc
Age: 8709

Hello world!
"
Socket Close
Socket Free
Network Disconnect
Send Ussd Command *#134#
Got Ussd Answer: "UNKNOWN APPLICATION"
Checking SMS and GPS
GPS Location: 47.28xxx 8.56xxx
GPS Location: 47.28xxx 8.56xxx
...
GPS Location: 47.28xxx 8.56xxx
GPS Location: 47.28xxx 8.56xxx
Network Status:
  Registration:       Home
  Signal Strength:    -89 dBm
  Operator:           Swisscom
  Phone Number:       +41xxxxxxxxx
GPS Location: 47.28xxx 8.56xxx
GPS Location: 47.28xxx 8.56xxx
...
Revision:
27:fe3b383dd4ec
Parent:
24:81f5b43a6585
Child:
28:334263983fcd
--- a/main.cpp	Wed Oct 01 09:19:33 2014 +0000
+++ b/main.cpp	Fri Dec 12 07:50:45 2014 +0000
@@ -48,7 +48,7 @@
 #endif
     // Create the modem object
     MDMSerial mdm;
-    //mdm.setDebug(4); // enable this for debugging issues 
+    mdm.setDebug(4); // enable this for debugging issues 
     // initialize the modem 
     MDMParser::DevStatus devStatus = {};
     MDMParser::NetStatus netStatus = {};
@@ -86,7 +86,9 @@
 
         // join the internet connection 
         MDMParser::IP ip = mdm.join(APN,USERNAME,PASSWORD);
-        if (ip != NOIP)
+        if (ip == NOIP)
+            printf("Not joined");
+        else
         {
             mdm.dumpIp(ip);
             printf("Make a Http Post Request\r\n");
@@ -193,25 +195,29 @@
             //printf("NMEA: %.*s\r\n", len-2, msg); 
             if ((PROTOCOL(ret) == GPSParser::NMEA) && (len > 6))
             {
-                if (!strncmp("$GPGLL", buf, 6)) {
-                    double la = 0, lo = 0;
-                    char ch;
-                    if (gps.getNmeaAngle(1,buf,len,la) && 
-                        gps.getNmeaAngle(3,buf,len,lo) && 
-                        gps.getNmeaItem(6,buf,len,ch) && ch == 'A')
-                    {
-                        printf("GPS Location: %.5f %.5f\r\n", la, lo); 
-                        sprintf(link, "I am here!\n"
-                                      "https://maps.google.com/?q=%.5f,%.5f", la, lo); 
+                // talker is $GA=Galileo $GB=Beidou $GL=Glonass $GN=Combined $GP=GPS
+                if ((buf[0] == '$') || buf[1] == 'G') {
+                    #define _CHECK_TALKER(s) ((buf[3] == s[0]) && (buf[4] == s[1]) && (buf[5] == s[2]))
+                    if (_CHECK_TALKER("GLL")) {
+                        double la = 0, lo = 0;
+                        char ch;
+                        if (gps.getNmeaAngle(1,buf,len,la) && 
+                            gps.getNmeaAngle(3,buf,len,lo) && 
+                            gps.getNmeaItem(6,buf,len,ch) && ch == 'A')
+                        {
+                            printf("GPS Location: %.5f %.5f\r\n", la, lo); 
+                            sprintf(link, "I am here!\n"
+                                          "https://maps.google.com/?q=%.5f,%.5f", la, lo); 
+                        }
+                    } else if (_CHECK_TALKER("GGA") || _CHECK_TALKER("GNS") ) {
+                        double a = 0; 
+                        if (gps.getNmeaItem(9,buf,len,a)) // altitude msl [m]
+                            printf("GPS Altitude: %.1f\r\n", a); 
+                    } else if (_CHECK_TALKER("VTG")) {
+                        double s = 0; 
+                        if (gps.getNmeaItem(7,buf,len,s)) // speed [km/h]
+                            printf("GPS Speed: %.1f\r\n", s); 
                     }
-                } else if (!strncmp("$GPGGA", buf, 6)) {
-                    double a = 0; 
-                    if (gps.getNmeaItem(9,buf,len,a)) // altitude msl [m]
-                        printf("GPS Altitude: %.1f\r\n", a); 
-                } else if (!strncmp("$GPVTG", buf, 6)) {
-                    double s = 0; 
-                    if (gps.getNmeaItem(7,buf,len,s)) // speed [km/h]
-                        printf("GPS Speed: %.1f\r\n", s); 
                 }
             }
         }