diff --git a/WiFiWebServer/WiFiWebServer.ino b/WiFiWebServer/WiFiWebServer.ino index 32831b7..e4a7f5b 100644 --- a/WiFiWebServer/WiFiWebServer.ino +++ b/WiFiWebServer/WiFiWebServer.ino @@ -9,6 +9,7 @@ #include #define URL_GPIO "/gpio" +#define URL_MODE "/mode" const char* ssid = "freebox_sarah"; const char* password = "password"; @@ -17,18 +18,35 @@ const char* password = "password"; // specify the port to listen on as an argument WiFiServer server(80); -enum request_type {INVALID, GET_VALUE, SET_VALUE}; +enum requestType {INVALID, GET_VALUE, SET_VALUE, SET_MODE}; + +int mode[] = {INPUT, OUTPUT, INPUT_PULLUP}; struct request { int gpio; int value; - request_type type; + requestType type; }; int parseRequest(String &raw, struct request &req ) { int index, end; String url; + index = raw.indexOf(URL_MODE); + + if ( index != -1) { + String subUrl = raw.substring(index + strlen(URL_MODE)); + if (parseRequest(subUrl, req) >= 0) { + if ( req.value >= 0 && req.value <= 2) { + req.type = SET_MODE; + req.value = mode[req.value]; + return 0; + } else + goto invalid; + } else + goto invalid; + } + index = raw.indexOf(URL_GPIO); if (index == -1) @@ -152,8 +170,20 @@ void loop() { s += request.gpio; s += " is "; s += digitalRead(request.gpio); + } else if (request.type == SET_MODE) { + Serial.print("Setting mode of GPIO"); + Serial.print(request.gpio); + Serial.print(" to mode "); + Serial.print(request.value); + + pinMode(request.gpio, request.value); + + s += "GPIO"; + s += request.gpio; + s += " mode is now "; + s += (request.value); } - + s += "\n"; client.print(s);