Simple HTTP example

Dependencies:   LWIPInterface NetworkSocketAPI events funcptr mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "Event.h"
00002 
00003 #include "LWIPInterface.h"
00004 #include "TCPServer.h"
00005 #include "SimpleHTTP.h"
00006 
00007 DigitalOut led_red  (LED_RED  , true);
00008 DigitalOut led_green(LED_GREEN, true);
00009 DigitalOut led_blue (LED_BLUE , true);
00010 unsigned count_red = 0;
00011 unsigned count_green = 0;
00012 unsigned count_blue = 0;
00013 
00014 LWIPInterface lwip;
00015 SimpleHTTP http(&lwip);
00016 
00017 #define IMAGE_URL (                                     \
00018     "https://developer.mbed.org/media/cache/platforms/" \
00019     "FRDM-K64F_400x300_WO6GnVU.png.250x250_q85.jpg"     )
00020 
00021 #define PROJECT_URL (                                              \
00022     "https://developer.mbed.org/users/geky/code/SimpleHTTPExample" )
00023 
00024 int page(char *buffer, unsigned size) {
00025     printf("%s\r\n", strtok(buffer, "\r\n"));
00026 
00027     return snprintf(buffer, size,
00028         "<html>\r\n"
00029           "<head>\r\n"
00030             "<title>k64f</title>\r\n"
00031             "<style>\r\n"
00032               "body { "
00033                 "text-align: center; "
00034                 "margin: auto; "
00035                 "width: 250px; }\r\n"
00036               "h3 { margin: 10px 0 0; }\r\n"
00037               ".led { "
00038                 "width: 50px; "
00039                 "height: 50px; "
00040                 "border: 1px; "
00041                 "cursor: pointer; }\r\n"
00042               ".stats { text-align: left; }\r\n"
00043               ".left  { float: left;  }\r\n"
00044               ".right { float: right; }\r\n"
00045               ".red_on    { background-color: #f00; }\r\n"
00046               ".green_on  { background-color: #0f0; }\r\n"
00047               ".blue_on   { background-color: #00f; }\r\n"
00048               ".red_off   { background-color: #800; }\r\n"
00049               ".green_off { background-color: #080; }\r\n"
00050               ".blue_off  { background-color: #008; }\r\n"
00051             "</style>\r\n"
00052           "</head>\r\n"
00053           "<body>\r\n"
00054             "<p>\r\n"
00055               "<h3>k64f says hello!</h3>\r\n"
00056               "<a href=%s>source code</a>\r\n"
00057             "</p>\r\n"
00058             "<img src=%s>\r\n"
00059             "<p>\r\n"
00060               "<form>\r\n"
00061                 "<input type=submit name=toggle value=red   class=\"led red_%s\"  ></input>\r\n"
00062                 "<input type=submit name=toggle value=green class=\"led green_%s\"></input>\r\n"
00063                 "<input type=submit name=toggle value=blue  class=\"led blue_%s\" ></input>\r\n"
00064               "</form>\r\n"
00065             "</p>\r\n"
00066             "<p class=\"stats left\">\r\n"
00067               "red: %d<br>\r\n"
00068               "green: %d<br>\r\n"
00069               "blue: %d<br>\r\n"
00070             "</p>\r\n"
00071             "<p class=\"stats right\">\r\n"
00072               "errors: %d<br>\r\n"
00073               "accepts: %d<br>\r\n"
00074               "sent: %d<br>\r\n"
00075               "recv: %d<br>\r\n"
00076             "</p>\r\n"
00077           "</body>\r\n"
00078         "</html>\r\n"
00079         , PROJECT_URL
00080         , IMAGE_URL
00081         , led_red   ? "off" : "on"
00082         , led_green ? "off" : "on"
00083         , led_blue  ? "off" : "on"
00084         , count_red
00085         , count_green
00086         , count_blue
00087         , http.get_errors()
00088         , http.get_accepts()
00089         , http.get_sent()
00090         , http.get_recv());
00091 }
00092 
00093 int page_toggle(DigitalOut *led, unsigned *count, char *buffer, unsigned size) {
00094     *led = !*led;
00095     (*count)++;
00096     return page(buffer, size);
00097 }
00098 
00099 Binder<int(DigitalOut*, unsigned*, char*, unsigned), DigitalOut*, unsigned*>
00100     toggle_red  (page_toggle, &led_red,   &count_red  ),
00101     toggle_green(page_toggle, &led_green, &count_green),
00102     toggle_blue (page_toggle, &led_blue,  &count_blue );
00103 
00104 int main() {
00105     lwip.connect();
00106 
00107     http.get("/", page);
00108     http.get("/?toggle=red",   &toggle_red);
00109     http.get("/?toggle=green", &toggle_green);
00110     http.get("/?toggle=blue",  &toggle_blue);
00111     http.start();
00112 
00113     printf("Hi! I'm at %s\r\n", lwip.get_ip_address());
00114 }
00115