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#ifdef VSF_I2C_CFG_IMP_REMAP_PREFIX
38# undef VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY
39# undef VSF_I2C_CFG_REIMPLEMENT_API_CTRL
40# undef VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION
41# define VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY ENABLED
42# define VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION ENABLED
43# define VSF_I2C_CFG_REIMPLEMENT_API_CTRL ENABLED
44#endif
45
46#if VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
47# ifndef VSF_I2C_CFG_CAPABILITY_IRQ_MASK
48# define VSF_I2C_CFG_CAPABILITY_IRQ_MASK VSF_I2C_IRQ_ALL_BITS_MASK
49# endif
50# ifndef VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_START
51# define VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_START 1
52# endif
53# ifndef VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_STOP_RESTART
54# define VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_STOP_RESTART 1
55# endif
56# ifndef VSF_I2C_CFG_CAPABILITY_SUPPORT_RESTART
57# define VSF_I2C_CFG_CAPABILITY_SUPPORT_RESTART 1
58# endif
59# ifndef VSF_I2C_CFG_CAPABILITY_MAX_TRANSFER_SIZE
60# define VSF_I2C_CFG_CAPABILITY_MAX_TRANSFER_SIZE 0xFFFF
61# endif
62# ifndef VSF_I2C_CFG_CAPABILITY_MIN_TRANSFER_SIZE
63# define VSF_I2C_CFG_CAPABILITY_MIN_TRANSFER_SIZE 0
64# endif
65#endif
66
67#define vsf_real_i2c_t VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_t)
68#define vsf_real_master_request VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_master_request)
69#define vsf_real_i2c_capability VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_capability)
70#define vsf_real_i2c_ctrl VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_ctrl)
71#define vsf_real_i2c_get_configuration VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_get_configuration)
72
73/*============================ MACROFIED FUNCTIONS ===========================*/
74/*============================ LOCAL VARIABLES ===============================*/
75/*============================ IMPLEMENTATION ================================*/
76
77#if VSF_I2C_CFG_REQUEST_TEMPLATE == ENABLED
78vsf_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)
79{
80 vsf_real_i2c_t * i2c_type_ptr = (vsf_real_i2c_t *)i2c_ptr;
81 return vsf_i2c_request_master_request(i2c_ptr, &i2c_type_ptr->request, address, cmd, count, buffer_ptr);
82}
83#endif
84
85#if VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY == DISABLED
86vsf_i2c_capability_t vsf_real_i2c_capability(vsf_real_i2c_t *i2c_ptr)
87{
88 vsf_i2c_capability_t i2c_capability = {
89 .irq_mask = VSF_I2C_CFG_CAPABILITY_IRQ_MASK,
90 .support_no_start = VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_START,
91 .support_no_stop_restart = VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_STOP_RESTART,
92 .support_restart = VSF_I2C_CFG_CAPABILITY_SUPPORT_RESTART,
94 .min_transfer_size = VSF_I2C_CFG_CAPABILITY_MIN_TRANSFER_SIZE,
95 };
96
97 return i2c_capability;
98}
99#endif
100
101#if VSF_I2C_CFG_REIMPLEMENT_API_CTRL == DISABLED
102vsf_err_t vsf_real_i2c_ctrl(vsf_real_i2c_t *i2c_ptr, vsf_i2c_ctrl_t ctrl, void *param)
103{
104 VSF_HAL_ASSERT(NULL != i2c_ptr);
105 return VSF_ERR_NOT_SUPPORT;
106}
107#endif
108
109#if VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION == DISABLED
110vsf_err_t vsf_real_i2c_get_configuration(vsf_real_i2c_t *i2c_ptr, vsf_i2c_cfg_t *cfg_ptr)
111{
112 VSF_HAL_ASSERT(NULL != i2c_ptr);
113 VSF_HAL_ASSERT(NULL != cfg_ptr);
114
115 // Default implementation: not supported, trigger assertion
117
118 return VSF_ERR_NOT_SUPPORT;
119}
120#endif
121
122/*============================ MACROS ========================================*/
123
124#undef VSF_I2C_CFG_REIMPLEMENT_API_CAPABILITY
125#undef VSF_I2C_CFG_REIMPLEMENT_API_GET_CONFIGURATION
126#undef VSF_I2C_CFG_CAPABILITY_IRQ_MASK
127#undef VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_START
128#undef VSF_I2C_CFG_CAPABILITY_SUPPORT_NO_STOP_RESTART
129#undef VSF_I2C_CFG_CAPABILITY_SUPPORT_RESTART
130#undef VSF_I2C_CFG_CAPABILITY_MAX_TRANSFER_SIZE
131#undef VSF_I2C_CFG_CAPABILITY_MIN_TRANSFER_SIZE
132
133#undef vsf_real_i2c_t
134#undef vsf_real_i2c_capability
135#undef vsf_real_i2c_ctrl
136#undef vsf_real_i2c_get_configuration
137
138/*============================ MACROS ========================================*/
139
140#ifdef VSF_I2C_CFG_IMP_REMAP_PREFIX
141# define vsf_imp_i2c_t VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_t)
142# define vsf_imp_i2c_init VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_init)
143# define vsf_imp_i2c_fini VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_fini)
144# define vsf_imp_i2c_enable VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_enable)
145# define vsf_imp_i2c_disable VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_disable)
146# define vsf_imp_i2c_irq_enable VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_irq_enable)
147# define vsf_imp_i2c_irq_disable VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_irq_disable)
148# define vsf_imp_i2c_status VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_status)
149# define vsf_imp_i2c_capability VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_capability)
150# define vsf_imp_i2c_master_fifo_transfer VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_master_fifo_transfer)
151# define vsf_imp_i2c_master_request VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_master_request)
152# define vsf_imp_i2c_get_transferred_count VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_get_transferred_count)
153# define vsf_imp_i2c_ctrl VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_ctrl)
154# define vsf_imp_i2c_get_configuration VSF_MCONNECT(VSF_I2C_CFG_IMP_PREFIX, _i2c_get_configuration)
155
156# define vsf_remap_i2c_t VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_t)
157# define vsf_remap_i2c_init VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_init)
158# define vsf_remap_i2c_fini VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_fini)
159# define vsf_remap_i2c_enable VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_enable)
160# define vsf_remap_i2c_disable VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_disable)
161# define vsf_remap_i2c_irq_enable VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_irq_enable)
162# define vsf_remap_i2c_irq_disable VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_irq_disable)
163# define vsf_remap_i2c_status VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_status)
164# define vsf_remap_i2c_capability VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_capability)
165# define vsf_remap_i2c_master_fifo_transfer VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_master_fifo_transfer)
166# define vsf_remap_i2c_master_request VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_master_request)
167# define vsf_remap_i2c_get_transferred_count VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_get_transferred_count)
168# define vsf_remap_i2c_ctrl VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_ctrl)
169# define vsf_remap_i2c_get_configuration VSF_MCONNECT(VSF_I2C_CFG_IMP_REMAP_PREFIX, _i2c_get_configuration)
170
171# define VSF_I2C_CFG_IMP_REMAP_FUNCTIONS \
172 vsf_err_t vsf_imp_i2c_init(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_cfg_t *cfg_ptr) \
173 { \
174 VSF_HAL_ASSERT(i2c_ptr != NULL); \
175 return vsf_remap_i2c_init(i2c_ptr, cfg_ptr); \
176 } \
177 void vsf_imp_i2c_fini(vsf_imp_i2c_t *i2c_ptr) \
178 { \
179 VSF_HAL_ASSERT(i2c_ptr != NULL); \
180 vsf_remap_i2c_fini(i2c_ptr); \
181 } \
182 fsm_rt_t vsf_imp_i2c_enable(vsf_imp_i2c_t *i2c_ptr) \
183 { \
184 VSF_HAL_ASSERT(i2c_ptr != NULL); \
185 return vsf_remap_i2c_enable(i2c_ptr); \
186 } \
187 fsm_rt_t vsf_imp_i2c_disable(vsf_imp_i2c_t *i2c_ptr) \
188 { \
189 VSF_HAL_ASSERT(i2c_ptr != NULL); \
190 return vsf_remap_i2c_disable(i2c_ptr); \
191 } \
192 void vsf_imp_i2c_irq_enable(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask) \
193 { \
194 VSF_HAL_ASSERT(i2c_ptr != NULL); \
195 vsf_remap_i2c_irq_enable(i2c_ptr, irq_mask); \
196 } \
197 void vsf_imp_i2c_irq_disable(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_irq_mask_t irq_mask) \
198 { \
199 VSF_HAL_ASSERT(i2c_ptr != NULL); \
200 vsf_remap_i2c_irq_disable(i2c_ptr, irq_mask); \
201 } \
202 vsf_i2c_status_t vsf_imp_i2c_status(vsf_imp_i2c_t *i2c_ptr) \
203 { \
204 VSF_HAL_ASSERT(i2c_ptr != NULL); \
205 return vsf_remap_i2c_status(i2c_ptr); \
206 } \
207 vsf_i2c_capability_t vsf_imp_i2c_capability(vsf_imp_i2c_t *i2c_ptr) \
208 { \
209 VSF_HAL_ASSERT(i2c_ptr != NULL); \
210 return vsf_remap_i2c_capability(i2c_ptr); \
211 } \
212 fsm_rt_t vsf_imp_i2c_master_fifo_transfer(vsf_imp_i2c_t *i2c_ptr, \
213 uint16_t address, \
214 vsf_i2c_cmd_t cmd, \
215 uint_fast16_t count, \
216 uint8_t *buffer_ptr, \
217 vsf_i2c_cmd_t *cur_cmd_ptr, \
218 uint_fast16_t *offset_ptr) \
219 { \
220 VSF_HAL_ASSERT(i2c_ptr != NULL); \
221 return vsf_remap_i2c_master_fifo_transfer(i2c_ptr, address, cmd, count, buffer_ptr, \
222 cur_cmd_ptr, offset_ptr); \
223 } \
224 vsf_err_t vsf_imp_i2c_master_request(vsf_imp_i2c_t *i2c_ptr, \
225 uint16_t address, \
226 vsf_imp_i2c_cmd_t cmd, \
227 uint16_t count, \
228 uint8_t *buffer_ptr) \
229 { \
230 VSF_HAL_ASSERT(i2c_ptr != NULL); \
231 return vsf_remap_i2c_master_request(i2c_ptr, address, cmd, count, buffer_ptr); \
232 } \
233 uint_fast32_t vsf_imp_i2c_get_transferred_count(vsf_imp_i2c_t *i2c_ptr) \
234 { \
235 VSF_HAL_ASSERT(i2c_ptr != NULL); \
236 VSF_HAL_ASSERT(vsf_remap_i2c_get_transferred_count!= NULL); \
237 return vsf_remap_i2c_get_transferred_count(i2c_ptr); \
238 } \
239 vsf_err_t vsf_imp_i2c_ctrl(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_ctrl_t ctrl, void *param) \
240 { \
241 VSF_HAL_ASSERT(i2c_ptr != NULL); \
242 return vsf_remap_i2c_ctrl(i2c_ptr, ctrl, param); \
243 } \
244 vsf_err_t vsf_imp_i2c_get_configuration(vsf_imp_i2c_t *i2c_ptr, vsf_i2c_cfg_t *cfg_ptr) \
245 { \
246 VSF_HAL_ASSERT(i2c_ptr != NULL); \
247 return vsf_remap_i2c_get_configuration(i2c_ptr, cfg_ptr); \
248 }
249#endif
250
251/*============================ GLOBAL VARIABLES ==============================*/
252
253#define VSF_HAL_TEMPLATE_IMP_NAME _i2c
254#define VSF_HAL_TEMPLATE_IMP_UPCASE_NAME _I2C
255
256#if !defined(VSF_I2C_CFG_IMP_PREFIX) && !defined(VSF_I2C_CFG_IMP_DEVICE_PREFIX)
257# error "Please define VSF_I2C_CFG_IMP_PREFIX in i2c driver"
258#endif
259
260#if !defined(VSF_I2C_CFG_IMP_UPCASE_PREFIX) && !defined(VSF_I2C_CFG_IMP_DEVICE_UPCASE_PREFIX)
261# error "Please define VSF_I2C_CFG_IMP_UPCASE_PREFIX in i2c driver"
262#endif
263
264#ifndef VSF_I2C_CFG_IMP_COUNT_MASK_PREFIX
265# define VSF_I2C_CFG_IMP_COUNT_MASK_PREFIX VSF_I2C_CFG_IMP_UPCASE_PREFIX
266#endif
267
268#ifdef VSF_I2C_CFG_IMP_REMAP_FUNCTIONS
269# define VSF_HAL_CFG_IMP_REMAP_FUNCTIONS VSF_I2C_CFG_IMP_REMAP_FUNCTIONS
270#endif
271
273
274#undef VSF_I2C_CFG_IMP_PREFIX
275#undef VSF_I2C_CFG_IMP_COUNT_MASK_PREFIX
276#undef VSF_I2C_CFG_IMP_UPCASE_PREFIX
277#undef VSF_I2C_CFG_IMP_DEVICE_PREFIX
278#undef VSF_I2C_CFG_IMP_DEVICE_UPCASE_PREFIX
279#undef VSF_I2C_CFG_IMP_LV0
280#undef VSF_I2C_CFG_IMP_REMAP_FUNCTIONS
281#undef VSF_I2C_CFG_IMP_HAS_OP
282#undef VSF_I2C_CFG_IMP_EXTERN_OP
283
284#undef vsf_imp_i2c_t
285#undef vsf_imp_i2c_init
286#undef vsf_imp_i2c_fini
287#undef vsf_imp_i2c_enable
288#undef vsf_imp_i2c_disable
289#undef vsf_imp_i2c_irq_enable
290#undef vsf_imp_i2c_irq_disable
291#undef vsf_imp_i2c_status
292#undef vsf_imp_i2c_capability
293#undef vsf_imp_i2c_master_request
294#undef vsf_imp_i2c_get_transferred_count
295#undef vsf_imp_i2c_ctrl
296#undef vsf_imp_i2c_get_configuration
297
298#undef vsf_remap_i2c_t
299#undef vsf_remap_i2c_init
300#undef vsf_remap_i2c_fini
301#undef vsf_remap_i2c_enable
302#undef vsf_remap_i2c_disable
303#undef vsf_remap_i2c_irq_enable
304#undef vsf_remap_i2c_irq_disable
305#undef vsf_remap_i2c_status
306#undef vsf_remap_i2c_capability
307#undef vsf_remap_i2c_master_request
308#undef vsf_remap_i2c_get_transferred_count
309#undef vsf_remap_i2c_ctrl
310#undef vsf_remap_i2c_get_configuration
311
312#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
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:778
uint8_t support_no_start
Definition vsf_template_i2c.h:788
I2C configuration.
Definition vsf_template_i2c.h:882
#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:910
Generated from commit: vsfteam/vsf@74aa6ce