networking library files

Dependents:   ELEC350_Project2

Networking.cpp

Committer:
Swabey89
Date:
2018-12-18
Revision:
4:71e730ed7ee0
Parent:
3:71f9a18a216d
Child:
5:b1f83bdeae79

File content as of revision 4:71e730ed7ee0:

#include "sample_hardware.hpp"
#include "Networking.hpp"

//Network thread - responsible for listening for connectinos and responding with updated tempature values
void network()
{
    
    char temp_str[10];
    char press_str[10];
    char light_str[10];
    
    EthernetInterface eth;
    eth.set_network(IP, NETMASK, GATEWAY);
    eth.connect();
    pc->printf("The target IP address is '%s'\n", eth.get_ip_address());
    
    //Now setup a web server
    TCPServer srv;           //TCP/IP Server
    TCPSocket clt_sock;      //Socket for communication
    SocketAddress clt_addr;  //Address of incoming connection
    
    /* Open the server on ethernet stack */
    srv.open(&eth);
    
    /* Bind the HTTP port (TCP 80) to the server */
    srv.bind(eth.get_ip_address(), 80);
    
    /* Can handle 5 simultaneous connections */
    srv.listen(5);
    
   while(true)
   {
        //Block and wait on an incoming connection
        srv.accept(&clt_sock, &clt_addr);
        pc->printf("Incoming connection accepted on %s:%d\n\r", clt_addr.get_ip_address(), clt_addr.get_port());
        
        //Uses a C++ string to make it easier to concatinate
        string response; //move?
        
        bufferLock.lock();
        double temp = buffer[newestIndex].gettemp();
        double press = buffer[newestIndex].getpress();
        float light  = buffer[newestIndex].getlight()*100;
        string time_str = buffer[newestIndex].getTime();        
        bufferLock.unlock();        
        
        //Convert to a C String //MAKE SURE FORMATTING IS CORRECT ON THESE
        sprintf(temp_str, "%5.2f", temp);
        sprintf(press_str, "%5.2f", press);
        sprintf(light_str, "%5.2f", light);
        
        /*
        //TEST
        pc->printf("%s\n\r", temp_str);
        pc->printf("%s\n\r", press_str);
        pc->printf("%s\n\r", light_str);
        pc->printf("%s\n\r", time_str); 
        //TEST
        */
        
        //Build the C++ string response
        response = HTTP_RESPONSE;
        
        response += HTTP_MESSAGE_TIME;
        response += time_str;
        
        response += HTTP_MESSAGE_TEMP;
        response += temp_str;
        
        response += HTTP_MESSAGE_PRESSURE;
        response += press_str;
        
        response += HTTP_MESSAGE_LIGHT;
        response += light_str;
        
        response += HTTP_MESSAGE_FOOT;
        
        response += "\r\n";        
        
        //Send static HTML response (as a C string)
        clt_sock.send(response.c_str(), response.size()+6);    
    }
}