インターフェース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通信する記事で使用したプログラムです。

Revision:
30:e6c7827dfbe8
Parent:
29:1f18e74ff972
Child:
31:22a4e87217f8
--- a/main.cpp	Thu Jul 17 02:52:30 2014 +0000
+++ b/main.cpp	Thu Jul 17 10:06:02 2014 +0000
@@ -34,12 +34,17 @@
 #define PASSWORD    "nnku62"
 
 //---- Xively --------------------------------------------------------------
-#define XI_FEED_ID 1016719601 // set Xively Feed ID (numerical, no quoutes)
+#define XI_FEED_ID "1016719601" // set Xively Feed ID (numerical, no quoutes)
 #define XI_API_KEY "Y1mN05SzFgxjwiB9xFj42KYaTzdhohBLaKN8a9juznDrGsvK" // set Xively API key (double-quoted string)
 
-#include "xively.h"
-#include "xi_err.h"
+#define XI_SERVER   "api.xively.com"
+//#define XI_PATH     "POST /v2/feeds/" XI_FEED_ID ".csv?_method=put "
+//#define XI_HEADER   "X-ApiKey: " XI_API_KEY "\r\nContent-Type: text/csv\r\n"
 
+#define XI_PATH     "/v2/feeds/" XI_FEED_ID ".csv"
+#define XI_HEADER   "X-ApiKey: " XI_API_KEY
+
+#define XI_UPLOAD_INTERVAL   30  // sec
 //------------------------------------------------------------------------------------
 
 int main(void)
@@ -122,6 +127,7 @@
                 }
                 mdm.socketFree(socket);
             }
+#if 0
             
             int port = 7;
             const char* host = "echo.u-blox.com";
@@ -190,63 +196,23 @@
                 }
                 mdm.socketFree(socket);
             }
-            
+#endif
+           
+// no disconnect
             // disconnect  
-            mdm.disconnect();
+//            mdm.disconnect();
         }
     }
 #endif
-#if 0
-    EthernetInterface eth;
-    
-    int s = eth.init(); //Use DHCP
-    if( s != NULL ) {
-        printf( "Could not initialise. Will halt!\n" );        
-        exit( 0 );
-    }    
-        
-    s = eth.connect();
-    if( s != NULL ) {
-        printf( "Could not connect. Will halt!\n" );
-        exit( 0 );
-    } else {
-        printf( "IP: %s\n", eth.getIPAddress() );    
-    }
-#endif
 
 // Xively
-    xi_feed_t feed;
-    memset( &feed, NULL, sizeof( xi_feed_t ) );
-    
-    feed.feed_id = XI_FEED_ID;
-    feed.datastream_count = 2;
-
-    feed.datastreams[0].datapoint_count = 1;
-    xi_datastream_t* lat_datastream = &feed.datastreams[0];
-    strcpy( lat_datastream->datastream_id, "lat" );
-    xi_datapoint_t* current_lat = &lat_datastream->datapoints[0];
-
-    feed.datastreams[1].datapoint_count = 1;
-    xi_datastream_t* lon_datastream = &feed.datastreams[1];
-    strcpy( lon_datastream->datastream_id, "lon" );
-    xi_datapoint_t* current_lon = &lon_datastream->datapoints[0];
-    
-    // create the cosm library context
-    xi_context_t* xi_context
-        = xi_create_context( XI_HTTP, XI_API_KEY, feed.feed_id );
-
-    // check if everything works
-    if( xi_context == NULL )
-    {
-        printf("xi_context NULL!\n");
-        return -1;
-    }
 
     printf("SMS and GPS Loop\r\n");
     char link[128] = "";
     unsigned int i = 0xFFFFFFFF;
     const int wait = 100;
     bool abort = false;
+    int xv_upload_cnt = XI_UPLOAD_INTERVAL;
     //DigitalOut led(LED1);
     while (!abort) {
     //    led = !led;
@@ -266,11 +232,34 @@
                         printf("GPS Location: %.5f %.5f\r\n", la, lo); 
                         sprintf(link, "I am here!\n"
                                       "https://maps.google.com/?q=%.5f,%.5f", la, lo); 
-                        // Xively
-                        xi_set_value_f32( current_lat, la );
-                        xi_set_value_f32( current_lon, lo );
-                        xi_feed_update( xi_context, &feed );
+// Xively
+        if (xv_upload_cnt++ >= XI_UPLOAD_INTERVAL) {
+            xv_upload_cnt = 0;
+            int socket = mdm.socketSocket(MDMParser::IPPROTO_TCP);
+            if (socket >= 0)
+            {
+                mdm.socketSetBlocking(socket, 10000);
+                if (mdm.socketConnect(socket, XI_SERVER, 80))
+                {
+                    
+//                    const char http[] = "POST /media/uploads/mbed_official/hello.txt HTTP/1.0\r\n\r\n";
+//                    mdm.socketSend(socket, XI_PATH, sizeof(XI_PATH)-1);
+//                    mdm.socketSend(socket, XI_HEADER, sizeof(XI_HEADER)-1);
+                    char http[512];
+                    char data[128];
+                    sprintf(data, "lat,%f\r\nlon,%f\r\n", la, lo);
+                    sprintf(http, "PUT %s HTTP/1.1\r\nHost: %s\r\n%s\r\nContent-Length: %d\r\n\r\n%s", XI_PATH, XI_SERVER, XI_HEADER, strlen(data), data);
+printf(http);
+                    mdm.socketSend(socket, http, strlen(http));
 
+                    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);
+            }
+        }
                     }
                 } else if (!strncmp("$GPGGA", buf, 6)) {
                     double a = 0;