Mode 3

Dependencies:   C12832_lcd EthernetInterface LM75B MMA7660 libxively mbed-rtos mbed

Fork of Mode_3_MBED by Zain Ijaz

Revision:
12:27471bb09274
Parent:
11:bdf601a405fc
--- a/main.cpp	Mon Oct 14 13:33:04 2013 +0000
+++ b/main.cpp	Fri Nov 08 16:44:46 2013 +0000
@@ -1,68 +1,54 @@
 #include "mbed.h"
-#include "EthernetInterface.h"
 
-#define XI_FEED_ID 128488 // set Xively Feed ID (numerical, no quoutes)
-#define XI_API_KEY "T4KXAH_dasgw1PWBPc3fdsfsdgsdy-dUc4ND0g" // set Xively API key (double-quoted string)
+#include "UbloxUSBCDMAModem.h"
+#include "UbloxUSBGSMModem.h"
+#define MODEM_UBLOX_CDMA // remove this if you are using GSM
 
-#include "app_board_io.h"
+#define XI_FEED_ID 248 // set Xively Feed ID (numerical, no quoutes)
+#define XI_API_KEY "T4KXAH_dasgw1PWBsfsdgy-dUc4ND0g" // set Xively API key (double-quoted string)
+
+#include "cellular_board_io.h"
 
 #include "xively.h"
 #include "xi_err.h"
 
-#include "MMA7660.h"
-#include "LM75B.h"
-#include "C12832_lcd.h"
-
-MMA7660 axl(p28, p27);
-LM75B tmp(p28, p27);
-C12832_LCD lcd;
+int main() {
 
-#include "logo.h"
+//TODO: maybe move these into board_io files and do it for app board ethernet version too...
+#ifdef MODEM_UBLOX_CDMA
+    UbloxUSBCDMAModem modem(p18, true, 1);
+#else
+    UbloxUSBGSMModem modem;
+#endif
 
-int main() {
-    lcd_print_xively_logo();
-    EthernetInterface eth;
-    
-    int s = eth.init(); //Use DHCP
+    modem.power(true);
+    Thread::wait(1000);
+
+    int s = modem.connect(NULL, NULL, "internet");
     
-    if( s != NULL )
+    if( s )
     {
-        lcd_printf( "Could not initialise. Will halt!\n" );        
+        printf( "Could not connect to the Internet. Will halt!\r\n" );
         exit( 0 );
-    }    
-        
-    s = eth.connect();
-    
-    if( s != NULL )
-    {
-        lcd_printf( "Could not connect. Will halt!\n" );
-        exit( 0 );
-    }
-    else 
-    {
-        lcd_printf( "IP: %s\n", eth.getIPAddress() );    
     }
     
     xi_feed_t feed;
     memset( &feed, NULL, sizeof( xi_feed_t ) );
     
     feed.feed_id = XI_FEED_ID;
-    feed.datastream_count = 3;
+    feed.datastream_count = 1;
     
     feed.datastreams[0].datapoint_count = 1;
-    xi_datastream_t* orientation_datastream = &feed.datastreams[0];
-    strcpy( orientation_datastream->datastream_id, "orientation" );
-    xi_datapoint_t* current_orientation = &orientation_datastream->datapoints[0];
+    xi_datastream_t* counter_datastream = &feed.datastreams[0];
+    strcpy( counter_datastream->datastream_id, "counter" ); 
+    xi_datapoint_t* counter = &counter_datastream->datapoints[0];
 
-    feed.datastreams[1].datapoint_count = 1;
-    xi_datastream_t* side_rotation_datastream = &feed.datastreams[1];
-    strcpy( side_rotation_datastream->datastream_id, "side_rotation" );
-    xi_datapoint_t* current_side_rotation = &side_rotation_datastream->datapoints[0];
-    
-    feed.datastreams[2].datapoint_count = 1;
-    xi_datastream_t* temperature_datastream = &feed.datastreams[2];
-    strcpy( temperature_datastream->datastream_id, "temperature" );
-    xi_datapoint_t* current_temperature = &temperature_datastream->datapoints[0];
+    //TODO:
+    //- figure out how got send `AT$DEBUG?` command and parse it's ouput which looks like:
+    // $DEBUG: 4183,233,100,1,99,-9,-105,2,2,2,93,261,429,186,249,438,21,63,63,63,63,63
+    // For details see docs: http://www.u-blox.com/images/downloads/Product_Docs/LISAC200-FW75C200_ATCommandsManual_%28CDMA-2X-11002%29.pdf)
+    // Some of these values represent varios interesting things, e.g. RSSI.
+    // We should put some of those into separate Xively datastreams...
     
     // create the cosm library context
     xi_context_t* xi_context
@@ -73,45 +59,15 @@
     {
         return -1;
     }
-
+    long unsigned int c = 0; 
     while(1) {
       
-      switch( axl.getSide() ) {
-        case MMA7660::Front:
-          xi_set_value_str( current_side_rotation, "front" );
-          break;
-        case MMA7660::Back:
-          xi_set_value_str( current_side_rotation, "back" );
-          break;
-        default:
-          xi_set_value_str( current_side_rotation, "unknown" );
-          break;
-      }
+      xi_set_value_i32( counter, ++c );
+        
+      printf( "Updating Xively feed %d...\r\n", XI_FEED_ID );
+      xi_feed_update( xi_context, &feed );
+      printf( "   done!\r\n" ); //TODO: add error check, as cellular can be flaky.
       
-      switch( axl.getOrientation() ) {
-        case MMA7660::Down:
-          xi_set_value_str( current_orientation, "down" );
-          break;
-        case MMA7660::Up:
-           xi_set_value_str( current_orientation, "up" );
-           break;
-        case MMA7660::Right:
-          xi_set_value_str( current_orientation, "right" );
-          break;
-        case MMA7660::Left:
-          xi_set_value_str( current_orientation, "left" );
-          break;
-        default: 
-          xi_set_value_str( current_orientation, "unknown" );
-          break;
-      }
-      
-      xi_set_value_f32( current_temperature, tmp.read() );
-        
-      lcd_printf( "update...\n" );
-      xi_feed_update( xi_context, &feed );
-      lcd_printf( "done...\n" );
-      
-      wait( 15.0 );
+      wait( 50.0 );
     }
 }