177 lines
4.8 KiB
C
177 lines
4.8 KiB
C
/**
|
|
* SD Card Manager - File System Operations
|
|
* Manages FAT32 SD card for web assets, logs, and configuration
|
|
*/
|
|
|
|
#ifndef SD_MANAGER_H
|
|
#define SD_MANAGER_H
|
|
|
|
#include <esp_err.h>
|
|
#include <esp_vfs_fat.h>
|
|
#include <sdmmc_cmd.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// SD card configuration
|
|
#define SD_MOUNT_POINT "/sdcard"
|
|
#define SD_MAX_FILES 10
|
|
#define SD_FORMAT_IF_MOUNT_FAIL true
|
|
#define SD_ALLOC_UNIT_SIZE 16 * 1024
|
|
|
|
// Directory structure
|
|
#define SD_WWW_DIR SD_MOUNT_POINT "/www"
|
|
#define SD_LOGS_DIR SD_MOUNT_POINT "/logs"
|
|
#define SD_CONFIG_DIR SD_MOUNT_POINT "/config"
|
|
#define SD_SCRIPTS_DIR SD_MOUNT_POINT "/scripts"
|
|
|
|
// File paths
|
|
#define SD_CONFIG_FILE SD_CONFIG_DIR "/config.json"
|
|
#define SD_WIFI_CONFIG_FILE SD_CONFIG_DIR "/wifi.json"
|
|
#define SD_SCAN_CONFIG_FILE SD_CONFIG_DIR "/scan.json"
|
|
#define SD_INDEX_HTML SD_WWW_DIR "/index.html"
|
|
|
|
// Log file naming
|
|
#define LOG_FILE_PREFIX "audit_"
|
|
#define LOG_FILE_EXTENSION ".log"
|
|
#define LOG_MAX_SIZE (1024 * 1024) // 1MB per log file
|
|
#define LOG_MAX_FILES 100
|
|
|
|
/**
|
|
* Initialize SD card and mount file system
|
|
* @return ESP_OK on success, error code otherwise
|
|
*/
|
|
esp_err_t sd_manager_init(void);
|
|
|
|
/**
|
|
* Deinitialize SD card
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_deinit(void);
|
|
|
|
/**
|
|
* Check if SD card is mounted and accessible
|
|
* @return true if available, false otherwise
|
|
*/
|
|
bool sd_manager_is_available(void);
|
|
|
|
/**
|
|
* Create directory structure on SD card
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_create_directories(void);
|
|
|
|
/**
|
|
* Write data to file
|
|
* @param filepath Full path to file
|
|
* @param data Data to write
|
|
* @param size Size of data
|
|
* @param append Whether to append or overwrite
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_write_file(const char *filepath, const void *data, size_t size, bool append);
|
|
|
|
/**
|
|
* Read data from file
|
|
* @param filepath Full path to file
|
|
* @param buffer Buffer to read into
|
|
* @param size Size of buffer
|
|
* @param bytes_read Pointer to store actual bytes read
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_read_file(const char *filepath, void *buffer, size_t size, size_t *bytes_read);
|
|
|
|
/**
|
|
* Delete file
|
|
* @param filepath Full path to file
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_delete_file(const char *filepath);
|
|
|
|
/**
|
|
* Check if file exists
|
|
* @param filepath Full path to file
|
|
* @return true if file exists, false otherwise
|
|
*/
|
|
bool sd_manager_file_exists(const char *filepath);
|
|
|
|
/**
|
|
* Get file size
|
|
* @param filepath Full path to file
|
|
* @param size Pointer to store file size
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_get_file_size(const char *filepath, size_t *size);
|
|
|
|
/**
|
|
* List files in directory
|
|
* @param dir_path Directory path
|
|
* @param file_list Buffer to store file list (JSON format)
|
|
* @param buffer_size Size of buffer
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_list_files(const char *dir_path, char *file_list, size_t buffer_size);
|
|
|
|
/**
|
|
* Create new log file with timestamp
|
|
* @param log_type Type of log (e.g., "scan", "system", "error")
|
|
* @param filepath Buffer to store created filepath
|
|
* @param filepath_size Size of filepath buffer
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_create_log_file(const char *log_type, char *filepath, size_t filepath_size);
|
|
|
|
/**
|
|
* Write log entry with timestamp
|
|
* @param filepath Log file path
|
|
* @param level Log level (INFO, WARN, ERROR)
|
|
* @param message Log message
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_write_log(const char *filepath, const char *level, const char *message);
|
|
|
|
/**
|
|
* Get SD card information
|
|
* @param info Pointer to sdmmc_card_t structure
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_get_card_info(sdmmc_card_t **info);
|
|
|
|
/**
|
|
* Get free space on SD card
|
|
* @param free_bytes Pointer to store free bytes
|
|
* @param total_bytes Pointer to store total bytes
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_get_space_info(uint64_t *free_bytes, uint64_t *total_bytes);
|
|
|
|
/**
|
|
* Create directory
|
|
* @param path Directory path to create
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_mkdir(const char *path);
|
|
|
|
/**
|
|
* Append data to file
|
|
* @param filepath Full path to file
|
|
* @param data Data to append
|
|
* @param size Size of data
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_append_file(const char *filepath, const void *data, size_t size);
|
|
|
|
/**
|
|
* Rename file
|
|
* @param old_path Current file path
|
|
* @param new_path New file path
|
|
* @return ESP_OK on success
|
|
*/
|
|
esp_err_t sd_manager_rename_file(const char *old_path, const char *new_path);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // SD_MANAGER_H
|