Hardware Abstraction Layer for FreeRTOS
i2c_prv.h
Go to the documentation of this file.
1
/* SPDX-License-Identifier: MIT */
2
/*
3
* Author: Andreas Werner <kernel@andy89.org>
4
* Date: 2018
5
*/
6
#ifndef I2C_PRV_
7
#define I2C_PRV_
8
#ifndef I2C_PRV
9
# error "Never include this file out of a I2C driver"
10
#endif
11
#include <FreeRTOS.h>
12
#include <semphr.h>
13
#include <stdint.h>
14
#include <stdbool.h>
15
#include <
hal.h
>
16
#define I2C_ALREDY_INITED 1
17
int32_t
i2c_genericInit
(
struct
i2c *i2c);
18
#ifdef CONFIG_I2C_THREAD_SAVE
19
# define i2c_lock(u, w, e) HAL_LOCK(u, w, e)
20
# define i2c_unlock(u, e) HAL_UNLOCK(u, e)
21
#else
22
# define i2c_lock(u, w, e)
23
# define i2c_unlock(u, e)
24
#endif
25
#define I2C_ADDDEV(ns, p) HAL_ADDDEV(i2c, ns, p)
26
HAL_DEFINE_GLOBAL_ARRAY
(i2c);
27
#define I2C_GET_DEV(index) HAL_GET_DEV(i2c, index)
28
#ifndef CONFIG_I2C_MULTI
29
# define I2C_OPS(ns)
30
# define I2C_INIT_DEV(ns)
31
# define I2C_INIT(ns, index, mode) struct i2c *i2c_init(uint32_t index, enum i2c_mode mode)
32
# define I2C_DEINIT(ns, i) int32_t i2c_deinit(struct i2c *i)
33
# define I2C_SEND(ns, i, id, data, len, waittime) int32_t i2c_send(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len, TickType_t waittime)
34
# define I2C_RECV(ns, i, id, data, len, waittime) int32_t i2c_recv(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len, TickType_t waittime)
35
# define I2C_TRANSFER(ns, i, id, sendData, sendLen, recvData, recvLen, waittime) int32_t i2c_transfer(struct i2c *i, uint16_t id, uint8_t *sendData, uint32_t sendLen, uint8_t *recvData, uint32_t recvLen, TickType_t waittime)
36
# define I2C_SEND_ISR(ns, i, id, data, len) int32_t i2c_sendISR(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len)
37
# define I2C_RECV_ISR(ns, i, id, data, len) int32_t i2c_recvISR(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len)
38
# define I2C_TRANSFER_ISR(ns, i, id, sendData, sendLen, recvData, recvLen) int32_t i2c_transferISR(struct i2c *i, uint16_t id, uint8_t *sendData, uint32_t sendLen, uint8_t *recvData, uint32_t recvLen)
39
#else
40
# define I2C_OPS(ns) const struct i2c_ops ns##_i2c_ops = { \
41
.i2c_init = &ns##_i2c_init,\
42
.i2c_deinit = &ns##_i2c_deinit,\
43
.i2c_send = &ns##_i2c_send, \
44
.i2c_recv = &ns##_i2c_recv, \
45
.i2c_transfer = &ns##_i2c_transfer, \
46
.i2c_sendISR = &ns##_i2c_sendISR, \
47
.i2c_recvISR = &ns##_i2c_recvISR, \
48
.i2c_transferISR = &ns##_i2c_transferISR, \
49
}
50
# define I2C_INIT_DEV(ns) .gen.ops = &ns##_i2c_ops,
51
# define I2C_INIT(ns, index, mode) struct i2c *ns##_i2c_init(uint32_t index, enum i2c_mode mode)
52
# define I2C_DEINIT(ns, i) int32_t ns##_i2c_deinit(struct i2c *i)
53
# define I2C_SEND(ns, i, id, data, len, waittime) int32_t ns##_i2c_send(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len, TickType_t waittime)
54
# define I2C_RECV(ns, i, id, data, len, waittime) int32_t ns##_i2c_recv(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len, TickType_t waittime)
55
# define I2C_TRANSFER(ns, i, id, sendData, sendLen, recvData, recvLen, waittime) int32_t ns##_i2c_transfer(struct i2c *i, uint16_t id, uint8_t *sendData, uint32_t sendLen, uint8_t *recvData, uint32_t recvLen, TickType_t waittime)
56
# define I2C_SEND_ISR(ns, i, id, data, len) int32_t ns##_i2c_sendISR(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len)
57
# define I2C_RECV_ISR(ns, i, id, data, len) int32_t ns##_i2c_recvISR(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len)
58
# define I2C_TRANSFER_ISR(ns, i, id, sendData, sendLen, recvData, recvLen) int32_t ns##_i2c_transferISR(struct i2c *i, uint16_t id, uint8_t *sendData, uint32_t sendLen, uint8_t *recvData, uint32_t recvLen)
59
#endif
60
#endif
61
hal.h
i2c_genericInit
int32_t i2c_genericInit(struct i2c *i2c)
HAL_DEFINE_GLOBAL_ARRAY
HAL_DEFINE_GLOBAL_ARRAY(i2c)
driver
include
i2c_prv.h
Generated on Tue Aug 17 2021 15:19:23 for Hardware Abstraction Layer for FreeRTOS by
1.8.20