Реализация протокола RS-485, я должен:
[*] Установить PIN-код write на высокий и перейти к режиме записи .
[*] write my data (of-eme-iliet wyile). /> Установите мой PIN -код на низкий снова и перейдите в режим чтения .
[*] подождите до появления 16 байтов.
Конец передачи. Изменить. < /p>
Текущее решение: < /h3>
Код: Выделить всё
// .....
private final Serial serial;
private final GpioPinDigitalOutput pin;
private final long DELAY_M = 2;
private final int DELAY_N = 0
// .....
public boolean send(final byte[] packet) {
result = false;
try {
this.pin.high();
this.serial.write(packet);
Thread.sleep(DELAY_M, DELAY_S); // -> THE TROUBLE MAKER
this.pin.low();
result = true;
}
// ... Now in read mode, recv 16 bytes in a pre-defined time window
return result;
перед тем, как перейти в режим чтения (настройка PIN на низкий ) Я должен подождать, пока не будут переданы все данные в последовательном буфере. Я использую библиотеку PI4J, и у нее нет объекта для проверки оставшихся байтов в буфере. Грязное решение состоит в том, чтобы подождать постоянного задержки, а Milliseconds, но это постоянное время изменяется в разных средах, в разных оборудовании и ... < /p>
Просматривает код PI4J, в нативных реализациях (JNI) это вызывает API WyringPi. WilingPi, в свою очередь, рассматривает последовательный порт как обычный файл Linux и записывает в файл. Опять же, WhiringPi не предоставляет метода проверки оставшихся байтов в буфере. Тогда это должно быть линейная-хард-и-точная вещь и не обязательно ответственность PI4J. Итак: как вы проверяете оставшиеся данные в буфере серийного порта Raspberry? который является /dev /ttyama0 < /code> < /p>
p.S: серийный интерфейс в pi4j имеет метод flush () с этой документацией: < /p>
заставляет передачу любых оставшихся данных в серийном порте -буфере. /> < /blockquote>
Обновление: < /h3>
Что касается того, что @sawdust указало в комментариях, я нашел этот урок. Это позволяет так называемым RTS и CTS (больше об этих флагах здесь и здесь), но это еще не работает. Мой осциллограф не показывает сигнал на выводах CTS и RTS. Нужны странные сценарии, не доступные нигде. Но посмотрите в списке пакетов APT-GET с помощью поиска APT-Cache GPIO , и вы найдете необходимые инструменты.
Подробнее здесь: https://stackoverflow.com/questions/358 ... ite-buffer