C
Qt Quick Ultralite fileloading Example
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
#include "fatfs/fatfsfilesystem.h"
#include "board_config.h"
#include "ff.h"
#include "ff_gen_drv.h"
#include "fsl_sd.h"
#include "sdmmc_config.h"
#include <platforminterface/log.h>
#include <qul/application.h>
#include <platform/mem.h>
static sd_card_t card;
DSTATUS nxp_initialize(BYTE)
{
return 0;
}
DSTATUS nxp_status(BYTE)
{
return 0;
}
DRESULT nxp_read(BYTE, BYTE *buff, DWORD sector, UINT count)
{
if (kStatus_Success != SD_ReadBlocks(&card, buff, sector, count))
return RES_ERROR;
return RES_OK;
}
const Diskio_drvTypeDef nxp_driver = {nxp_initialize, nxp_status, nxp_read};
#define BOARD_SDMMC_SD_HOST_IRQ_PRIORITY (5U)
void ConfigureBoard()
{
static FatFsFilesystem filesystem;
static FATFS nxpFatFs;
static char nxpPath[4];
BOARD_SD_Config(&card, NULL, BOARD_SDMMC_SD_HOST_IRQ_PRIORITY, NULL);
if (SD_HostInit(&card) != kStatus_Success) {
Qul::PlatformInterface::log("SD host init failed\r\n");
return;
}
SD_PollingCardInsert(&card, kSD_Inserted);
// Power cycle
SD_SetCardPower(&card, false);
SD_SetCardPower(&card, true);
if (SD_CardInit(&card)) {
Qul::PlatformInterface::log("SD card init failed\r\n");
return;
}
if (FATFS_LinkDriver(&nxp_driver, nxpPath) != 0) {
Qul::PlatformInterface::log("FATFS_LinkDriver failed\r\n");
return;
}
if (f_mount(&nxpFatFs, nxpPath, 0) != 0) {
Qul::PlatformInterface::log("Mounting filesystem failed!\r\n");
return;
}
Qul::Application::addFilesystem(&filesystem);
}
extern "C" {
void *ff_memalloc(UINT msize)
{
return Qul::Platform::qul_malloc(msize);
}
void ff_memfree(void *ptr)
{
Qul::Platform::qul_free(ptr);
}
}