LibDriver EM4095
Loading...
Searching...
No Matches
driver_em4095_read_write_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static em4095_handle_t gs_handle;
41static volatile uint8_t gs_flag;
42
51{
52 if (em4095_irq_handler(&gs_handle) != 0)
53 {
54 return 1;
55 }
56
57 return 0;
58}
59
67static void a_receive_callback(em4095_mode_t mode, em4095_decode_t *buf, uint16_t len)
68{
69 uint16_t i;
70
71 switch (mode)
72 {
73 case EM4095_MODE_READ :
74 {
75 em4095_interface_debug_print("em4095: irq read done.\n");
76 em4095_interface_debug_print("raw data: ");
77 for (i = 0; i < len; i++)
78 {
79 em4095_interface_debug_print("0x%02X ", buf[i].level);
80 }
82 gs_flag = 1;
83
84 break;
85 }
87 {
88 em4095_interface_debug_print("em4095: irq write done.\n");
89 em4095_interface_debug_print("raw data: ");
90 for (i = 0; i < len; i++)
91 {
92 em4095_interface_debug_print("0x%02X ", buf[i].level);
93 }
95 gs_flag = 1;
96
97 break;
98 }
99 default :
100 {
101 em4095_interface_debug_print("em4095: irq unknown mode.\n");
102
103 break;
104 }
105 }
106}
107
116uint8_t em4095_read_write_test(uint32_t times)
117{
118 uint8_t res;
119 uint16_t timeout;
120 uint32_t i;
121 uint32_t j;
122 uint8_t buf[32];
123 em4095_info_t info;
124
125 /* link interface function */
139 DRIVER_EM4095_LINK_RECEIVE_CALLBACK(&gs_handle, a_receive_callback);
140
141 /* get information */
142 res = em4095_info(&info);
143 if (res != 0)
144 {
145 em4095_interface_debug_print("em4095: get info failed.\n");
146
147 return 1;
148 }
149 else
150 {
151 /* print chip info */
152 em4095_interface_debug_print("em4095: chip is %s.\n", info.chip_name);
153 em4095_interface_debug_print("em4095: manufacturer is %s.\n", info.manufacturer_name);
154 em4095_interface_debug_print("em4095: interface is %s.\n", info.interface);
155 em4095_interface_debug_print("em4095: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
156 em4095_interface_debug_print("em4095: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
157 em4095_interface_debug_print("em4095: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
158 em4095_interface_debug_print("em4095: max current is %0.2fmA.\n", info.max_current_ma);
159 em4095_interface_debug_print("em4095: max temperature is %0.1fC.\n", info.temperature_max);
160 em4095_interface_debug_print("em4095: min temperature is %0.1fC.\n", info.temperature_min);
161 }
162
163 /* init */
164 res = em4095_init(&gs_handle);
165 if (res != 0)
166 {
167 em4095_interface_debug_print("em4095: init failed.\n");
168
169 return 1;
170 }
171
172 /* start read write test */
173 em4095_interface_debug_print("em4095: start read write test.\n");
174
175 /* set div */
176 res = em4095_set_div(&gs_handle, 64);
177 if (res != 0)
178 {
179 em4095_interface_debug_print("em4095: set div failed.\n");
180 (void)em4095_deinit(&gs_handle);
181
182 return 1;
183 }
184
185 /* read test */
186 em4095_interface_debug_print("em4095: read test.\n");
187
188 /* loop */
189 for (i = 0; i < times; i++)
190 {
191 /* 5s timeout */
192 timeout = 500;
193
194 /* init 0 */
195 gs_flag = 0;
196
197 /* read 128 bits */
198 res = em4095_read(&gs_handle, 128);
199 if (res != 0)
200 {
201 em4095_interface_debug_print("em4095: read failed.\n");
202 (void)em4095_deinit(&gs_handle);
203
204 return 1;
205 }
206
207 /* power on */
208 res = em4095_power_on(&gs_handle);
209 if (res != 0)
210 {
211 em4095_interface_debug_print("em4095: power on failed.\n");
212 (void)em4095_deinit(&gs_handle);
213
214 return 1;
215 }
216
217 /* check timeout */
218 while (timeout != 0)
219 {
220 /* check the flag */
221 if (gs_flag != 0)
222 {
223 break;
224 }
225
226 /* timeout -- */
227 timeout--;
228
229 /* delay 10ms */
231 }
232
233 /* check the timeout */
234 if (timeout == 0)
235 {
236 /* receive timeout */
237 em4095_interface_debug_print("em4095: read timeout.\n");
238 (void)em4095_deinit(&gs_handle);
239
240 return 1;
241 }
242 }
243
244 /* write test */
245 em4095_interface_debug_print("em4095: write test.\n");
246
247 /* loop */
248 for (i = 0; i < times; i++)
249 {
250
251 /* output */
252 em4095_interface_debug_print("write buffer: ");
253
254 /* make buffer */
255 for (j = 0; j < 32; j++)
256 {
257 buf[j] = rand() % 2;
258 em4095_interface_debug_print("0x%02X ", buf[j]);
259 }
260
261 /* output */
263
264 /* 5s timeout */
265 timeout = 500;
266
267 /* init 0 */
268 gs_flag = 0;
269
270 /* write 32 bits */
271 res = em4095_write(&gs_handle, buf, 32);
272 if (res != 0)
273 {
274 em4095_interface_debug_print("em4095: write failed.\n");
275 (void)em4095_deinit(&gs_handle);
276
277 return 1;
278 }
279
280 /* power on */
281 res = em4095_power_on(&gs_handle);
282 if (res != 0)
283 {
284 em4095_interface_debug_print("em4095: power on failed.\n");
285 (void)em4095_deinit(&gs_handle);
286
287 return 1;
288 }
289
290 /* check timeout */
291 while (timeout != 0)
292 {
293 /* check the flag */
294 if (gs_flag != 0)
295 {
296 break;
297 }
298
299 /* timeout -- */
300 timeout--;
301
302 /* delay 10ms */
304 }
305
306 /* check the timeout */
307 if (timeout == 0)
308 {
309 /* receive timeout */
310 em4095_interface_debug_print("em4095: write timeout.\n");
311 (void)em4095_deinit(&gs_handle);
312
313 return 1;
314 }
315 }
316
317 /* finish read write test */
318 em4095_interface_debug_print("em4095: finish read write test.\n");
319 (void)em4095_deinit(&gs_handle);
320
321 return 0;
322}
driver em4095 read write test header file
uint8_t em4095_init(em4095_handle_t *handle)
initialize the chip
struct em4095_handle_s em4095_handle_t
em4095 handle structure definition
uint8_t em4095_irq_handler(em4095_handle_t *handle)
irq handler
struct em4095_decode_s em4095_decode_t
em4095 decode structure definition
uint8_t em4095_write(em4095_handle_t *handle, uint8_t *buf, uint16_t len)
write data
uint8_t em4095_read(em4095_handle_t *handle, uint16_t len)
read data
uint8_t em4095_set_div(em4095_handle_t *handle, uint32_t clock_div)
set irq div
uint8_t em4095_power_on(em4095_handle_t *handle)
power on
em4095_mode_t
em4095 mode enumeration definition
uint8_t em4095_deinit(em4095_handle_t *handle)
close the chip
struct em4095_info_s em4095_info_t
em4095 information structure definition
uint8_t em4095_info(em4095_info_t *info)
get chip's information
@ EM4095_MODE_WRITE
@ EM4095_MODE_READ
uint8_t em4095_interface_mod_gpio_write(uint8_t data)
interface mod gpio write
uint8_t em4095_interface_demod_gpio_deinit(void)
interface demod gpio deinit
uint8_t em4095_interface_shd_gpio_init(void)
interface shd gpio init
uint8_t em4095_interface_demod_gpio_read(uint8_t *data)
interface demod gpio read
uint8_t em4095_interface_timestamp_read(em4095_time_t *t)
interface timestamp read
uint8_t em4095_interface_shd_gpio_write(uint8_t data)
interface shd gpio write
uint8_t em4095_interface_mod_gpio_deinit(void)
interface mod gpio deinit
uint8_t em4095_interface_demod_gpio_init(void)
interface demod gpio init
void em4095_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t em4095_interface_mod_gpio_init(void)
interface mod gpio init
void em4095_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t em4095_interface_shd_gpio_deinit(void)
interface shd gpio deinit
uint8_t em4095_read_write_test(uint32_t times)
read write test
uint8_t em4095_read_write_test_irq_handler(void)
read_write test irq
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]