From 1b6ffc46419d49bf8639e878770f4c7647b9e032 Mon Sep 17 00:00:00 2001 From: Niklas Jensen Date: Thu, 15 Jan 2026 23:03:24 +0100 Subject: [PATCH] Upped chunk size to 16kb (down not working) --- app/src/lib/filesystem/chunkedTransfer.ts | 2 +- esp32/include/filesystem_ws.h | 3 ++- esp32/src/filesystem_ws.cpp | 12 ++++++++++++ platform_shared/message.options | 4 ++-- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/src/lib/filesystem/chunkedTransfer.ts b/app/src/lib/filesystem/chunkedTransfer.ts index 7ad9914..0a67f2e 100644 --- a/app/src/lib/filesystem/chunkedTransfer.ts +++ b/app/src/lib/filesystem/chunkedTransfer.ts @@ -12,7 +12,7 @@ import type { CorrelationResponse } from '$lib/platform_shared/message' -const MAX_CHUNK_SIZE = 1024 +const MAX_CHUNK_SIZE = 2**14 // ~= 16 kb export interface FileInfo { name: string diff --git a/esp32/include/filesystem_ws.h b/esp32/include/filesystem_ws.h index 58c08d6..2c101ba 100644 --- a/esp32/include/filesystem_ws.h +++ b/esp32/include/filesystem_ws.h @@ -5,7 +5,8 @@ #include #include -#define FS_MAX_CHUNK_SIZE 1024 +// Make sure that this aligns with socket_message.FSDownloadChunkResponse.data max_size (and for the corresponsing request) +#define FS_MAX_CHUNK_SIZE 2**14 // ~= 16 kb #define FS_TRANSFER_TIMEOUT 30000 // 30 seconds namespace FileSystemWS { diff --git a/esp32/src/filesystem_ws.cpp b/esp32/src/filesystem_ws.cpp index d749a93..4a3b6e7 100644 --- a/esp32/src/filesystem_ws.cpp +++ b/esp32/src/filesystem_ws.cpp @@ -2,6 +2,7 @@ #include #include #include +#include static const char* TAG = "FileSystemWS"; @@ -307,6 +308,17 @@ socket_message_FSUploadChunkResponse FileSystemHandler::handleUploadChunk(const TransferState& state = it->second; state.lastActivityTime = millis(); + // Check available space before writing + size_t fs_total = 0, fs_used = 0; + esp_littlefs_info("spiffs", &fs_total, &fs_used); + size_t freeSpace = fs_total - fs_used; + if (freeSpace < req.data.size + 4096) { // 4KB safety margin + fs_up_response.success = false; + strncpy(fs_up_response.error, "Filesystem full", sizeof(fs_up_response.error) - 1); + state.file.close(); + transfers_.erase(it); + return fs_up_response; + } // Write chunk data size_t bytesWritten = state.file.write(req.data.bytes, req.data.size); if (bytesWritten != req.data.size) { diff --git a/platform_shared/message.options b/platform_shared/message.options index f3d3bec..3c12394 100644 --- a/platform_shared/message.options +++ b/platform_shared/message.options @@ -60,7 +60,7 @@ socket_message.FSDownloadStartResponse.transfer_id max_size:64 socket_message.FSDownloadChunkRequest.transfer_id max_size:64 socket_message.FSDownloadChunkResponse.transfer_id max_size:64 -socket_message.FSDownloadChunkResponse.data max_size:1024 +socket_message.FSDownloadChunkResponse.data max_size:16384 socket_message.FSDownloadChunkResponse.error max_size:128 socket_message.FSUploadStartRequest.path max_size:256 @@ -68,7 +68,7 @@ socket_message.FSUploadStartResponse.error max_size:128 socket_message.FSUploadStartResponse.transfer_id max_size:64 socket_message.FSUploadChunkRequest.transfer_id max_size:64 -socket_message.FSUploadChunkRequest.data max_size:1024 +socket_message.FSUploadChunkRequest.data max_size:16384 socket_message.FSUploadChunkResponse.transfer_id max_size:64 socket_message.FSUploadChunkResponse.error max_size:128