
SEND
Fork of Final351CW_FINAL by
Network/network.cpp@11:ce2a977dcab0, 2018-01-09 (annotated)
- Committer:
- liam_grazier
- Date:
- Tue Jan 09 11:59:10 2018 +0000
- Revision:
- 11:ce2a977dcab0
- Parent:
- 10:098c2fa0a1a6
NEW NON LIB;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
liam_grazier | 10:098c2fa0a1a6 | 1 | /* ELEC351 COURSEWORK 2018 |
liam_grazier | 10:098c2fa0a1a6 | 2 | DESIGNED USING MBED ONLINE COMPILER IMPORTED TO KEIL |
liam_grazier | 10:098c2fa0a1a6 | 3 | LIAM GRAZIER // DOUG TILLEY // ALEX BARON |
liam_grazier | 10:098c2fa0a1a6 | 4 | */ |
liam_grazier | 8:582ac4c5a524 | 5 | #if !FEATURE_LWIP |
liam_grazier | 8:582ac4c5a524 | 6 | #error [NOT_SUPPORTED] LWIP not supported for this target |
liam_grazier | 8:582ac4c5a524 | 7 | #endif |
liam_grazier | 8:582ac4c5a524 | 8 | #include "mbed.h" |
liam_grazier | 8:582ac4c5a524 | 9 | #include "EthernetInterface.h" |
liam_grazier | 8:582ac4c5a524 | 10 | #include "TCPServer.h" |
liam_grazier | 8:582ac4c5a524 | 11 | #include "TCPSocket.h" |
liam_grazier | 10:098c2fa0a1a6 | 12 | char realtime[32]; //char for storing the RTC |
liam_grazier | 8:582ac4c5a524 | 13 | #include <iostream> |
liam_grazier | 8:582ac4c5a524 | 14 | #include <string> |
liam_grazier | 8:582ac4c5a524 | 15 | #include "BMP280.h" |
liam_grazier | 8:582ac4c5a524 | 16 | #include "components.hpp" |
liam_grazier | 8:582ac4c5a524 | 17 | #include "network.hpp" |
liam_grazier | 10:098c2fa0a1a6 | 18 | Mutex Net; //mutex lock for the network. |
liam_grazier | 8:582ac4c5a524 | 19 | #define HTTP_STATUS_LINE "HTTP/1.0 200 OK" |
liam_grazier | 8:582ac4c5a524 | 20 | #define HTTP_HEADER_FIELDS "Content-Type: text/html; charset=utf-8" |
liam_grazier | 8:582ac4c5a524 | 21 | #define HTTP_MESSAGE_BODY1 "" \ |
liam_grazier | 8:582ac4c5a524 | 22 | "<html>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 23 | " <body style=\"display:flex;text-align:center\">" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 24 | " <div style=\"margin:auto\">" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 25 | " <h1>Sensor Data</h1>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 26 | " <p>Light Level LDR value: " "\r\n" |
liam_grazier | 8:582ac4c5a524 | 27 | |
liam_grazier | 8:582ac4c5a524 | 28 | #define HTTP_Pressure1 "" \ |
liam_grazier | 8:582ac4c5a524 | 29 | "<html>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 30 | " <body style=\"display:flex;text-align:center\">" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 31 | " <div style=\"margin:auto\">" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 32 | " <h1> </h1>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 33 | " <p>Pressure(mbar): " "\r\n" |
liam_grazier | 8:582ac4c5a524 | 34 | |
liam_grazier | 8:582ac4c5a524 | 35 | #define HTTP_Pressure2 "" \ |
liam_grazier | 8:582ac4c5a524 | 36 | "</p>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 37 | " </div>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 38 | " </body>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 39 | "</html>" |
liam_grazier | 8:582ac4c5a524 | 40 | #define HTTP_TIME "" \ |
liam_grazier | 8:582ac4c5a524 | 41 | "<html>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 42 | " <body style=\"display:flex;text-align:center\">" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 43 | " <div style=\"margin:auto\">" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 44 | " <h1> </h1>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 45 | " <p>Time: " "\r\n" |
liam_grazier | 8:582ac4c5a524 | 46 | |
liam_grazier | 8:582ac4c5a524 | 47 | #define HTTP_Temperature1 "" \ |
liam_grazier | 8:582ac4c5a524 | 48 | "<html>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 49 | " <body style=\"display:flex;text-align:center\">" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 50 | " <div style=\"margin:auto\">" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 51 | " <h1> </h1>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 52 | " <p>Temperature(Degrees Celcius): " "\r\n" |
liam_grazier | 8:582ac4c5a524 | 53 | |
liam_grazier | 8:582ac4c5a524 | 54 | #define HTTP_Temperature2 "" \ |
liam_grazier | 8:582ac4c5a524 | 55 | "</p>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 56 | " </div>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 57 | " </body>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 58 | "</html>" |
liam_grazier | 8:582ac4c5a524 | 59 | #define HTTP_MESSAGE_TIME "" \ |
liam_grazier | 8:582ac4c5a524 | 60 | "</p>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 61 | " </div>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 62 | " </body>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 63 | "</html>" |
liam_grazier | 8:582ac4c5a524 | 64 | #define HTTP_MESSAGE_BODY2 "" \ |
liam_grazier | 8:582ac4c5a524 | 65 | "</p>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 66 | " </div>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 67 | " </body>" "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 68 | "</html>" |
liam_grazier | 8:582ac4c5a524 | 69 | |
liam_grazier | 8:582ac4c5a524 | 70 | |
liam_grazier | 8:582ac4c5a524 | 71 | #define HTTP_RESPONSE HTTP_STATUS_LINE "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 72 | HTTP_HEADER_FIELDS "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 73 | "\r\n" \ |
liam_grazier | 8:582ac4c5a524 | 74 | HTTP_MESSAGE_BODY "\r\n" |
liam_grazier | 8:582ac4c5a524 | 75 | |
liam_grazier | 10:098c2fa0a1a6 | 76 | #define IP "10.0.0.10" //ipaddress |
liam_grazier | 10:098c2fa0a1a6 | 77 | #define NETMASK "255.0.0.0" //subnetmask |
liam_grazier | 10:098c2fa0a1a6 | 78 | #define GATEWAY "10.0.0.1" //defaultgateway |
liam_grazier | 10:098c2fa0a1a6 | 79 | void dispstralltime() //function for getting time from the RTC |
liam_grazier | 10:098c2fa0a1a6 | 80 | { |
liam_grazier | 8:582ac4c5a524 | 81 | time_t seconds = time(NULL); |
liam_grazier | 10:098c2fa0a1a6 | 82 | strftime(realtime, 32, "%c\n\r", localtime(&seconds)); //realtime value = yyyy/mm/dd/hh/mm/ss |
liam_grazier | 10:098c2fa0a1a6 | 83 | } |
liam_grazier | 8:582ac4c5a524 | 84 | void networksend(void) |
liam_grazier | 8:582ac4c5a524 | 85 | { |
liam_grazier | 8:582ac4c5a524 | 86 | // interrupt routine setup |
liam_grazier | 8:582ac4c5a524 | 87 | Net.lock(); |
liam_grazier | 10:098c2fa0a1a6 | 88 | printf("Network Enabled\n\r");//here to show the user in terminal network is initalised |
liam_grazier | 8:582ac4c5a524 | 89 | //Configure an ethernet connection |
liam_grazier | 8:582ac4c5a524 | 90 | EthernetInterface eth; |
liam_grazier | 8:582ac4c5a524 | 91 | eth.set_network(IP, NETMASK, GATEWAY); |
liam_grazier | 8:582ac4c5a524 | 92 | eth.connect(); |
liam_grazier | 8:582ac4c5a524 | 93 | Net.unlock(); |
liam_grazier | 8:582ac4c5a524 | 94 | //Now setup a web server |
liam_grazier | 8:582ac4c5a524 | 95 | TCPServer srv; //TCP/IP Server |
liam_grazier | 8:582ac4c5a524 | 96 | TCPSocket clt_sock; //Socket for communication |
liam_grazier | 8:582ac4c5a524 | 97 | SocketAddress clt_addr; //Address of incoming connection |
liam_grazier | 8:582ac4c5a524 | 98 | /* Open the server on ethernet stack */ |
liam_grazier | 8:582ac4c5a524 | 99 | srv.open(ð); |
liam_grazier | 8:582ac4c5a524 | 100 | /* Bind the HTTP port (TCP 80) to the server */ |
liam_grazier | 8:582ac4c5a524 | 101 | srv.bind(eth.get_ip_address(), 80); |
liam_grazier | 8:582ac4c5a524 | 102 | /* Can handle 5 simultaneous connections */ |
liam_grazier | 10:098c2fa0a1a6 | 103 | srv.listen(5); |
liam_grazier | 10:098c2fa0a1a6 | 104 | while (true) |
liam_grazier | 10:098c2fa0a1a6 | 105 | { |
liam_grazier | 8:582ac4c5a524 | 106 | Net.lock(); |
liam_grazier | 8:582ac4c5a524 | 107 | using namespace std; |
liam_grazier | 8:582ac4c5a524 | 108 | //Block and wait on an incoming connection |
liam_grazier | 8:582ac4c5a524 | 109 | srv.accept(&clt_sock, &clt_addr); |
liam_grazier | 10:098c2fa0a1a6 | 110 | //printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port()); |
liam_grazier | 8:582ac4c5a524 | 111 | double temp = sensor.getTemperature(); |
liam_grazier | 8:582ac4c5a524 | 112 | double pres = sensor.getPressure(); |
liam_grazier | 8:582ac4c5a524 | 113 | //Uses a C++ string to make it easier to concatinate |
liam_grazier | 8:582ac4c5a524 | 114 | string response; |
liam_grazier | 10:098c2fa0a1a6 | 115 | //Chars for storing the variables |
liam_grazier | 8:582ac4c5a524 | 116 | char adcIn_str[64]; |
liam_grazier | 8:582ac4c5a524 | 117 | char pres_str[64]; |
liam_grazier | 8:582ac4c5a524 | 118 | char temp_str[64]; |
liam_grazier | 10:098c2fa0a1a6 | 119 | dispstralltime(); //calltime |
liam_grazier | 8:582ac4c5a524 | 120 | //Read the LDR value |
liam_grazier | 10:098c2fa0a1a6 | 121 | //declairing floats for storing data |
liam_grazier | 8:582ac4c5a524 | 122 | float u = adcIn; |
liam_grazier | 8:582ac4c5a524 | 123 | float b = pres; |
liam_grazier | 8:582ac4c5a524 | 124 | float a = temp; |
liam_grazier | 10:098c2fa0a1a6 | 125 | //Converterting the floats to chars ready for print |
liam_grazier | 8:582ac4c5a524 | 126 | sprintf(adcIn_str, "%5.3f", u ); |
liam_grazier | 8:582ac4c5a524 | 127 | sprintf(pres_str, "%4.2f", b); |
liam_grazier | 8:582ac4c5a524 | 128 | sprintf(temp_str, "%3.1f", a); |
liam_grazier | 8:582ac4c5a524 | 129 | //Build the C++ string response |
liam_grazier | 8:582ac4c5a524 | 130 | response += HTTP_TIME; |
liam_grazier | 10:098c2fa0a1a6 | 131 | response += realtime; //write time |
liam_grazier | 8:582ac4c5a524 | 132 | response += HTTP_MESSAGE_BODY1; |
liam_grazier | 10:098c2fa0a1a6 | 133 | response += adcIn_str; //writeadc |
liam_grazier | 8:582ac4c5a524 | 134 | response += HTTP_Temperature1; |
liam_grazier | 10:098c2fa0a1a6 | 135 | response += temp_str; //writetemp |
liam_grazier | 8:582ac4c5a524 | 136 | response += HTTP_Temperature2; |
liam_grazier | 8:582ac4c5a524 | 137 | response += HTTP_Pressure1; |
liam_grazier | 10:098c2fa0a1a6 | 138 | response += pres_str; //writepressure |
liam_grazier | 8:582ac4c5a524 | 139 | response += HTTP_Pressure2; |
liam_grazier | 8:582ac4c5a524 | 140 | response += HTTP_MESSAGE_TIME; |
liam_grazier | 8:582ac4c5a524 | 141 | response += HTTP_MESSAGE_BODY2; |
liam_grazier | 8:582ac4c5a524 | 142 | //Send static HTML response (as a C string) |
liam_grazier | 8:582ac4c5a524 | 143 | clt_sock.send(response.c_str(), response.size()+6); |
liam_grazier | 8:582ac4c5a524 | 144 | Net.unlock(); |
liam_grazier | 10:098c2fa0a1a6 | 145 | Thread::signal_wait(SIG_NET);//thead signal triggered by ticket in main. |
liam_grazier | 8:582ac4c5a524 | 146 | } |
liam_grazier | 8:582ac4c5a524 | 147 | } |