StreamDevice.h
Go to the documentation of this file.
1 /*
2  * StreamDevice.h
3  */
4 
5 #include "Device.h"
7 
8 namespace Storage
9 {
14 class StreamDevice : public Device
15 {
16 public:
22  StreamDevice(IDataSourceStream* stream, size_t size) : Device(nameOf(stream), size), mStream(stream)
23  {
24  }
25 
30  StreamDevice(IDataSourceStream* stream) : StreamDevice(stream, size_t(stream->available()))
31  {
32  }
33 
35  {
36  String s;
37  if(stream != nullptr) {
38  s = stream->getName();
39  }
40  if(!s) {
41  s = F("stream_") + String(uint32_t(stream), HEX);
42  }
43  return s;
44  }
45 
46  Type getType() const override
47  {
48  return Type::stream;
49  }
50 
51  bool read(storage_size_t address, void* buffer, size_t len) override
52  {
53  if(mStream == nullptr) {
54  return false;
55  }
56  if(storage_size_t(mStream->seekFrom(address, SeekOrigin::Start)) != address) {
57  return false;
58  }
59  return mStream->readBytes(static_cast<char*>(buffer), len) == len;
60  }
61 
62  bool write(storage_size_t address, const void* data, size_t len) override
63  {
64  return false;
65  }
66 
67  bool erase_range(storage_size_t address, storage_size_t len) override
68  {
69  return false;
70  }
71 
72 private:
73  std::unique_ptr<IDataSourceStream> mStream;
74 };
75 
76 } // namespace Storage
uint32_t storage_size_t
Definition: Components/Storage/src/include/Storage/Types.h:19
@ Start
SEEK_SET: Start of file.
#define HEX
Definition: WConstants.h:68
#define F(string_literal)
Wrap a string literal stored in flash and access it using a String object.
Definition: WString.h:109
Base class for read-only stream.
Definition: DataSourceStream.h:46
virtual String getName() const
Returns name of the resource.
Definition: DataSourceStream.h:158
Represents a storage device (e.g. flash memory)
Definition: Components/Storage/src/include/Storage/Device.h:34
Type
Storage type.
Definition: Components/Storage/src/include/Storage/Device.h:42
Read-only partition on a stream object.
Definition: StreamDevice.h:15
bool erase_range(storage_size_t address, storage_size_t len) override
Erase a region of storage in preparation for writing.
Definition: StreamDevice.h:67
static String nameOf(IDataSourceStream *stream)
Definition: StreamDevice.h:34
StreamDevice(IDataSourceStream *stream)
Create a Device object using data from a stream with all available data.
Definition: StreamDevice.h:30
StreamDevice(IDataSourceStream *stream, size_t size)
Create a Device object using data from a stream with restricted size.
Definition: StreamDevice.h:22
bool write(storage_size_t address, const void *data, size_t len) override
Write data to the storage device.
Definition: StreamDevice.h:62
bool read(storage_size_t address, void *buffer, size_t len) override
Read data from the storage device.
Definition: StreamDevice.h:51
Type getType() const override
Obtain device type.
Definition: StreamDevice.h:46
The String class.
Definition: WString.h:133
Definition: FileDevice.h:26