Simple HTTP example

Dependencies:   LWIPInterface NetworkSocketAPI events funcptr mbed-rtos mbed

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?

UserRevisionLine numberNew 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