86 const uint8_t wordsPerLine = 16) {
87 if (!Utility::empty(buffer.meta->
name)) {
88 printer.
printf(
"Name = %s\n", buffer.meta->
name);
90 print_block(printer, buffer.buf, words, wordsPerLine);
102 const uint8_t wordsPerLine = 16) {
103 uint8_t lines = words / wordsPerLine;
104 if (words % wordsPerLine)
109 for (uint8_t i = 1; i < wordsPerLine; ++i)
110 printer.
printf(
"%2X ", i);
114 const uint16_t baseAddress =
line * wordsPerLine;
115 printer.
printf(
"0x%04X: ", baseAddress);
118 for (uint8_t offset = 0; offset < wordsPerLine; ++offset)
119 printer.
printf(
"%02X ", (
unsigned int) data[baseAddress + offset]);
122 for (uint8_t offset = 0; offset < wordsPerLine; ++offset) {
123 const char nextChar = data[baseAddress + offset];
124 if (32 <= nextChar && nextChar <= 126)
140 virtual ErrorCode
start ()
const = 0;
150 virtual ErrorCode
read_data_block (uint32_t address, uint8_t buf[])
const = 0;
187 virtual ErrorCode
write_data_block (uint32_t address,
const uint8_t dat[])
const = 0;
209 PropWare::ErrorCode err;
210 if (buffer->meta && buffer->meta->
mod) {
213 buffer->meta->
mod =
false;
226 uint8_t
get_byte (
const uint16_t offset,
const uint8_t *buf)
const {
242 virtual uint16_t
get_short (
const uint16_t offset,
const uint8_t buf[])
const = 0;
256 virtual uint32_t
get_long (
const uint16_t offset,
const uint8_t buf[])
const = 0;
265 void write_byte (
const uint16_t offset, uint8_t buf[],
const uint8_t value)
const {
280 virtual void write_short (
const uint16_t offset, uint8_t buf[],
const uint16_t value)
const = 0;
293 virtual void write_long (
const uint16_t offset, uint8_t buf[],
const uint32_t value)
const = 0;
virtual uint16_t get_sector_size() const =0
Return the size of a sector (also known as a "block") for the given storage device.
virtual uint16_t get_short(const uint16_t offset, const uint8_t buf[]) const =0
Read two bytes from a buffer.
static void print_block(const Printer &printer, const Buffer &buffer, const size_t words=512, const uint8_t wordsPerLine=16)
Print the formatted contents of a buffer.
ErrorCode read_data_block(uint32_t address, const BlockStorage::Buffer *buffer) const
Generic definitions and functions for the Parallax Propeller.
uint8_t get_byte(const uint16_t offset, const uint8_t *buf) const
Read a byte from a buffer.
virtual ErrorCode start() const =0
Initialize and power up a storage device.
virtual uint8_t get_sector_size_shift() const =0
Determine the number of shifts required to multiply or divide a number by the sector size...
virtual ErrorCode read_data_block(uint32_t address, uint8_t buf[]) const =0
Read a block of data from the device into RAM.
virtual ErrorCode write_data_block(uint32_t address, const uint8_t dat[]) const =0
Write data to a storage device.
void printf(const char fmt[], const T first, const Targs...remaining) const
Similar in functionality to the C-standard function printf.
Container class that has formatting methods for human-readable output. This class can be constructed ...
void write_byte(const uint16_t offset, uint8_t buf[], const uint8_t value) const
Write a byte to a buffer.
ErrorCode write_data_block(uint32_t address, const BlockStorage::Buffer *buffer) const
Any device that uses blocks as hardware level abstraction.
ErrorCode reload_buffer(const BlockStorage::Buffer *buffer) const
Use a buffer's metadata to determine the address and read data from the storage device into memory...
virtual void write_short(const uint16_t offset, uint8_t buf[], const uint16_t value) const =0
Write two bytes to a buffer.
virtual void write_long(const uint16_t offset, uint8_t buf[], const uint32_t value) const =0
Write four bytes to a buffer.
In-memory buffer containing a single block of data.
virtual uint32_t get_long(const uint16_t offset, const uint8_t buf[]) const =0
Read four bytes from a buffer.
ErrorCode flush(Buffer *buffer) const
Flush the contents of a buffer and mark as unmodified.
static void print_block(const Printer &printer, const uint8_t data[], const size_t words=512, const uint8_t wordsPerLine=16)