tes

Dependencies:   ASyncTicker EthernetInterface WebSocketClient mbed-rtos mbed MbedJSONValue xbee_lib

main.cpp

Committer:
ammanvedi
Date:
2014-02-01
Revision:
5:80a7d03c94f5
Parent:
4:84abfe990493
Child:
6:c1bd3fadce09

File content as of revision 5:80a7d03c94f5:

#include "mbed.h"
#include "EthernetInterface.h"
#include <stdio.h>
#include "Websocket.h"
#include "xbee.h"
#include "xbeeFrame.h"
#include "MbedJSONValue.h"
#include <ctype.h>
#include <string>
#include "btNode.h"
#define PORT 80

// status leds
// led 1
// lit - successful ethernet connection
DigitalOut led_ethernet(LED1);

// led 2
// lit - successful socket connection
DigitalOut led_socket(LED2);

EthernetInterface ethernet;
Websocket         ws("ws://192.168.0.4:8080/");


btNode b(30);

/* v1 depreciated

xbeeFrame xbee(p9,
               p10,
               p11);



char dest_address[8] =
{
    0x00, 0x13, 0xA2, 0x00, 0x40, 0x9B, 0x6D, 0xB0
};
char       send_data[50]   = "xbee string";

*/

void pull_requests()
{
}



void pull_updates()
{
    // build json request string
    MbedJSONValue request;

    std::string s;

    // fill the object
    request["TYPE"]   = "UPDATE";
    request["ORIGIN"] = "HUB";
    request["ID"]     = "N/A";
    request["DATA"]   = "N/A";
    request["STATUS"] = "N/A";

    // serialize it into a JSON string
    s = request.serialize();

    // printf("json: %s\r\n", s.c_str());

    char str[100];
    char id[30];
    char new_msg[50];

    // string with a message
    // sprintf(str, "PU");
    ws.send((char *) s.c_str());

    // clear the buffer and wait a sec...
    memset(str, 0, 100);
    wait(0.5f);

    // websocket server should echo whatever we sent it
    if (ws.read(str))
    {
        memset(id, 0, 30);
        memset(new_msg, 0, 50);

        // response from server is JSON
        // parse back to a traversable object
        MbedJSONValue updt_res;

        parse(updt_res, str);
        printf("msg form svr: %s\n\r", updt_res);
        sscanf((char *) updt_res["DATA"].get<std::string>().c_str(), "%s %[^\t]", id, new_msg);

        // printf("the id : %s will update to : %s\n\r", id, new_msg);
        // send string to xbee HERE
        if (strlen(new_msg) == 0)
        {
            printf("nothing to update, better luck next time! (svr response: %s)\n\r", id);

            return;
        }
        else
        {
            // data was revieved
            printf("id :  %s  string: %s (original: %s) \n\r", id, new_msg, str);
        }
        
        std::string real_msg(new_msg);
        
        std::string result = b.SendMessage(real_msg);
        
        printf("xbee response : %s\n\r\n\r", result);
        
        
/* V1 DEPRECIATED
        char   to_send[100];
        char * p = to_send;
        char * r = send_data;

        while (*r)
        {
            *p++ = *r++;
        }

        *p++ = ' ';
        r    = new_msg;

        while (*r)
        {
            *p++ = *r++;
        }

        *p++ = '\r';
        *p   = '\0';

        char data_buf[50];

        xbee.InitFrame();
        xbee.SetDestination((unsigned char *) dest_address);
        xbee.SetPayload(to_send);
        printf("sending payload: %s\n\r", to_send);
        xbee.AssembleFrame();
        xbee.SendFrame();

        for (int i = 0; i < 2; i++)
        {
            xbee.ReceiveFrame(data_buf, 500);

            if (xbee.frameReceived)
            {
                xbee.frameReceived = 0;

                if (xbee.GetType() == TX_STATUS)
                {
                    if (xbee.GetStatus() == 0)
                    {
                        printf("Send success!\n\r");
                    }
                    else
                    {
                        printf("Send failed :(\n\r");
                    }
                }
                else if (xbee.GetType() == RX_PACKET_64)
                {
                    printf("Received data: %s\n\r", data_buf);
                }
            }
        }
    } 
    */
}
}

int main()
{
    
    
    
    
    led_ethernet = 0;
    led_socket   = 0;

    ethernet.init();    // connect with DHCP

    int ret_val = ethernet.connect();

    if (0 == ret_val)
    {
        printf("\n\rIP Address: %s\n\r", ethernet.getIPAddress());

        led_ethernet = 1;
    }
    else
    {
        error("ethernet failed to connect: %d.\n\r", ret_val);
    }

    int interval = 5;

    if (ws.connect())
    {
        led_socket = 1;
    }

    Timer timer;

    timer.start();

    // every <interval> seconds call to the server to pull updates
    while (true)
    {
        if (timer.read() >= interval)
        {
            // perform checks
            pull_updates();
            timer.reset();
            timer.start();
        }
    }

    // pull_updates();
    ws.close();
}


//~ Formatted by Jindent --- http://www.jindent.com