LibDriver EM4095
Loading...
Searching...
No Matches
driver_em4095.h
Go to the documentation of this file.
1
36
37#ifndef DRIVER_EM4095_H
38#define DRIVER_EM4095_H
39
40#include <stdio.h>
41#include <stdint.h>
42#include <string.h>
43
44#ifdef __cplusplus
45extern "C"{
46#endif
47
53
58
62#ifndef EM4095_MAX_LENGTH
63 #define EM4095_MAX_LENGTH 384
64#endif
65
69typedef enum
70{
75
79typedef struct em4095_time_s
80{
81 uint64_t s;
82 uint32_t us;
84
94
98typedef struct em4095_handle_s
99{
100 uint8_t (*shd_gpio_init)(void);
101 uint8_t (*shd_gpio_deinit)(void);
102 uint8_t (*shd_gpio_write)(uint8_t data);
103 uint8_t (*mod_gpio_init)(void);
104 uint8_t (*mod_gpio_deinit)(void);
105 uint8_t (*mod_gpio_write)(uint8_t data);
106 uint8_t (*demod_gpio_init)(void);
107 uint8_t (*demod_gpio_deinit)(void);
108 uint8_t (*demod_gpio_read)(uint8_t *data);
110 void (*delay_ms)(uint32_t ms);
111 void (*debug_print)(const char *const fmt, ...);
113 em4095_decode_t *buf,
114 uint16_t len);
115 uint8_t inited;
117 uint16_t decode_len;
119 uint8_t mode;
120 uint16_t len;
121 uint32_t div;
122 uint32_t div_len;
123 uint8_t start_flag;
124 uint8_t last_bit;
126
142
146
153
160#define DRIVER_EM4095_LINK_INIT(HANDLE, STRUCTURE) memset(HANDLE, 0, sizeof(STRUCTURE))
161
168#define DRIVER_EM4095_LINK_SHD_GPIO_INIT(HANDLE, FUC) (HANDLE)->shd_gpio_init = FUC
169
176#define DRIVER_EM4095_LINK_SHD_GPIO_DEINIT(HANDLE, FUC) (HANDLE)->shd_gpio_deinit = FUC
177
184#define DRIVER_EM4095_LINK_SHD_GPIO_WRITE(HANDLE, FUC) (HANDLE)->shd_gpio_write = FUC
185
192#define DRIVER_EM4095_LINK_MOD_GPIO_INIT(HANDLE, FUC) (HANDLE)->mod_gpio_init = FUC
193
200#define DRIVER_EM4095_LINK_MOD_GPIO_DEINIT(HANDLE, FUC) (HANDLE)->mod_gpio_deinit = FUC
201
208#define DRIVER_EM4095_LINK_MOD_GPIO_WRITE(HANDLE, FUC) (HANDLE)->mod_gpio_write = FUC
209
216#define DRIVER_EM4095_LINK_DEMOD_GPIO_INIT(HANDLE, FUC) (HANDLE)->demod_gpio_init = FUC
217
224#define DRIVER_EM4095_LINK_DEMOD_GPIO_DEINIT(HANDLE, FUC) (HANDLE)->demod_gpio_deinit = FUC
225
232#define DRIVER_EM4095_LINK_DEMOD_GPIO_READ(HANDLE, FUC) (HANDLE)->demod_gpio_read = FUC
233
240#define DRIVER_EM4095_LINK_TIMESTAMP_READ(HANDLE, FUC) (HANDLE)->timestamp_read = FUC
241
248#define DRIVER_EM4095_LINK_DELAY_MS(HANDLE, FUC) (HANDLE)->delay_ms = FUC
249
256#define DRIVER_EM4095_LINK_DEBUG_PRINT(HANDLE, FUC) (HANDLE)->debug_print = FUC
257
264#define DRIVER_EM4095_LINK_RECEIVE_CALLBACK(HANDLE, FUC) (HANDLE)->receive_callback = FUC
265
269
276
285uint8_t em4095_info(em4095_info_t *info);
286
297uint8_t em4095_irq_handler(em4095_handle_t *handle);
298
309uint8_t em4095_init(em4095_handle_t *handle);
310
321uint8_t em4095_deinit(em4095_handle_t *handle);
322
335uint8_t em4095_read(em4095_handle_t *handle, uint16_t len);
336
350uint8_t em4095_write(em4095_handle_t *handle, uint8_t *buf, uint16_t len);
351
363uint8_t em4095_copy_decode_buffer(em4095_handle_t *handle, uint8_t *buf, uint16_t *len);
364
375uint8_t em4095_power_on(em4095_handle_t *handle);
376
387uint8_t em4095_power_down(em4095_handle_t *handle);
388
400uint8_t em4095_set_div(em4095_handle_t *handle, uint32_t clock_div);
401
412uint8_t em4095_get_div(em4095_handle_t *handle, uint32_t *clock_div);
413
417
421
422#ifdef __cplusplus
423}
424#endif
425
426#endif
uint8_t em4095_init(em4095_handle_t *handle)
initialize the chip
struct em4095_handle_s em4095_handle_t
em4095 handle structure definition
struct em4095_time_s em4095_time_t
em4095 time structure definition
uint8_t em4095_get_div(em4095_handle_t *handle, uint32_t *clock_div)
get irq div
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
#define EM4095_MAX_LENGTH
em4095 max length definition
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_IDLE
@ EM4095_MODE_WRITE
@ EM4095_MODE_READ
em4095 decode structure definition
em4095_time_t t
em4095 handle structure definition
uint8_t(* shd_gpio_init)(void)
em4095_time_t last_time
void(* delay_ms)(uint32_t ms)
uint8_t(* demod_gpio_init)(void)
void(* debug_print)(const char *const fmt,...)
uint8_t(* shd_gpio_deinit)(void)
uint8_t(* shd_gpio_write)(uint8_t data)
em4095_decode_t decode[EM4095_MAX_LENGTH]
void(* receive_callback)(em4095_mode_t mode, em4095_decode_t *buf, uint16_t len)
uint8_t(* mod_gpio_write)(uint8_t data)
uint8_t(* demod_gpio_deinit)(void)
uint8_t(* demod_gpio_read)(uint8_t *data)
uint8_t(* timestamp_read)(em4095_time_t *t)
uint8_t(* mod_gpio_deinit)(void)
uint8_t(* mod_gpio_init)(void)
em4095 information structure definition
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]
em4095 time structure definition