This program listens to a websocket and when the server sends the appropriate ASCII combinations through the websocket, the appropriate LED lights up (red, blue, or green).

Dependencies:   WebSocketClient mbed-rtos mbed

main.cpp

Committer:
brianh
Date:
2015-01-29
Revision:
1:be04144070ea
Parent:
0:181c1ea775ea

File content as of revision 1:be04144070ea:

/*******************************************************************************
* Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of Maxim Integrated
* Products, Inc. shall not be used except as stated in the Maxim Integrated
* Products, Inc. Branding Policy.
*
* The mere transfer of this software does not imply any licenses
* of trade secrets, proprietary technology, copyrights, patents,
* trademarks, maskwork rights, or any other form of intellectual
* property whatsoever. Maxim Integrated Products, Inc. retains all
* ownership rights.
*******************************************************************************
*
* LEDRemote version 1.0 is a program that listens for ACII characters from a 
* websocket.  If the correct ASCII characters are sent, the onboard LED on 
* a Freescale Freedom board (K64F) will light an LED.  For example, if "R1" or 
* "R2" is received the RED LED gets exercised.  "B1" and "B0" exercises the blue 
* LED, and "G1" and "G0" exercises the green LED.
*
*/

#include "mbed.h"
#include "EthernetInterface.h"
#include "Websocket.h"

DigitalOut ledr(PTB22);
DigitalOut ledg(PTE26);
DigitalOut ledb(PTB21);
//DigitalIn sw(PTA4);

int main() {
    int res;
    char buf[100]={0};
    char comparebuf[2]={0};
    char msg[100];
    ledg = 1;
    ledr = 1;
    ledb = 1;
    bool startup = true;
    int startupmode = 0;
    int startupledcount = 0;

    //bool pb = 1;
    
    //BW_MPU_CESR_VLD(0);// k64f workaround mentioned here (to turn off MPU): https://community.freescale.com/thread/324825
    //wait(1);
    //clock_manager_set_gate(kClockModuleENET,0,true); // turn on clock
    
    printf("\r\n---- Maxim's WebSocket example with the k64f board ----\r\n");
    EthernetInterface eth;
    eth.init();
    eth.connect();
    //wait(1.0);
    printf("IP Address is %s\r\n", eth.getIPAddress());
    wait(1.0);
    
    // Change YOURLOGIN for your mbed login so you can communicate to the board
    // using the mbed websocket at:
    // http://sockets.mbed.org/YOURLOGIN
    //Websocket ws("ws://sockets.mbed.org/ws/brianh/ro"); // over port 80 (html)
    //Websocket ws("ws://sockets.mbed.org:443/ws/brianh/rw"); // secure TLS
    
    //Websocket ws("ws://192.168.1.12:8080/"); // home -- notice forward slash is necessary
    Websocket ws("ws://10.17.245.247:8080/"); // Dallas -- Mbed needs the slash at the end or the websocket won't connect properly without a path
    //Websocket ws("ws://10.33.245.13:8080/"); // California -- Mbed needs the slash at the end or the websocket won't connect properly without a path
    //Websocket ws("ws://dal-lt-BHindman.maxim-ic.internal:8080/"); // laptop
    //wait(1.0);
    
    ws.connect();
    wait(1.0);
     
    //ws.send("st");
    //while (pb)
    while(1) 
    {
        if (ws.is_connected())
        {        
            if (startup) 
            {
               startupledcount++; // count number of loops while websocket is connected
               if (startupledcount > 20)
               {
                  startupledcount = 0;
                  startupmode++;
                  if (startupmode == 1) ws.send("st"); // request server to send state of red led
                  if (startupmode == 2) ws.send("su"); // request server to send state of green led
                  if (startupmode == 3) ws.send("sv"); // request server to send state of blue led
                  if (startupmode == 3) startup = false;
               }     

            }
            //printf("is_connected() is true \r\n");
            // read from websocket the led that should be turned on.  
            if(!ws.read(buf)) 
            {
                //printf("%c",buf[0]);
                // is it red?
                if(buf[0] == 'r') 
                {
                    if(buf[1] == '0') 
                    {
                        ledr = 0;
                        if ((comparebuf[0] != buf[0]) || (comparebuf[1] != buf[1])) printf("Turned red LED on\n\r");
                    } 
                    else 
                    {
                        ledr = 1;
                        if ((comparebuf[0] != buf[0]) || (comparebuf[1] != buf[1])) printf("Turned red LED off\n\r");
                    }
                }
                // is it green?
                if(buf[0] == 'g') 
                {
                    //printf("g! \r\n");
                    if(buf[1] == '0') 
                    {
                        ledg = 0;
                        if ((comparebuf[0] != buf[0]) || (comparebuf[1] != buf[1])) printf("Turned green LED on\n\r");
                    } 
                    else 
                    {
                        ledg = 1;
                        if ((comparebuf[0] != buf[0]) || (comparebuf[1] != buf[1])) printf("Turned green LED off\n\r");
                    }
                }
                // is it blue?
                if(buf[0] == 'b') 
                {
                    if(buf[1] == '0') 
                    {
                        ledb = 0;
                        if ((comparebuf[0] != buf[0]) || (comparebuf[1] != buf[1])) printf("Turned blue LED on\n\r");
                    } 
                    else 
                    {
                        ledb = 1;
                        if ((comparebuf[0] != buf[0]) || (comparebuf[1] != buf[1])) printf("Turned blue LED off\n\r");
                    }
                }
                comparebuf[0] = buf[0];
                comparebuf[1] = buf[1];
                
            }
            //pb = sw; 
        }
        else
        {           
            printf("trying to make websocket connection\n\r");
            ws.close();
            ws.connect();
            //wait(1.0);
        }
    }// end while
    //ws.close();
    //eth.disconnect();
    //ledg = 1;
    //ledr = 1;
    //ledb = 1;
    //while(1) 
    //{
    //}
}