Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:a3418da504a0, committed 2020-07-30
- Comitter:
- lucastanio
- Date:
- Thu Jul 30 17:34:15 2020 +0000
- Commit message:
- Socket TCP
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/http_server.lib Thu Jul 30 17:34:15 2020 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/lucastanio/code/http_server/#e6957f354668
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Jul 30 17:34:15 2020 +0000
@@ -0,0 +1,150 @@
+#include "mbed.h"
+#include "EthernetInterface.h"
+#include "TCPSocket.h"
+#include "http_server.h"
+#include "LocalFileSystem.h"
+
+#define PORT 1000
+#define SOCKET_TIMEOUT_MS 2000
+
+//Serial interface
+Serial pc(USBTX, USBRX,115200);
+
+//Initialize network interface
+EthernetInterface eth;
+
+nsapi_error_t status;
+int n_bytes;
+SocketAddress eth_addr;
+TCPSocket socket;
+TCPSocket* client;
+int i;
+Thread socket_thread;
+Thread web_server_thread;
+char recv_buffer[40];
+char html_page[10000];
+int html_page_size;
+
+HttpServer web_server;
+
+DigitalOut heartbeat(LED1);
+DigitalOut socket_led(LED2);
+DigitalOut webserver_led(LED3);
+
+//There is a configuration file that can be accessed through usb in order to configure the device
+LocalFileSystem local("local"); //Create the local filesystem under the name "local"
+
+FILE *html_file; //Pointer to HTML file
+
+void socket_port()
+{
+ if(socket.open(ð)==NSAPI_ERROR_OK)
+ pc.printf("Socket Opened\n\r");
+ else
+ pc.printf("Error opening socket\n\r");
+
+ if(socket.bind(PORT)==NSAPI_ERROR_OK)
+ pc.printf("Socket Bind Success\n\r");
+ else
+ pc.printf("Bind Error\n\r");
+
+ if(socket.listen(QUEUED_REQUESTS)==NSAPI_ERROR_OK)
+ pc.printf("Socket Listen Success\n\r");
+ else
+ pc.printf("Listen Error\n\r");
+
+ while(1)
+ {
+ client = socket.accept(&status);
+
+ pc.printf("After accept\n\r");
+ socket_led = !socket_led;
+ if(status==NSAPI_ERROR_OK)
+ {
+ client->set_timeout(SOCKET_TIMEOUT_MS);
+ n_bytes = client->recv(recv_buffer,40);
+ if(n_bytes>0)
+ {
+ for(i=0;i<n_bytes;i++)
+ pc.putc(recv_buffer[i]);
+ switch(recv_buffer[0])
+ {
+ case 'a':
+ pc.printf("a received\n\r");
+ client->send("a=2\n\r",5);
+ break;
+ case 'b':
+ pc.printf("b received\n\r");
+ client->send("b=5\n\r",5);
+ break;
+ default:
+ pc.printf("ERROR>NOT-A-CMD\n\r");
+ client->send("ERROR>NOT-A-CMD\n\r",17);
+ }
+ ThisThread::sleep_for(2000);
+ }
+ else
+ pc.printf("Receiving Error: %d\n\r",n_bytes);
+ client->close();
+ }
+ else
+ pc.printf("Accept Error: %d\n\r",status);
+ }
+}
+
+void web_server_func()
+{
+ web_server.init(ð,html_page,html_page_size);
+ while(1)
+ {
+ web_server.run();
+ webserver_led = !webserver_led;
+ }
+}
+
+int main()
+{
+ pc.printf("Starting Firmware\n\r");
+
+ // Initializng webserver
+ html_file = fopen("/local/index.htm","r"); // Open "index.html" on the local file system for reading
+ if(html_file==NULL){ //If file doesnt exist
+ pc.printf("File not found: index.htm\n\r");
+ }
+ else
+ { //File exists
+ pc.printf("HMTL file found\n\r");
+ fseek(html_file, 0, SEEK_SET);
+ html_page_size = 0;
+ while (!feof(html_file))
+ html_page[html_page_size++]= getc(html_file);
+ if(feof(html_file))
+ html_page_size--;
+ }
+
+ // Initialising Ethernet Interface
+ do{
+ status = eth.connect();
+ if(status == NSAPI_ERROR_OK || status == NSAPI_ERROR_IS_CONNECTED)
+ pc.printf("Internet connection established\n\r");
+ else
+ pc.printf("No internet connnection: Error Code: %d\n\r", status);
+ }while(status != NSAPI_ERROR_OK && status != NSAPI_ERROR_IS_CONNECTED);
+
+ // Checking IP Address (DHCP Mode)
+ if(eth.get_ip_address(ð_addr)==NSAPI_ERROR_OK)
+ pc.printf("IP address: %s\n\r", eth_addr.get_ip_address() ? eth_addr.get_ip_address() : "None");
+ else
+ pc.printf("DHCP failure - acquiring the IP address has failed\n\r");
+
+ //while(1){}
+
+
+ socket_thread.start(socket_port);
+ web_server_thread.start(web_server_func);
+
+ while (true) {
+ heartbeat = !heartbeat;
+ ThisThread::sleep_for(1000);
+ }
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Thu Jul 30 17:34:15 2020 +0000 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#3ab72c71b75cb9cb91160a54fba22ec43b036ed2