Mistake on this page?
Report an issue in GitHub or email us
ObservingBlockDevice.h
1 /* mbed Microcontroller Library
2  * Copyright (c) 2017-2020 ARM Limited
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /** \addtogroup storage */
19 /** @{*/
20 
21 #ifndef MBED_OBSERVING_BLOCK_DEVICE_H
22 #define MBED_OBSERVING_BLOCK_DEVICE_H
23 
24 #include "BlockDevice.h"
25 #include "platform/PlatformMutex.h"
26 #include "platform/Callback.h"
27 
28 namespace mbed {
29 
31 public:
32 
33  /** Lifetime of the block device
34  *
35  * @param bd Block device to observe
36  */
38  virtual ~ObservingBlockDevice();
39 
40  /** Attach a callback which is called on change
41  *
42  * @param cb Function to call on filesystem change (erase or program)
43  */
44  void attach(mbed::Callback<void(BlockDevice *)> cb);
45 
46  /** Initialize a block device
47  *
48  * @return 0 on success or a negative error code on failure
49  */
50  virtual int init();
51 
52  /** Deinitialize a block device
53  *
54  * @return 0 on success or a negative error code on failure
55  */
56  virtual int deinit();
57 
58  /** Ensure data on storage is in sync with the driver
59  *
60  * @return 0 on success or a negative error code on failure
61  */
62  virtual int sync();
63 
64  /** Read blocks from a block device
65  *
66  * @param buffer Buffer to read blocks into
67  * @param addr Address of block to begin reading from
68  * @param size Size to read in bytes, must be a multiple of read block size
69  * @return 0 on success, negative error code on failure
70  */
71  virtual int read(void *buffer, bd_addr_t addr, bd_size_t size);
72 
73  /** Program blocks to a block device
74  *
75  * The blocks must have been erased prior to being programmed
76  *
77  * @param buffer Buffer of data to write to blocks
78  * @param addr Address of block to begin writing to
79  * @param size Size to write in bytes, must be a multiple of program block size
80  * @return 0 on success, negative error code on failure
81  */
82  virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size);
83 
84  /** Erase blocks on a block device
85  *
86  * The state of an erased block is undefined until it has been programmed,
87  * unless get_erase_value returns a non-negative byte value
88  *
89  * @param addr Address of block to begin erasing
90  * @param size Size to erase in bytes, must be a multiple of erase block size
91  * @return 0 on success, negative error code on failure
92  */
93  virtual int erase(bd_addr_t addr, bd_size_t size);
94 
95  /** Get the size of a readable block
96  *
97  * @return Size of a readable block in bytes
98  */
99  virtual bd_size_t get_read_size() const;
100 
101  /** Get the size of a programmable block
102  *
103  * @return Size of a programmable block in bytes
104  */
105  virtual bd_size_t get_program_size() const;
106 
107  /** Get the size of an erasable block
108  *
109  * @return Size of an erasable block in bytes
110  */
111  virtual bd_size_t get_erase_size() const;
112 
113  /** Get the size of an erasable block given address
114  *
115  * @param addr Address within the erasable block
116  * @return Size of an erasable block in bytes
117  * @note Must be a multiple of the program size
118  */
119  virtual bd_size_t get_erase_size(bd_addr_t addr) const;
120 
121  /** Get the value of storage when erased
122  *
123  * If get_erase_value returns a non-negative byte value, the underlying
124  * storage is set to that value when erased, and storage containing
125  * that value can be programmed without another erase.
126  *
127  * @return The value of storage when erased, or -1 if you can't
128  * rely on the value of erased storage
129  */
130  virtual int get_erase_value() const;
131 
132  /** Get the total size of the underlying device
133  *
134  * @return Size of the underlying device in bytes
135  */
136  virtual bd_size_t size() const;
137 
138  /** Get the BlockDevice class type.
139  *
140  * @return A string represent the BlockDevice class type.
141  */
142  virtual const char *get_type() const;
143 
144 private:
145  BlockDevice *_bd;
147 };
148 
149 } // namespace mbed
150 
151 // Added "using" for backwards compatibility
152 #ifndef MBED_NO_GLOBAL_USING_DIRECTIVE
154 #endif
155 
156 #endif
157 
158 /** @}*/
virtual int erase(bd_addr_t addr, bd_size_t size)
Erase blocks on a block device.
virtual int get_erase_value() const
Get the value of storage when erased.
A hardware device capable of writing and reading blocks.
Definition: BlockDevice.h:48
void attach(mbed::Callback< void(BlockDevice *)> cb)
Attach a callback which is called on change.
virtual int init()
Initialize a block device.
ObservingBlockDevice(BlockDevice *bd)
Lifetime of the block device.
virtual bd_size_t size() const
Get the total size of the underlying device.
virtual const char * get_type() const
Get the BlockDevice class type.
virtual int deinit()
Deinitialize a block device.
virtual bd_size_t get_erase_size() const
Get the size of an erasable block.
virtual int read(void *buffer, bd_addr_t addr, bd_size_t size)
Read blocks from a block device.
virtual bd_size_t get_read_size() const
Get the size of a readable block.
virtual int program(const void *buffer, bd_addr_t addr, bd_size_t size)
Program blocks to a block device.
virtual int sync()
Ensure data on storage is in sync with the driver.
Callback class based on template specialization.
Definition: Callback.h:53
Definition: ATHandler.h:46
virtual bd_size_t get_program_size() const
Get the size of a programmable block.
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.