lpc1768-picotcp-eth to revision 8, PicoTCP to revision 41 (mbed-rtos to revision 12, mbed to revision 63)
Dependencies: PicoTCP lpc1768-picotcp-eth mbed-rtos mbed
Fork of TCPSocket_HelloWorldTest by
main.cpp@16:ac10f2f5ca42, 2013-07-19 (annotated)
- Committer:
- mbed714
- Date:
- Fri Jul 19 09:35:44 2013 +0000
- Revision:
- 16:ac10f2f5ca42
- Parent:
- 14:c3694118dd57
Added send_result printf
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
donatien | 0:bb128f0e952f | 1 | #include "mbed.h" |
donatien | 0:bb128f0e952f | 2 | #include "EthernetInterface.h" |
donatien | 0:bb128f0e952f | 3 | |
mbed714 | 12:9bef73198a53 | 4 | #define RETRIES_ALLOWED 5 |
mbed714 | 12:9bef73198a53 | 5 | |
mbed714 | 14:c3694118dd57 | 6 | Serial pc2(USBTX, USBRX); |
mbed714 | 12:9bef73198a53 | 7 | EthernetInterface eth; |
mbed714 | 12:9bef73198a53 | 8 | DigitalOut led1(LED1); |
mbed714 | 12:9bef73198a53 | 9 | |
mbed714 | 12:9bef73198a53 | 10 | int main() |
mbed714 | 12:9bef73198a53 | 11 | { |
mbed714 | 12:9bef73198a53 | 12 | |
mbed714 | 14:c3694118dd57 | 13 | pc2.baud(115200); |
mbed714 | 12:9bef73198a53 | 14 | printf("Initialising...\n"); |
mbed714 | 12:9bef73198a53 | 15 | set_time(0); |
mbed714 | 12:9bef73198a53 | 16 | |
mbed714 | 12:9bef73198a53 | 17 | // use DHCP |
mbed714 | 12:9bef73198a53 | 18 | eth.init(); |
mbed714 | 12:9bef73198a53 | 19 | |
mbed714 | 12:9bef73198a53 | 20 | // attempt DHCP and if timing out then try again |
mbed714 | 12:9bef73198a53 | 21 | while (eth.connect()) { |
mbed714 | 12:9bef73198a53 | 22 | printf("DHCP timeout\n"); |
mbed714 | 12:9bef73198a53 | 23 | }; |
mbed714 | 12:9bef73198a53 | 24 | |
mbed714 | 12:9bef73198a53 | 25 | // successful DHCP |
emilmont | 2:e087e9b789e9 | 26 | printf("IP Address is %s\n", eth.getIPAddress()); |
mbed714 | 12:9bef73198a53 | 27 | |
mbed714 | 12:9bef73198a53 | 28 | // loop forever |
emilmont | 7:65188f4a8c25 | 29 | while (true) { |
mbed714 | 12:9bef73198a53 | 30 | |
mbed714 | 12:9bef73198a53 | 31 | // new non blocking socket |
mbed714 | 12:9bef73198a53 | 32 | TCPSocketConnection sock; |
mbed714 | 12:9bef73198a53 | 33 | sock.set_blocking(false); |
mbed714 | 12:9bef73198a53 | 34 | |
mbed714 | 12:9bef73198a53 | 35 | // toggle led to indicate activity |
mbed714 | 12:9bef73198a53 | 36 | led1 = !led1; |
mbed714 | 12:9bef73198a53 | 37 | |
mbed714 | 12:9bef73198a53 | 38 | // attempt socket connection and if failure then loop again |
mbed714 | 12:9bef73198a53 | 39 | if (sock.connect("mbed.org", 80)) { |
mbed714 | 12:9bef73198a53 | 40 | printf("Socket connect timeout\n"); |
mbed714 | 12:9bef73198a53 | 41 | continue; |
mbed714 | 12:9bef73198a53 | 42 | } |
mbed714 | 12:9bef73198a53 | 43 | |
mbed714 | 12:9bef73198a53 | 44 | // send command |
mbed714 | 12:9bef73198a53 | 45 | printf("Sending at %d seconds\n", time(NULL)); |
mbed714 | 12:9bef73198a53 | 46 | char http_cmd[] = "GET /media/uploads/mbed_official/hello.txt HTTP/1.0\n\n"; |
mbed714 | 16:ac10f2f5ca42 | 47 | int send_result = sock.send_all(http_cmd, sizeof(http_cmd) - 1); |
mbed714 | 16:ac10f2f5ca42 | 48 | if (send_result <= 0) |
mbed714 | 16:ac10f2f5ca42 | 49 | printf("Internal stack error : %d\n", pico_err); |
mbed714 | 12:9bef73198a53 | 50 | |
mbed714 | 12:9bef73198a53 | 51 | // receive response |
mbed714 | 12:9bef73198a53 | 52 | int received = 0; |
mbed714 | 12:9bef73198a53 | 53 | int retries = 0; |
mbed714 | 12:9bef73198a53 | 54 | while (true) { |
mbed714 | 12:9bef73198a53 | 55 | |
mbed714 | 12:9bef73198a53 | 56 | int result; |
mbed714 | 12:9bef73198a53 | 57 | char buffer[256]; |
mbed714 | 12:9bef73198a53 | 58 | |
mbed714 | 12:9bef73198a53 | 59 | result = sock.receive(buffer, sizeof(buffer) - 1); |
mbed714 | 12:9bef73198a53 | 60 | printf("Received: %d %d %d\n", result, received, retries); |
mbed714 | 12:9bef73198a53 | 61 | |
mbed714 | 12:9bef73198a53 | 62 | // if timeout or no data |
mbed714 | 12:9bef73198a53 | 63 | if (result <= 0) { |
mbed714 | 12:9bef73198a53 | 64 | |
mbed714 | 12:9bef73198a53 | 65 | // if data previously received then stop receiving |
mbed714 | 12:9bef73198a53 | 66 | if (received > 0) |
mbed714 | 12:9bef73198a53 | 67 | break; |
mbed714 | 12:9bef73198a53 | 68 | |
mbed714 | 12:9bef73198a53 | 69 | // if incremented retries exceeded then no response and stop receiving |
mbed714 | 12:9bef73198a53 | 70 | if (++retries > RETRIES_ALLOWED) { |
mbed714 | 12:9bef73198a53 | 71 | break; |
mbed714 | 12:9bef73198a53 | 72 | } |
mbed714 | 12:9bef73198a53 | 73 | |
mbed714 | 12:9bef73198a53 | 74 | } else { |
mbed714 | 12:9bef73198a53 | 75 | |
mbed714 | 12:9bef73198a53 | 76 | // zero terminate the buffer |
mbed714 | 12:9bef73198a53 | 77 | buffer[result] = '\0'; |
mbed714 | 12:9bef73198a53 | 78 | |
mbed714 | 12:9bef73198a53 | 79 | // total size of data received |
mbed714 | 12:9bef73198a53 | 80 | received += result; |
mbed714 | 12:9bef73198a53 | 81 | } |
mbed714 | 12:9bef73198a53 | 82 | |
mbed714 | 12:9bef73198a53 | 83 | } |
mbed714 | 12:9bef73198a53 | 84 | |
mbed714 | 12:9bef73198a53 | 85 | // close socket at end of send and receive |
mbed714 | 12:9bef73198a53 | 86 | sock.close(); |
mbed714 | 12:9bef73198a53 | 87 | |
mbed714 | 12:9bef73198a53 | 88 | // wait before repeating |
mbed714 | 12:9bef73198a53 | 89 | Thread::wait(1000); |
mbed714 | 12:9bef73198a53 | 90 | |
emilmont | 7:65188f4a8c25 | 91 | } |
mbed714 | 12:9bef73198a53 | 92 | } |