rusEFI
The most advanced open source ECU
|
This file implements a ChibiOS block device backed by a compressed (gzip) store.
This works by decompressing one block (512 bytes) at a time.
For sequential reads, the performance is great - the gzip decompress can only go forwards in the file. If a block later in the file (but with a gap) is requested, we decompress (and discard) the blocks in the gap, returning the block requested.
If a block is requested from before the previous block, we discard decompression state, reinitialize, and decompress up to that block.
NOTE: This means performance is terrible for "true" random access! Things go best when you have a few big files in the filesystem with no fragmentation, so they can be read out in large sequential chunks.
Definition in file compressed_block_device.cpp.
Functions | |
static bool | is_inserted (void *) |
static bool | is_protected (void *) |
static bool | connect (void *instance) |
static bool | disconnect (void *instance) |
static bool | read (void *instance, uint32_t startblk, uint8_t *buffer, uint32_t) |
static bool | write (void *, uint32_t, const uint8_t *, uint32_t) |
constexpr size_t | gzSize (const uint8_t *image, size_t imageSize) |
static bool | get_info (void *instance, BlockDeviceInfo *bdip) |
static bool | sync (void *instance) |
void | compressedBlockDeviceObjectInit (CompressedBlockDevice *cbd) |
void | compressedBlockDeviceStart (CompressedBlockDevice *cbd, const uint8_t *source, size_t sourceSize) |
Variables | |
static const BaseBlockDeviceVMT | cbdVmt |
void compressedBlockDeviceObjectInit | ( | CompressedBlockDevice * | cbd | ) |
Definition at line 138 of file compressed_block_device.cpp.
Referenced by getRamdiskDevice().
void compressedBlockDeviceStart | ( | CompressedBlockDevice * | cbd, |
const uint8_t * | source, | ||
size_t | sourceSize | ||
) |
Definition at line 144 of file compressed_block_device.cpp.
Referenced by getRamdiskDevice().
|
static |
Definition at line 38 of file compressed_block_device.cpp.
|
static |
Definition at line 46 of file compressed_block_device.cpp.
|
static |
Definition at line 102 of file compressed_block_device.cpp.
Definition at line 93 of file compressed_block_device.cpp.
Referenced by get_info().
|
static |
Definition at line 28 of file compressed_block_device.cpp.
|
static |
Definition at line 33 of file compressed_block_device.cpp.
|
static |
Definition at line 54 of file compressed_block_device.cpp.
|
static |
Definition at line 116 of file compressed_block_device.cpp.
|
static |
Definition at line 88 of file compressed_block_device.cpp.
|
static |
Definition at line 126 of file compressed_block_device.cpp.
Referenced by compressedBlockDeviceObjectInit().