diff --git a/cli.cpp b/cli.cpp index 4e42b22b81164d56bc9103bf971ea5c30d3ce08a..a8d0e903d2ab32769d34d97b940e5093d25870a7 100644 --- a/cli.cpp +++ b/cli.cpp @@ -356,6 +356,17 @@ void Cli::loop (Stream& input) else answer(false); } + else if (kw(F("FS-TEST"))) + { + copyNextToTemp(); + if (_temp.length() > 0) + { + testw(_temp.c_str(), &Serial); + answer(true); + } + else + answer(false); + } else { Serial.printf("%sinvalid command '%s'\n", _msgHeader, _currentInput.c_str() + _currentWordIndex); diff --git a/fs.cpp b/fs.cpp new file mode 100644 index 0000000000000000000000000000000000000000..16592cd0a95102142aa8397fb42c02a2a59737ad --- /dev/null +++ b/fs.cpp @@ -0,0 +1,85 @@ + +#include <ESP8266WebServer.h> +#include <ESPWebDAV.h> +#include <LittleFS.h> +#include <StreamString.h> + +#include "fs.h" + +ESPWebDAVCore* dav = nullptr; +ESP8266WebServer* http = nullptr; +FS* filesystem = nullptr; +const char* fsMsgHeader = nullptr; + +bool fs_init (const char* msgHeader) +{ + fsMsgHeader = msgHeader; + filesystem = &LittleFS; + if (!filesystem->begin() && (!filesystem->format() || !filesystem->begin())) + return false; + http = new (std::nothrow) ESP8266WebServer(HTTPORT); + if (!http) + return false; + dav = new (std::nothrow) ESPWebDAVCore; + if (!dav) + { + delete http; + return false; + } + dav->begin(filesystem); + http->addHook(hookWebDAVForWebserver(DAVROOT, *dav)); + return true; +} + + +void ls (Print* out) +{ + if (dav) + { + out->printf("#%sLS:\n", fsMsgHeader); + dav->dir("/", out); + } +} + +void format (Print* out) +{ + if (filesystem) + { + out->printf("%sformatting\n", fsMsgHeader); + out->flush(); + filesystem->format(); + out->printf("%smkdir %s\n", fsMsgHeader, DAVROOT); + filesystem->mkdir(DAVROOT); + } +} + +void cat (const char* filename, Stream* out) +{ + if (filesystem) + { + File f = filesystem->open(filename, "r"); + if (!f) + out->printf("%scat: '%s' not found\n", fsMsgHeader, filename); + else + { + out->printf("%s>>>>FILE name:'%s' fullname:'%s' size=%zd\n", fsMsgHeader, f.name(), f.fullName(), f.size()); + f.sendSize(out, f.size()); + out->printf("%s<<<<FILE\n", fsMsgHeader); + } + } +} + +void testw (const char* filename, Stream* out) +{ + if (filesystem) + { + File f = filesystem->open(filename, "w"); + if (!f) + out->printf("%stest: '%s' can't write\n", fsMsgHeader, filename); + else + { + StreamString blah = "blah"; + blah.sendAll(f); + } + } +} diff --git a/fs.h b/fs.h new file mode 100644 index 0000000000000000000000000000000000000000..1c690dc5d4b400188cbdacad5f9167de756c209b --- /dev/null +++ b/fs.h @@ -0,0 +1,19 @@ + +#pragma once + +#include <ESP8266WebServer.h> +#include <WebDav4WebServer.h> + +#ifndef DAVROOT +#define DAVROOT "/dav" +#endif + +#ifndef HTTPORT +#define HTTPORT 80 +#endif + +bool fs_init (const char* msgHeader); +void ls (Print* out); +void format (Print* out); +void cat (const char* filename, Stream* out); +void testw (const char* filename, Stream* out); diff --git a/pousseseringue-arduino.cpp b/pousseseringue-arduino.cpp index 07efe24557731b57c157a5f73fc1a32006faca3d..16b75474b76797b15ba0b62cf647c879abd07a28 100644 --- a/pousseseringue-arduino.cpp +++ b/pousseseringue-arduino.cpp @@ -278,22 +278,11 @@ void setup() oled.clear(); oled.println("Booting...\n"); - if (fs_init(msgHeader)) - { - Serial.printf("FS initialized, dav http server started\n"); - } - else - { - Serial.printf("FS: could not be started\n"); - } - //syringe.setPhysical(MOTOR_STEPS * MICROSTEPS_CONF, M4_MMREV, /*forwardClockWise*/true, /*emergencySensorBehind*/false); syringe.setPhysical(MOTOR_STEPS * MICROSTEPS_CONF, M5_MMREV, /*forwardClockWise*/false, /*emergencySensorBehind*/true); pinMode(SLEEP, OUTPUT); digitalWrite(SLEEP, 0); - - #endif // !CORE_MOCK uint8_t mac[6]; @@ -345,6 +334,17 @@ void setup() // check if emergency button is pressed at boot time syringe.setEmergency(digitalRead(COURSE)); + +#if 0 + if (fs_init(msgHeader)) + { + Serial.printf("FS initialized, dav http server started\n"); + } + else + { + Serial.printf("FS: could not be started\n"); + } +#endif }