// // Created by cfif on 27.12.22. // #include "fs_interface.h" #include "stream.h" #include #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); }