Simple HTTP example
Dependencies: LWIPInterface NetworkSocketAPI events funcptr mbed-rtos mbed
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
Generated on Sun Jul 17 2022 10:50:59 by 1.7.2