インターフェース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:
Tue May 27 09:20:46 2014 +0000
Parent:
18:50e6c4ed8a4a
Child:
20:52f0e5de8c3d
Commit message:
pull latest libs (use latest API)

Changed in this revision

C027.lib 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 May 15 06:16:51 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/teams/ublox/code/C027/#89c45165ee87
--- a/C027_Support.lib	Thu May 15 06:16:51 2014 +0000
+++ b/C027_Support.lib	Tue May 27 09:20:46 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/teams/ublox/code/C027_Support/#041de9a6d93c
+http://mbed.org/teams/ublox/code/C027_Support/#34985b4d821e
--- a/main.cpp	Thu May 15 06:16:51 2014 +0000
+++ b/main.cpp	Tue May 27 09:20:46 2014 +0000
@@ -1,160 +1,106 @@
 #include "mbed.h"
-#include "GPS.h"
-#include "MDM.h"
-
-//----------------------------------------------------------------------
-// You may need to configure these parameters
-
-/** Set your secret SIM pin here "1234"
-*/
-#define SIMPIN      NULL
 
-/** The APN of your network operator, sometimes it is "internet" 
-    check your contract with the network operator
-*/
-#define APN         "gprs.swisscom.ch"
-
-/** Set the user name for your APN, or NULL if not needed
-*/
-#define USERNAME    NULL
-
-/** Set the password for your APN, or NULL if not needed
-*/
-#define PASSWORD    NULL 
-
-//----------------------------------------------------------------------
+//------------------------------------------------------------------------------------
 /* This example was tested on C027-U20 and C027-G35 with the on board modem. 
    
    Additionally it was tested with a shield where the SARA-G350/U260/U270 RX/TX/PWRON 
    is connected to D0/D1/D4 and the GPS SCL/SDA is connected D15/D15. In this 
    configuration the following platforms were tested (it is likely that others 
    will work as well)
-   - U-BLOX:    C027-G35, C027-U20, C027-C20 (for shield remove define C027_USEONBOARD)
+   - U-BLOX:    C027-G35, C027-U20, C027-C20 (for shield set define C027_FORCE_SHIELD)
    - NXP:       LPC1549v2, LPC4088qsb
    - Freescale: FRDM-KL05Z, FRDM-KL25Z, FRDM-KL46Z, FRDM-K64F
    - STM:       NUCLEO-F401RE, NUCLEO-F030R8
                 mount resistors SB13/14 1k, SB62/63 0R
 */
-#if defined(TARGET_UBLOX_C027)
-  #define C027_USEONBOARD // remove if you have the GSM/GPS shield mounted to the C027
-#endif
-
-#ifdef C027_USEONBOARD
-  #include "C027.h"
-  C027 c027;
-#else 
-  #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 DOTRACE ((USBRX!=MDMRXD)&&(USBTX!=MDMTXD))
-#define TRACE     (!DOTRACE)?:printf
+#include "GPS.h"
+#include "MDM.h"
+//------------------------------------------------------------------------------------
+// You need to configure these cellular modem / SIM parameters.
+// These parameters are ignored for LISA-C200 variants and can be left NULL.
+//------------------------------------------------------------------------------------
+//! Set your secret SIM pin here (e.g. "1234"). Check your SIM manual.
+#define SIMPIN      NULL
+/*! The APN of your network operator SIM, sometimes it is "internet" check your 
+    contract with the network operator. You can also try to look-up your settings in 
+    google: https://www.google.de/search?q=APN+list */
+#define APN         "gprs.swisscom.ch"
+//! Set the user name for your APN, or NULL if not needed
+#define USERNAME    NULL
+//! Set the password for your APN, or NULL if not needed
+#define PASSWORD    NULL 
+//------------------------------------------------------------------------------------
 
 int main(void)
 {
     int ret;
-#ifdef TARGET_LPC1768
+#ifdef LARGE_DATA
     char buf[2048] = "";
 #else
     char buf[512] = "";
 #endif
 
-    // only trace if the serial is different from our modem port
-    if (DOTRACE) {
-        Serial pc(USBTX,USBRX);
-        pc.baud(115200);
-    }
-    
-    wait_ms(1000);
-    
-    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;
+    // Create the GPS object
+#if 1   // use GPSI2C class
+    GPSI2C gps;
+#else   // or GPSSerial class 
+    GPSSerial gps; 
 #endif
-    wait(2);
-    
-    // Create the GPS object
-#if GPSADR    // use GPSI2C class
-    GPSI2C gps(GPSSDA,GPSSCL,GPSADR); 
-#elif GPSBAUD // or GPSSerial class 
-    GPSSerial gps(GPSTXD,GPSRXD,GPSBAUD); 
-#else
-    #warning "please define the pins for the GPS"
-#endif
-    
     // Create the modem object
-    MDMSerial mdm(MDMTXD,MDMRXD,MDMBAUD
-#if DEVICE_SERIAL_FC
-                ,MDMRTS,MDMCTS
-#endif
-                );
-    
+    MDMSerial mdm;
+    //mdm.setDebug(4); // enable this for debugging issues 
     // initialize the modem 
-    TRACE("Device Init\r\n");
-    MDMParser::DevStatus devStatus;
-    MDMParser::NetStatus netStatus;
+    MDMParser::DevStatus devStatus = {};
+    MDMParser::NetStatus netStatus = {};
     bool mdmOk = mdm.init(SIMPIN, &devStatus);
+    mdm.dumpDevStatus(&devStatus);
+    if (mdmOk) {
+        // wait until we are connected
+        mdmOk = mdm.registerNet(&netStatus);
+        mdm.dumpNetStatus(&netStatus);
+    }
     if (mdmOk)
     {
-        if (DOTRACE) mdm.dumpDevStatus(&devStatus);
-        
-        // wait until we are connected
-        TRACE("Network Check\r\n");
-        while (!mdm.checkNetStatus(&netStatus))
-            wait_ms(1000);
+        const char* filename = "File";
+        char buf[] = "Hello World";
+        printf("writeFile \"%s\"\r\n", buf);
+        if (mdm.writeFile(filename, buf, sizeof(buf)))
+        {
+            memset(buf, 0, sizeof(buf));
+            int len = mdm.readFile(filename, buf, sizeof(buf));
+            if (len) 
+                printf("readFile %d \"%.*s\"\r\n", len, len, buf);
+            mdm.delFile(filename);
+        }
     
-        if (DOTRACE) mdm.dumpNetStatus(&netStatus);
-        TRACE("Network Join\r\n");
+        // http://www.geckobeach.com/cellular/secrets/gsmcodes.php
+        // http://de.wikipedia.org/wiki/USSD-Codes
+        const char* ussd = "*130#"; // You may get answer "UNKNOWN APPLICATION"
+        printf("Ussd Send Command %s\r\n", ussd);
+        ret = mdm.ussdCommand(ussd, buf);
+        if (ret > 0) 
+            printf("Ussd Got Answer: \"%*s\"\r\n", ret, buf);
+
         // join the internet connection 
-        MDMParser::IP ip = 
-            mdm.join(APN,USERNAME,PASSWORD);
+        MDMParser::IP ip = mdm.join(APN,USERNAME,PASSWORD);
         if (ip != NOIP)
         {
-            if (DOTRACE) mdm.dumpIp(ip);
-            TRACE("Socket Create\r\n");
+            mdm.dumpIp(ip);
+            printf("Make a Http Post Request\r\n");
             int socket = mdm.socketSocket(MDMParser::IPPROTO_TCP);
             if (socket >= 0)
             {
-                TRACE("Socket Connect\r\n");
                 mdm.socketSetBlocking(socket, 10000);
                 if (mdm.socketConnect(socket, "mbed.org", 80))
                 {
-                    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";
-                    TRACE("Socket Send\r\n");
                     mdm.socketSend(socket, http, sizeof(http)-1);
                 
-                    TRACE("Socket Recving\r\n");
-                    while (true) {
-                        ret = mdm.socketReadable(socket);
-                        if (ret > 0)
-                            ret = mdm.socketRecv(socket, buf, sizeof(buf)-1);
-                        if (ret < 0)
-                            break;
-                        else if (ret > 0)
-                            TRACE("Socket Recv \"%*s\"\r\n", ret, buf);
-                    }
-                    TRACE("Socket Close\r\n");
+                    ret = mdm.socketRecv(socket, buf, sizeof(buf)-1);
+                    if (ret > 0)
+                        printf("Socket Recv \"%*s\"\r\n", ret, buf);
                     mdm.socketClose(socket);
                 }
-                TRACE("Socket Free\r\n");
                 mdm.socketFree(socket);
             }
             
@@ -162,7 +108,7 @@
             const char* host = "echo.u-blox.com";
             MDMParser::IP ip = mdm.gethostbyname(host);
             char data[] = "\r\nxxx Socket Hello World\r\n"
-#ifdef TARGET_LPC1768
+#ifdef LARGE_DATA
                         "00  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
                         "01  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
                         "02  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
@@ -189,7 +135,7 @@
 #endif            
                         "End\r\n";
                 
-            TRACE("Testing TCP sockets with ECHO server\r\n");
+            printf("Testing TCP sockets with ECHO server\r\n");
             socket = mdm.socketSocket(MDMParser::IPPROTO_TCP);
             if (socket >= 0)
             {
@@ -198,18 +144,18 @@
                     memcpy(data, "\r\nTCP", 5); 
                     ret = mdm.socketSend(socket, data, sizeof(data)-1);
                     if (ret == sizeof(data)-1) {
-                        TRACE("Socket Send %d \"%s\"\r\n", ret, data);
+                        printf("Socket Send %d \"%s\"\r\n", ret, data);
                     }
                     ret = mdm.socketRecv(socket, buf, sizeof(buf)-1);
                     if (ret >= 0) {
-                        TRACE("Socket Recv %d \"%.*s\"\r\n", ret, ret, buf);
+                        printf("Socket Recv %d \"%.*s\"\r\n", ret, ret, buf);
                     }
                     mdm.socketClose(socket);
                 }
                 mdm.socketFree(socket);
             }
 
-            TRACE("Testing UDP sockets with ECHO server\r\n");
+            printf("Testing UDP sockets with ECHO server\r\n");
             socket = mdm.socketSocket(MDMParser::IPPROTO_UDP, port);
             if (socket >= 0)
             {
@@ -217,57 +163,60 @@
                 memcpy(data, "\r\nUDP", 5); 
                 ret = mdm.socketSendTo(socket, ip, port, data, sizeof(data)-1);
                 if (ret == sizeof(data)-1) {
-                    TRACE("Socket SendTo %s:%d " IPSTR " %d \"%s\"\r\n", host, port, IPNUM(ip), ret, data);
+                    printf("Socket SendTo %s:%d " IPSTR " %d \"%s\"\r\n", host, port, IPNUM(ip), ret, data);
                 }
                 ret = mdm.socketRecvFrom(socket, &ip, &port, buf, sizeof(buf)-1);
                 if (ret >= 0) {
-                    TRACE("Socket RecvFrom " IPSTR ":%d %d \"%.*s\" \r\n", IPNUM(ip),port, ret, ret,buf);
+                    printf("Socket RecvFrom " IPSTR ":%d %d \"%.*s\" \r\n", IPNUM(ip),port, ret, ret,buf);
                 }
                 mdm.socketFree(socket);
             }
             
             // disconnect  
-            TRACE("Network Disconnect\r\n");
             mdm.disconnect();
         }
-        
-        const char* ussd = "*#134#"; // You may get answer "UNKNOWN APPLICATION"
-        TRACE("Send Ussd Command %s\r\n", ussd);
-        ret = mdm.ussdCommand(ussd, buf);
-        if (ret > 0) 
-            TRACE("Got Ussd Answer: \"%*s\"\r\n", ret, buf);
     }
-    TRACE("Checking SMS and GPS\r\n");
+    printf("SMS and GPS Loop\r\n");
     char link[128] = "";
     unsigned int i = 0xFFFFFFFF;
     const int wait = 100;
     bool abort = false;
     //DigitalOut led(LED1);
     while (!abort) {
-    //    led = !led;        
+    //    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) == GPSParser::NMEA) && (len > 6) && !strncmp("$GPGLL", buf, 6))
+            //printf("NMEA: %.*s\r\n", len-2, msg); 
+            if ((PROTOCOL(ret) == GPSParser::NMEA) && (len > 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')
-                {
-                    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 (!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); 
+                    }
+                } 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); 
                 }
             }
         }
-        if (mdmOk && (i++ == 10000/wait)) {
+        if (mdmOk && (i++ == 5000/wait)) {
             i = 0;
             // check the network status
             if (mdm.checkNetStatus(&netStatus)) {
-                if (DOTRACE) mdm.dumpNetStatus(&netStatus);
+                mdm.dumpNetStatus(&netStatus, fprintf, stdout);
             }
                 
             // checking unread sms
@@ -277,30 +226,25 @@
             while (0 < n--)
             {
                 char num[32];
-                TRACE("Unread SMS at index %d\r\n", ix[n]);
+                printf("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]);
+                    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
-                    TRACE("Send SMS reply \"%s\" to \"%s\"\r\n", reply, num);
+                    else if (strstr(buf, /*s*/"hutdown"))
+                        abort = true, reply = "bye bye";
+                    printf("Send SMS reply \"%s\" to \"%s\"\r\n", reply, num);
                     mdm.smsSend(num, reply);
                 }
             }
         }
         wait_ms(wait);
     }
+    gps.powerOff();
     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 May 15 06:16:51 2014 +0000
+++ b/mbed.bld	Tue May 27 09:20:46 2014 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/8a40adfe8776
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/0b3ab51c8877
\ No newline at end of file