C
Qt Quick Ultralite map example
// Copyright (C) 2025 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
#include "board_config.h"
#include "offline_tiles_provider/offlinetilefetcher.h"
#include "dummy_position_source/dummypositionsource.h"
#include "stmimagedecoder.h"
#include "stm32_mcu_specific.h"
#include "stm32f769i_discovery_sd.h"
#include <qul/application.h>
#include "fatfsfilesystem.h"
FIL JPEG_File; /* File object */
extern "C" const Diskio_drvTypeDef SD_Driver;
extern "C" {
void *ff_memalloc(UINT msize)
{
return Qul::Platform::qul_malloc(msize);
}
void ff_memfree(void *ptr)
{
Qul::Platform::qul_free(ptr);
}
}
JPEG_HandleTypeDef JPEG_Handle;
extern SD_HandleTypeDef uSdHandle;
extern "C" {
void JPEG_InitColorTables();
}
uint8_t SD_initialize()
{
uint8_t sd_state = MSD_OK;
uSdHandle.Instance = SDMMC2;
uSdHandle.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING;
uSdHandle.Init.ClockBypass = SDMMC_CLOCK_BYPASS_DISABLE;
uSdHandle.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE;
uSdHandle.Init.BusWide = SDMMC_BUS_WIDE_1B;
uSdHandle.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_ENABLE;
uSdHandle.Init.ClockDiv = SDMMC_TRANSFER_CLK_DIV;
BSP_SD_Detect_MspInit(&uSdHandle, NULL);
if (BSP_SD_IsDetected() != SD_PRESENT) /* Check if SD card is present */
return MSD_ERROR_SD_NOT_PRESENT;
BSP_SD_MspInit(&uSdHandle, NULL);
if (HAL_SD_Init(&uSdHandle) != HAL_OK)
sd_state = MSD_ERROR;
/* Configure SD Bus width */
if (sd_state == MSD_OK) {
/* Enable wide operation */
if (HAL_SD_ConfigWideBusOperation(&uSdHandle, SDMMC_BUS_WIDE_4B) != HAL_OK)
sd_state = MSD_ERROR;
else
sd_state = MSD_OK;
}
return sd_state;
}
void ConfigureBoard()
{
/* Init The JPEG Look Up Tables used for YCbCr to RGB conversion*/
JPEG_InitColorTables();
/* Init the HAL JPEG driver */
JPEG_Handle.Instance = JPEG;
if (HAL_JPEG_Init(&JPEG_Handle) != HAL_OK)
Qul::PlatformInterface::log("HAL_JPEG_Init failed\n");
static FatFsFilesystem filesystem;
static FATFS sdFatFs;
static char sdPath[4];
if (FATFS_LinkDriver(&SD_Driver, sdPath) != 0) {
Qul::PlatformInterface::log("FATFS_LinkDriver failed\n");
return;
}
// initialize SD card
uint8_t error = SD_initialize();
switch (error) {
case MSD_ERROR_SD_NOT_PRESENT: {
Qul::PlatformInterface::log("SD card in missing!\n");
return;
}
case MSD_ERROR: {
Qul::PlatformInterface::log("HAL_SD_Init failed\n");
return;
}
}
if (f_mount(&sdFatFs, sdPath, 0) != 0) {
Qul::PlatformInterface::log("Mounting filesystem failed!\n");
return;
}
Qul::Application::addFilesystem(&filesystem);
static StmImageDecoder imagedecoder;
Qul::Application::addImageDecoder(&imagedecoder);
static OfflineTileFetcher tilefetcher;
Qul::Application::addMapTileFetcher(&tilefetcher);
static DummyPositionSource dummyPositionSource;
Qul::Application::registerGeoPositionSource(&dummyPositionSource);
}