Simple HTTP example
Dependencies: LWIPInterface NetworkSocketAPI events funcptr mbed-rtos mbed
main.cpp@1:ca2041d3a4a6, 2016-04-22 (annotated)
- Committer:
- Christopher Haster
- Date:
- Fri Apr 22 03:21:03 2016 -0500
- Revision:
- 1:ca2041d3a4a6
- Parent:
- 0:9dd004b6a8b7
Match changes to events and take advantage of EventLoop
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Christopher Haster |
0:9dd004b6a8b7 | 1 | #include "Event.h" |
Christopher Haster |
0:9dd004b6a8b7 | 2 | |
Christopher Haster |
0:9dd004b6a8b7 | 3 | #include "LWIPInterface.h" |
Christopher Haster |
0:9dd004b6a8b7 | 4 | #include "TCPServer.h" |
Christopher Haster |
0:9dd004b6a8b7 | 5 | #include "SimpleHTTP.h" |
Christopher Haster |
0:9dd004b6a8b7 | 6 | |
Christopher Haster |
0:9dd004b6a8b7 | 7 | DigitalOut led_red (LED_RED , true); |
Christopher Haster |
0:9dd004b6a8b7 | 8 | DigitalOut led_green(LED_GREEN, true); |
Christopher Haster |
0:9dd004b6a8b7 | 9 | DigitalOut led_blue (LED_BLUE , true); |
Christopher Haster |
0:9dd004b6a8b7 | 10 | unsigned count_red = 0; |
Christopher Haster |
0:9dd004b6a8b7 | 11 | unsigned count_green = 0; |
Christopher Haster |
0:9dd004b6a8b7 | 12 | unsigned count_blue = 0; |
Christopher Haster |
0:9dd004b6a8b7 | 13 | |
Christopher Haster |
0:9dd004b6a8b7 | 14 | LWIPInterface lwip; |
Christopher Haster |
1:ca2041d3a4a6 | 15 | SimpleHTTP http(&lwip); |
Christopher Haster |
0:9dd004b6a8b7 | 16 | |
Christopher Haster |
0:9dd004b6a8b7 | 17 | #define IMAGE_URL ( \ |
Christopher Haster |
0:9dd004b6a8b7 | 18 | "https://developer.mbed.org/media/cache/platforms/" \ |
Christopher Haster |
0:9dd004b6a8b7 | 19 | "FRDM-K64F_400x300_WO6GnVU.png.250x250_q85.jpg" ) |
Christopher Haster |
0:9dd004b6a8b7 | 20 | |
Christopher Haster |
0:9dd004b6a8b7 | 21 | #define PROJECT_URL ( \ |
Christopher Haster |
0:9dd004b6a8b7 | 22 | "https://developer.mbed.org/users/geky/code/SimpleHTTPExample" ) |
Christopher Haster |
0:9dd004b6a8b7 | 23 | |
Christopher Haster |
0:9dd004b6a8b7 | 24 | int page(char *buffer, unsigned size) { |
Christopher Haster |
0:9dd004b6a8b7 | 25 | printf("%s\r\n", strtok(buffer, "\r\n")); |
Christopher Haster |
0:9dd004b6a8b7 | 26 | |
Christopher Haster |
0:9dd004b6a8b7 | 27 | return snprintf(buffer, size, |
Christopher Haster |
0:9dd004b6a8b7 | 28 | "<html>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 29 | "<head>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 30 | "<title>k64f</title>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 31 | "<style>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 32 | "body { " |
Christopher Haster |
0:9dd004b6a8b7 | 33 | "text-align: center; " |
Christopher Haster |
0:9dd004b6a8b7 | 34 | "margin: auto; " |
Christopher Haster |
0:9dd004b6a8b7 | 35 | "width: 250px; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 36 | "h3 { margin: 10px 0 0; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 37 | ".led { " |
Christopher Haster |
0:9dd004b6a8b7 | 38 | "width: 50px; " |
Christopher Haster |
0:9dd004b6a8b7 | 39 | "height: 50px; " |
Christopher Haster |
0:9dd004b6a8b7 | 40 | "border: 1px; " |
Christopher Haster |
0:9dd004b6a8b7 | 41 | "cursor: pointer; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 42 | ".stats { text-align: left; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 43 | ".left { float: left; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 44 | ".right { float: right; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 45 | ".red_on { background-color: #f00; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 46 | ".green_on { background-color: #0f0; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 47 | ".blue_on { background-color: #00f; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 48 | ".red_off { background-color: #800; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 49 | ".green_off { background-color: #080; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 50 | ".blue_off { background-color: #008; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 51 | "</style>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 52 | "</head>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 53 | "<body>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 54 | "<p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 55 | "<h3>k64f says hello!</h3>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 56 | "<a href=%s>source code</a>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 57 | "</p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 58 | "<img src=%s>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 59 | "<p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 60 | "<form>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 61 | "<input type=submit name=toggle value=red class=\"led red_%s\" ></input>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 62 | "<input type=submit name=toggle value=green class=\"led green_%s\"></input>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 63 | "<input type=submit name=toggle value=blue class=\"led blue_%s\" ></input>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 64 | "</form>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 65 | "</p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 66 | "<p class=\"stats left\">\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 67 | "red: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 68 | "green: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 69 | "blue: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 70 | "</p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 71 | "<p class=\"stats right\">\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 72 | "errors: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 73 | "accepts: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 74 | "sent: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 75 | "recv: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 76 | "</p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 77 | "</body>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 78 | "</html>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 79 | , PROJECT_URL |
Christopher Haster |
0:9dd004b6a8b7 | 80 | , IMAGE_URL |
Christopher Haster |
0:9dd004b6a8b7 | 81 | , led_red ? "off" : "on" |
Christopher Haster |
0:9dd004b6a8b7 | 82 | , led_green ? "off" : "on" |
Christopher Haster |
0:9dd004b6a8b7 | 83 | , led_blue ? "off" : "on" |
Christopher Haster |
0:9dd004b6a8b7 | 84 | , count_red |
Christopher Haster |
0:9dd004b6a8b7 | 85 | , count_green |
Christopher Haster |
0:9dd004b6a8b7 | 86 | , count_blue |
Christopher Haster |
0:9dd004b6a8b7 | 87 | , http.get_errors() |
Christopher Haster |
0:9dd004b6a8b7 | 88 | , http.get_accepts() |
Christopher Haster |
0:9dd004b6a8b7 | 89 | , http.get_sent() |
Christopher Haster |
0:9dd004b6a8b7 | 90 | , http.get_recv()); |
Christopher Haster |
0:9dd004b6a8b7 | 91 | } |
Christopher Haster |
0:9dd004b6a8b7 | 92 | |
Christopher Haster |
0:9dd004b6a8b7 | 93 | int page_toggle(DigitalOut *led, unsigned *count, char *buffer, unsigned size) { |
Christopher Haster |
0:9dd004b6a8b7 | 94 | *led = !*led; |
Christopher Haster |
0:9dd004b6a8b7 | 95 | (*count)++; |
Christopher Haster |
0:9dd004b6a8b7 | 96 | return page(buffer, size); |
Christopher Haster |
0:9dd004b6a8b7 | 97 | } |
Christopher Haster |
0:9dd004b6a8b7 | 98 | |
Christopher Haster |
0:9dd004b6a8b7 | 99 | Binder<int(DigitalOut*, unsigned*, char*, unsigned), DigitalOut*, unsigned*> |
Christopher Haster |
0:9dd004b6a8b7 | 100 | toggle_red (page_toggle, &led_red, &count_red ), |
Christopher Haster |
0:9dd004b6a8b7 | 101 | toggle_green(page_toggle, &led_green, &count_green), |
Christopher Haster |
0:9dd004b6a8b7 | 102 | toggle_blue (page_toggle, &led_blue, &count_blue ); |
Christopher Haster |
0:9dd004b6a8b7 | 103 | |
Christopher Haster |
0:9dd004b6a8b7 | 104 | int main() { |
Christopher Haster |
0:9dd004b6a8b7 | 105 | lwip.connect(); |
Christopher Haster |
0:9dd004b6a8b7 | 106 | |
Christopher Haster |
0:9dd004b6a8b7 | 107 | http.get("/", page); |
Christopher Haster |
0:9dd004b6a8b7 | 108 | http.get("/?toggle=red", &toggle_red); |
Christopher Haster |
0:9dd004b6a8b7 | 109 | http.get("/?toggle=green", &toggle_green); |
Christopher Haster |
0:9dd004b6a8b7 | 110 | http.get("/?toggle=blue", &toggle_blue); |
Christopher Haster |
0:9dd004b6a8b7 | 111 | http.start(); |
Christopher Haster |
0:9dd004b6a8b7 | 112 | |
Christopher Haster |
0:9dd004b6a8b7 | 113 | printf("Hi! I'm at %s\r\n", lwip.get_ip_address()); |
Christopher Haster |
0:9dd004b6a8b7 | 114 | } |
Christopher Haster |
0:9dd004b6a8b7 | 115 |