Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2021-08-16 11:35:07 +0300
committerDavid Crocker <dcrocker@eschertech.com>2021-08-16 11:35:07 +0300
commite85769b33f390eb5b951710b84d2cd3223d45757 (patch)
tree754fcab51c242ce4f3064df3556331cc53fee7c2 /src/Storage/EmbeddedFiles.cpp
parentdec742c246bf27d2fc84dc153e5db46d3c5d08cb (diff)
More work on embedded files
Diffstat (limited to 'src/Storage/EmbeddedFiles.cpp')
-rw-r--r--src/Storage/EmbeddedFiles.cpp34
1 files changed, 29 insertions, 5 deletions
diff --git a/src/Storage/EmbeddedFiles.cpp b/src/Storage/EmbeddedFiles.cpp
index c58f8494..d44363e1 100644
--- a/src/Storage/EmbeddedFiles.cpp
+++ b/src/Storage/EmbeddedFiles.cpp
@@ -180,15 +180,39 @@ FilePosition EmbeddedFiles::Length(int32_t fileIndex) noexcept
: 0;
}
-int EmbeddedFiles::Read(FileIndex fileIndex, char* extBuf, size_t nBytes) noexcept
+// Open a file
+FileIndex EmbeddedFiles::OpenFile(const char *filePath) noexcept
{
- //TODO
- return -1;
+ if (_firmware_end.magic == EmbeddedFilesHeader::MagicValue)
+ {
+ for (FileIndex fi = 0; fi < (FileIndex)_firmware_end.numFiles; ++fi)
+ {
+ if (StringEqualsIgnoreCase(filePath, _firmware_end.files[fi].GetName()))
+ {
+ return fi;
+ }
+ }
+ }
+ return (FileIndex)-1;
}
-FileIndex EmbeddedFiles::OpenFile(const char *filePath) noexcept
+// Read from a file
+int EmbeddedFiles::Read(FileIndex fileIndex, FilePosition pos, char* extBuf, size_t nBytes) noexcept
{
- //TODO
+ if (_firmware_end.magic == EmbeddedFilesHeader::MagicValue && fileIndex >= 0 && fileIndex < (int32_t)_firmware_end.numFiles)
+ {
+ const size_t fileLength = _firmware_end.files[fileIndex].contentLength;
+ if (pos < fileLength)
+ {
+ if (nBytes > fileLength - pos)
+ {
+ nBytes = fileLength - pos;
+ }
+ memcpy(extBuf, _firmware_end.files[fileIndex].GetContent(), nBytes);
+ return nBytes;
+ }
+ return 0;
+ }
return -1;
}