VSF Documented
flash_template.inc
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#if VSF_HAL_USE_FLASH == ENABLED
19
20/*============================ INCLUDES ======================================*/
21
22/*============================ MACROS ========================================*/
23
24#define vsf_real_flash_t VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_t)
25#define vsf_real_flash_capability VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_capability)
26#define vsf_real_flash_get_configuration VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_get_configuration)
27#define vsf_real_flash_erase_all VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_erase_all)
28#define vsf_real_flash_erase_one_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_erase_one_sector)
29#define vsf_real_flash_erase_multi_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_erase_multi_sector)
30#define vsf_real_flash_write_one_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_write_one_sector)
31#define vsf_real_flash_write_multi_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_write_multi_sector)
32#define vsf_real_flash_read_one_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_read_one_sector)
33#define vsf_real_flash_read_multi_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_read_multi_sector)
34#define vsf_real_flash_ctrl VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_ctrl)
35
36#ifndef VSF_FLASH_CFG_REIMPLEMENT_API_GET_CONFIGURATION
37# define VSF_FLASH_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
38#endif
39
40#ifndef VSF_FLASH_CFG_REIMPLEMENT_API_CAPABILITY
41# define VSF_FLASH_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
42#endif
43
44#ifndef VSF_FLASH_CFG_REIMPLEMENT_API_CTRL
45# define VSF_FLASH_CFG_REIMPLEMENT_API_CTRL DISABLED
46#endif
47
48#ifdef VSF_FLASH_CFG_IMP_REMAP_PREFIX
49# undef VSF_FLASH_CFG_REIMPLEMENT_API_CAPABILITY
50# define VSF_FLASH_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
51# undef VSF_FLASH_CFG_REIMPLEMENT_API_GET_CONFIGURATION
52# define VSF_FLASH_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
53# undef VSF_FLASH_CFG_REIMPLEMENT_API_CTRL
54# define VSF_FLASH_CFG_REIMPLEMENT_API_CTRL ENABLED
55#endif
56
57#if VSF_FLASH_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
58# ifndef VSF_FLASH_CFG_CAPABILITY_IRQ_MASK
59# define VSF_FLASH_CFG_CAPABILITY_IRQ_MASK VSF_FLASH_IRQ_ALL_BITS_MASK
60# endif
61# ifndef VSF_FLASH_CFG_CAPABILITY_BASE_ADDRESS
62# define VSF_FLASH_CFG_CAPABILITY_BASE_ADDRESS 0
63# endif
64# ifndef VSF_FLASH_CFG_CAPABILITY_MAX_SIZE
65# error "Please define flash size macro 'VSF_FLASH_CFG_CAPABILITY_MAX_SIZE' in source files"
66# endif
67# ifndef VSF_FLASH_CFG_CAPABILITY_ERASE_SECTORE_SIZE
68# define VSF_FLASH_CFG_CAPABILITY_ERASE_SECTORE_SIZE 4096
69# endif
70# ifndef VSF_FLASH_CFG_CAPABILITY_WRITE_SECTORE_SIZE
71# define VSF_FLASH_CFG_CAPABILITY_WRITE_SECTORE_SIZE 512
72# endif
73# ifndef VSF_FLASH_CFG_CAPABILITY_NONE_SECTOR_ALIGNED_WRITE
74# define VSF_FLASH_CFG_CAPABILITY_NONE_SECTOR_ALIGNED_WRITE 0
75# endif
76# ifndef VSF_FLASH_CFG_CAPABILITY_NONE_SECTOR_ALIGNED_READ
77# define VSF_FLASH_CFG_CAPABILITY_NONE_SECTOR_ALIGNED_READ 1
78# endif
79#endif
80
81/*============================ MACROFIED FUNCTIONS ===========================*/
82/*============================ TYPES =========================================*/
83/*============================ GLOBAL VARIABLES ==============================*/
84/*============================ LOCAL VARIABLES ===============================*/
85/*============================ PROTOTYPES ====================================*/
86/*============================ IMPLEMENTATION ================================*/
87
88#if VSF_FLASH_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
89vsf_flash_capability_t vsf_real_flash_capability(vsf_real_flash_t *flash_ptr)
90{
91 vsf_flash_capability_t flash_capability = {
92 .irq_mask = VSF_FLASH_CFG_CAPABILITY_IRQ_MASK,
93 .base_address = VSF_FLASH_CFG_CAPABILITY_BASE_ADDRESS,
94 .max_size = VSF_FLASH_CFG_CAPABILITY_MAX_SIZE,
95 .erase_sector_size = VSF_FLASH_CFG_CAPABILITY_ERASE_SECTORE_SIZE,
96 .write_sector_size = VSF_FLASH_CFG_CAPABILITY_WRITE_SECTORE_SIZE,
97 .none_sector_aligned_write = VSF_FLASH_CFG_CAPABILITY_NONE_SECTOR_ALIGNED_WRITE,
98 .none_sector_aligned_read = VSF_FLASH_CFG_CAPABILITY_NONE_SECTOR_ALIGNED_READ,
99 };
100
101 VSF_ASSERT(flash_capability.erase_sector_size >= flash_capability.write_sector_size);
102
103 return flash_capability;
104}
105#endif
106
107#if VSF_FLASH_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
108vsf_err_t vsf_real_flash_get_configuration(vsf_real_flash_t *flash_ptr, vsf_flash_cfg_t *cfg_ptr)
109{
110 VSF_HAL_ASSERT(NULL != flash_ptr);
111 VSF_HAL_ASSERT(NULL != cfg_ptr);
112
113 // Default implementation: not supported, trigger assertion
115
116 return VSF_ERR_NOT_SUPPORT;
117}
118#endif
119
120#if VSF_FLASH_CFG_REIMPLEMENT_API_CTRL == DISABLED
121vsf_err_t vsf_real_flash_ctrl(vsf_real_flash_t *flash_ptr, vsf_flash_ctrl_t ctrl, void *param)
122{
123 VSF_HAL_ASSERT(NULL != flash_ptr);
124
125 // Default implementation: not supported, trigger assertion
127
128 return VSF_ERR_NOT_SUPPORT;
129}
130#endif
131
132#if VSF_FLASH_CFG_ERASE_ONE_SECTOR_TEMPLATE == ENABLED
133vsf_err_t vsf_real_flash_erase_one_sector(vsf_real_flash_t *real_flash_ptr, vsf_flash_size_t offset)
134{
135 VSF_ASSERT(real_flash_ptr != 0);
136
137 vsf_flash_capability_t flash_capability = vsf_real_flash_capability(real_flash_ptr);
138
139 VSF_ASSERT((offset % flash_capability.erase_sector_size) == 0);
140 VSF_ASSERT(flash_capability.erase_sector_size != 0);
141
142 return vsf_real_flash_erase_multi_sector(real_flash_ptr, offset, flash_capability.erase_sector_size);
143}
144#endif
145
146#if VSF_FLASH_CFG_ERASE_MULTI_SECTOR_TEMPLATE == ENABLED
147# error not supported yet
148#endif
149
150#if VSF_FLASH_CFG_ERASE_ALL_TEMPLATE == ENABLED
151vsf_err_t vsf_real_flash_erase_all(vsf_real_flash_t *real_flash_ptr)
152{
153 VSF_ASSERT(real_flash_ptr != 0);
154
155 vsf_flash_capability_t flash_capability = vsf_real_flash_capability(real_flash_ptr);
156 VSF_ASSERT(flash_capability.erase_sector_size > 0);
157 VSF_ASSERT(flash_capability.erase_sector_size >= flash_capability.write_sector_size);
158 VSF_ASSERT(flash_capability.max_size >= flash_capability.erase_sector_size);
159
160 return vsf_real_flash_erase_multi_sector(real_flash_ptr, 0, flash_capability.max_size);
161}
162#endif
163
164#if VSF_FLASH_CFG_WRITE_ONE_SECTOR_TEMPLATE == ENABLED
165vsf_err_t vsf_real_flash_write_one_sector(vsf_real_flash_t *real_flash_ptr, vsf_flash_size_t offset, uint8_t* buffer, vsf_flash_size_t size)
166{
167 VSF_ASSERT(real_flash_ptr != 0);
168
169 vsf_flash_capability_t flash_capability = vsf_real_flash_capability(real_flash_ptr);
170 VSF_ASSERT(size <= flash_capability.write_sector_size);
171 VSF_ASSERT(flash_capability.none_sector_aligned_write || ((offset % flash_capability.write_sector_size) == 0));
172
173 return vsf_real_flash_write_multi_sector(real_flash_ptr, offset, buffer, size);
174}
175#endif
176
177#if VSF_FLASH_CFG_WRITE_MULTI_SECTOR_TEMPLATE == ENABLED
178# error not supported yet
179#endif
180
181#if VSF_FLASH_CFG_READ_ONE_SECTOR_TEMPLATE == ENABLED
182vsf_err_t vsf_real_flash_read_one_sector(vsf_real_flash_t *real_flash_ptr, vsf_flash_size_t offset, uint8_t* buffer, vsf_flash_size_t size)
183{
184 VSF_ASSERT(real_flash_ptr != 0);
185
186 vsf_flash_capability_t flash_capability = vsf_real_flash_capability(real_flash_ptr);
187 VSF_ASSERT(size <= flash_capability.write_sector_size);
188 VSF_ASSERT(flash_capability.none_sector_aligned_read || ((offset % flash_capability.write_sector_size) == 0));
189
190 return vsf_real_flash_read_multi_sector(real_flash_ptr, offset, buffer, size);
191}
192#endif
193
194#if VSF_FLASH_CFG_READ_MULTI_SECTOR_TEMPLATE == ENABLED
195# error not supported yet
196#endif
197
198/*============================ MACROS ========================================*/
199
200#undef VSF_FLASH_CFG_REIMPLEMENT_API_CAPABILITY
201#undef VSF_FLASH_CFG_REIMPLEMENT_API_GET_CONFIGURATION
202#undef VSF_FLASH_CFG_REIMPLEMENT_API_CTRL
203#undef VSF_FLASH_CFG_CAPABILITY_IRQ_MASK
204#undef VSF_FLASH_CFG_CAPABILITY_BASE_ADDRESS
205#undef VSF_FLASH_CFG_CAPABILITY_MAX_SIZE
206#undef VSF_FLASH_CFG_CAPABILITY_ERASE_SECTORE_SIZE
207#undef VSF_FLASH_CFG_CAPABILITY_WRITE_SECTORE_SIZE
208#undef VSF_FLASH_CFG_CAPABILITY_NONE_SECTOR_ALIGNED_WRITE
209#undef VSF_FLASH_CFG_CAPABILITY_NONE_SECTOR_ALIGNED_READ
210
211#undef vsf_real_flash_t
212#undef vsf_real_flash_erase_all
213#undef vsf_real_flash_erase_one_sector
214#undef vsf_real_flash_erase_multi_sector
215#undef vsf_real_flash_write_one_sector
216#undef vsf_real_flash_write_multi_sector
217#undef vsf_real_flash_read_one_sector
218#undef vsf_real_flash_read_multi_sector
219#undef vsf_real_flash_capability
220#undef vsf_real_flash_get_configuration
221#undef vsf_real_flash_ctrl
222
223/*============================ MACROS ========================================*/
224
225#ifdef VSF_FLASH_CFG_IMP_REMAP_PREFIX
226# define vsf_imp_flash_t VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_t)
227# define vsf_imp_flash_init VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_init)
228# define vsf_imp_flash_fini VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_fini)
229# define vsf_imp_flash_enable VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_enable)
230# define vsf_imp_flash_disable VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_disable)
231# define vsf_imp_flash_capability VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_capability)
232# define vsf_imp_flash_status VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_status)
233# define vsf_imp_flash_irq_enable VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_irq_enable)
234# define vsf_imp_flash_irq_disable VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_irq_disable)
235# define vsf_imp_flash_erase_one_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_erase_one_sector)
236# define vsf_imp_flash_erase_multi_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_erase_multi_sector)
237# define vsf_imp_flash_erase VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_erase_multi_sector)
238# define vsf_imp_flash_erase_all VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_erase_all)
239# define vsf_imp_flash_write_one_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_write_one_sector)
240# define vsf_imp_flash_write_multi_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_write_multi_sector)
241# define vsf_imp_flash_write VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_write_multi_sector)
242# define vsf_imp_flash_read_one_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_read_one_sector)
243# define vsf_imp_flash_read_multi_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_read_multi_sector)
244# define vsf_imp_flash_read VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_read_multi_sector)
245# define vsf_imp_flash_get_configuration VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_get_configuration)
246# define vsf_imp_flash_ctrl VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_ctrl)
247
248# define vsf_remap_flash_t VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_t)
249# define vsf_remap_flash_init VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_init)
250# define vsf_remap_flash_fini VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_fini)
251# define vsf_remap_flash_enable VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_enable)
252# define vsf_remap_flash_disable VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_disable)
253# define vsf_remap_flash_capability VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_capability)
254# define vsf_remap_flash_status VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_status)
255# define vsf_remap_flash_irq_enable VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_irq_enable)
256# define vsf_remap_flash_irq_disable VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_irq_disable)
257# define vsf_remap_flash_erase_one_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_erase_one_sector)
258# define vsf_remap_flash_erase_multi_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_erase_multi_sector)
259# define vsf_remap_flash_erase VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_erase_multi_sector)
260# define vsf_remap_flash_erase_all VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_erase_all)
261# define vsf_remap_flash_write_one_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_write_one_sector)
262# define vsf_remap_flash_write_multi_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_write_multi_sector)
263# define vsf_remap_flash_write VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_write_multi_sector)
264# define vsf_remap_flash_read_one_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_read_one_sector)
265# define vsf_remap_flash_read_multi_sector VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_read_multi_sector)
266# define vsf_remap_flash_read VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_read_multi_sector)
267# define vsf_remap_flash_get_configuration VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_get_configuration)
268# define vsf_remap_flash_ctrl VSF_MCONNECT(VSF_FLASH_CFG_IMP_REMAP_PREFIX, _flash_ctrl)
269
270# define VSF_FLASH_CFG_IMP_REMAP_FUNCTIONS \
271 vsf_err_t vsf_imp_flash_init(vsf_imp_flash_t *flash_ptr, vsf_flash_cfg_t *cfg_ptr) \
272 { \
273 VSF_HAL_ASSERT(flash_ptr != NULL); \
274 return vsf_remap_flash_init((vsf_remap_flash_t *)flash_ptr, cfg_ptr); \
275 } \
276 void vsf_imp_flash_fini(vsf_imp_flash_t *flash_ptr) \
277 { \
278 VSF_HAL_ASSERT(flash_ptr != NULL); \
279 vsf_remap_flash_fini((vsf_remap_flash_t *)flash_ptr); \
280 } \
281 fsm_rt_t vsf_imp_flash_enable(vsf_imp_flash_t *flash_ptr) \
282 { \
283 VSF_HAL_ASSERT(flash_ptr != NULL); \
284 return vsf_remap_flash_enable((vsf_remap_flash_t *)flash_ptr); \
285 } \
286 fsm_rt_t vsf_imp_flash_disable(vsf_imp_flash_t *flash_ptr) \
287 { \
288 VSF_HAL_ASSERT(flash_ptr != NULL); \
289 return vsf_remap_flash_disable((vsf_remap_flash_t *)flash_ptr); \
290 } \
291 void vsf_imp_flash_irq_enable(vsf_imp_flash_t *flash_ptr, vsf_flash_irq_mask_t irq_mask) \
292 { \
293 VSF_HAL_ASSERT(flash_ptr != NULL); \
294 vsf_remap_flash_irq_enable((vsf_remap_flash_t *)flash_ptr, irq_mask); \
295 } \
296 void vsf_imp_flash_irq_disable(vsf_imp_flash_t *flash_ptr, vsf_flash_irq_mask_t irq_mask) \
297 { \
298 VSF_HAL_ASSERT(flash_ptr != NULL); \
299 vsf_remap_flash_irq_disable((vsf_remap_flash_t *)flash_ptr, irq_mask); \
300 } \
301 vsf_flash_status_t vsf_imp_flash_status(vsf_imp_flash_t *flash_ptr) \
302 { \
303 VSF_HAL_ASSERT(flash_ptr != NULL); \
304 return vsf_remap_flash_status((vsf_remap_flash_t *)flash_ptr); \
305 } \
306 vsf_flash_capability_t vsf_imp_flash_capability(vsf_imp_flash_t *flash_ptr) \
307 { \
308 VSF_HAL_ASSERT(flash_ptr != NULL); \
309 return vsf_remap_flash_capability((vsf_remap_flash_t *)flash_ptr); \
310 } \
311 vsf_err_t vsf_imp_flash_erase_one_sector(vsf_imp_flash_t *flash_ptr, uint_fast32_t offset) \
312 { \
313 VSF_HAL_ASSERT(flash_ptr != NULL); \
314 return vsf_remap_flash_erase_one_sector((vsf_remap_flash_t *)flash_ptr, offset); \
315 } \
316 vsf_err_t vsf_imp_flash_erase_multi_sector(vsf_imp_flash_t *flash_ptr, uint_fast32_t offset, uint_fast32_t size) \
317 { \
318 VSF_HAL_ASSERT(flash_ptr != NULL); \
319 return vsf_remap_flash_erase_multi_sector((vsf_remap_flash_t *)flash_ptr, offset, size); \
320 } \
321 vsf_err_t vsf_imp_flash_erase_all(vsf_imp_flash_t *flash_ptr) \
322 { \
323 VSF_HAL_ASSERT(flash_ptr != NULL); \
324 return vsf_remap_flash_erase_all((vsf_remap_flash_t *)flash_ptr); \
325 } \
326 vsf_err_t vsf_imp_flash_write_one_sector(vsf_imp_flash_t *flash_ptr, uint_fast32_t offset, uint8_t* buffer, uint_fast32_t size) \
327 { \
328 VSF_HAL_ASSERT(flash_ptr != NULL); \
329 return vsf_remap_flash_write_one_sector((vsf_remap_flash_t *)flash_ptr, offset, buffer, size); \
330 } \
331 vsf_err_t vsf_imp_flash_write_multi_sector(vsf_imp_flash_t *flash_ptr, uint_fast32_t offset, uint8_t* buffer, uint_fast32_t size) \
332 { \
333 VSF_HAL_ASSERT(flash_ptr != NULL); \
334 return vsf_remap_flash_write_multi_sector((vsf_remap_flash_t *)flash_ptr, offset, buffer, size); \
335 } \
336 vsf_err_t vsf_imp_flash_read_one_sector(vsf_imp_flash_t *flash_ptr, uint_fast32_t offset, uint8_t* buffer, uint_fast32_t size) \
337 { \
338 VSF_HAL_ASSERT(flash_ptr != NULL); \
339 return vsf_remap_flash_read_one_sector((vsf_remap_flash_t *)flash_ptr, offset, buffer, size); \
340 } \
341 vsf_err_t vsf_imp_flash_read_multi_sector(vsf_imp_flash_t *flash_ptr, uint_fast32_t offset, uint8_t* buffer, uint_fast32_t size) \
342 { \
343 VSF_HAL_ASSERT(flash_ptr != NULL); \
344 return vsf_remap_flash_read_multi_sector((vsf_remap_flash_t *)flash_ptr, offset, buffer, size); \
345 } \
346 \
347 vsf_err_t vsf_imp_flash_get_configuration(vsf_imp_flash_t *flash_ptr, vsf_flash_cfg_t *cfg_ptr) \
348 { \
349 VSF_HAL_ASSERT(flash_ptr != NULL); \
350 return vsf_remap_flash_get_configuration((vsf_remap_flash_t *)flash_ptr, cfg_ptr); \
351 } \
352 vsf_err_t vsf_imp_flash_ctrl(vsf_imp_flash_t *flash_ptr, vsf_flash_ctrl_t ctrl, void *param) \
353 { \
354 VSF_HAL_ASSERT(flash_ptr != NULL); \
355 return vsf_remap_flash_ctrl((vsf_remap_flash_t *)flash_ptr, ctrl, param); \
356 }
357#endif
358
359/*============================ GLOBAL VARIABLES ==============================*/
360
361#define VSF_HAL_TEMPLATE_IMP_NAME _flash
362#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _FLASH
363
364#if !defined(VSF_FLASH_CFG_IMP_PREFIX) && !defined(VSF_FLASH_CFG_IMP_DEVICE_PREFIX)
365# error "Please define VSF_FLASH_CFG_IMP_PREFIX in flash driver"
366#endif
367
368#if !defined(VSF_FLASH_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_FLASH_CFG_IMP_DEVICE_UPCASE_PREFIX)
369# error "Please define VSF_FLASH_CFG_IMP_UPCASE_PREFIX in flash driver"
370#endif
371
372#ifndef VSF_FLASH_CFG_IMP_COUNT_MASK_PREFIX
373# define VSF_FLASH_CFG_IMP_COUNT_MASK_PREFIX VSF_FLASH_CFG_IMP_UPCASE_PREFIX
374#endif
375
376#ifdef VSF_FLASH_CFG_IMP_REMAP_FUNCTIONS
377# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_FLASH_CFG_IMP_REMAP_FUNCTIONS
378#endif
379
381
382#undef VSF_FLASH_CFG_IMP_PREFIX
383#undef VSF_FLASH_CFG_IMP_COUNT_MASK_PREFIX
384#undef VSF_FLASH_CFG_IMP_UPCASE_PREFIX
385#undef VSF_FLASH_CFG_IMP_DEVICE_PREFIX
386#undef VSF_FLASH_CFG_IMP_DEVICE_UPCASE_PREFIX
387#undef VSF_FLASH_CFG_IMP_LV0
388#undef VSF_FLASH_CFG_IMP_REMAP_FUNCTIONS
389#undef VSF_FLASH_CFG_IMP_HAS_OP
390#undef VSF_FLASH_CFG_IMP_EXTERN_OP
391
392#undef vsf_imp_flash_t
393#undef vsf_imp_flash_init
394#undef vsf_imp_flash_fini
395#undef vsf_imp_flash_enable
396#undef vsf_imp_flash_disable
397#undef vsf_imp_flash_capability
398#undef vsf_imp_flash_status
399#undef vsf_imp_flash_irq_enable
400#undef vsf_imp_flash_irq_disable
401#undef vsf_imp_flash_erase_one_sector
402#undef vsf_imp_flash_erase_multi_sector
403#undef vsf_imp_flash_erase
404#undef vsf_imp_flash_erase_all
405#undef vsf_imp_flash_write_one_sector
406#undef vsf_imp_flash_write_multi_sector
407#undef vsf_imp_flash_write
408#undef vsf_imp_flash_read_one_sector
409#undef vsf_imp_flash_read_multi_sector
410#undef vsf_imp_flash_read
411#undef vsf_imp_flash_get_configuration
412#undef vsf_imp_flash_ctrl
413
414#undef vsf_remap_flash_t
415#undef vsf_remap_flash_init
416#undef vsf_remap_flash_fini
417#undef vsf_remap_flash_enable
418#undef vsf_remap_flash_disable
419#undef vsf_remap_flash_capability
420#undef vsf_remap_flash_status
421#undef vsf_remap_flash_irq_enable
422#undef vsf_remap_flash_irq_disable
423#undef vsf_remap_flash_erase_one_sector
424#undef vsf_remap_flash_erase_multi_sector
425#undef vsf_remap_flash_erase
426#undef vsf_remap_flash_erase_all
427#undef vsf_remap_flash_write_one_sector
428#undef vsf_remap_flash_write_multi_sector
429#undef vsf_remap_flash_write
430#undef vsf_remap_flash_read_one_sector
431#undef vsf_remap_flash_read_multi_sector
432#undef vsf_remap_flash_read
433#undef vsf_remap_flash_get_configuration
434#undef vsf_remap_flash_ctrl
435
436#endif /* VSF_HAL_USE_FLASH */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
#define NULL
Definition lvgl.h:26
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_flash.h:277
vsf_flash_size_t max_size
Definition vsf_template_flash.h:284
uint8_t none_sector_aligned_read
Definition vsf_template_flash.h:290
vsf_flash_size_t write_sector_size
Definition vsf_template_flash.h:286
vsf_flash_size_t base_address
Definition vsf_template_flash.h:283
vsf_flash_size_t erase_sector_size
Definition vsf_template_flash.h:285
uint8_t none_sector_aligned_write
Definition vsf_template_flash.h:289
Definition vsf_template_flash.h:253
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
uint64_t offset
Definition vsf_memfs.h:49
uint32_t size
Definition vsf_memfs.h:50
vsf_flash_ctrl_t
Predefined VSF Flash control commands that can be reimplemented in specific HAL drivers.
Definition vsf_template_flash.h:315
uint_fast32_t vsf_flash_size_t
Definition vsf_template_flash.h:234
#define VSF_ASSERT(...)
Definition vsf_usr_cfg.h:1
Generated from commit: vsfteam/vsf@8634e61