feat: Add File Transfer functionality with HTTP and FTP protocols

- Introduced FileTransferActivity to manage file transfer operations.
- Added ProtocolSelectionActivity for users to choose between HTTP and FTP.
- Implemented WifiSelectionActivity to handle WiFi connections for file transfers.
- Created ScheduleSettingsActivity to configure automatic file transfer scheduling.
- Integrated CrossPointFtpServer to support FTP file transfers.
- Updated main application logic to trigger scheduled file transfers.
- Enhanced SettingsActivity to include an option for file transfer scheduling.
- Improved memory management and task handling in various activities.
This commit is contained in:
altsysrq
2026-01-04 16:37:49 -06:00
parent 1d8815249d
commit 39f403ae84
17 changed files with 995 additions and 172 deletions

View File

@@ -12,7 +12,7 @@ CrossPointSettings CrossPointSettings::instance;
namespace {
constexpr uint8_t SETTINGS_FILE_VERSION = 1;
// Increment this when adding new persisted settings fields
constexpr uint8_t SETTINGS_COUNT = 16;
constexpr uint8_t SETTINGS_COUNT = 22;
constexpr char SETTINGS_FILE[] = "/.crosspoint/settings.bin";
} // namespace
@@ -43,6 +43,12 @@ bool CrossPointSettings::saveToFile() const {
serialization::writePod(outputFile, refreshInterval);
serialization::writePod(outputFile, defaultFolder);
serialization::writeString(outputFile, customDefaultFolder);
serialization::writePod(outputFile, scheduleEnabled);
serialization::writePod(outputFile, scheduleFrequency);
serialization::writePod(outputFile, scheduleProtocol);
serialization::writePod(outputFile, scheduleNetworkMode);
serialization::writePod(outputFile, scheduleHour);
serialization::writePod(outputFile, scheduleAutoShutdown);
outputFile.close();
Serial.printf("[%lu] [CPS] Settings saved to file\n", millis());
@@ -101,6 +107,18 @@ bool CrossPointSettings::loadFromFile() {
if (++settingsRead >= fileSettingsCount) break;
serialization::readString(inputFile, customDefaultFolder);
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, scheduleEnabled);
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, scheduleFrequency);
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, scheduleProtocol);
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, scheduleNetworkMode);
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, scheduleHour);
if (++settingsRead >= fileSettingsCount) break;
serialization::readPod(inputFile, scheduleAutoShutdown);
if (++settingsRead >= fileSettingsCount) break;
} while (false);
inputFile.close();