blob: 5437514517c01acda0680aa01f02d869285c06fe (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#ifndef TWI_MASTER_MAC_H_
#define TWI_MASTER_MAC_H_
#include <stdint.h>
#include <string.h>
#include "util.h"
struct twi_transfer;
enum twi_status {
TWI_STAT_IDLE = 0,
TWI_STAT_INPROGRESS,
TWI_STAT_FINISHED,
TWI_STAT_BUSERROR,
TWI_STAT_TIMEOUT,
TWI_STAT_CANCELLED,
};
#if defined(TWI_SIZE_16BIT) && (TWI_SIZE_16BIT != 0)
typedef uint16_t twi_size_t;
#else
typedef uint8_t twi_size_t;
#endif
typedef void (*twi_callback_t)(struct twi_transfer *, enum twi_status);
struct twi_transfer {
void *buffer;
twi_size_t write_size;
twi_size_t read_size;
uint8_t address;
twi_callback_t callback;
/* Internal fields follow. */
uint8_t status; /* enum twi_transfer_status_flags */
twi_size_t offset; /* The current byte offset. */
struct twi_transfer *next; /* Linked list of transfer objects. */
};
void twi_init(void);
static inline void twi_transfer_init(struct twi_transfer *xfer)
{
memset(xfer, 0, sizeof(*xfer));
}
void twi_transfer(struct twi_transfer *xfer);
enum twi_status twi_transfer_get_status(const struct twi_transfer *xfer);
enum twi_status twi_transfer_wait(struct twi_transfer *xfer,
uint16_t timeout_ms);
void twi_transfer_cancel(struct twi_transfer *xfer);
#endif /* TWI_MASTER_MAC_H_ */
|