Comnp[uter

Dependencies:   C027_Support Threads mbed

Files at this revision

API Documentation at this revision

Comitter:
bennettmatt1977
Date:
Mon Feb 22 16:28:17 2016 +0000
Commit message:
James likes puppies

Changed in this revision

C027_Support.lib Show annotated file Show diff for this revision Revisions of this file
Threads.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
diff -r 000000000000 -r 15a06b50e14e C027_Support.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C027_Support.lib	Mon Feb 22 16:28:17 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/ublox/code/C027_Support/#6a7a5c4f35f6
diff -r 000000000000 -r 15a06b50e14e Threads.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Threads.lib	Mon Feb 22 16:28:17 2016 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/lemniskata/code/Threads/#d370bed31f45
diff -r 000000000000 -r 15a06b50e14e main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Feb 22 16:28:17 2016 +0000
@@ -0,0 +1,296 @@
+#include "mbed.h"
+
+//------------------------------------------------------------------------------------
+/* 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 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
+*/
+#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         NULL
+//! 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 
+//------------------------------------------------------------------------------------
+
+//#define CELLOCATE
+
+int main(void)
+{
+    int ret;
+#ifdef LARGE_DATA
+    char buf[2048] = "";
+#else
+    char buf[512] = "";
+#endif
+
+    // Create the GPS object
+#if 1   // use GPSI2C class
+    GPSI2C gps;
+#else   // or GPSSerial class 
+    GPSSerial gps; 
+#endif
+    // Create the modem object
+    MDMSerial mdm;
+    //mdm.setDebug(4); // enable this for debugging issues 
+    // initialize the modem 
+    MDMParser::DevStatus devStatus = {};
+    MDMParser::NetStatus netStatus = {};
+    bool mdmOk = mdm.init(SIMPIN, &devStatus);
+    mdm.dumpDevStatus(&devStatus);
+    if (mdmOk) {
+#if 0
+        // file system API
+        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 >= 0) 
+                printf("readFile %d \"%.*s\"\r\n", len, len, buf);
+            mdm.delFile(filename);
+        }
+#endif
+
+        // wait until we are connected
+        mdmOk = mdm.registerNet(&netStatus);
+        mdm.dumpNetStatus(&netStatus);
+    }
+    if (mdmOk)
+    {
+        // 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);
+        if (ip != NOIP)
+        {
+            mdm.dumpIp(ip);
+            printf("Make a Http Post Request\r\n");
+            int socket = mdm.socketSocket(MDMParser::IPPROTO_TCP);
+            if (socket >= 0)
+            {
+                mdm.socketSetBlocking(socket, 10000);
+                if (mdm.socketConnect(socket, "mbed.org", 80))
+                {
+                    const char http[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n";
+                    mdm.socketSend(socket, http, sizeof(http)-1);
+                
+                    ret = mdm.socketRecv(socket, buf, sizeof(buf)-1);
+                    if (ret > 0)
+                        printf("Socket Recv \"%*s\"\r\n", ret, buf);
+                    mdm.socketClose(socket);
+                }
+                mdm.socketFree(socket);
+            }
+            
+            int port = 7;
+            const char* host = "echo.u-blox.com";
+            MDMParser::IP ip = mdm.gethostbyname(host);
+            char data[] = "\r\nxxx Socket Hello World\r\n"
+#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"
+                        "03  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "04  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        
+                        "05  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "06  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "07  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "08  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "09  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+            
+                        "10  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "11  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "12  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "13  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "14  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        
+                        "15  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "16  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "17  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "18  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+                        "19  0123456789 0123456789 0123456789 0123456789 0123456789 \r\n"
+#endif            
+                        "End\r\n";
+                
+            printf("Testing TCP sockets with ECHO server\r\n");
+            socket = mdm.socketSocket(MDMParser::IPPROTO_TCP);
+            if (socket >= 0)
+            {
+                mdm.socketSetBlocking(socket, 10000);
+                if (mdm.socketConnect(socket, host, port)) {
+                    memcpy(data, "\r\nTCP", 5); 
+                    ret = mdm.socketSend(socket, data, sizeof(data)-1);
+                    if (ret == sizeof(data)-1) {
+                        printf("Socket Send %d \"%s\"\r\n", ret, data);
+                    }
+                    ret = mdm.socketRecv(socket, buf, sizeof(buf)-1);
+                    if (ret >= 0) {
+                        printf("Socket Recv %d \"%.*s\"\r\n", ret, ret, buf);
+                    }
+                    mdm.socketClose(socket);
+                }
+                mdm.socketFree(socket);
+            }
+
+            printf("Testing UDP sockets with ECHO server\r\n");
+            socket = mdm.socketSocket(MDMParser::IPPROTO_UDP, port);
+            if (socket >= 0)
+            {
+                mdm.socketSetBlocking(socket, 10000);
+                memcpy(data, "\r\nUDP", 5); 
+                ret = mdm.socketSendTo(socket, ip, port, data, sizeof(data)-1);
+                if (ret == sizeof(data)-1) {
+                    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) {
+                    printf("Socket RecvFrom " IPSTR ":%d %d \"%.*s\" \r\n", IPNUM(ip),port, ret, ret,buf);
+                }
+                mdm.socketFree(socket);
+            }
+            
+            // disconnect  
+            mdm.disconnect();
+        }
+    }
+    printf("SMS and GPS Loop\r\n");
+    char link[128] = "";
+    unsigned int i = 0xFFFFFFFF;
+    const int wait = 100;
+    bool abort = false;
+#ifdef CELLOCATE    
+    const int sensorMask = 3;  // Hybrid: GNSS + CellLocate       
+    const int timeoutMargin = 5; // seconds
+    const int submitPeriod = 60; // 1 minutes in seconds
+    const int targetAccuracy = 1; // meters
+    unsigned int j = submitPeriod * 1000/wait;
+    bool cellLocWait = false;
+    MDMParser::CellLocData loc;
+    
+    //Token can be released from u-blox site, when you got one replace "TOKEN" below 
+    if (!mdm.cellLocSrvHttp("TOKEN"))
+            mdm.cellLocSrvUdp();        
+    mdm.cellLocConfigSensor(1);   // Deep scan mode
+    //mdm.cellUnsolIndication(1);
+#endif
+    //DigitalOut led(LED1);
+    while (!abort) {
+    //    led = !led;
+#ifndef CELLOCATE
+        while ((ret = gps.getMessage(buf, sizeof(buf))) > 0)
+        {
+            int len = LENGTH(ret);
+            //printf("NMEA: %.*s\r\n", len-2, msg); 
+            if ((PROTOCOL(ret) == GPSParser::NMEA) && (len > 6))
+            {
+                // 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); 
+                    }
+                }
+            }
+        }
+#endif        
+#ifdef CELLOCATE
+        if (mdmOk && (j++ == submitPeriod * 1000/wait)) {   
+            j=0;
+            printf("CellLocate Request\r\n");
+            mdm.cellLocRequest(sensorMask, submitPeriod-timeoutMargin, targetAccuracy);
+            cellLocWait = true;
+        }
+        if (cellLocWait && mdm.cellLocGet(&loc)){           
+            cellLocWait = false;     
+            printf("CellLocate position received, sensor_used: %d,  \r\n", loc.sensorUsed );           
+            printf("  latitude: %0.5f, longitude: %0.5f, altitute: %d\r\n", loc.latitue, loc.longitude, loc.altitutude);
+            if (loc.sensorUsed == 1)
+                printf("  uncertainty: %d, speed: %d, direction: %d, vertical_acc: %d, satellite used: %d \r\n", loc.uncertainty,loc.speed,loc.direction,loc.verticalAcc,loc.svUsed);        
+            if (loc.sensorUsed == 1 || loc.sensorUsed == 2)
+            sprintf(link, "I am here!\n"
+                        "https://maps.google.com/?q=%.5f,%.5f", loc.latitue, loc.longitude);       
+        }
+        if (cellLocWait && (j%100 == 0 ))
+            printf("Waiting for CellLocate...\r\n");                
+#endif        
+        if (mdmOk && (i++ == 5000/wait)) {
+            i = 0;
+            // check the network status
+            if (mdm.checkNetStatus(&netStatus)) {
+                mdm.dumpNetStatus(&netStatus, fprintf, stdout);
+            }
+                
+            // 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
+                    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();
+    return 0;
+}
diff -r 000000000000 -r 15a06b50e14e mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Mon Feb 22 16:28:17 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/f141b2784e32
\ No newline at end of file