C
Qt Quick Ultralite fileloading Example
// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial #include "ff.h" #include "ff_gen_drv.h" #include <platforminterface/allocator.h> #include <platforminterface/filesystem.h> class FatFsFile : public Qul::PlatformInterface::File { public: FatFsFile(FIL fileHandle) : m_fileHandle(fileHandle) , m_valid(true) {} ~FatFsFile() { close(); } uint64_t size() QUL_DECL_OVERRIDE { if (!m_valid) return 0; return f_size(&m_fileHandle); } int read(unsigned char *outputBuffer, uint64_t startOffset, unsigned int readSize) QUL_DECL_OVERRIDE { if (!m_valid) return -1; UINT bytesRead; if (f_lseek(&m_fileHandle, startOffset) != FR_OK) return -1; if (f_read(&m_fileHandle, outputBuffer, readSize, &bytesRead) != FR_OK) return -1; return bytesRead; } int close() QUL_DECL_OVERRIDE { if (!m_valid) return -1; m_valid = false; return f_close(&m_fileHandle); } private: FIL m_fileHandle; bool m_valid; }; class FatFsFilesystem : public Qul::PlatformInterface::Filesystem { public: Qul::PlatformInterface::File *open(const char *fileName, Qul::PlatformInterface::File::Mode) QUL_DECL_OVERRIDE { FRESULT fr; FIL fp; fr = f_open(&fp, fileName, FA_READ | FA_OPEN_ALWAYS); if (fr == FR_OK) return Qul::PlatformInterface::qul_new<FatFsFile>(fp); return NULL; } };