/* Copyright (c) 2020 ARM Limited * 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 EMULATEDSD_H #define EMULATEDSD_H #include "blockdevice/BlockDevice.h" class EmulatedSD_Private; class EmulatedSD : public mbed::BlockDevice { public: EmulatedSD(const char *path); ~EmulatedSD(); /** Initialize a block device * * @return 0 on success or a negative error code on failure */ virtual int init(); /** Deinitialize a block device * * @return 0 on success or a negative error code on failure */ virtual int deinit(); /** Read blocks from a block device * * If a failure occurs, it is not possible to determine how many bytes succeeded * * @param buffer Buffer to write blocks to * @param addr Address of block to begin reading from * @param size Size to read in bytes, must be a multiple of the read block size * @return 0 on success or a negative error code on failure */ virtual int read(void *buffer, bd_addr_t addr, bd_size_t size); /** Program blocks to a block device * * The blocks must have been erased prior to being programmed * * If a failure occurs, it is not possible to determine how many bytes succeeded * * @param buffer Buffer of data to write to blocks * @param addr Address of block to begin writing to * @param size Size to write in bytes, must be a multiple of the program block size * @return 0 on success or a negative error code on failure */ virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size); /** Get the size of a readable block * * @return Size of a readable block in bytes */ virtual bd_size_t get_read_size() const; /** Get the size of a programmable block * * @return Size of a programmable block in bytes * @note Must be a multiple of the read size */ virtual bd_size_t get_program_size() const; /** Get the total size of the underlying device * * @return Size of the underlying device in bytes */ virtual bd_size_t size() const; /** Get the BlockDevice class type. * * @return A string represent the BlockDevice class type. */ virtual const char *get_type() const; private: EmulatedSD_Private *_p; }; #endif // EMULATEDSD_H