![](/media/cache/group/arrow_temp_636x636.png.50x50_q85.png)
Repostiory containing DAPLink source code with Reset Pin workaround for HANI_IOT board.
Upstream: https://github.com/ARMmbed/DAPLink
Diff: source/daplink/drag-n-drop/virtual_fs.h
- Revision:
- 0:01f31e923fe2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/source/daplink/drag-n-drop/virtual_fs.h Tue Apr 07 12:55:42 2020 +0200 @@ -0,0 +1,108 @@ +/** + * @file virtual_fs.h + * @brief FAT 12/16 filesystem handling + * + * DAPLink Interface Firmware + * Copyright (c) 2009-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef VIRTUAL_FS_H +#define VIRTUAL_FS_H + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define VFS_CLUSTER_SIZE 0x1000 +#define VFS_SECTOR_SIZE 512 +#define VFS_INVALID_SECTOR 0xFFFFFFFF +#define VFS_FILE_INVALID 0 +#define VFS_MAX_FILES 16 + +typedef char vfs_filename_t[11]; + +typedef enum { + VFS_FILE_ATTR_READ_ONLY = (1 << 0), + VFS_FILE_ATTR_HIDDEN = (1 << 1), + VFS_FILE_ATTR_SYSTEM = (1 << 2), + VFS_FILE_ATTR_VOLUME_LABEL = (1 << 3), + VFS_FILE_ATTR_SUB_DIR = (1 << 4), + VFS_FILE_ATTR_ARCHIVE = (1 << 5), +} vfs_file_attr_bit_t; + +typedef enum { + VFS_FILE_CREATED = 0, /*!< A new file was created */ + VFS_FILE_DELETED, /*!< An existing file was deleted */ + VFS_FILE_CHANGED, /*!< Some attribute of the file changed. + Note: when a file is deleted or + created a file changed + notification will also occur*/ +} vfs_file_change_t; + +typedef void *vfs_file_t; +typedef uint32_t vfs_sector_t; + +// Callback for when data is written to a file on the virtual filesystem +typedef void (*vfs_write_cb_t)(uint32_t sector_offset, const uint8_t *data, uint32_t num_sectors); +// Callback for when data is ready from the virtual filesystem +typedef uint32_t (*vfs_read_cb_t)(uint32_t sector_offset, uint8_t *data, uint32_t num_sectors); +// Callback for when a file's attributes are changed on the virtual filesystem. Note that the 'file' parameter +// can be saved and compared to other files to see if they are referencing the same object. The +// same cannot be done with new_file_data since it points to a temporary buffer. +typedef void (*vfs_file_change_cb_t)(const vfs_filename_t filename, vfs_file_change_t change, + vfs_file_t file, vfs_file_t new_file_data); + +// Initialize the filesystem with the given size and name +void vfs_init(const vfs_filename_t drive_name, uint32_t disk_size); + +// Get the total size of the virtual filesystem +uint32_t vfs_get_total_size(void); + +// Add a file to the virtual FS and return a handle to this file. +// This must be called before vfs_read or vfs_write are called. +// Adding a new file after vfs_read or vfs_write have been called results in undefined behavior. +vfs_file_t vfs_create_file(const vfs_filename_t filename, vfs_read_cb_t read_cb, vfs_write_cb_t write_cb, uint32_t len); + +// Set the attributes of a file +void vfs_file_set_attr(vfs_file_t file, vfs_file_attr_bit_t attr); + +// Get the starting sector of this file. +// NOTE - If the file size is 0 there is no starting +// sector so VFS_INVALID_SECTOR will be returned. +vfs_sector_t vfs_file_get_start_sector(vfs_file_t file); + +// Get the size of the file. +uint32_t vfs_file_get_size(vfs_file_t file); + +// Get the attributes of a file +vfs_file_attr_bit_t vfs_file_get_attr(vfs_file_t file); + +// Set the callback when a file is created, deleted or has atributes changed. +void vfs_set_file_change_callback(vfs_file_change_cb_t cb); + +// Read one or more sectors from the virtual filesystem +void vfs_read(uint32_t sector, uint8_t *buf, uint32_t num_of_sectors); + +// Write one or more sectors to the virtual filesystem +void vfs_write(uint32_t sector, const uint8_t *buf, uint32_t num_of_sectors); + +#ifdef __cplusplus +} +#endif + +#endif