[FL-520] Filesystem Api and App (#280)
* update fatfs integer types * fix sector size to 512 * fix sector size calculation * common fs api * fs api realization (sd card + fat fs) * better sector size definition * more api realization fns * add error description api, add common api * fix api flag naming, run app * add fs_info call * disable fatfs strfuncs, enable fatfs chmod * rework filesystem app * sd detect cycle, sd menu, sd eject feature * fix sd detect cycle * sd card format routine * ui improvements, sd info routine * properly unmount card * separate mode flags * add api folder, move app, rename app * fix api naming * update st-card-test to use api * update path to app * fixed potential problem of using sizeof union * updated api documentation, new time/date fns * update codeowners * changed app requirements * changed app order * sd insert/remove log
This commit is contained in:
		
							
								
								
									
										122
									
								
								applications/sd-filesystem/sd-filesystem.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								applications/sd-filesystem/sd-filesystem.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "flipper.h"
 | 
			
		||||
#include "flipper_v2.h"
 | 
			
		||||
 | 
			
		||||
#define SD_FS_MAX_FILES _FS_LOCK
 | 
			
		||||
#define SD_STATE_LINES_COUNT 6
 | 
			
		||||
 | 
			
		||||
#ifndef min
 | 
			
		||||
#define min(a, b) (((a) < (b)) ? (a) : (b))
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* api data */
 | 
			
		||||
typedef FIL SDFile;
 | 
			
		||||
typedef DIR SDDir;
 | 
			
		||||
typedef FILINFO SDFileInfo;
 | 
			
		||||
 | 
			
		||||
/* storage for file/directory objects*/
 | 
			
		||||
typedef union {
 | 
			
		||||
    SDFile file;
 | 
			
		||||
    SDDir dir;
 | 
			
		||||
} SDFileDirStorage;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    SD_OK = FR_OK,
 | 
			
		||||
    SD_DISK_ERR = FR_DISK_ERR,
 | 
			
		||||
    SD_INT_ERR = FR_INT_ERR,
 | 
			
		||||
    SD_NO_FILE = FR_NO_FILE,
 | 
			
		||||
    SD_NO_PATH = FR_NO_PATH,
 | 
			
		||||
    SD_INVALID_NAME = FR_INVALID_NAME,
 | 
			
		||||
    SD_DENIED = FR_DENIED,
 | 
			
		||||
    SD_EXIST = FR_EXIST,
 | 
			
		||||
    SD_INVALID_OBJECT = FR_INVALID_OBJECT,
 | 
			
		||||
    SD_WRITE_PROTECTED = FR_WRITE_PROTECTED,
 | 
			
		||||
    SD_INVALID_DRIVE = FR_INVALID_DRIVE,
 | 
			
		||||
    SD_NOT_ENABLED = FR_NOT_ENABLED,
 | 
			
		||||
    SD_NO_FILESYSTEM = FR_NO_FILESYSTEM,
 | 
			
		||||
    SD_MKFS_ABORTED = FR_MKFS_ABORTED,
 | 
			
		||||
    SD_TIMEOUT = FR_TIMEOUT,
 | 
			
		||||
    SD_LOCKED = FR_LOCKED,
 | 
			
		||||
    SD_NOT_ENOUGH_CORE = FR_NOT_ENOUGH_CORE,
 | 
			
		||||
    SD_TOO_MANY_OPEN_FILES = FR_TOO_MANY_OPEN_FILES,
 | 
			
		||||
    SD_INVALID_PARAMETER = FR_INVALID_PARAMETER,
 | 
			
		||||
    SD_NO_CARD,
 | 
			
		||||
    SD_NOT_A_FILE,
 | 
			
		||||
    SD_NOT_A_DIR,
 | 
			
		||||
    SD_OTHER_APP,
 | 
			
		||||
    SD_LOW_LEVEL_ERR,
 | 
			
		||||
} SDError;
 | 
			
		||||
 | 
			
		||||
typedef enum {
 | 
			
		||||
    FDF_DIR,
 | 
			
		||||
    FDF_FILE,
 | 
			
		||||
    FDF_ANY,
 | 
			
		||||
} FiledataFilter;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    osThreadId_t thread_id;
 | 
			
		||||
    bool is_dir;
 | 
			
		||||
    SDFileDirStorage data;
 | 
			
		||||
} FileData;
 | 
			
		||||
 | 
			
		||||
/* application data */
 | 
			
		||||
typedef struct {
 | 
			
		||||
    Widget* widget;
 | 
			
		||||
    Icon* mounted;
 | 
			
		||||
    Icon* fail;
 | 
			
		||||
} SdFsIcon;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    osMutexId_t mutex;
 | 
			
		||||
    FileData files[SD_FS_MAX_FILES];
 | 
			
		||||
    SDError status;
 | 
			
		||||
    char* path;
 | 
			
		||||
    FATFS fat_fs;
 | 
			
		||||
} SdFsInfo;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    SdFsInfo info;
 | 
			
		||||
    SdFsIcon icon;
 | 
			
		||||
 | 
			
		||||
    Widget* widget;
 | 
			
		||||
    const char* line[SD_STATE_LINES_COUNT];
 | 
			
		||||
    osMessageQueueId_t event_queue;
 | 
			
		||||
} SdApp;
 | 
			
		||||
 | 
			
		||||
/* core api fns */
 | 
			
		||||
bool _fs_init(SdFsInfo* _fs_info);
 | 
			
		||||
bool _fs_lock(SdFsInfo* fs_info);
 | 
			
		||||
bool _fs_unlock(SdFsInfo* fs_info);
 | 
			
		||||
SDError _fs_status(SdFsInfo* fs_info);
 | 
			
		||||
 | 
			
		||||
/* sd api fns */
 | 
			
		||||
bool fs_file_open(File* file, const char* path, FS_AccessMode access_mode, FS_OpenMode open_mode);
 | 
			
		||||
bool fs_file_close(File* file);
 | 
			
		||||
uint16_t fs_file_read(File* file, void* buff, uint16_t bytes_to_read);
 | 
			
		||||
uint16_t fs_file_write(File* file, void* buff, uint16_t bytes_to_write);
 | 
			
		||||
bool fs_file_seek(File* file, uint32_t offset, bool from_start);
 | 
			
		||||
uint64_t fs_file_tell(File* file);
 | 
			
		||||
bool fs_file_truncate(File* file);
 | 
			
		||||
uint64_t fs_file_size(File* file);
 | 
			
		||||
bool fs_file_sync(File* file);
 | 
			
		||||
bool fs_file_eof(File* file);
 | 
			
		||||
 | 
			
		||||
/* dir api */
 | 
			
		||||
bool fs_dir_open(File* file, const char* path);
 | 
			
		||||
bool fs_dir_close(File* file);
 | 
			
		||||
bool fs_dir_read(File* file, FileInfo* fileinfo, char* name, uint16_t name_length);
 | 
			
		||||
bool fs_dir_rewind(File* file);
 | 
			
		||||
 | 
			
		||||
/* common api */
 | 
			
		||||
FS_Error
 | 
			
		||||
fs_common_info(const char* path, FileInfo* fileinfo, char* name, const uint16_t name_length);
 | 
			
		||||
FS_Error fs_common_remove(const char* path);
 | 
			
		||||
FS_Error fs_common_rename(const char* old_path, const char* new_path);
 | 
			
		||||
FS_Error fs_common_set_attr(const char* path, uint8_t attr, uint8_t mask);
 | 
			
		||||
FS_Error fs_common_mkdir(const char* path);
 | 
			
		||||
FS_Error fs_common_set_time(const char* path, FileDateUnion date, FileTimeUnion time);
 | 
			
		||||
FS_Error fs_get_fs_info(uint64_t* total_space, uint64_t* free_space);
 | 
			
		||||
 | 
			
		||||
/* errors api */
 | 
			
		||||
const char* fs_error_get_desc(FS_Error error_id);
 | 
			
		||||
const char* fs_error_get_internal_desc(uint32_t internal_error_id);
 | 
			
		||||
		Reference in New Issue
	
	Block a user