インターフェース2014年10月号のu-blox C027で3G通信する記事で使用したプログラム。   CQ publishing Interface 2014.10 issue, C027 3G test program.

Dependencies:   C027_Support C027_SupportTest mbed picojson

Fork of C027_SupportTest by u-blox

インターフェース2014年10月号のu-blox C027で3G通信する記事で使用したプログラムです。

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