Thermometer connected to internet

Dependencies:   BME280 EthernetInterface FXOS8700Q HTTPClient-wolfSSL NTPClient NetworkAPI OAuth4Tw TSL2561_I2C eCompass_FPU_Lib mbed-rtos mbed wolfSSL

Fork of TCP_Server_Example by Roy van Dam

Committer:
NegativeBlack
Date:
Sat Nov 15 21:46:59 2014 +0000
Revision:
11:90554d22ade5
Parent:
10:9e8d5928537a
Child:
12:12369ee344ab
Version bump of included libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:bb128f0e952f 1 #include "mbed.h"
donatien 0:bb128f0e952f 2 #include "EthernetInterface.h"
NegativeBlack 11:90554d22ade5 3
NegativeBlack 9:a4c85bea2d77 4 #include "NetworkAPI/buffer.hpp"
NegativeBlack 11:90554d22ade5 5 #include "NetworkAPI/select.hpp"
NegativeBlack 11:90554d22ade5 6 #include "NetworkAPI/ip/address.hpp"
NegativeBlack 9:a4c85bea2d77 7 #include "NetworkAPI/tcp/socket.hpp"
NegativeBlack 9:a4c85bea2d77 8 using namespace network;
NegativeBlack 11:90554d22ade5 9
NegativeBlack 11:90554d22ade5 10 #define MAX_CLIENTS 5
NegativeBlack 11:90554d22ade5 11
NegativeBlack 6:33b57f606f2b 12 int
NegativeBlack 6:33b57f606f2b 13 main()
NegativeBlack 6:33b57f606f2b 14 {
NegativeBlack 6:33b57f606f2b 15 EthernetInterface interface;
NegativeBlack 6:33b57f606f2b 16 interface.init();
NegativeBlack 6:33b57f606f2b 17 interface.connect();
NegativeBlack 6:33b57f606f2b 18 printf("IP Address is %s\n\r", interface.getIPAddress());
NegativeBlack 11:90554d22ade5 19
NegativeBlack 11:90554d22ade5 20 Select select;
NegativeBlack 9:a4c85bea2d77 21 tcp::Socket server;
NegativeBlack 11:90554d22ade5 22 tcp::Socket client[MAX_CLIENTS];
NegativeBlack 11:90554d22ade5 23 tcp::Socket *socket = NULL;
NegativeBlack 11:90554d22ade5 24
NegativeBlack 11:90554d22ade5 25 int result = 0;
NegativeBlack 11:90554d22ade5 26 int index = 0;
NegativeBlack 11:90554d22ade5 27
NegativeBlack 11:90554d22ade5 28 network::Buffer buffer(256);
NegativeBlack 11:90554d22ade5 29 std::string message("Hello world!");
NegativeBlack 11:90554d22ade5 30
NegativeBlack 11:90554d22ade5 31 // Configure the server socket (assume everty thing works)
NegativeBlack 11:90554d22ade5 32 server.open();
NegativeBlack 11:90554d22ade5 33 server.bind(1234);
NegativeBlack 11:90554d22ade5 34 server.listen(MAX_CLIENTS);
NegativeBlack 11:90554d22ade5 35
NegativeBlack 11:90554d22ade5 36 // Add sockets to the select api
NegativeBlack 11:90554d22ade5 37 select.set(&server, Select::Read);
NegativeBlack 11:90554d22ade5 38 for (index = 0; index < MAX_CLIENTS; index++) {
NegativeBlack 11:90554d22ade5 39 select.set(&client[index], Select::Read);
NegativeBlack 10:9e8d5928537a 40 }
NegativeBlack 11:90554d22ade5 41
NegativeBlack 11:90554d22ade5 42 do {
NegativeBlack 11:90554d22ade5 43 // Wait for activity
NegativeBlack 11:90554d22ade5 44 result = select.wait();
NegativeBlack 11:90554d22ade5 45 if (result < -1) {
NegativeBlack 11:90554d22ade5 46 printf("Failed to select\n\r");
NegativeBlack 11:90554d22ade5 47 break;
NegativeBlack 9:a4c85bea2d77 48 }
NegativeBlack 11:90554d22ade5 49
NegativeBlack 11:90554d22ade5 50 // Get the first socket
NegativeBlack 11:90554d22ade5 51 socket = (tcp::Socket *)select.getReadable();
NegativeBlack 11:90554d22ade5 52
NegativeBlack 11:90554d22ade5 53 for (; socket != NULL; socket = (tcp::Socket *)select.getReadable()) {
NegativeBlack 11:90554d22ade5 54 // Check if there was a connection request.
NegativeBlack 11:90554d22ade5 55 if (socket->getHandle() == server.getHandle()) {
NegativeBlack 11:90554d22ade5 56 // Find an unused client
NegativeBlack 11:90554d22ade5 57 for (index = 0; index < MAX_CLIENTS; index++) {
NegativeBlack 11:90554d22ade5 58 if (client[index].getStatus() == network::Socket::Closed) {
NegativeBlack 11:90554d22ade5 59 break;
NegativeBlack 11:90554d22ade5 60 }
NegativeBlack 11:90554d22ade5 61 }
NegativeBlack 11:90554d22ade5 62
NegativeBlack 11:90554d22ade5 63 // Maximum connections reached
NegativeBlack 11:90554d22ade5 64 if (index == MAX_CLIENTS) {
NegativeBlack 11:90554d22ade5 65 printf("Maximum connections reached\n\r");
NegativeBlack 11:90554d22ade5 66 continue;
NegativeBlack 11:90554d22ade5 67 }
NegativeBlack 11:90554d22ade5 68
NegativeBlack 11:90554d22ade5 69 // Accept the client
NegativeBlack 11:90554d22ade5 70 socket->accept(client[index]);
NegativeBlack 11:90554d22ade5 71 printf("Client connected %s:%d\n\r",
NegativeBlack 11:90554d22ade5 72 client[index].getRemoteEndpoint().getAddress().toString().c_str(),
NegativeBlack 11:90554d22ade5 73 client[index].getRemoteEndpoint().getPort());
NegativeBlack 11:90554d22ade5 74
NegativeBlack 11:90554d22ade5 75 // Send a nice message to the client
NegativeBlack 11:90554d22ade5 76 client[index].write((void *)message.data(), message.size());
NegativeBlack 11:90554d22ade5 77 continue;
NegativeBlack 11:90554d22ade5 78 }
NegativeBlack 11:90554d22ade5 79
NegativeBlack 11:90554d22ade5 80 // It was not the server socket, so it must be a client talking to us.
NegativeBlack 11:90554d22ade5 81 switch (socket->read(buffer)) {
NegativeBlack 10:9e8d5928537a 82 case 0:
NegativeBlack 11:90554d22ade5 83 // Remote end disconnected
NegativeBlack 11:90554d22ade5 84 printf("Client disconnected %s:%d\n\r",
NegativeBlack 11:90554d22ade5 85 socket->getRemoteEndpoint().getAddress().toString().c_str(),
NegativeBlack 11:90554d22ade5 86 socket->getRemoteEndpoint().getPort());
NegativeBlack 11:90554d22ade5 87
NegativeBlack 11:90554d22ade5 88 // Close socket
NegativeBlack 11:90554d22ade5 89 socket->close();
NegativeBlack 9:a4c85bea2d77 90 break;
NegativeBlack 11:90554d22ade5 91
NegativeBlack 11:90554d22ade5 92 case -1:
NegativeBlack 11:90554d22ade5 93 printf("Error while reading data from socket\n\r");
NegativeBlack 11:90554d22ade5 94 socket->close();
NegativeBlack 11:90554d22ade5 95 break;
NegativeBlack 11:90554d22ade5 96
NegativeBlack 9:a4c85bea2d77 97 default:
NegativeBlack 11:90554d22ade5 98 printf("Message from %s:%d\n\r",
NegativeBlack 11:90554d22ade5 99 socket->getRemoteEndpoint().getAddress().toString().c_str(),
NegativeBlack 11:90554d22ade5 100 socket->getRemoteEndpoint().getPort());
NegativeBlack 11:90554d22ade5 101
NegativeBlack 11:90554d22ade5 102 printf("%s\n\r", (char *)buffer.data());
NegativeBlack 11:90554d22ade5 103 break;
NegativeBlack 9:a4c85bea2d77 104 }
NegativeBlack 9:a4c85bea2d77 105 }
NegativeBlack 11:90554d22ade5 106
NegativeBlack 11:90554d22ade5 107 } while (server.getStatus() == network::Socket::Listening);
NegativeBlack 6:33b57f606f2b 108 }