BOOT_GONEC_ARTERY_FF/fs_interface.c

250 lines
8.6 KiB
C

//
// Created by cfif on 27.12.22.
//
#include "fs_interface.h"
#include "stream.h"
#include <SystemDelayInterface.h>
#include "stdlib.h"
#include "string.h"
const char dir_temp[] = "1:/TMP/";
const char dir_web[] = "1:/WEB/";
FRESULT FS_Init(tFs *env) {
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
//nvic_irq_enable(SDIO1_IRQn, 2, 0);
nvic_irq_enable(SDIO1_IRQn, 1, 0);
NVIC_SetPriority((IRQn_Type) SDIO1_IRQn, 0x0);
BYTE work[FF_MAX_SS];
FRESULT ret;
DWORD fre_clust, fre_sect, tot_sect;
FATFS* pt_fs;
/*
ret = f_mkfs("1:", 0, work, sizeof(work));
if (ret) {
LoggerPrintf(LOGGER,"Ошибка монтирования файловой системы: %d.\r\n", ret);
} else {
LoggerPrintf(LOGGER,"Файловая система создана успешно.\r\n");
}
*/
ret = f_mount(&env->fs, "1:", 1);
if (ret == FR_NOT_READY)
return FR_NOT_READY;
if (ret) {
// LoggerPrintf(LOGGER, "Ошибка монтирования файловой системы: %d.\r\n", ret);
if (ret == FR_NO_FILESYSTEM) {
// LoggerPrintf(LOGGER,"Создание файловой системы...\r\n");
ret = f_mkfs("1:", 0, work, sizeof(work));
if (ret) {
// LoggerPrintf(LOGGER,"Ошибка монтирования файловой системы: %d.\r\n", ret);
} else {
// LoggerPrintf(LOGGER,"Файловая система создана успешно.\r\n");
}
ret = f_mount(NULL, "1:", 1);
ret = f_mount(&env->fs, "1:", 1);
if (ret) {
// LoggerPrintf(LOGGER,"Ошибка монтирования файловой системы: %d.\r\n", ret);
} else {
// LoggerPrintf(LOGGER,"Файловая система смонтирована успешно.\r\n");
}
} else {
}
} else {
// LoggerPrintf(LOGGER,"Файловая система смонтирована успешно.\r\n");
}
char str[12];
f_getlabel("1:", str, 0);
if (strcmp(str, "GONEC") != 0) {
// LoggerPrintf(LOGGER,"Создание файловой системы...\r\n");
ret = f_mkfs("1:", 0, work, sizeof(work));
if (ret) {
// LoggerPrintf(LOGGER,"Ошибка монтирования файловой системы: %d.\r\n", ret);
} else {
// LoggerPrintf(LOGGER,"Файловая система создана успешно.\r\n");
}
ret = f_mount(NULL, "1:", 1);
ret = f_mount(&env->fs, "1:", 1);
if (ret) {
// LoggerPrintf(LOGGER,"Ошибка монтирования файловой системы: %d.\r\n", ret);
} else {
// LoggerPrintf(LOGGER,"Файловая система смонтирована успешно.\r\n");
}
f_setlabel("1:GONEC");
}
pt_fs = &env->fs;
ret = f_getfree("1:", &fre_clust, &pt_fs);
if(ret == FR_OK) {
tot_sect = (pt_fs->n_fatent - 2) * pt_fs->csize;
fre_sect = fre_clust * pt_fs->csize;
// LoggerPrintf(LOGGER,"%10u кб всего на носителе.\r\n%10u кб свободно.\r\n", tot_sect / 2, fre_sect / 2);
}
return FR_OK;
}
/*-----------------------------------------------------------------------*/
/* Open or Create a File */
/*-----------------------------------------------------------------------*/
FRESULT f_open_i (
tFs* fs,
FIL* fp, /* Pointer to the blank file object */
const TCHAR* path, /* Pointer to the file name */
BYTE mode /* Access mode and open mode flags */
)
{
return f_open(fp, path, mode);
}
/*-----------------------------------------------------------------------*/
/* Write File */
/*-----------------------------------------------------------------------*/
FRESULT f_write_i (
tFs* fs,
FIL* fp, /* Open file to be written */
const void* buff, /* Data to be written */
UINT btw, /* Number of bytes to write */
UINT* bw /* Number of bytes written */
) {
return f_write(fp, buff, btw, bw);
}
/*-----------------------------------------------------------------------*/
/* Read File */
/*-----------------------------------------------------------------------*/
FRESULT f_read_i (
tFs* fs,
FIL* fp, /* Open file to be read */
void* buff, /* Data buffer to store the read data */
UINT btr, /* Number of bytes to read */
UINT* br /* Number of bytes read */
) {
return f_read(fp, buff, btr, br);
}
/*-----------------------------------------------------------------------*/
/* Seek File Read/Write Pointer */
/*-----------------------------------------------------------------------*/
FRESULT f_lseek_i (
tFs* fs,
FIL* fp, /* Pointer to the file object */
FSIZE_t ofs /* File pointer from top of file */
) {
return f_lseek(fp, ofs);
}
/*-----------------------------------------------------------------------*/
/* Close File */
/*-----------------------------------------------------------------------*/
FRESULT f_close_i (
tFs* fs,
FIL* fp /* Open file to be closed */
) {
return f_close(fp);
}
/*-----------------------------------------------------------------------*/
/* Close Directory */
/*-----------------------------------------------------------------------*/
FRESULT f_closedir_i (
tFs* fs,
DIR *dp /* Pointer to the directory object to be closed */
) {
return f_closedir(dp);
}
/*-----------------------------------------------------------------------*/
/* Delete a File/Directory */
/*-----------------------------------------------------------------------*/
FRESULT f_unlink_i (
tFs* fs,
const TCHAR* path /* Pointer to the file or directory path */
) {
return f_unlink(path);
}
/*-----------------------------------------------------------------------*/
/* Read Directory Entries in Sequence */
/*-----------------------------------------------------------------------*/
FRESULT f_readdir_i (
tFs* fs,
DIR* dp, /* Pointer to the open directory object */
FILINFO* fno /* Pointer to file information to return */
) {
return f_readdir(dp, fno);
}
/*-----------------------------------------------------------------------*/
/* Create a Directory Object */
/*-----------------------------------------------------------------------*/
FRESULT f_opendir_i (
tFs* fs,
DIR* dp, /* Pointer to directory object to create */
const TCHAR* path /* Pointer to the directory path */
) {
return f_opendir(dp, path);
}
/*-----------------------------------------------------------------------*/
/* Rename a File/Directory */
/*-----------------------------------------------------------------------*/
FRESULT f_rename_i (
tFs* fs,
const TCHAR* path_old, /* Pointer to the object name to be renamed */
const TCHAR* path_new /* Pointer to the new name */
) {
return f_rename(path_old, path_new);
}
/*-----------------------------------------------------------------------*/
/* Find First File */
/*-----------------------------------------------------------------------*/
FRESULT f_findfirst_i (
tFs* fs,
DIR* dp, /* Pointer to the blank directory object */
FILINFO* fno, /* Pointer to the file information structure */
const TCHAR* path, /* Pointer to the directory to open */
const TCHAR* pattern /* Pointer to the matching pattern */
) {
return f_findfirst(dp, fno, path, pattern);
}
/*-----------------------------------------------------------------------*/
/* Find Next File */
/*-----------------------------------------------------------------------*/
FRESULT f_findnext_i (
tFs* fs,
DIR* dp, /* Pointer to the open directory object */
FILINFO* fno /* Pointer to the file information structure */
) {
return f_findnext(dp, fno);
}