Я пытаюсь реализовать тайм-аут для некоторых аппаратных передач, чтобы повысить безопасность большого проекта. Я уже реализовал тайм-аут, используя select
для передачи UART, но я не знаю, как добавить тайм-аут в передачу 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. Можете ли вы дать мне какие-либо намеки?