|
@ -59,7 +59,7 @@ int zeeprom_fs_uinit() { // |
|
|
|
|
|
|
|
|
zeeprom_header_t* zeeprom_fs_get_header() { return &m_eeprom_header; } |
|
|
zeeprom_header_t* zeeprom_fs_get_header() { return &m_eeprom_header; } |
|
|
|
|
|
|
|
|
int zeeprom_fs_open(uint8_t* filename, uint8_t* usrdata[], uint8_t usrdata_len) { |
|
|
|
|
|
|
|
|
int zeeprom_fs_open(uint8_t* filename, wrflag_t wrflag) { |
|
|
ZASSERT(m_is_init); |
|
|
ZASSERT(m_is_init); |
|
|
/** |
|
|
/** |
|
|
* @brief |
|
|
* @brief |
|
@ -77,25 +77,12 @@ int zeeprom_fs_open(uint8_t* filename, uint8_t* usrdata[], uint8_t usrdata_len) |
|
|
return -1; |
|
|
return -1; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
zeeprom_sector_info_t* sectorHeaderInfo = sector_mgr_find_fileheader_by_filename(filename); |
|
|
|
|
|
if (sectorHeaderInfo) { |
|
|
|
|
|
/** |
|
|
|
|
|
* @brief 文件已存在 |
|
|
|
|
|
*/ |
|
|
|
|
|
// 打开后文件定位到第一个扇区 |
|
|
|
|
|
fileHander->fileuuid = sectorHeaderInfo->fileuuid; |
|
|
|
|
|
fileHander->file_offset = 0; |
|
|
|
|
|
fileHander->fd = fileHander->fd; |
|
|
|
|
|
fileHander->sector_header = sectorHeaderInfo; |
|
|
|
|
|
fileHander->file_size = sector_mgr_file_get_size(fileHander->fileuuid); |
|
|
|
|
|
memcpy(fileHander->filename, filename, 8); |
|
|
|
|
|
memcpy(fileHander->usrdata, sectorHeaderInfo->usrdata, sizeof(sectorHeaderInfo->usrdata)); |
|
|
|
|
|
sector_mgr_open_sector(fileHander->fileuuid); |
|
|
|
|
|
return fileHander->fd; |
|
|
|
|
|
} else { |
|
|
|
|
|
/** |
|
|
|
|
|
* @brief 文件不存在 |
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
if (wrflag == kwrflag_write_only) { |
|
|
|
|
|
/******************************************************************************* |
|
|
|
|
|
* 写文件 * |
|
|
|
|
|
*******************************************************************************/ |
|
|
|
|
|
zeeprom_sector_info_t* sectorHeaderInfo = NULL; |
|
|
|
|
|
zeeprom_fs_delete_by_name(filename); |
|
|
|
|
|
|
|
|
sectorHeaderInfo = sector_mgr_force_find_idle_sector(); |
|
|
sectorHeaderInfo = sector_mgr_force_find_idle_sector(); |
|
|
if (!sectorHeaderInfo) { |
|
|
if (!sectorHeaderInfo) { |
|
@ -111,13 +98,31 @@ int zeeprom_fs_open(uint8_t* filename, uint8_t* usrdata[], uint8_t usrdata_len) |
|
|
sectorHeaderInfo->sector_index_in_file = 0; |
|
|
sectorHeaderInfo->sector_index_in_file = 0; |
|
|
sectorHeaderInfo->datalen = 0; |
|
|
sectorHeaderInfo->datalen = 0; |
|
|
sectorHeaderInfo->fileuuid = m_eeprom_header.fileuuid++; |
|
|
sectorHeaderInfo->fileuuid = m_eeprom_header.fileuuid++; |
|
|
if (usrdata) memcpy(sectorHeaderInfo->usrdata, usrdata, usrdata_len); |
|
|
|
|
|
|
|
|
|
|
|
fileHander->fileuuid = sectorHeaderInfo->fileuuid; |
|
|
|
|
|
fileHander->sector_header = sectorHeaderInfo; |
|
|
|
|
|
fileHander->file_offset = 0; |
|
|
|
|
|
fileHander->file_size = 0; |
|
|
|
|
|
|
|
|
fileHander->fileuuid = sectorHeaderInfo->fileuuid; |
|
|
|
|
|
fileHander->sector_header = sectorHeaderInfo; |
|
|
|
|
|
fileHander->file_offset = 0; |
|
|
|
|
|
fileHander->file_size = 0; |
|
|
return fileHander->fd; |
|
|
return fileHander->fd; |
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
/******************************************************************************* |
|
|
|
|
|
* 读文件 * |
|
|
|
|
|
*******************************************************************************/ |
|
|
|
|
|
zeeprom_sector_info_t* sectorHeaderInfo = sector_mgr_find_fileheader_by_filename(filename); |
|
|
|
|
|
if (sectorHeaderInfo) { |
|
|
|
|
|
fileHander->fileuuid = sectorHeaderInfo->fileuuid; |
|
|
|
|
|
fileHander->file_offset = 0; |
|
|
|
|
|
fileHander->fd = fileHander->fd; |
|
|
|
|
|
fileHander->sector_header = sectorHeaderInfo; |
|
|
|
|
|
fileHander->file_size = sector_mgr_file_get_size(fileHander->fileuuid); |
|
|
|
|
|
memcpy(fileHander->filename, filename, 8); |
|
|
|
|
|
memcpy(fileHander->usrdata, sectorHeaderInfo->usrdata, sizeof(sectorHeaderInfo->usrdata)); |
|
|
|
|
|
sector_mgr_open_sector(fileHander->fileuuid); |
|
|
|
|
|
return fileHander->fd; |
|
|
|
|
|
} else { |
|
|
|
|
|
filehandler_rlease(fileHander->fd); |
|
|
|
|
|
return -1; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -159,7 +164,6 @@ int zeeprom_fs_write(int fileid, const uint8_t* data, int32_t size) { |
|
|
ZLOGE("sector_mgr_get_sector_rom_add fail"); |
|
|
ZLOGE("sector_mgr_get_sector_rom_add fail"); |
|
|
return -1; |
|
|
return -1; |
|
|
} |
|
|
} |
|
|
ZLOGI("wadd=%d", wadd); |
|
|
|
|
|
ZASSERT(wadd % 256 == 0); |
|
|
ZASSERT(wadd % 256 == 0); |
|
|
ZASSERT(wadd >= EEPROM_SECTOR_SIZE); |
|
|
ZASSERT(wadd >= EEPROM_SECTOR_SIZE); |
|
|
zeeprom_write(wadd + endsector->datalen, data, size); |
|
|
zeeprom_write(wadd + endsector->datalen, data, size); |
|
@ -171,6 +175,7 @@ int zeeprom_fs_write(int fileid, const uint8_t* data, int32_t size) { |
|
|
if (endsector->datalen == EEPROM_SECTOR_SIZE) { |
|
|
if (endsector->datalen == EEPROM_SECTOR_SIZE) { |
|
|
zeeprom_sector_info_t* newsector = sector_mgr_force_find_idle_sector(); |
|
|
zeeprom_sector_info_t* newsector = sector_mgr_force_find_idle_sector(); |
|
|
if (!newsector) { |
|
|
if (!newsector) { |
|
|
|
|
|
ZLOGE("sector_mgr_force_find_idle_sector fail"); |
|
|
return -1; |
|
|
return -1; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -349,7 +354,7 @@ static void filehandler_rlease(int fd) { |
|
|
|
|
|
|
|
|
// 查找最早创建的文件的file_created_index |
|
|
// 查找最早创建的文件的file_created_index |
|
|
static int32_t sector_mgr_find_earliest_file_created_index() { |
|
|
static int32_t sector_mgr_find_earliest_file_created_index() { |
|
|
int32_t earliest_file_created_index = 0xFFFFFFFF; |
|
|
|
|
|
|
|
|
int32_t earliest_file_created_index = INT32_MAX; |
|
|
for (int i = 0; i < MAX_SECTOR_NUM; i++) { |
|
|
for (int i = 0; i < MAX_SECTOR_NUM; i++) { |
|
|
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i]; |
|
|
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i]; |
|
|
if (sinfo->usage == 1) { |
|
|
if (sinfo->usage == 1) { |
|
@ -400,7 +405,6 @@ static zeeprom_sector_info_t* sector_mgr_force_find_idle_sector() { |
|
|
* @brief 查找最早创建的文件 |
|
|
* @brief 查找最早创建的文件 |
|
|
*/ |
|
|
*/ |
|
|
int32_t earliest_file_created_index = sector_mgr_find_earliest_file_created_index(); |
|
|
int32_t earliest_file_created_index = sector_mgr_find_earliest_file_created_index(); |
|
|
|
|
|
|
|
|
if (sector_mgr_sector_is_open(earliest_file_created_index)) { |
|
|
if (sector_mgr_sector_is_open(earliest_file_created_index)) { |
|
|
return NULL; |
|
|
return NULL; |
|
|
} |
|
|
} |
|
@ -518,21 +522,11 @@ int zeeprom_fs_dump_sector_state() { |
|
|
ZLOGI_BLOCK("zeeprom_fs_dump_sector_state\n"); |
|
|
ZLOGI_BLOCK("zeeprom_fs_dump_sector_state\n"); |
|
|
for (int i = 0; i < MAX_SECTOR_NUM; i++) { |
|
|
for (int i = 0; i < MAX_SECTOR_NUM; i++) { |
|
|
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i]; |
|
|
zeeprom_sector_info_t* sinfo = &m_eeprom_header.sectorinfos[i]; |
|
|
#if 0 |
|
|
|
|
|
uint8_t usage; |
|
|
|
|
|
uint8_t opened; |
|
|
|
|
|
uint8_t filename[8]; // 注意文件名为固定八个字节的二进制数据,不是字符串 |
|
|
|
|
|
int32_t sector_index_in_file; // 当前扇区中文件数据的起始地址 |
|
|
|
|
|
int32_t datalen; // 当前扇区中文件数据的长度 |
|
|
|
|
|
int32_t fileuuid; // 递增,根据这个index判断文件创建的先后顺序,同时也相当于文件唯一标识 |
|
|
|
|
|
uint8_t usrdata[20]; |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
if (sinfo->usage == 1) { |
|
|
if (sinfo->usage == 1) { |
|
|
ZLOGI_BLOCK("[%d]: usage=%d opened=%d", i, sinfo->usage, sinfo->opened); |
|
|
ZLOGI_BLOCK("[%d]: usage=%d opened=%d", i, sinfo->usage, sinfo->opened); |
|
|
ZLOGI_BLOCK(" fname=%s, index_in_file=%d, datalen=%d, fileuuid=%d\n", filename2str(sinfo->filename), sinfo->sector_index_in_file, sinfo->datalen, sinfo->fileuuid); |
|
|
|
|
|
|
|
|
ZLOGI_BLOCK(" fname=%s, index_in_file=%d, datalen=%d, fileuuid=%d", filename2str(sinfo->filename), sinfo->sector_index_in_file, sinfo->datalen, sinfo->fileuuid); |
|
|
} else { |
|
|
} else { |
|
|
ZLOGI_BLOCK("[%d]: usage=%d\n", i, sinfo->usage); |
|
|
|
|
|
|
|
|
ZLOGI_BLOCK("[%d]: usage=%d", i, sinfo->usage); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return 0; |
|
|
return 0; |
|
|