distortos  v0.7.0
object-oriented C++ RTOS for microcontrollers
BlockDeviceToMemoryTechnologyDevice.hpp
Go to the documentation of this file.
1 
12 #ifndef INCLUDE_DISTORTOS_DEVICES_MEMORY_BLOCKDEVICETOMEMORYTECHNOLOGYDEVICE_HPP_
13 #define INCLUDE_DISTORTOS_DEVICES_MEMORY_BLOCKDEVICETOMEMORYTECHNOLOGYDEVICE_HPP_
14 
16 
17 namespace distortos
18 {
19 
20 namespace devices
21 {
22 
23 class BlockDevice;
24 
33 {
34 public:
35 
42  constexpr explicit BlockDeviceToMemoryTechnologyDevice(BlockDevice& blockDevice) :
45  blockDevice_{blockDevice},
46  openCount_{}
47  {
48 
49  }
50 
60 
76  int close() override;
77 
94  int erase(uint64_t address, uint64_t size) override;
95 
100  size_t getEraseBlockSize() const override;
101 
106  size_t getProgramBlockSize() const override;
107 
112  size_t getReadBlockSize() const override;
113 
118  uint64_t getSize() const override;
119 
135  void lock() override;
136 
148  int open() override;
149 
170  int program(uint64_t address, const void* buffer, size_t size) override;
171 
190  int read(uint64_t address, void* buffer, size_t size) override;
191 
204  int synchronize() override;
205 
216  void unlock() override;
217 
218 private:
219 
222 
225 
228 
230  uint8_t openCount_;
231 };
232 
233 } // namespace devices
234 
235 } // namespace distortos
236 
237 #endif // INCLUDE_DISTORTOS_DEVICES_MEMORY_BLOCKDEVICETOMEMORYTECHNOLOGYDEVICE_HPP_
uint64_t pendingEraseSize_
size of pending erase range
Definition: BlockDeviceToMemoryTechnologyDevice.hpp:224
size_t getProgramBlockSize() const override
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:114
uint8_t openCount_
number of times this device was opened but not yet closed
Definition: BlockDeviceToMemoryTechnologyDevice.hpp:230
MemoryTechnologyDevice class header.
void unlock() override
Unlocks the device which was previously locked by current thread.
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:267
uint64_t pendingEraseAddress_
address of pending erase range, valid only if pendingEraseSize_ != 0
Definition: BlockDeviceToMemoryTechnologyDevice.hpp:221
void lock() override
Locks the device for exclusive use by current thread.
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:129
int read(uint64_t address, void *buffer, size_t size) override
Reads data from a device.
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:197
size_t getEraseBlockSize() const override
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:109
int erase(uint64_t address, uint64_t size) override
Erases blocks on a device.
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:74
int close() override
Closes device.
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:48
Definition: MemoryTechnologyDevice.hpp:30
Top-level namespace of distortos project.
Definition: buttons.hpp:33
uint64_t getSize() const override
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:124
Definition: BlockDeviceToMemoryTechnologyDevice.hpp:32
Definition: BlockDevice.hpp:30
constexpr BlockDeviceToMemoryTechnologyDevice(BlockDevice &blockDevice)
BlockDeviceToMemoryTechnologyDevice's constructor.
Definition: BlockDeviceToMemoryTechnologyDevice.hpp:42
~BlockDeviceToMemoryTechnologyDevice() override
BlockDeviceToMemoryTechnologyDevice's destructor.
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:43
int program(uint64_t address, const void *buffer, size_t size) override
Programs data to a device.
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:151
int synchronize() override
Synchronizes state of a device, ensuring all cached writes are finished.
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:248
size_t getReadBlockSize() const override
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:119
int open() override
Opens device.
Definition: BlockDeviceToMemoryTechnologyDevice.cpp:134
BlockDevice & blockDevice_
reference to associated block device
Definition: BlockDeviceToMemoryTechnologyDevice.hpp:227