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