123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- /* Control API for Robot motion system */
- //Require direction (up / down / left / right)
- //Requite state (start / stop)
- void handleMovements(AsyncWebServerRequest *request) {
- String direction = GetPara(request, "direction");
- String state = GetPara(request, "state");
-
- //Set current moving direciton
- if (direction == "up"){
- movingDirection = 0;
- }else if (direction == "down"){
- movingDirection = 1;
- }else if (direction == "left"){
- movingDirection = 2;
- }else if (direction == "right"){
- movingDirection = 3;
- }else{
- request->send(500, "text/plain", "500 - Invalid direction given");
- return;
- }
- if (state == "start"){
- //Start
- movingActive = true;
- }else{
- //Stop
- movingActive = false;
- }
- request->send(200, "text/plain", "ok");
- }
- //Handle request for moving the pushing arm, require angle (range 0 - 130)
- void handlePusher(AsyncWebServerRequest *request){
- String angle = GetPara(request, "angle");
- //Angle must be within 0 - 130 (+ offset)
- int limitedAngle = constrain(angle.toInt(), 0, 130 + SERVO_ALIGNMENT_OFFSET);
- servoSwitchPusher.write(limitedAngle);
- request->send(200, "text/plain", "ok");
- }
- //Handle request for moving the cover, require state: {open / close}
- void handleCover(AsyncWebServerRequest *request){
- String state = GetPara(request, "state");
- if (state == "open"){
- //Open
- servoCoverPusher.write(90);
- }else{
- //Close
- servoCoverPusher.write(0);
- }
- request->send(200, "text/plain", "ok");
- }
- //Render emoji to screen
- void handleRenderEmoji(AsyncWebServerRequest *request) {
- String anicode = GetPara(request, "anicode");
- char anicodeChar = anicode.c_str()[0];
- setAnimationCode(anicodeChar);
- request->send(200, "text/plain", "ok");
- }
- /* File System API for SD Browser*/
- //File delete API
- void handleFileDelete(AsyncWebServerRequest *request) {
- String path = GetPara(request, "path");
- if (path == "") {
- request->send(400, "text/plain", "Missing 'path' parameter");
- return;
- }
- Serial.print("Requested delete path: ");
- Serial.println(path);
- if (SD.exists(path)) {
- if (SD.remove(path)) {
- request->send(200, "text/plain", "File removed");
- } else {
- request->send(500, "text/plain", "Failed to delete file");
- }
- } else {
- request->send(404, "text/plain", "File not found");
- }
- }
- //File download API
- void handleFileDownload(AsyncWebServerRequest *request) {
- String path = GetPara(request, "path");
- if (path == "") {
- request->send(404, "text/plain", "'path' parameter not given");
- return;
- }
- Serial.print("Requested path: ");
- Serial.println(path);
- if (SD.exists(path)) {
- String contentType = getMime(path);
- request->send(SD, path, contentType, false);
- } else {
- request->send(404, "text/plain", "File not found");
- }
- }
- //List dir API
- void handleListDir(AsyncWebServerRequest *request) {
- //Get the folder path to be listed
- //As ESP8266 dont have enough memory for proper struct to json conv, we are hacking a json string out of a single for-loop
- String jsonString = "[";
- String folderSubPath = GetPara(request, "dir");
- String folderPath = "/" + folderSubPath;
- if (SD.exists(folderPath)) {
- File root = SD.open(folderPath);
- bool firstObject = true;
- if (root) {
- while (true) {
- File entry = root.openNextFile();
- if (!entry) {
- // No more files
- break;
- } else {
- //There are more lines. Add a , to the end of the previous json object
- if (!firstObject) {
- jsonString = jsonString + ",";
- } else {
- firstObject = false;
- }
- }
- String isDirString = "true";
- if (!entry.isDirectory()) {
- isDirString = "false";
- }
- jsonString = jsonString + "{\"Filename\":\"" + entry.name() + "\",\"Filesize\":" + String(entry.size()) + ",\"IsDir\":" + isDirString + "}";
- entry.close();
- }
- root.close();
- jsonString += "]";
- request->send(200, "application/json", jsonString);
- } else {
- request->send(500, "text/plain", "500 - Path open error");
- }
- } else {
- request->send(404, "text/plain", "404 - Path not found");
- }
- Serial.println(folderPath);
- }
- // Function to handle file uploads
- void handleFileUpload(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
- static File uploadFile;
- static String uploadPath = "/";
- if (request->hasParam("dir")) {
- uploadPath = "/" + request->getParam("dir")->value() + "/";
- }
- if (index == 0) {
- String path = uploadPath + filename;
- Serial.printf("Upload Start: %s\n", path.c_str());
- uploadFile = SD.open(path, FILE_WRITE);
- if (!uploadFile) {
- Serial.println("Failed to open file for writing");
- return request->send(500, "text/plain", "File Upload Failed");
- }
- }
- // Write the received data to the file
- if (uploadFile) {
- uploadFile.write(data, len);
- }
- if (final) {
- // Close the file at the final chunk
- if (uploadFile) {
- uploadFile.close();
- Serial.printf("Upload End: %s (%u)\n", filename.c_str(), index + len);
- return request->send(200, "text/plain", "File Uploaded");
- } else {
- return request->send(500, "text/plain", "File Upload Failed");
- }
- }
- }
|