新手上路
- 积分
- 22
- 金钱
- 22
- 注册时间
- 2020-6-25
- 在线时间
- 4 小时
|
1金钱
static int ft5x06_read_regs(struct ft5x06_dev *dev, u8 reg, void *val, int len)
{
int ret;
struct i2c_msg msg[2];
struct i2c_client *client = (struct i2c_client *)dev->client;
/* msg[0]为发送要读取的首地址 */
msg[0].addr = client->addr; /* ft5x06地址 */
msg[0].flags = 0; /* 标记为发送数据 */
msg[0].buf = ® /* 读取的首地址 */
msg[0].len = 1; /* reg长度*/
/* msg[1]读取数据 */
msg[1].addr = client->addr; /* ft5x06地址 */
msg[1].flags = I2C_M_RD; /* 标记为读取数据*/
msg[1].buf = val; /* 读取数据缓冲区 */
msg[1].len = len; /* 要读取的数据长度*/
ret = i2c_transfer(client->adapter, msg, 2);
if(ret == 2) {
ret = 0;
} else {
ret = -EREMOTEIO;
}
return ret;
}
在中断处理函数中直接调用ft5x06_read_regs,但传入的参数只是0x02,然后就直接读取到29个寄存器值了?只发0x02从机会返回触摸点数据?而且为什么5个触摸点要读取29个寄存器的值?不应该读取0x02(触摸点数据)+5*6=31个寄存器吗?另外如果在问个问题,如果i2c传输出错,在驱动中识别到错误哪如何进行处理?比如传输5个触摸点数据,前两个成功,第三个失败,是应该丢弃所有的数据还是屏蔽这个错误继续读取然后对成功的数据进行input?希望有人能够解答下我的困惑,谢谢!
ret = ft5x06_read_regs(multidata, FT5X06_TD_STATUS_REG, rdbuf, FT5X06_READLEN);
|
|