fix: 对不支持weak的bsp, luat_http_client_onevent报重复定义了
[LuatOS.git] / luat / include / luat_i2c.h
blob630759e5cd1c9a0fdd9fa5d2b8d9e2ea2fdf33d7
1 #ifndef LUAT_I2C_H
2 #define LUAT_I2C_H
4 #include "luat_base.h"
5 /**
6 * @defgroup luatos_device_i2c I2C接口
7 * @{
8 */
10 /**
11 * @brief 检查i2c是否存在
13 * @param id i2c_id
14 * @return 1存在 0不存在
16 int luat_i2c_exist(int id);
18 /**
19 * @brief 初始化i2c
21 * @param id i2c_id
22 * @param speed i2c 速度
23 * @return 0成功 其他失败
25 int luat_i2c_setup(int id, int speed);
27 /**
28 * @brief 关闭 i2c
30 * @param id i2c_id
31 * @return 0成功 其他失败
34 int luat_i2c_close(int id);
35 /**
36 * @brief I2C 发送数据
38 * @param id i2c_id
39 * @param addr 7位设备地址
40 * @param buff 数据buff
41 * @param len 数据长度
42 * @param stop 是否发送停止位
43 * @return 0成功 其他失败
46 int luat_i2c_send(int id, int addr, void* buff, size_t len, uint8_t stop);
48 /**
49 * @brief I2C 接受数据
51 * @param id i2c_id
52 * @param addr 7位设备地址
53 * @param buff 数据buff
54 * @param len 数据长度
55 * @return 0成功 其他失败
57 int luat_i2c_recv(int id, int addr, void* buff, size_t len);
59 /**
60 * @brief I2C 写寄存器
62 * @param id i2c_id
63 * @param addr 7位设备地址
64 * @param reg 寄存器地址
65 * @param buff 数据
66 * @param len 数据长度
67 * @param stop 是否发送停止位
68 * @return 0成功 其他失败
70 int luat_i2c_write_reg(int id, int addr, int reg, void* buff, size_t len, uint8_t stop);
71 /**
72 * @brief I2C 读寄存器
74 * @param id i2c_id
75 * @param addr 7位设备地址
76 * @param reg 寄存器地址
77 * @param buff 数据
78 * @param len 数据长度
79 * @return 0成功 其他失败
81 int luat_i2c_read_reg(int id, int addr, int reg, void* buff, size_t len);
82 /**
83 * @brief I2C 收发数据
85 * @param id i2c_id
86 * @param addr 7位设备地址
87 * @param reg 读的寄存器
88 * @param reg_len 寄存器长度
89 * @param buff 如果reg,reg_len 不为NULL,buff 为读的数据保存缓冲区,反之为写的缓冲区
90 * @param len 数据长度
91 * @return 0成功 其他失败
93 int luat_i2c_transfer(int id, int addr, uint8_t *reg, size_t reg_len, uint8_t *buff, size_t len);
95 /**
96 * @brief I2C 收发数据(异步)
98 * @param id i2c_id
99 * @param addr 7位设备地址
100 * @param is_read 是否为读写
101 * @param reg 读的寄存器
102 * @param reg_len 寄存器长度
103 * @param buff 如果reg,reg_len 不为NULL,buff 为读的数据保存缓冲区,反之为写的缓冲区
104 * @param len 数据长度
105 * @param Toms 数据长度
106 * @param CB 回调函数
107 * @param pParam 回调函数参数
108 * @return 0成功 其他失败
110 int luat_i2c_no_block_transfer(int id, int addr, uint8_t is_read, uint8_t *reg, size_t reg_len, uint8_t *buff, size_t len, uint16_t Toms, void *CB, void *pParam);
113 * @brief 设置i2c复用
114 * @attention
115 * @attention
116 * @param id i2c_id
117 * @return -1 失败 其他正常
119 int luat_i2c_set_iomux(int id, uint8_t value);
121 int luat_i2c_set_polling_mode(int id, uint8_t on_off);
122 /** @}*/
124 #define LUAT_EI2C_TYPE "EI2C*"
126 typedef struct luat_ei2c {
127 int8_t sda;
128 int8_t scl;
129 int16_t udelay;
130 } luat_ei2c_t;//软件i2c
132 void i2c_soft_start(luat_ei2c_t *ei2c);
133 char i2c_soft_recv(luat_ei2c_t *ei2c, unsigned char addr, char *buff, size_t len);
134 char i2c_soft_send(luat_ei2c_t *ei2c, unsigned char addr, char *data, size_t len, uint8_t stop);
137 #define toei2c(L) ((luat_ei2c_t *)luaL_checkudata(L, 1, LUAT_EI2C_TYPE))
139 #endif