k

Dependencies:   FreescaleIAP WebSocketClient mbed-rtos mbed

main.cpp

Committer:
zain_mbed
Date:
2016-06-13
Revision:
0:24f2f4c9363b

File content as of revision 0:24f2f4c9363b:

#include "mbed.h"
#include "EthernetInterface.h"
#include "Websocket.h"
#include "FreescaleIAP.h"
#define ECHO_SERVER_PORT   560
extern "C" void mbed_reset();
extern "C" void mbed_mac_address(char *mac);
TCPSocketServer server2;
TCPSocketConnection client;
DigitalOut green(LED_GREEN);
DigitalOut red(LED_RED);
DigitalOut blue(LED_BLUE);
DigitalOut inpin(PTC2);
  InterruptIn pb(PTC3);
Serial pc(USBTX, USBRX);
Serial xbee(PTC17,PTC16); // uart rx
bool flag=false;
int i=0;

EthernetInterface eth;

char *sourceip;
  char *swebsocket=NULL;
 char *sip=NULL;
 char *ssubnet=NULL;
char *sgw=NULL;
 char *spch=NULL; 
int counter=0;
int k=0;
char id[20];





void pb_hit_interrupt (void) {
     inpin=0;
     int address = flash_size() - SECTOR_SIZE;
    erase_sector(address);
   green=1;
   red=1;
   blue=0;
wait(3);

     NVIC_SystemReset();
}
   

string memory()
{
  inpin=0;
  
 pb.mode(PullUp);
    // Delay for initial pullup to take effect
 wait(.01);
    // Attach the address of the interrupt handler routine for pushbutton
 pb.fall(&pb_hit_interrupt);
 printf("in memory \n");
 int address = flash_size() - SECTOR_SIZE;           //Write in last sector
  char *data = (char *)address;
  char back[65];
  strncpy(back,data,65);
  back[strlen(back)]='\0';
  //printf("back %s \n",back);
  int length=strlen(back);
  printf("\n length: %d \n",length);
  //  char c=".";
    int k=0;
    for (int i=0;i<60;i++)
    {
        printf("%c",data[i]);
        if(data[i]=='.')
        {
            k++;
            }
        
        }
        printf("\n k %d \n",k);
        if (k>5){

    spch = strtok (back,",");
swebsocket=spch;
swebsocket[strlen(swebsocket)]='\0';

spch = strtok (NULL, ",");
sip=spch;
sip[strlen(sip)]='\0';
spch = strtok (NULL, ",");
ssubnet=spch;
ssubnet[strlen(ssubnet)]='\0';
spch = strtok (NULL, ",");
sgw=spch;
spch = strtok (NULL, ",");
   
 printf(swebsocket);
 printf("\n"); 
 
 printf(sip);
 printf("\n");
 
 printf(ssubnet);
 printf("\n"); 
      
 printf(sgw);
 printf("\n"); 
 
  eth.init(sip,ssubnet,sgw);
  eth.connect();
      char *mac;
       mac=eth.getMACAddress();
    sourceip=eth.getIPAddress();
     pc.printf("mac - ddress: %s \r\n",mac);
pc.printf("Connected - IP address: %s \r\n",eth.getIPAddress());
printf("swebsocket length %d \n",strlen(swebsocket));

 }

return swebsocket;
 }
 
void ftc()
{ inpin=0;
 printf("\n first time configuration \n");
eth.init("192.168.68.100","255.255.0.0","192.168.68.1");
    char *mac;
    mac=eth.getMACAddress();
    sourceip=eth.getIPAddress();
     eth.connect();
     pc.printf("mac - ddress: %s \r\n",mac); 
     pc.printf("Connected - IP address: %s \r\n",sourceip);
    server2.bind(ECHO_SERVER_PORT);
    server2.listen();
 printf("Waiting for connection \n");;
 server2.accept(client);
       // client.set_blocking(false, 1500); // Timeout after (1.5)s
        
        printf("Connection from: %s\n", client.get_address());
        // 
        char buffer[256];
        while (true) {
          strcat(mac,".");
          client.send(mac, strlen(mac));
            int n = client.receive(buffer, sizeof(buffer));
            if (n <= 0) break;
            
            // print received message to terminal
            buffer[n] = '\0';
printf("Received message from Client :'%s'\n",buffer);
            int kn=strlen(buffer);
            if (kn>5)
            {
                printf("actual message from Client :'%s'\n",buffer);
                 int address = flash_size() - SECTOR_SIZE;           //Write in last sector
    printf("address %d \n",address);
    char *data = (char *)address;
     printf(" \n Starting\r\n"); 
     erase_sector(address);
    
    int len=strlen(buffer);
    printf("store length %d \n",len);
    program_flash(address, buffer,len);        //10 integers of 4 bytes each: 40 bytes length
    printf("Resulting flash: \r\n");
    printf("stored data %s\r\n", data);
    printf("Done\r\n\n");
      client.send("received", 9);
                NVIC_SystemReset();
                }
            // reverse the message
            
            if (n <= 0) break;
        }
        
        client.close();
         
        NVIC_SystemReset();
      }
    
    
    
    
    
    
int main()
{
 inpin=0;
 pb.mode(PullUp);
    // Delay for initial pullup to take effect
 wait(.01);
    // Attach the address of the interrupt handler routine for pushbutton
 pb.fall(&pb_hit_interrupt);
 
 printf("Hello World\n");
 char macc[6];
 mbed_mac_address(macc);
 sprintf(id,"%02X:%02X:%02X:%02X:%02X:%02X",macc[0],macc[1],macc[2],macc[3],macc[4],macc[5]); 
 printf("mac_addr is %s \n",id);
 
char *w_socket_addr=new char [50];
    wait(3);
string wes=  memory();
const char *web_socket_ip=wes.c_str();
printf("return string %s \n",web_socket_ip);
int hkh=strlen(web_socket_ip);
printf("string length %d \n",hkh);

     char buf[200];

     xbee.baud(9600);


  
 
         if (hkh>0)
     {
         strcpy(w_socket_addr,"ws://");
         strcat(w_socket_addr,web_socket_ip);
         strcat(w_socket_addr,"/EchoChamber/echo");
         
      }
    else
    {
     
      ftc();  
      }
 w_socket_addr[strlen(w_socket_addr)]='\0';
 Websocket ws(w_socket_addr);
     printf("connecting to webserver \n");
     ws.connect();
     printf("connected \n");
     
     xbee.printf("ar\n");
     if(xbee.readable())
    {xbee.gets(buf,25);
      printf(buf);   
    }
      wait(1);
     xbee.printf("AT$sr\n");
char *ip=NULL;
char *subnet=NULL;
char *gw=NULL;

char *rxid;

char m[100];
char *pch;
wait(1);
bool a;



   
      
while(1)
{      green=1;
   red=0;
   blue=1;
    if (i>=455000)
   {  
   
        if(ws.is_connected())
        {  counter=counter+1;
        printf("keep alive \n");
        ws.send("keep alive");
      
            //printf(ws);
        }
                    
        if(!ws.is_connected())
        { printf("not alive \n");
        
        NVIC_SystemReset();
            }
        
       i=0;
         
    }
    i++;
if (counter>=2)
{ 
     printf("counter %d \n",counter);;
     printf("reset \n");
     
     //    ws.fillFields("ws://192.168.0.54:8080/EchoChamber/echo");
   NVIC_SystemReset();
      ws.close();
   //  eth.disconnect();


      

}



if(xbee.readable())
{
     green=0;
   red=1;
   blue=1;
    memset(buf, 0, sizeof(buf));
xbee.gets(buf,27);
char end[5]="end";
 printf(" \n received buffer %s \n",buf);
printf("counter %d \n",counter);
 
strcat(buf,id);
strcat(buf,end);
printf("\n buffer is %s \n",id);
char start[100]="start";
int tsy=strlen(buf);
printf("len %d \n",tsy);
if (tsy>10)
{printf("\n id is %s \n",buf);
strcat(start,sourceip);
strcat(start,"}");
strcat(start,buf);
printf("sending %s \n",start); 
if (ws.is_connected()){
ws.send(start);
  memset(start, 0, sizeof(start));
    memset(buf, 0, sizeof(buf));
    printf("clear %s \n",start);
        printf("buf %s \n",buf);
}
else{
   printf("closed \n");
   NVIC_SystemReset();
      
    }


printf("\n");
}
}
    memset(m, 0, sizeof(m));
a=ws.read(m);

k=strlen(m);


if (strcmp(m,"stay alive")==0)
{ printf(m);
printf("\n");
   counter--;
   }

   
if (a==true && k>5 && k<35){
       printf("received ipstring  %s",m);
printf("\n");
       }
if (a==true && k>=40 && k<62)
{
      pch = strtok (m,"+");
      rxid=pch;
        if(strcmp(rxid,id)==0)
        {
     printf("matched \n");
     printf("websocket %s \n",wes);
     printf(id);
     printf("\n");
     pch = strtok (NULL, "+");
     ip=pch;
     printf(ip);
     printf("\n");
     pch = strtok (NULL, "+");
     subnet=pch;
     printf("%s\n",subnet);
     pch = strtok (NULL, "+");
     gw=pch;
     printf(gw);
     printf("\n");
     char *store=new char[60];
     strcat(store,web_socket_ip);
     strcat(store,",");
    strcat(store,ip);
    strcat(store,",");
    strcat(store,subnet);
    strcat(store,",");
    strcat(store,gw);
    strcat(store,",");
    printf("cat data %s \n",store);
   
    int address = flash_size() - SECTOR_SIZE;           //Write in last sector
    printf("address %d \n",address);
  
     printf(" \n Starting\r\n"); 
     erase_sector(address);
    
    int len=strlen(store);
    printf("store length %d \n",len);
    program_flash(address, store,len);        //10 integers of 4 bytes each: 40 bytes length
    printf("Resulting flash: \r\n");
  //  printf("stored data %s\r\n", data);
    printf("Done\r\n\n");
      NVIC_SystemReset();
 
    wait(1);
    }

}
    
  memset(&m[0], 0, sizeof(m));
}//loop is ending here




}