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