我正在尝试为一些硬件传输实现超时,以增加一个大项目的安全性。我已经在UART传输中使用了select
来实现超时,但我不知道如何在SPI传输中添加超时。
这是我的读取代码:
int spi_read(int fd, char command, char* buffer, int size, int timeout)
{
struct spi_ioc_transfer xfer[2];
int status;
memset(buffer, 0, sizeof(buffer));
memset(xfer, 0, sizeof(xfer));
xfer[0].tx_buf = (unsigned int)(&command);
xfer[0].len = 1;
xfer[1].rx_buf = (unsigned int)buffer;
xfer[1].len = size;
status = ioctl(fd, SPI_IOC_MESSAGE(2), xfer);
if(status < 0)
return NOERROR;
else
return EHWFAULT1;
}
它发送一个字节大小的指令,并接收特定大小的响应(在半双工模式下)。如何在响应中实现超时?可以使用select
来实现吗?我应该分离两个事务并使用select
,还是最好使用闹钟?
然后,对于通过ioctl实现的全双工模式,我也有同样的问题。你能给我一些提示吗?