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
...

Files at this revision

API Documentation at this revision

Comitter:
mazgch
Date:
Mon May 05 15:45:31 2014 +0000
Parent:
9:26f694bc31b4
Child:
11:b8505cbbd55c
Commit message:
allow to compile on third party platforms

Changed in this revision

C027.lib Show annotated file Show diff for this revision Revisions of this file
C027_Support.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- a/C027.lib	Thu Apr 17 15:10:09 2014 +0000
+++ b/C027.lib	Mon May 05 15:45:31 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/teams/ublox/code/C027/#06d5a702779c
+http://mbed.org/teams/ublox/code/C027/#61d31c12230d
--- a/C027_Support.lib	Thu Apr 17 15:10:09 2014 +0000
+++ b/C027_Support.lib	Mon May 05 15:45:31 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/teams/ublox/code/C027_Support/#a89a7a505991
+http://mbed.org/teams/ublox/code/C027_Support/#ebc2fd8dcf21
--- a/main.cpp	Thu Apr 17 15:10:09 2014 +0000
+++ b/main.cpp	Mon May 05 15:45:31 2014 +0000
@@ -1,5 +1,4 @@
 #include "mbed.h"
-#include "C027.h"
 #include "GPS.h"
 #include "MDM.h"
 
@@ -23,52 +22,81 @@
 */
 #define PASSWORD    NULL 
 
-//----------------------------------------------------------------------
 
-C027 c027;
+//----------------------------------------------------------------------
+#if defined(TARGET_UBLOX_C027) || defined(TARGET_LPC1768)
+  //#define C027_USEONBOARD // remove this if you have a GSM/GPS shield
+  #ifdef C027_USEONBOARD
+    #include "C027.h"
+    C027 c027;
+  #elif defined(TARGET_LPC1768) 
+    // We assume we have a C027 (not an Arch Pro)
+    #define D15  P0_1
+    #define D14  P0_0
+    #define D4   P2_12
+    #define D1   P4_28
+    #define D0   P4_29
+    #define LED1 P3_25
+  #endif
+#endif
+
+#ifndef C027_USEONBOARD
+  #define GPSSCL    D15
+  #define GPSSDA    D14
+  #define GPSADR   (66<<1) // GPS I2C Address
+  #define MDMPWRON  D4
+  #define MDMTXD    D1
+  #define MDMRXD    D0
+  #define MDMCTS    NC
+  #define MDMRTS    NC
+  #define MDMBAUD   115200
+#endif
+
+// no tracing if serial is shared with the VCP
+#define TRACE     ((USBRX==MDMRXD)||(USBTX==MDMTXD))?:printf
 
 void printDeviceStatus(MDMParser::DevStatus* status) {
-    printf("Device Status:\r\n");
+    TRACE("Device Status:\r\n");
     const char* txtDev[] = { "Unknown", "SARA-G350", "LISA-U200", "LISA-C200" };
     if (status->dev < sizeof(txtDev)/sizeof(*txtDev) && (status->dev != MDMParser::DEV_UNKNOWN))
-        printf("  Device:       %s\r\n", txtDev[status->dev]);
+        TRACE("  Device:       %s\r\n", txtDev[status->dev]);
     const char* txtLpm[] = { "Disabled", "Enabled", "Active" };
     if (status->lpm < sizeof(txtLpm)/sizeof(*txtLpm))
-        printf("  Power Save:   %s\r\n", txtLpm[status->lpm]);
+        TRACE("  Power Save:   %s\r\n", txtLpm[status->lpm]);
     const char* txtSim[] = { "Unknown", "Pin", "Ready" };
     if (status->sim < sizeof(txtSim)/sizeof(*txtSim) && (status->sim != MDMParser::SIM_UNKNOWN))
-        printf("  SIM:          %s\r\n", txtSim[status->sim]);
+        TRACE("  SIM:          %s\r\n", txtSim[status->sim]);
     if (*status->ccid)  
-        printf("  CCID:         %s\r\n", status->ccid);
+        TRACE("  CCID:         %s\r\n", status->ccid);
     if (*status->imei) 
-        printf("  IMEI:         %s\r\n", status->imei);
+        TRACE("  IMEI:         %s\r\n", status->imei);
     if (*status->imsi)  
-        printf("  IMSI:         %s\r\n", status->imsi);
+        TRACE("  IMSI:         %s\r\n", status->imsi);
     if (*status->meid) 
-        printf("  MEID:         %s\r\n", status->meid);
+        TRACE("  MEID:         %s\r\n", status->meid);
     if (*status->manu) 
-        printf("  Manufacturer: %s\r\n", status->manu);
+        TRACE("  Manufacturer: %s\r\n", status->manu);
     if (*status->model)  
-        printf("  Model:        %s\r\n", status->model);
+        TRACE("  Model:        %s\r\n", status->model);
     if (*status->ver)  
-        printf("  Version:      %s\r\n", status->ver);
+        TRACE("  Version:      %s\r\n", status->ver);
 }
 
 void printNetStatus(MDMParser::NetStatus *status)
 {
-    printf("Network Status:\r\n");
+    TRACE("Network Status:\r\n");
     const char* txtReg[] = { "Unknown", "Denied", "None", "Home", "Roaming" };
     if (status->reg < sizeof(txtReg)/sizeof(*txtReg) && (status->reg != MDMParser::REG_UNKNOWN))
-        printf("  Registration:       %s\r\n", txtReg[status->reg]);
+        TRACE("  Registration:       %s\r\n", txtReg[status->reg]);
     const char* txtAct[] = { "Unknown", "GSM", "Edge", "3G", "CDMA" };
     if (status->act < sizeof(txtAct)/sizeof(*txtAct) && (status->act != MDMParser::ACT_UNKNOWN))
-        printf("  Access Technology:  %s\r\n", txtAct[status->act]);
+        TRACE("  Access Technology:  %s\r\n", txtAct[status->act]);
     if (status->rssi) 
-        printf("  Signal Strength:    %d dBm\r\n", status->rssi);
+        TRACE("  Signal Strength:    %d dBm\r\n", status->rssi);
     if (*status->opr)  
-        printf("  Operator:           %s\r\n", status->opr);
+        TRACE("  Operator:           %s\r\n", status->opr);
     if (*status->num)  
-        printf("  Phone Number:       %s\r\n", status->num);
+        TRACE("  Phone Number:       %s\r\n", status->num);
 }
 
 int main(void)
@@ -79,54 +107,70 @@
     Serial pc(USBTX,USBRX);
     pc.baud(115200);
     
-    printf("C027 Support Example\r\n");
+    TRACE("GSM/GPS Support Example\r\n");
 
+#ifdef C027_USEONBOARD
+    // turn on the supplies of the Modem and the GPS
     c027.mdmPower(true);
     c027.gpsPower(true);
+#else
+    // turn on the Modem
+    DigitalOut mdmPwrOn(MDMPWRON, 0);
+    wait_ms(150);
+    mdmPwrOn = 1;
+#endif
     wait(2);
 
+    // Create the GPS object
+#if defined(GPSSCL) && defined(GPSSDA) && defined(GPSADR)
     GPSI2C gps(GPSSDA,GPSSCL,GPSADR);     // use GPSI2C class
-    // GPSSerial gps(GPSTXD,GPSRXD,GPSBAUD); // or GPSSerial class 
+#elif defined(GPSTXD) && defined(GPSRXD) && defined(GPSBAUD)
+    GPSSerial gps(GPSTXD,GPSRXD,GPSBAUD); // or GPSSerial class 
+#else
+    #warning "please define the pins for the GPS"
+#endif
+    // Create the modem object
     MDMSerial mdm(MDMTXD,MDMRXD,MDMBAUD
- #if DEVICE_SERIAL_FC
+#if DEVICE_SERIAL_FC
                 ,MDMRTS,MDMCTS
- #endif
+#endif
                 );
                 
     // initialize the modem 
-    printf("Device Init\r\n");
+    TRACE("Device Init\r\n");
     MDMParser::DevStatus devStatus;
     MDMParser::NetStatus netStatus;
-    if (mdm.init(SIMPIN, &devStatus))
+    bool mdmOk = mdm.init(SIMPIN, &devStatus);
+    if (mdmOk)
     {
         printDeviceStatus(&devStatus);
         
         // wait until we are connected
-        printf("Network Check\r\n");
+        TRACE("Network Check\r\n");
         while (!mdm.checkNetStatus(&netStatus))
             wait_ms(1000);
     
         printNetStatus(&netStatus);
-        printf("Network Join\r\n");
+        TRACE("Network Join\r\n");
         // join the internet connection 
         MDMParser::IP ip = 
             mdm.join(APN,USERNAME,PASSWORD);
         if (ip != NOIP)
         {
-            printf("  IP Address: " IPSTR "\r\n", IPNUM(ip));
-            printf("Socket Create\r\n");
+            TRACE("  IP Address: " IPSTR "\r\n", IPNUM(ip));
+            TRACE("Socket Create\r\n");
             int socket = mdm.socketSocket(MDMParser::IPPROTO_TCP);
             if (socket >= 0)
             {
-                printf("Socket Connect\r\n");
+                TRACE("Socket Connect\r\n");
                 if (mdm.socketConnect(socket, "mbed.org", 80))
                 {
-                    printf("Make a Http Post Request\r\n");
+                    TRACE("Make a Http Post Request\r\n");
                     const char http[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n";
-                    printf("Socket Send\r\n");
+                    TRACE("Socket Send\r\n");
                     mdm.socketSend(socket, http, sizeof(http)-1);
                 
-                    printf("Socket Recving\r\n");
+                    TRACE("Socket Recving\r\n");
                     while (true) {
                         ret = mdm.socketReadable(socket);
                         if (ret > 0)
@@ -134,88 +178,89 @@
                         if (ret < 0)
                             break;
                         else if (ret > 0)
-                            printf("Socket Recv \"%*s\"\r\n", ret, buf);
+                            TRACE("Socket Recv \"%*s\"\r\n", ret, buf);
                     }
-                    printf("Socket Close\r\n");
+                    TRACE("Socket Close\r\n");
                     mdm.socketClose(socket);
                 }
-                printf("Socket Free\r\n");
+                TRACE("Socket Free\r\n");
                 mdm.socketFree(socket);
             }
             
             // disconnect  
-            printf("Network Disconnect\r\n");
+            TRACE("Network Disconnect\r\n");
             mdm.disconnect();
         }
         
         const char* ussd = "*#134#"; // You may get answer "UNKNOWN APPLICATION"
-        printf("Send Ussd Command %s\r\n", ussd);
+        TRACE("Send Ussd Command %s\r\n", ussd);
         ret = mdm.ussdCommand(ussd, buf);
         if (ret > 0) 
-            printf("Got Ussd Answer: \"%*s\"\r\n", ret, buf);
-            
-        printf("Checking SMS and GPS\r\n");
-        char link[128] = "";
-        unsigned int i = 0xFFFFFFFF;
-        const int wait = 100;
-        while (1) {
-            
-            while ((ret = gps.getMessage(buf, sizeof(buf))) > 0)
+            TRACE("Got Ussd Answer: \"%*s\"\r\n", ret, buf);
+    }
+    TRACE("Checking SMS and GPS\r\n");
+    char link[128] = "";
+    unsigned int i = 0xFFFFFFFF;
+    const int wait = 100;
+    bool abort = false;
+    DigitalOut led(LED1);
+    while (!abort) {
+        led = !led;        
+        while ((ret = gps.getMessage(buf, sizeof(buf))) > 0)
+        {
+            int len = LENGTH(ret);
+            //TRACE("NMEA: %.*s\r\n", len-2, msg); 
+            if ((PROTOCOL(ret) == NMEA) && (len > 6) && !strncmp("$GPGLL", buf, 6))
             {
-                int len = LENGTH(ret);
-                //printf("NMEA: %.*s\r\n", len-2, msg); 
-                if ((PROTOCOL(ret) == NMEA) && (len > 6) && !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')
                 {
-                    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); 
-                    }
+                    TRACE("GPS Location: %.5f %.5f\r\n", la, lo); 
+                    sprintf(link, "I am here!\n"
+                                  "https://maps.google.com/?q=%.5f,%.5f", la, lo); 
                 }
             }
-            
-            if (i++ == 10000/wait) {
-                i = 0;
-                // check the network status
-                if (mdm.checkNetStatus(&netStatus))
-                    printNetStatus(&netStatus);
-                    
-                // checking unread sms
-                int ix[8];
-                int n = mdm.smsList("REC UNREAD", ix, 8);
-                if (8 < n) n = 8;
-                while (0 < n--)
-                {
-                    char num[32];
-                    printf("Unread SMS at index %d\r\n", ix[n]);
-                    if (mdm.smsRead(ix[n], num, buf, sizeof(buf))) {
-                        printf("Got SMS from \"%s\" with text \"%s\"\r\n", num, buf);
-                        printf("Delete SMS at index %d\r\n", ix[n]);
-                        mdm.smsDelete(ix[n]);
-                        // provide a reply
-                        const char* reply = "Hello my friend";
-                        if (strstr(buf, /*w*/"here are you"))
-                            reply = *link ? link : "I don't know"; // reply wil location link
-                        printf("Send SMS reply \"%s\" to \"%s\"\r\n", reply, num);
-                        mdm.smsSend(num, reply);
-                    }
+        }
+        if (mdmOk && (i++ == 10000/wait)) {
+            i = 0;
+            // check the network status
+            if (mdm.checkNetStatus(&netStatus))
+                printNetStatus(&netStatus);
+                
+            // checking unread sms
+            int ix[8];
+            int n = mdm.smsList("REC UNREAD", ix, 8);
+            if (8 < n) n = 8;
+            while (0 < n--)
+            {
+                char num[32];
+                TRACE("Unread SMS at index %d\r\n", ix[n]);
+                if (mdm.smsRead(ix[n], num, buf, sizeof(buf))) {
+                    TRACE("Got SMS from \"%s\" with text \"%s\"\r\n", num, buf);
+                    TRACE("Delete SMS at index %d\r\n", ix[n]);
+                    mdm.smsDelete(ix[n]);
+                    // provide a reply
+                    const char* reply = "Hello my friend";
+                    if (strstr(buf, /*w*/"here are you"))
+                        reply = *link ? link : "I don't know"; // reply wil location link
+                    TRACE("Send SMS reply \"%s\" to \"%s\"\r\n", reply, num);
+                    mdm.smsSend(num, reply);
                 }
             }
-            wait_ms(wait);
         }
-        mdm.powerOff();
-        gps.powerOff();
+        wait_ms(wait);
     }
-    printf("Shutdown\r\n");
-    // now it is safe to switch off
+    mdm.powerOff();
+    gps.powerOff();
+    TRACE("Shutdown\r\n");
+#ifdef C027_USEONBOARD
+    // now it is safe to switch LDOs off
     c027.mdmPower(false);
     c027.gpsPower(false);
-    
+#endif    
     return 0;
 }
 
--- a/mbed.bld	Thu Apr 17 15:10:09 2014 +0000
+++ b/mbed.bld	Mon May 05 15:45:31 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/6473597d706e
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/8a40adfe8776
\ No newline at end of file