VSF Documented
i2c_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/*============================ INCLUDES ======================================*/
19
21
22/*============================ MACROS ========================================*/
23#if VSF_HAL_USE_I2C == ENABLED
24
25#ifndef VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY
26# define VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY DISABLED
27#endif
28
29#ifndef VSF_I2C_CFG_REIMPLEMENT_API_CTRL
30# define VSF_I2C_CFG_REIMPLEMENT_API_CTRL DISABLED
31#endif
32
33#ifndef VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION
34# define VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION DISABLED
35#endif
36
37#ifndef VSF_I2C_CFG_REIMPLEMENT_API_IRQ_CLEAR
38# define VSF_I2C_CFG_REIMPLEMENT_API_IRQ_CLEAR DISABLED
39#endif
40
41#ifdef VSF_I2C_CFG_IMP_REMAP_PREFIX
42# undef VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY
43# undef VSF_I2C_CFG_REIMPLEMENT_API_CTRL
44# undef VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION
45# undef VSF_I2C_CFG_REIMPLEMENT_API_IRQ_CLEAR
46# define VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
47# define VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
48# define VSF_I2C_CFG_REIMPLEMENT_API_CTRL ENABLED
49# define VSF_I2C_CFG_REIMPLEMENT_API_IRQ_CLEAR ENABLED
50#endif
51
52#if VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
53# ifndef VSF_I2C_CFG_CAPABILITY_IRQ_MASK
54# define VSF_I2C_CFG_CAPABILITY_IRQ_MASK VSF_I2C_IRQ_ALL_BITS_MASK
55# endif
56# ifndef VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_START
57# define VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_START 1
58# endif
59# ifndef VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_STOP_RESTART
60# define VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_STOP_RESTART 1
61# endif
62# ifndef VSF_I2C_CFG_CAPABILITY_SUPPORT_RESTART
63# define VSF_I2C_CFG_CAPABILITY_SUPPORT_RESTART 1
64# endif
65# ifndef VSF_I2C_CFG_CAPABILITY_MAX_TRANSFER_SIZE
66# define VSF_I2C_CFG_CAPABILITY_MAX_TRANSFER_SIZE 0xFFFF
67# endif
68# ifndef VSF_I2C_CFG_CAPABILITY_MIN_TRANSFER_SIZE
69# define VSF_I2C_CFG_CAPABILITY_MIN_TRANSFER_SIZE 0
70# endif
71#endif
72
73#define vsf_real_i2c_t VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_t)
74#define vsf_real_master_request VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_master_request)
75#define vsf_real_i2c_capability VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_capability)
76#define vsf_real_i2c_ctrl VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_ctrl)
77#define vsf_real_i2c_get_configuration VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_get_configuration)
78#define vsf_real_i2c_irq_clear VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_irq_clear)
79
80/*============================ MACROFIED FUNCTIONS ===========================*/
81/*============================ LOCAL VARIABLES ===============================*/
82/*============================ IMPLEMENTATION ================================*/
83
84#if VSF_I2C_CFG_REQUEST_TEMPLATE == ENABLED
85vsf_err_t vsf_real_i2c_master_request(vsf_real_i2c_t *i2c_ptr, uint16_t address, vsf_i2c_cmd_t cmd, uint16_t count, uint8_t *buffer_ptr)
86{
87 vsf_real_i2c_t * i2c_type_ptr = (vsf_real_i2c_t *)i2c_ptr;
88 return vsf_i2c_request_master_request(i2c_ptr, &i2c_type_ptr->request, address, cmd, count, buffer_ptr);
89}
90#endif
91
92#if VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
93vsf_i2c_capability_t vsf_real_i2c_capability(vsf_real_i2c_t *i2c_ptr)
94{
95 vsf_i2c_capability_t i2c_capability = {
96 .irq_mask = VSF_I2C_CFG_CAPABILITY_IRQ_MASK,
97 .support_no_start = VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_START,
98 .support_no_stop_restart = VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_STOP_RESTART,
99 .support_restart = VSF_I2C_CFG_CAPABILITY_SUPPORT_RESTART,
100 .max_transfer_size = VSF_I2C_CFG_CAPABILITY_MAX_TRANSFER_SIZE,
101 .min_transfer_size = VSF_I2C_CFG_CAPABILITY_MIN_TRANSFER_SIZE,
102 };
103
104 return i2c_capability;
105}
106#endif
107
108#if VSF_I2C_CFG_REIMPLEMENT_API_CTRL == DISABLED
109vsf_err_t vsf_real_i2c_ctrl(vsf_real_i2c_t *i2c_ptr, vsf_i2c_ctrl_t ctrl, void *param)
110{
111 VSF_HAL_ASSERT(NULL != i2c_ptr);
112 return VSF_ERR_NOT_SUPPORT;
113}
114#endif
115
116#if VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
117vsf_err_t vsf_real_i2c_get_configuration(vsf_real_i2c_t *i2c_ptr, vsf_i2c_cfg_t *cfg_ptr)
118{
119 VSF_HAL_ASSERT(NULL != i2c_ptr);
120 VSF_HAL_ASSERT(NULL != cfg_ptr);
121
122 // Default implementation: not supported, trigger assertion
124
125 return VSF_ERR_NOT_SUPPORT;
126}
127#endif
128
129#if VSF_I2C_CFG_REIMPLEMENT_API_IRQ_CLEAR == DISABLED
130vsf_i2c_irq_mask_t vsf_real_i2c_irq_clear(vsf_real_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask)
131{
132 VSF_HAL_ASSERT(NULL != i2c_ptr);
133
134 // Default implementation: not supported, trigger assertion
136
137 return 0;
138}
139#endif
140
141/*============================ MACROS ========================================*/
142
143#undef VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY
144#undef VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION
145#undef VSF_I2C_CFG_REIMPLEMENT_API_IRQ_CLEAR
146#undef VSF_I2C_CFG_CAPABILITY_IRQ_MASK
147#undef VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_START
148#undef VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_STOP_RESTART
149#undef VSF_I2C_CFG_CAPABILITY_SUPPORT_RESTART
150#undef VSF_I2C_CFG_CAPABILITY_MAX_TRANSFER_SIZE
151#undef VSF_I2C_CFG_CAPABILITY_MIN_TRANSFER_SIZE
152
153#undef vsf_real_i2c_t
154#undef vsf_real_i2c_capability
155#undef vsf_real_i2c_ctrl
156#undef vsf_real_i2c_get_configuration
157#undef vsf_real_i2c_irq_clear
158
159/*============================ MACROS ========================================*/
160
161#ifdef VSF_I2C_CFG_IMP_REMAP_PREFIX
162# define vsf_imp_i2c_t VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_t)
163# define vsf_imp_i2c_init VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_init)
164# define vsf_imp_i2c_fini VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_fini)
165# define vsf_imp_i2c_enable VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_enable)
166# define vsf_imp_i2c_disable VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_disable)
167# define vsf_imp_i2c_irq_enable VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_irq_enable)
168# define vsf_imp_i2c_irq_disable VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_irq_disable)
169# define vsf_imp_i2c_status VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_status)
170# define vsf_imp_i2c_capability VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_capability)
171# define vsf_imp_i2c_master_fifo_transfer VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_master_fifo_transfer)
172# define vsf_imp_i2c_master_request VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_master_request)
173# define vsf_imp_i2c_get_transferred_count VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_get_transferred_count)
174# define vsf_imp_i2c_ctrl VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_ctrl)
175# define vsf_imp_i2c_get_configuration VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_get_configuration)
176# define vsf_imp_i2c_irq_clear VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_irq_clear)
177
178# define vsf_remap_i2c_t VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_t)
179# define vsf_remap_i2c_init VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_init)
180# define vsf_remap_i2c_fini VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_fini)
181# define vsf_remap_i2c_enable VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_enable)
182# define vsf_remap_i2c_disable VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_disable)
183# define vsf_remap_i2c_irq_enable VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_irq_enable)
184# define vsf_remap_i2c_irq_disable VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_irq_disable)
185# define vsf_remap_i2c_status VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_status)
186# define vsf_remap_i2c_capability VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_capability)
187# define vsf_remap_i2c_master_fifo_transfer VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_master_fifo_transfer)
188# define vsf_remap_i2c_master_request VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_master_request)
189# define vsf_remap_i2c_get_transferred_count VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_get_transferred_count)
190# define vsf_remap_i2c_ctrl VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_ctrl)
191# define vsf_remap_i2c_get_configuration VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_get_configuration)
192# define vsf_remap_i2c_irq_clear VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_irq_clear)
193
194# define VSF_I2C_CFG_IMP_REMAP_FUNCTIONS \
195 vsf_err_t vsf_imp_i2c_init(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_cfg_t *cfg_ptr) \
196 { \
197 VSF_HAL_ASSERT(i2c_ptr != NULL); \
198 return vsf_remap_i2c_init(i2c_ptr, cfg_ptr); \
199 } \
200 void vsf_imp_i2c_fini(vsf_imp_i2c_t *i2c_ptr) \
201 { \
202 VSF_HAL_ASSERT(i2c_ptr != NULL); \
203 vsf_remap_i2c_fini(i2c_ptr); \
204 } \
205 fsm_rt_t vsf_imp_i2c_enable(vsf_imp_i2c_t *i2c_ptr) \
206 { \
207 VSF_HAL_ASSERT(i2c_ptr != NULL); \
208 return vsf_remap_i2c_enable(i2c_ptr); \
209 } \
210 fsm_rt_t vsf_imp_i2c_disable(vsf_imp_i2c_t *i2c_ptr) \
211 { \
212 VSF_HAL_ASSERT(i2c_ptr != NULL); \
213 return vsf_remap_i2c_disable(i2c_ptr); \
214 } \
215 void vsf_imp_i2c_irq_enable(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask) \
216 { \
217 VSF_HAL_ASSERT(i2c_ptr != NULL); \
218 vsf_remap_i2c_irq_enable(i2c_ptr, irq_mask); \
219 } \
220 void vsf_imp_i2c_irq_disable(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask) \
221 { \
222 VSF_HAL_ASSERT(i2c_ptr != NULL); \
223 vsf_remap_i2c_irq_disable(i2c_ptr, irq_mask); \
224 } \
225 vsf_i2c_status_t vsf_imp_i2c_status(vsf_imp_i2c_t *i2c_ptr) \
226 { \
227 VSF_HAL_ASSERT(i2c_ptr != NULL); \
228 return vsf_remap_i2c_status(i2c_ptr); \
229 } \
230 vsf_i2c_capability_t vsf_imp_i2c_capability(vsf_imp_i2c_t *i2c_ptr) \
231 { \
232 VSF_HAL_ASSERT(i2c_ptr != NULL); \
233 return vsf_remap_i2c_capability(i2c_ptr); \
234 } \
235 fsm_rt_t vsf_imp_i2c_master_fifo_transfer(vsf_imp_i2c_t *i2c_ptr, \
236 uint16_t address, \
237 vsf_i2c_cmd_t cmd, \
238 uint_fast16_t count, \
239 uint8_t *buffer_ptr, \
240 vsf_i2c_cmd_t *cur_cmd_ptr, \
241 uint_fast16_t *offset_ptr) \
242 { \
243 VSF_HAL_ASSERT(i2c_ptr != NULL); \
244 return vsf_remap_i2c_master_fifo_transfer(i2c_ptr, address, cmd, count, buffer_ptr, \
245 cur_cmd_ptr, offset_ptr); \
246 } \
247 vsf_err_t vsf_imp_i2c_master_request(vsf_imp_i2c_t *i2c_ptr, \
248 uint16_t address, \
249 vsf_imp_i2c_cmd_t cmd, \
250 uint16_t count, \
251 uint8_t *buffer_ptr) \
252 { \
253 VSF_HAL_ASSERT(i2c_ptr != NULL); \
254 return vsf_remap_i2c_master_request(i2c_ptr, address, cmd, count, buffer_ptr); \
255 } \
256 uint_fast32_t vsf_imp_i2c_get_transferred_count(vsf_imp_i2c_t *i2c_ptr) \
257 { \
258 VSF_HAL_ASSERT(i2c_ptr != NULL); \
259 VSF_HAL_ASSERT(vsf_remap_i2c_get_transferred_count!= NULL); \
260 return vsf_remap_i2c_get_transferred_count(i2c_ptr); \
261 } \
262 vsf_err_t vsf_imp_i2c_ctrl(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_ctrl_t ctrl, void *param) \
263 { \
264 VSF_HAL_ASSERT(i2c_ptr != NULL); \
265 return vsf_remap_i2c_ctrl(i2c_ptr, ctrl, param); \
266 } \
267 vsf_err_t vsf_imp_i2c_get_configuration(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_cfg_t *cfg_ptr) \
268 { \
269 VSF_HAL_ASSERT(i2c_ptr != NULL); \
270 return vsf_remap_i2c_get_configuration(i2c_ptr, cfg_ptr); \
271 } \
272 vsf_i2c_irq_mask_t vsf_imp_i2c_irq_clear(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask) \
273 { \
274 VSF_HAL_ASSERT(i2c_ptr != NULL); \
275 return vsf_remap_i2c_irq_clear(i2c_ptr, irq_mask); \
276 }
277#endif
278
279/*============================ GLOBAL VARIABLES ==============================*/
280
281#define VSF_HAL_TEMPLATE_IMP_NAME _i2c
282#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _I2C
283
284#if !defined(VSF_I2C_CFG_IMP_PREFIX) && !defined(VSF_I2C_CFG_IMP_DEVICE_PREFIX)
285# error "Please define VSF_I2C_CFG_IMP_PREFIX in i2c driver"
286#endif
287
288#if !defined(VSF_I2C_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_I2C_CFG_IMP_DEVICE_UPCASE_PREFIX)
289# error "Please define VSF_I2C_CFG_IMP_UPCASE_PREFIX in i2c driver"
290#endif
291
292#ifndef VSF_I2C_CFG_IMP_COUNT_MASK_PREFIX
293# define VSF_I2C_CFG_IMP_COUNT_MASK_PREFIX VSF_I2C_CFG_IMP_UPCASE_PREFIX
294#endif
295
296#ifdef VSF_I2C_CFG_IMP_REMAP_FUNCTIONS
297# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_I2C_CFG_IMP_REMAP_FUNCTIONS
298#endif
299
301
302#undef VSF_I2C_CFG_IMP_PREFIX
303#undef VSF_I2C_CFG_IMP_COUNT_MASK_PREFIX
304#undef VSF_I2C_CFG_IMP_UPCASE_PREFIX
305#undef VSF_I2C_CFG_IMP_DEVICE_PREFIX
306#undef VSF_I2C_CFG_IMP_DEVICE_UPCASE_PREFIX
307#undef VSF_I2C_CFG_IMP_LV0
308#undef VSF_I2C_CFG_IMP_REMAP_FUNCTIONS
309#undef VSF_I2C_CFG_IMP_HAS_OP
310#undef VSF_I2C_CFG_IMP_EXTERN_OP
311
312#undef vsf_imp_i2c_t
313#undef vsf_imp_i2c_init
314#undef vsf_imp_i2c_fini
315#undef vsf_imp_i2c_enable
316#undef vsf_imp_i2c_disable
317#undef vsf_imp_i2c_irq_enable
318#undef vsf_imp_i2c_irq_disable
319#undef vsf_imp_i2c_status
320#undef vsf_imp_i2c_capability
321#undef vsf_imp_i2c_master_request
322#undef vsf_imp_i2c_get_transferred_count
323#undef vsf_imp_i2c_ctrl
324#undef vsf_imp_i2c_get_configuration
325#undef vsf_imp_i2c_irq_clear
326
327#undef vsf_remap_i2c_t
328#undef vsf_remap_i2c_init
329#undef vsf_remap_i2c_fini
330#undef vsf_remap_i2c_enable
331#undef vsf_remap_i2c_disable
332#undef vsf_remap_i2c_irq_enable
333#undef vsf_remap_i2c_irq_disable
334#undef vsf_remap_i2c_status
335#undef vsf_remap_i2c_capability
336#undef vsf_remap_i2c_master_request
337#undef vsf_remap_i2c_get_transferred_count
338#undef vsf_remap_i2c_ctrl
339#undef vsf_remap_i2c_get_configuration
340#undef vsf_remap_i2c_irq_clear
341
342#endif /* VSF_HAL_USE_I2C */
vsf_err_t
Definition __type.h:42
@ VSF_ERR_NOT_SUPPORT
function not supported
Definition __type.h:46
#define VSF_I2C_CFG_CAPABILITY_MAX_TRANSFER_SIZE
Definition i2c.c:40
vsf_i2c_cmd_t
Definition i2c.h:32
vsf_err_t vsf_i2c_request_master_request(vsf_i2c_t *i2c_ptr, vsf_i2c_request_t *i2c_request_ptr, uint16_t address, vsf_i2c_cmd_t cmd, uint16_t count, uint8_t *buffer_ptr)
Definition i2c_request.c:87
#define NULL
Definition lvgl.h:26
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint8_t
Definition stdint.h:5
Predefined I2C capability structure that can be reimplemented in specific HAL drivers.
Definition vsf_template_i2c.h:771
uint8_t support_no_start
Definition vsf_template_i2c.h:781
I2C configuration.
Definition vsf_template_i2c.h:875
#define VSF_HAL_ASSERT(__CON)
all hal modules use this configuration file
Definition vsf_hal_cfg.h:36
vsf_i2c_ctrl_t
I2C control commands for hardware-specific operations.
Definition vsf_template_i2c.h:903
vsf_i2c_irq_mask_t
Predefined VSF I2C interrupt masks that can be reimplemented in specific HAL drivers....
Definition vsf_template_i2c.h:539
Generated from commit: vsfteam/vsf@3f091ef