#pragma once // // Block device interface, somewhat akin to stream.h // Used for filesystem implementations. // #include /** Abstract block device interface * * Populate an instance of this with pointers to your I/O functions. */ typedef struct { /** Sequential read at cursor * @param dest destination memory structure * @param len number of bytes to load and store in {dest} */ void (*load)(void* dest, const uint16_t len); /** Sequential write at cursor * @param src source memory structure * @param len number of bytes to write */ void (*store)(const void* src, const uint16_t len); /** Write one byte at cursor * @param b byte to write */ void (*write)(const uint8_t b); /** Read one byte at cursor * @return the read byte */ uint8_t (*read)(void); /** Absolute seek - set cursor * @param addr new cursor address */ void (*seek)(const uint32_t addr); /** Relative seek - move cursor * @param offset cursor address change */ void (*rseek)(const int16_t offset); /** Flush the data buffer if it's dirty. * * Should be called after each sequence of writes, * to avoid data loss. * * Tmplementations that do not need this should provide * a no-op function. */ void (*flush)(void); } BLOCKDEV;