libsi24: basic setup
[libsi24] / libsi24.h
1 /**
2  * File              : libsi24.h
3  * Author            : Robin Krens <robin@robinkrens.nl>
4  * Date              : 18.01.2023
5  * Last Modified Date: 18.01.2023
6  * Last Modified By  : Robin Krens <robin@robinkrens.nl>
7  */
8
9 #include <stddef.h>
10
11 #if defined(__cplusplus)
12 extern "C" {
13 #endif
14
15 enum si24_status_t {
16     SHUTDOWN = 0,
17     STANDBY,
18     IDLETX,
19     TX,
20     RX
21 };
22
23 typedef enum si24_status_t si24_status_t;
24
25 enum si24_type_t {
26     RECV = 0,
27     SEND
28 };
29
30 typedef enum si24_type_t si24_type_t;
31
32 enum si24_crc_t {
33     ONE_BYTE = 1,
34     TWO_BYTE = 2
35 };
36
37 typedef enum si24_crc_t si24_crc_t;
38
39 enum si24_event_t {
40     TEST = 0
41 };
42
43 typedef enum si24_event_t si24_event_t;
44
45 /* low level IO control */
46 typedef struct {
47     size_t (*read)(unsigned char* buf, size_t size);
48     size_t (*write)(const unsigned char* buf, size_t size);
49 } si24_ioctl_t;
50
51 typedef struct {
52     si24_type_t type;
53     unsigned enable_ack;
54     si24_crc_t crc;
55     si24_ioctl_t *ioctl;
56     unsigned msg_len;
57 } si24_opts_t;
58
59 /* private data structure */
60 typedef struct si24_t si24_t;
61
62 typedef void (*si24_event_handler_t)(si24_t* si24, si24_event_t* event);
63
64 extern si24_t* si24_init(const si24_opts_t* si24opts, si24_event_handler_t eh);
65 extern void si24_free(si24_t* si24);
66 extern void si24_send(si24_t* si24, const char* buf, size_t size);
67 extern void si24_recv(si24_t* si24, char* buf, size_t size);
68 extern void si24_reset(si24_t* si24);
69
70 #if defined(__cplusplus)
71 }
72 #endif