Чтение с последовательного порта в Swift 4 с использованием ORSSerialPort - PullRequest
0 голосов
/ 05 сентября 2018

Я давно хотел создать приложение, которое через последовательный порт посылает инструкции на мой светодиодный контроллер. Чтобы это работало, мне нужно прочитать, что контроллер отправляет обратно после отправки ему команды. Я нашел следующую функцию в ORSSerialPort:

func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data) {
    // Do things
}

Однако есть ли что-то вроде ORSSerialPort.read()?

1 Ответ

0 голосов
/ 05 сентября 2018

Я не думаю, что ORSSerialPort.read() хорошая идея. Я знаю, что некоторые другие последовательные библиотеки написаны таким образом, но единственный способ для этого - блокировать read() (возможно, с таймаутом) до тех пор, пока в порт не поступит байт. Блокировка ввода / вывода усложняет написание хорошего адаптивного приложения, и я хочу отвести разработчиков, использующих ORSSerialPort, от этого подхода.

Вместо этого вы действительно должны реализовать serialPort(_:, didReceive:) в вашем ORSSerialPort делегате. Когда данные поступают в последовательный порт, этот метод вызывается с полученными данными, и вы можете делать с ним все, что захотите.

Тем не менее, если ваше устройство обменивается данными с использованием протокола типа команда / ответ (т. Е. Каждый раз, когда вы отправляете команду, устройство отправляет какой-либо ответ), вам следует взглянуть на API запроса / ответа ORSSerialPort. Он позволяет вам явно определять формат ожидаемых ответов на команды, а сам ORSSerialPort будет обрабатывать асинхронно ожидающие, анализирующие и проверяющие ответы. См. документацию для получения дополнительной информации об этой части ORSSerialPort. Библиотека также содержит пример проекта RequestResponseDemo, который демонстрирует использование этого API. Версии Swift и Objective-C включены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...