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.
Dependencies: EthernetInterface SeeedGrayOLED USBDevice mbed-rtos mbed
Fork of Ethernet_Status_HelloWorld by
main.cpp@4:9f88f8b4e739, 2015-01-11 (annotated)
- Committer:
- danielashercohen
- Date:
- Sun Jan 11 05:36:29 2015 +0000
- Revision:
- 4:9f88f8b4e739
- Parent:
- 3:af736e1af4a9
This acts as a server, when started it displays it's own IP address, when a client connects it displays the connecting IP address, it then displays the data sent and returns it to the client.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| edodm85 | 0:9e8b3fd68f6c | 1 | /* |
| danielashercohen | 4:9f88f8b4e739 | 2 | * Author: Dan Cohen |
| edodm85 | 2:922ee74b0192 | 3 | * Date: 15/02/14 |
| danielashercohen | 4:9f88f8b4e739 | 4 | * Notes: Displays the IP address then any data that is sent from a connecting client |
| danielashercohen | 4:9f88f8b4e739 | 5 | * Client command line on my system: |
| danielashercohen | 4:9f88f8b4e739 | 6 | * ./client 192.168.2.3 2000 |
| danielashercohen | 4:9f88f8b4e739 | 7 | * |
| edodm85 | 0:9e8b3fd68f6c | 8 | */ |
| edodm85 | 0:9e8b3fd68f6c | 9 | |
| edodm85 | 0:9e8b3fd68f6c | 10 | |
| edodm85 | 0:9e8b3fd68f6c | 11 | #include "mbed.h" |
| edodm85 | 0:9e8b3fd68f6c | 12 | #include "EthernetInterface.h" |
| edodm85 | 0:9e8b3fd68f6c | 13 | #include "eth_status.h" |
| danielashercohen | 4:9f88f8b4e739 | 14 | #include "SeeedGrayOLED.h" |
| danielashercohen | 4:9f88f8b4e739 | 15 | #include "USBSerial.h" |
| edodm85 | 0:9e8b3fd68f6c | 16 | |
| danielashercohen | 4:9f88f8b4e739 | 17 | DigitalOut led1(LED1); |
| danielashercohen | 4:9f88f8b4e739 | 18 | DigitalOut led2(LED2); |
| danielashercohen | 4:9f88f8b4e739 | 19 | DigitalOut led3(LED3); |
| danielashercohen | 4:9f88f8b4e739 | 20 | DigitalOut led4(LED4); |
| edodm85 | 2:922ee74b0192 | 21 | |
| danielashercohen | 4:9f88f8b4e739 | 22 | SeeedGrayOLED SeeedGrayOled(P0_10, P0_11); |
| danielashercohen | 4:9f88f8b4e739 | 23 | |
| danielashercohen | 4:9f88f8b4e739 | 24 | USBSerial serial; |
| danielashercohen | 4:9f88f8b4e739 | 25 | |
| edodm85 | 0:9e8b3fd68f6c | 26 | //ETHERNET |
| edodm85 | 0:9e8b3fd68f6c | 27 | #define ECHO_SERVER_PORT 2000 |
| edodm85 | 0:9e8b3fd68f6c | 28 | |
| danielashercohen | 4:9f88f8b4e739 | 29 | EthernetInterface eth; |
| danielashercohen | 4:9f88f8b4e739 | 30 | TCPSocketServer server; |
| danielashercohen | 4:9f88f8b4e739 | 31 | TCPSocketConnection connection; |
| danielashercohen | 4:9f88f8b4e739 | 32 | |
| danielashercohen | 4:9f88f8b4e739 | 33 | char readBuffer[1024]; |
| edodm85 | 0:9e8b3fd68f6c | 34 | |
| danielashercohen | 4:9f88f8b4e739 | 35 | // This is required because the Seeed Arch Pro doesn't have a |
| danielashercohen | 4:9f88f8b4e739 | 36 | // unique MAC address (if you don't have this function then the Ethernet Interface init() |
| danielashercohen | 4:9f88f8b4e739 | 37 | // function will hang when it tries to find it. |
| danielashercohen | 4:9f88f8b4e739 | 38 | extern "C" void mbed_mac_address(char *mac) |
| danielashercohen | 4:9f88f8b4e739 | 39 | { |
| danielashercohen | 4:9f88f8b4e739 | 40 | |
| danielashercohen | 4:9f88f8b4e739 | 41 | mac[0] = 0x00; |
| danielashercohen | 4:9f88f8b4e739 | 42 | mac[1] = 0x02; |
| danielashercohen | 4:9f88f8b4e739 | 43 | mac[2] = 0xF7; |
| danielashercohen | 4:9f88f8b4e739 | 44 | mac[3] = 0xF1; |
| danielashercohen | 4:9f88f8b4e739 | 45 | mac[4] = 0x91; |
| danielashercohen | 4:9f88f8b4e739 | 46 | mac[5] = 0x9F; |
| danielashercohen | 4:9f88f8b4e739 | 47 | }; |
| edodm85 | 0:9e8b3fd68f6c | 48 | |
| edodm85 | 0:9e8b3fd68f6c | 49 | int Init() |
| edodm85 | 0:9e8b3fd68f6c | 50 | { |
| danielashercohen | 4:9f88f8b4e739 | 51 | led1 = 1; |
| danielashercohen | 4:9f88f8b4e739 | 52 | led2 = 1; |
| danielashercohen | 4:9f88f8b4e739 | 53 | led3 = 1; |
| danielashercohen | 4:9f88f8b4e739 | 54 | led4 = 1; |
| danielashercohen | 4:9f88f8b4e739 | 55 | |
| danielashercohen | 4:9f88f8b4e739 | 56 | // Initialize the OLED display |
| danielashercohen | 4:9f88f8b4e739 | 57 | SeeedGrayOled.init(); // initialize SEEED OLED display |
| danielashercohen | 4:9f88f8b4e739 | 58 | SeeedGrayOled.clearDisplay(); // Clear Display. |
| danielashercohen | 4:9f88f8b4e739 | 59 | SeeedGrayOled.setNormalDisplay(); // Set Normal Display Mode |
| danielashercohen | 4:9f88f8b4e739 | 60 | SeeedGrayOled.setVerticalMode(); // Set to vertical mode for displaying text |
| danielashercohen | 4:9f88f8b4e739 | 61 | |
| danielashercohen | 4:9f88f8b4e739 | 62 | SeeedGrayOled.setTextXY(1,0); //set Cursor to first line, 0th column |
| danielashercohen | 4:9f88f8b4e739 | 63 | |
| danielashercohen | 4:9f88f8b4e739 | 64 | SeeedGrayOled.setGrayLevel(15); //Set Grayscale level. Any number between 0 - 15. |
| danielashercohen | 4:9f88f8b4e739 | 65 | |
| danielashercohen | 4:9f88f8b4e739 | 66 | eth.init(); |
| danielashercohen | 4:9f88f8b4e739 | 67 | serial.printf("initiated\n"); |
| danielashercohen | 4:9f88f8b4e739 | 68 | |
| edodm85 | 0:9e8b3fd68f6c | 69 | eth.connect(); |
| danielashercohen | 4:9f88f8b4e739 | 70 | serial.printf("connected\n"); |
| danielashercohen | 4:9f88f8b4e739 | 71 | serial.printf("My IP address: %s\n\n", eth.getIPAddress()); |
| danielashercohen | 4:9f88f8b4e739 | 72 | SeeedGrayOled.clearDisplay(); // Clear Display. |
| danielashercohen | 4:9f88f8b4e739 | 73 | SeeedGrayOled.setTextXY(1,0); |
| danielashercohen | 4:9f88f8b4e739 | 74 | SeeedGrayOled.putString("My IP:"); |
| danielashercohen | 4:9f88f8b4e739 | 75 | SeeedGrayOled.setTextXY(3,0); |
| danielashercohen | 4:9f88f8b4e739 | 76 | SeeedGrayOled.putString(eth.getIPAddress()); |
| danielashercohen | 4:9f88f8b4e739 | 77 | |
| edodm85 | 0:9e8b3fd68f6c | 78 | server.bind(ECHO_SERVER_PORT); |
| danielashercohen | 4:9f88f8b4e739 | 79 | serial.printf("bound to port %d\n", ECHO_SERVER_PORT); |
| edodm85 | 0:9e8b3fd68f6c | 80 | server.listen(1); |
| danielashercohen | 4:9f88f8b4e739 | 81 | serial.printf("%s - Speed: %d Mbps\n", get_transmission_status(), get_connection_speed()); |
| danielashercohen | 4:9f88f8b4e739 | 82 | |
| edodm85 | 0:9e8b3fd68f6c | 83 | return 0; |
| edodm85 | 0:9e8b3fd68f6c | 84 | } |
| edodm85 | 0:9e8b3fd68f6c | 85 | |
| danielashercohen | 4:9f88f8b4e739 | 86 | int main() |
| edodm85 | 0:9e8b3fd68f6c | 87 | { |
| danielashercohen | 4:9f88f8b4e739 | 88 | |
| edodm85 | 0:9e8b3fd68f6c | 89 | Init(); |
| danielashercohen | 4:9f88f8b4e739 | 90 | |
| danielashercohen | 4:9f88f8b4e739 | 91 | while(true) { |
| danielashercohen | 4:9f88f8b4e739 | 92 | serial.printf("\nWait for new connection...\n"); |
| danielashercohen | 4:9f88f8b4e739 | 93 | server.accept(connection); |
| danielashercohen | 4:9f88f8b4e739 | 94 | |
| danielashercohen | 4:9f88f8b4e739 | 95 | led3 = 0; |
| danielashercohen | 4:9f88f8b4e739 | 96 | |
| danielashercohen | 4:9f88f8b4e739 | 97 | serial.printf("Connection from: %s\n", connection.get_address()); |
| danielashercohen | 4:9f88f8b4e739 | 98 | SeeedGrayOled.setTextXY(5,0); |
| danielashercohen | 4:9f88f8b4e739 | 99 | SeeedGrayOled.putString("Connect IP: "); |
| danielashercohen | 4:9f88f8b4e739 | 100 | SeeedGrayOled.setTextXY(7,0); |
| danielashercohen | 4:9f88f8b4e739 | 101 | SeeedGrayOled.putString(connection.get_address()); |
| danielashercohen | 4:9f88f8b4e739 | 102 | |
| danielashercohen | 4:9f88f8b4e739 | 103 | char buffer[300]; |
| danielashercohen | 4:9f88f8b4e739 | 104 | int ret; |
| edodm85 | 0:9e8b3fd68f6c | 105 | |
| danielashercohen | 4:9f88f8b4e739 | 106 | ret = connection.receive(buffer, sizeof(buffer)-1); |
| danielashercohen | 4:9f88f8b4e739 | 107 | if (ret <= 0) { |
| danielashercohen | 4:9f88f8b4e739 | 108 | serial.printf("didn't get any message from the server connection\n"); |
| danielashercohen | 4:9f88f8b4e739 | 109 | } else { |
| danielashercohen | 4:9f88f8b4e739 | 110 | buffer[ret] = '\0'; |
| danielashercohen | 4:9f88f8b4e739 | 111 | serial.printf("Received %d chars from server:\n%s\n", ret, buffer); |
| danielashercohen | 4:9f88f8b4e739 | 112 | } |
| danielashercohen | 4:9f88f8b4e739 | 113 | |
| danielashercohen | 4:9f88f8b4e739 | 114 | char retBuffer[300]; |
| danielashercohen | 4:9f88f8b4e739 | 115 | sprintf(retBuffer, "%d", buffer); |
| danielashercohen | 4:9f88f8b4e739 | 116 | |
| danielashercohen | 4:9f88f8b4e739 | 117 | serial.printf("Sending %d chars back to client :\n%s\n", ret, buffer); |
| danielashercohen | 4:9f88f8b4e739 | 118 | ret = connection.send_all (buffer, sizeof(buffer)-1); |
| danielashercohen | 4:9f88f8b4e739 | 119 | SeeedGrayOled.setTextXY(9,0); |
| danielashercohen | 4:9f88f8b4e739 | 120 | SeeedGrayOled.putString("D: "); |
| danielashercohen | 4:9f88f8b4e739 | 121 | SeeedGrayOled.setTextXY(9,4); |
| danielashercohen | 4:9f88f8b4e739 | 122 | SeeedGrayOled.putString(buffer); |
| danielashercohen | 4:9f88f8b4e739 | 123 | |
| danielashercohen | 4:9f88f8b4e739 | 124 | connection.close(); |
| danielashercohen | 4:9f88f8b4e739 | 125 | |
| danielashercohen | 4:9f88f8b4e739 | 126 | led3 = 1; |
| danielashercohen | 4:9f88f8b4e739 | 127 | |
| edodm85 | 0:9e8b3fd68f6c | 128 | } |
| danielashercohen | 4:9f88f8b4e739 | 129 | |
| edodm85 | 0:9e8b3fd68f6c | 130 | } |
