不含stm32 底层的代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MyStm32Code/libraries/file_list.h

76 lines
3.4 KiB

2 years ago
/**
* @file file_list.h
* @author Chen Jihang (embedded@eseaoptics.com)
* @brief
* @version 1.0
* @date 2022-08-25
*
* @copyright ESEA (c) 2020
* @details
*
*
*
*
*
*
*
*/
#ifndef FILE_LIST_H_
#define FILE_LIST_H_
#include <stdint.h>
#include <stddef.h>
#include "ff.h"
/**
* @brief
*
*/
struct file_list_head
{
uint64_t file_pointer_used_first; //< 链表头指针
uint64_t file_pointer_used_last; //< 链表尾指针
uint64_t file_pointer_free_first; //< 空闲链表头指针
uint64_t file_pointer_free_last; //< 空闲链表尾指针
};
/**
* @brief
*
*/
struct file_list_node
{
uint64_t file_pointer_last; //< 上一个链表节点在文件中的位置
uint64_t file_pointer_this; //< 这个链表节点在文件中的位置
uint64_t file_pointer_next; //< 下一个链表节点在文件中断位置
uint64_t size; //< 链表节点分配的大小
uint64_t size_used; //< 链表节点实际使用的大小
};
/**
* @brief
*
*/
struct file_list
{
FIL fp; //< 文件描述符
struct file_list_head list_head; //< 链表头
struct file_list_node used_node_now; //< 现在指向的链表节点
struct file_list_node free_node_now; //< 现在指向的空闲链表节点
};
int file_list_get_head(struct file_list *p_list,struct file_list_head *p_head);
int file_list_put_head(struct file_list *p_list,struct file_list_head *p_head);
int file_list_get_node(struct file_list *p_list,struct file_list_node *p_node,uint64_t file_pointer);
int file_list_put_node(struct file_list *p_list,struct file_list_node *p_node);
int file_list_get_data(struct file_list *p_list,struct file_list_node *p_node,uint8_t *p_data,uint64_t base_addr,uint64_t size);
int file_list_put_data(struct file_list *p_list,struct file_list_node *p_node,uint8_t *p_data,uint64_t base_addr,uint64_t size);
struct file_list *file_list_create(struct file_list *p_list,char *path);
struct file_list *file_list_open(struct file_list *p_list,char *path);
int file_list_close(struct file_list *p_list);
int file_list_merge_free_node(struct file_list *p_list,struct file_list_node *p_free_node);
struct file_list_node *file_list_alloc(struct file_list *p_list,uint64_t size);
int file_list_del_node(struct file_list *p_list,struct file_list_node *p_used_node);
struct file_list_node *file_list_add_node(struct file_list *p_list,uint64_t size);
struct file_list_node *file_list_get_first_node(struct file_list *p_list);
struct file_list_node *file_list_get_next_node(struct file_list *p_list);
struct file_list_node *file_list_get_last_node(struct file_list *p_list);
uint64_t file_list_get_node_size(struct file_list *p_list,struct file_list_node *p_node);
uint64_t file_list_get_node_data(struct file_list *p_list,struct file_list_node *p_node,void *buf,uint64_t base_addr,uint64_t size);
uint64_t file_list_put_node_data(struct file_list *p_list,struct file_list_node *p_node,void *buf,uint64_t base_addr,uint64_t size);
#endif