You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EasyFlash/easyflash/inc/ef_low_lvl.h

74 lines
3.3 KiB
C

/*
* This file is part of the EasyFlash Library.
*
* Copyright (c) 2020, Armink, <armink.ztl@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* 'Software'), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Function: It is the low level API and definition for this library.
* Created on: 2020-04-30
*/
#ifndef _EF_LOW_LVL_H_
#define _EF_LOW_LVL_H_
#include <ef_cfg.h>
#include <ef_def.h>
#if (EF_WRITE_GRAN == 1)
#define EF_STATUS_TABLE_SIZE(status_number) ((status_number * EF_WRITE_GRAN + 7)/8)
#else
#define EF_STATUS_TABLE_SIZE(status_number) (((status_number - 1) * EF_WRITE_GRAN + 7)/8)
#endif
/* Return the most contiguous size aligned at specified width. RT_ALIGN(13, 4)
* would return 16.
*/
#define EF_ALIGN(size, align) (((size) + (align) - 1) & ~((align) - 1))
/* align by write granularity */
#define EF_WG_ALIGN(size) (EF_ALIGN(size, (EF_WRITE_GRAN + 7)/8))
/**
* Return the down number of aligned at specified width. RT_ALIGN_DOWN(13, 4)
* would return 12.
*/
#define EF_ALIGN_DOWN(size, align) ((size) & ~((align) - 1))
/* align down by write granularity */
#define EF_WG_ALIGN_DOWN(size) (EF_ALIGN_DOWN(size, (EF_WRITE_GRAN + 7)/8))
#define EF_STORE_STATUS_TABLE_SIZE EF_STATUS_TABLE_SIZE(EF_SECTOR_STORE_STATUS_NUM)
#define EF_DIRTY_STATUS_TABLE_SIZE EF_STATUS_TABLE_SIZE(EF_SECTOR_DIRTY_STATUS_NUM)
/* the data is unused */
#define EF_DATA_UNUSED 0xFFFFFFFF
EfErrCode _ef_kv_load(ef_kvdb_t db);
size_t _ef_set_status(uint8_t status_table[], size_t status_num, size_t status_index);
size_t _ef_get_status(uint8_t status_table[], size_t status_num);
uint32_t _ef_continue_ff_addr(ef_db_t db, uint32_t start, uint32_t end);
EfErrCode _ef_init_ex(ef_db_t db, const char *name, const char *part_name, ef_db_type type, void *user_data);
void _ef_init_finish(ef_db_t db, EfErrCode result);
EfErrCode _ef_write_status(ef_db_t db, uint32_t addr, uint8_t status_table[], size_t status_num, size_t status_index);
size_t _ef_read_status(ef_db_t db, uint32_t addr, uint8_t status_table[], size_t total_num);
EfErrCode _ef_flash_read(ef_db_t db, uint32_t addr, void *buf, size_t size);
EfErrCode _ef_flash_erase(ef_db_t db, uint32_t addr, size_t size);
EfErrCode _ef_flash_write(ef_db_t db, uint32_t addr, const void *buf, size_t size);
#endif /* _EF_LOW_LVL_H_ */