Dreameforce 2013 giveaway demo

Dependencies:   C12832_lcd EthernetInterface LM75B MMA7660 libxively mbed-rtos mbed

Fork of xively-dreamforce by Ilya Dmitrichenko

Revision:
0:efdea27c3b81
Child:
1:0a61d7ab702c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon May 13 19:30:39 2013 +0000
@@ -0,0 +1,145 @@
+#include "mbed.h"
+#include "EthernetInterface.h"
+#include "xively.h"
+#include "xi_err.h"
+#include "xi_printf.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "MMA7660.h"
+
+#define XI_FEED_ID 128488
+#define XI_API_KEY "T4KXAH_gw1PW42RjRdhU-lgmCC6SAKw3NnBPc3dydUc4ND0g"
+
+#include "C12832_lcd.h"
+
+C12832_LCD lcd;
+
+MMA7660 axl(p28, p27);
+
+extern "C" {
+
+void user_printf( const char* buffer )
+{
+    lcd.cls();
+    lcd.locate( 0, 3 );
+    lcd.printf( buffer );
+    //wait( 1.0 );    
+}
+
+void mbed_printf( const char* fmt, ...  )
+{
+    char buffer[ 64 ];
+    
+    va_list ap;
+    va_start( ap, fmt );
+    vsnprintf( buffer, 64, fmt, ap );
+    va_end( ap );
+    
+    user_printf( buffer );
+}
+
+}
+
+int main() {
+    // set our device specific print function
+    USER_PRINT = user_printf;
+    
+    EthernetInterface eth;
+    
+    int s = eth.init(); //Use DHCP
+    
+    if( s != NULL )
+    {
+        mbed_printf( "Could not initialise. Will halt!\n" );        
+        exit( 0 );
+    }    
+        
+    s = eth.connect();
+    
+    if( s != NULL )
+    {
+        mbed_printf( "Could not connect. Will halt!\n" );
+        exit( 0 );
+    }
+    else 
+    {
+        mbed_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 = 2;
+    
+    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];
+
+    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];
+    
+    // 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 )
+    {
+        return -1;
+    }
+    
+    mbed_printf("feed:%d datastreams:[%s,%s]\n", feed.feed_id,
+                    orientation_datastream->datastream_id,
+                    side_rotation_datastream->datastream_id);
+
+    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;
+      }
+      
+      switch( axl.getOrientation() ) {
+        case MMA7660::Down:
+          mbed_printf("down %s\n",
+            (axl.getSide() == MMA7660::Front ? "front" : "back"));
+          xi_set_value_str( current_orientation, "down" );
+          break;
+        case MMA7660::Up:
+           mbed_printf("up %s\n",
+            (axl.getSide() == MMA7660::Front ? "front" : "back"));
+           xi_set_value_str( current_orientation, "up" );
+           break;
+        case MMA7660::Right:
+          mbed_printf("right %s\n",
+            (axl.getSide() == MMA7660::Front ? "front" : "back"));
+          xi_set_value_str( current_orientation, "right" );
+          break;
+        case MMA7660::Left:
+          mbed_printf("left %s\n",
+            (axl.getSide() == MMA7660::Front ? "front" : "back"));
+          xi_set_value_str( current_orientation, "left" );
+          break;
+        default: 
+          xi_set_value_str( current_orientation, "unknown" );
+          break;
+      }
+        
+      mbed_printf( "update...\n" );
+      xi_feed_update(xi_context, &feed);
+      mbed_printf( "done...\n" );
+    }
+}
\ No newline at end of file