demo of the murata wifi chip. This demo tries to connect to an open wifi access point and prints out all the relevant information about the connection. It then scans all wifi access points nearby and reports their information.

Dependencies:   SNICInterface mbed-rtos mbed

Fork of SNIC-xively-jumpstart-demo by muRata

main.cpp

Committer:
Ilya Dmitrichenko
Date:
2013-09-20
Revision:
6:9e4f4a8c1829
Parent:
4:e7ca62a11595
Child:
8:81743e1228a7

File content as of revision 6:9e4f4a8c1829:

#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"
#include "LM75B.h"

#define XI_FEED_ID 123 // set Xively Feed ID (numerical, no quoutes)
#define XI_API_KEY "T4KXAH_dasgw1PWBPc3fdsfsdgsdy-dUc4ND0g" // set Xively API key (double-quoted string) 

#include "C12832_lcd.h"

C12832_LCD lcd;

MMA7660 axl(p28, p27);
LM75B tmp(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 = 3;
    
    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];
    
    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];
    
    // 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;
      }
      
      xi_set_value_f32( current_temperature, tmp.read() );
        
      mbed_printf( "update...\n" );
      xi_feed_update(xi_context, &feed);
      mbed_printf( "done...\n" );
      
      wait( 15.0 );
    }
}