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;
}
};