cellular port

Dependencies:   Beep C027_Support C12832 LM75B MMA7660 mbed-rtos mbed nsdl_lib

This is a port of the NSDL HelloWorld for cellular.

To run the example you need a C027 and the ARM mbed application shield. The example uses cellular instead of ethernet and takes the true position from the GPS instead of using a fixed position.

Revision:
11:fa12b9f50538
Parent:
10:443e7f741c8e
Child:
12:2799b212c729
diff -r 443e7f741c8e -r fa12b9f50538 main.cpp
--- a/main.cpp	Tue Jun 17 07:05:29 2014 +0000
+++ b/main.cpp	Wed Jun 18 08:29:25 2014 +0000
@@ -6,7 +6,7 @@
 // Include various resources
 #include "temperature.h"
 #include "light.h"
-#include "gps.h"
+#include "gps_res.h"
 #include "relay.h"
 
 #include "UDPSocket.h"
@@ -17,6 +17,7 @@
 // These parameters are ignored for LISA-C200 variants and can be left NULL.
 //------------------------------------------------------------------------------------
 #include "MDM.h"
+#include "GPS.h"
 //! 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 
@@ -56,8 +57,11 @@
     nsp.set_address(NSP_ADDRESS, NSP_PORT);
     
     NSDL_DEBUG("name: %s", endpoint_name);
-    NSDL_DEBUG("NSP=%s - port %d\n", NSP_ADDRESS, NSP_PORT);
-    NSDL_DEBUG("NSDL Demo Portal\n  Website:  http://%s\n  Username: demo\n  Password: demo\n", NSP_ADDRESS);
+    NSDL_DEBUG("NSP=%s - port %d", NSP_ADDRESS, NSP_PORT);
+    NSDL_DEBUG("NSDL Demo Portal\r\n"
+               "  Website:  http://%s\r\n"
+               "  Username: demo\r\n"
+               "  Password: demo", NSP_ADDRESS);
     
     lcd.locate(0,22);
     lcd.printf("EP name:%s\n", endpoint_name);
@@ -88,8 +92,10 @@
     memset(resource_ptr->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
 
     // Static resources
-    nsdl_create_static_resource(resource_ptr, sizeof("dev/mfg")-1, (uint8_t*) "dev/mfg", 0, 0,  (uint8_t*) "Sensinode", sizeof("Sensinode")-1);
-    nsdl_create_static_resource(resource_ptr, sizeof("dev/mdl")-1, (uint8_t*) "dev/mdl", 0, 0,  (uint8_t*) "NSDL-C mbed device", sizeof("NSDL-C mbed device")-1);
+    #define _PT(str)   sizeof(str)-1, (uint8_t*)str
+    #define _RSC(str)  (uint8_t*)str, sizeof(str)-1
+    nsdl_create_static_resource(resource_ptr, _PT("dev/mfg"), 0, 0, _RSC("Sensinode / u-blox"));
+    nsdl_create_static_resource(resource_ptr, _PT("dev/mdl"), 0, 0, _RSC("NSDL-C cellular mbed device"));
 
     // Dynamic resources
     create_temperature_resource(resource_ptr);
@@ -112,20 +118,13 @@
 
 // ****************************************************************************
 // Program entry point
-
-int main()
+void ndslTask(void const* argument) 
 {
-    Serial pc(USBTX, USBRX);
-    pc.baud(115200);
-    lcd.cls();
-    lcd.locate(0,0);
-    lcd.printf("mbed NanoService demo");
-    NSDL_DEBUG("mbed NanoService Example App 0.1\n");
+    MDMRtos<MDMSerial> mdm;
     
-    MDMRtos<MDMSerial> mdm;
     //mdm.setDebug(4); // enable this for debugging issues 
     if (!mdm.connect(SIMPIN, APN,USERNAME,PASSWORD))
-        return -1;
+        return;
 
     lcd.locate(0,11);
 
@@ -143,7 +142,52 @@
 
     mdm.disconnect();
     mdm.powerOff();
-    
-    while(true);
-        
 }
+
+void gpsTask(void const* argument) 
+{
+    GPSI2C gps;
+    char buf[256];
+    while (1) {
+        int ret = gps.getMessage(buf, sizeof(buf));
+        if (ret > 0) {
+            int len = LENGTH(ret);
+            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 update lat %.6f lon %.6f\r\n", la, lo);
+                        gps_resource_set(la,lo);
+                    }
+                }
+            }
+        } else
+            Thread::wait(100);
+    }
+}
+
+int main()
+{
+    Serial pc(USBTX, USBRX);
+    pc.baud(115200);
+    lcd.cls();
+    lcd.locate(0,0);
+    lcd.printf("mbed NanoService demo");
+    NSDL_DEBUG("mbed NanoService Example App 0.1\r\n");
+
+    Thread task1(ndslTask, NULL, osPriorityNormal, 4096);
+    Thread task2(gpsTask,  NULL, osPriorityNormal, 2048);
+     
+    DigitalOut led(LED);
+    while(true) {
+        led = !led;
+        wait_ms(500);
+    }
+}
+
+