Updated
Networking.cpp@0:9df0dd20731a, 2019-01-05 (annotated)
- Committer:
- Swabey89
- Date:
- Sat Jan 05 15:02:17 2019 +0000
- Revision:
- 0:9df0dd20731a
Updated
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Swabey89 | 0:9df0dd20731a | 1 | #include "Networking.hpp" |
Swabey89 | 0:9df0dd20731a | 2 | |
Swabey89 | 0:9df0dd20731a | 3 | //Network thread - responsible for listening for connectinos and responding with updated tempature values |
Swabey89 | 0:9df0dd20731a | 4 | void network() |
Swabey89 | 0:9df0dd20731a | 5 | { |
Swabey89 | 0:9df0dd20731a | 6 | EthernetInterface eth; |
Swabey89 | 0:9df0dd20731a | 7 | eth.set_network(IP, NETMASK, GATEWAY); |
Swabey89 | 0:9df0dd20731a | 8 | eth.connect(); |
Swabey89 | 0:9df0dd20731a | 9 | |
Swabey89 | 0:9df0dd20731a | 10 | printQueue.call(printf, "The target IP address is '%s'\n\n\n\r", eth.get_ip_address()); |
Swabey89 | 0:9df0dd20731a | 11 | |
Swabey89 | 0:9df0dd20731a | 12 | //Now setup a web server |
Swabey89 | 0:9df0dd20731a | 13 | TCPServer srv; //TCP/IP Server |
Swabey89 | 0:9df0dd20731a | 14 | TCPSocket clt_sock; //Socket for communication |
Swabey89 | 0:9df0dd20731a | 15 | SocketAddress clt_addr; //Address of incoming connection |
Swabey89 | 0:9df0dd20731a | 16 | |
Swabey89 | 0:9df0dd20731a | 17 | /* Open the server on ethernet stack */ |
Swabey89 | 0:9df0dd20731a | 18 | srv.open(ð); |
Swabey89 | 0:9df0dd20731a | 19 | |
Swabey89 | 0:9df0dd20731a | 20 | /* Bind the HTTP port (TCP 80) to the server */ |
Swabey89 | 0:9df0dd20731a | 21 | srv.bind(eth.get_ip_address(), 80); |
Swabey89 | 0:9df0dd20731a | 22 | |
Swabey89 | 0:9df0dd20731a | 23 | /* Can handle 5 simultaneous connections */ |
Swabey89 | 0:9df0dd20731a | 24 | srv.listen(5); |
Swabey89 | 0:9df0dd20731a | 25 | |
Swabey89 | 0:9df0dd20731a | 26 | while(true) |
Swabey89 | 0:9df0dd20731a | 27 | { |
Swabey89 | 0:9df0dd20731a | 28 | //Block and wait on an incoming connection |
Swabey89 | 0:9df0dd20731a | 29 | srv.accept(&clt_sock, &clt_addr); |
Swabey89 | 0:9df0dd20731a | 30 | |
Swabey89 | 0:9df0dd20731a | 31 | network_tout.attach(network_toutISR,TOUT_TIME_DEF); |
Swabey89 | 0:9df0dd20731a | 32 | |
Swabey89 | 0:9df0dd20731a | 33 | if(logging) |
Swabey89 | 0:9df0dd20731a | 34 | { |
Swabey89 | 0:9df0dd20731a | 35 | printQueue.call(printf,"Incoming connection accepted on %s:%d\r\n", clt_addr.get_ip_address(), clt_addr.get_port()); |
Swabey89 | 0:9df0dd20731a | 36 | } |
Swabey89 | 0:9df0dd20731a | 37 | |
Swabey89 | 0:9df0dd20731a | 38 | //Uses a C++ string to make it easier to concatinate |
Swabey89 | 0:9df0dd20731a | 39 | { |
Swabey89 | 0:9df0dd20731a | 40 | string response; |
Swabey89 | 0:9df0dd20731a | 41 | char temp_str[10]; |
Swabey89 | 0:9df0dd20731a | 42 | char press_str[10]; |
Swabey89 | 0:9df0dd20731a | 43 | char light_str[10]; |
Swabey89 | 0:9df0dd20731a | 44 | |
Swabey89 | 0:9df0dd20731a | 45 | bufferLock.lock(); |
Swabey89 | 0:9df0dd20731a | 46 | double temp = buffer[newestIndex].gettemp(); |
Swabey89 | 0:9df0dd20731a | 47 | double press = buffer[newestIndex].getpress(); |
Swabey89 | 0:9df0dd20731a | 48 | float light = buffer[newestIndex].getlight()*100; |
Swabey89 | 0:9df0dd20731a | 49 | string time_str = buffer[newestIndex].getTime(); |
Swabey89 | 0:9df0dd20731a | 50 | bufferLock.unlock(); |
Swabey89 | 0:9df0dd20731a | 51 | |
Swabey89 | 0:9df0dd20731a | 52 | //Convert to a C String |
Swabey89 | 0:9df0dd20731a | 53 | sprintf(temp_str, "%5.2f", temp); |
Swabey89 | 0:9df0dd20731a | 54 | sprintf(press_str, "%5.2f", press); |
Swabey89 | 0:9df0dd20731a | 55 | sprintf(light_str, "%5.2f", light); |
Swabey89 | 0:9df0dd20731a | 56 | |
Swabey89 | 0:9df0dd20731a | 57 | |
Swabey89 | 0:9df0dd20731a | 58 | //Build the C++ string response |
Swabey89 | 0:9df0dd20731a | 59 | response = HTTP_RESPONSE; |
Swabey89 | 0:9df0dd20731a | 60 | |
Swabey89 | 0:9df0dd20731a | 61 | response += HTTP_MESSAGE_TIME; |
Swabey89 | 0:9df0dd20731a | 62 | response += time_str; |
Swabey89 | 0:9df0dd20731a | 63 | |
Swabey89 | 0:9df0dd20731a | 64 | response += HTTP_MESSAGE_TEMP; |
Swabey89 | 0:9df0dd20731a | 65 | response += temp_str; |
Swabey89 | 0:9df0dd20731a | 66 | |
Swabey89 | 0:9df0dd20731a | 67 | response += HTTP_MESSAGE_PRESSURE; |
Swabey89 | 0:9df0dd20731a | 68 | response += press_str; |
Swabey89 | 0:9df0dd20731a | 69 | |
Swabey89 | 0:9df0dd20731a | 70 | response += HTTP_MESSAGE_LIGHT; |
Swabey89 | 0:9df0dd20731a | 71 | response += light_str; |
Swabey89 | 0:9df0dd20731a | 72 | |
Swabey89 | 0:9df0dd20731a | 73 | response += HTTP_MESSAGE_FOOT; |
Swabey89 | 0:9df0dd20731a | 74 | |
Swabey89 | 0:9df0dd20731a | 75 | response += "\r\n"; |
Swabey89 | 0:9df0dd20731a | 76 | |
Swabey89 | 0:9df0dd20731a | 77 | //Send static HTML response (as a C string) |
Swabey89 | 0:9df0dd20731a | 78 | clt_sock.send(response.c_str(), response.size()); |
Swabey89 | 0:9df0dd20731a | 79 | |
Swabey89 | 0:9df0dd20731a | 80 | if(logging) |
Swabey89 | 0:9df0dd20731a | 81 | { |
Swabey89 | 0:9df0dd20731a | 82 | printQueue.call(printf, "Network thread responded with time: %s, temperature: %s, pressure:%s and light level: %s\r\n\n",time_str, temp_str, press_str, light_str); |
Swabey89 | 0:9df0dd20731a | 83 | } |
Swabey89 | 0:9df0dd20731a | 84 | } |
Swabey89 | 0:9df0dd20731a | 85 | network_tout.detach(); |
Swabey89 | 0:9df0dd20731a | 86 | } |
Swabey89 | 0:9df0dd20731a | 87 | } |
Swabey89 | 0:9df0dd20731a | 88 | |
Swabey89 | 0:9df0dd20731a | 89 | void network_toutISR(void) |
Swabey89 | 0:9df0dd20731a | 90 | { |
Swabey89 | 0:9df0dd20731a | 91 | threadstates |= NETWORK; |
Swabey89 | 0:9df0dd20731a | 92 | } |