LibDriver EM4095
Loading...
Searching...
No Matches
driver_em4095_basic.c
Go to the documentation of this file.
1
36
37#include "driver_em4095_basic.h"
38
39static em4095_handle_t gs_handle;
40static volatile uint8_t gs_flag;
41static void (*gs_callback)(em4095_mode_t mode, em4095_decode_t *buf, uint16_t len) = NULL;
42
50static void a_receive_callback(em4095_mode_t mode, em4095_decode_t *buf, uint16_t len)
51{
52 switch (mode)
53 {
54 case EM4095_MODE_READ :
55 {
56 gs_flag = 1;
57 if (gs_callback != NULL)
58 {
59 gs_callback(mode, buf, len);
60 }
61
62 break;
63 }
65 {
66 gs_flag = 1;
67 if (gs_callback != NULL)
68 {
69 gs_callback(mode, buf, len);
70 }
71
72 break;
73 }
74 default :
75 {
76 em4095_interface_debug_print("em4095: irq unknown mode.\n");
77
78 break;
79 }
80 }
81}
82
91{
92 if (em4095_irq_handler(&gs_handle) != 0)
93 {
94 return 1;
95 }
96
97 return 0;
98}
99
108uint8_t em4095_basic_init(void (*callback)(em4095_mode_t mode, em4095_decode_t *buf, uint16_t len))
109{
110 uint8_t res;
111
112 /* link interface function */
126 DRIVER_EM4095_LINK_RECEIVE_CALLBACK(&gs_handle, a_receive_callback);
127 gs_callback = callback;
128
129 /* init */
130 res = em4095_init(&gs_handle);
131 if (res != 0)
132 {
133 em4095_interface_debug_print("em4095: init failed.\n");
134
135 return 1;
136 }
137
138 /* set default div */
139 res = em4095_set_div(&gs_handle, EM4095_BASIC_DEFAULT_DIV);
140 if (res != 0)
141 {
142 em4095_interface_debug_print("em4095: set div failed.\n");
143 (void)em4095_deinit(&gs_handle);
144
145 return 1;
146 }
147
148 /* power down */
149 res = em4095_power_down(&gs_handle);
150 if (res != 0)
151 {
152 em4095_interface_debug_print("em4095: power down failed.\n");
153 (void)em4095_deinit(&gs_handle);
154
155 return 1;
156 }
157
158 return 0;
159}
160
169uint8_t em4095_basic_set_div(uint32_t clock_div)
170{
171 uint8_t res;
172
173 /* set div */
174 res = em4095_set_div(&gs_handle, clock_div);
175 if (res != 0)
176 {
177 return 1;
178 }
179
180 return 0;
181}
182
192uint8_t em4095_basic_read(uint8_t *buf, uint16_t len)
193{
194 uint8_t res;
195 uint16_t l;
196 uint32_t timeout;
197
198 /* init 0 */
199 gs_flag = 0;
200
201 /* read */
202 res = em4095_read(&gs_handle, len);
203 if (res != 0)
204 {
205 return 1;
206 }
207
208 /* power on */
209 res = em4095_power_on(&gs_handle);
210 if (res != 0)
211 {
212 return 1;
213 }
214
215 /* set timeout 5s */
216 timeout = 500;
217
218 /* check timeout */
219 while (timeout != 0)
220 {
221 /* check the flag */
222 if (gs_flag != 0)
223 {
224 break;
225 }
226
227 /* timeout -- */
228 timeout--;
229
230 /* delay 10ms */
232 }
233
234 /* check the timeout */
235 if (timeout == 0)
236 {
237 return 1;
238 }
239
240 /* copy to buffer */
241 res = em4095_copy_decode_buffer(&gs_handle, buf, &l);
242 if (res != 0)
243 {
244 return 1;
245 }
246
247 /* check length */
248 if (l != len)
249 {
250 return 1;
251 }
252
253 return 0;
254}
255
265uint8_t em4095_basic_write(uint8_t *buf, uint16_t len)
266{
267 uint8_t res;
268 uint32_t timeout;
269
270 /* init 0 */
271 gs_flag = 0;
272
273 /* write */
274 res = em4095_write(&gs_handle, buf, len);
275 if (res != 0)
276 {
277 return 1;
278 }
279
280 /* power on */
281 res = em4095_power_on(&gs_handle);
282 if (res != 0)
283 {
284 return 1;
285 }
286
287 /* set timeout 5s */
288 timeout = 500;
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 return 1;
310 }
311
312 return 0;
313}
314
323{
324 if (em4095_deinit(&gs_handle) != 0)
325 {
326 return 1;
327 }
328 gs_callback = NULL;
329
330 return 0;
331}
driver em4095 basic 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
uint8_t em4095_copy_decode_buffer(em4095_handle_t *handle, uint8_t *buf, uint16_t *len)
copy decode buffer
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_power_down(em4095_handle_t *handle)
power down
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
@ EM4095_MODE_WRITE
@ EM4095_MODE_READ
uint8_t em4095_basic_irq_handler(void)
basic irq
uint8_t em4095_basic_write(uint8_t *buf, uint16_t len)
basic example write
#define EM4095_BASIC_DEFAULT_DIV
em4095 basic example default definition
uint8_t em4095_basic_init(void(*callback)(em4095_mode_t mode, em4095_decode_t *buf, uint16_t len))
basic example init
uint8_t em4095_basic_deinit(void)
basic example deinit
uint8_t em4095_basic_set_div(uint32_t clock_div)
basic example set clock div
uint8_t em4095_basic_read(uint8_t *buf, uint16_t len)
basic example 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