Kashinath Patil
Вступление
Из-за Независимости Java от платформы последовательное взаимодействие затруднено. Последовательное взаимодействие требует стандартизированного API с конкретными реализациями платформы, что трудно для Java.
Unfortunately, Sun doesn't pay much attention to serial communication in Java. Sun has defined a serial communication API, called JavaComm, but an implementation of the API is not part of the Java standard edition. Sun provides a reference implementation for a few, but not all Java platforms. Particularly, at the end of 2005 Sun silently withdrew JavaComm support for Windows. Third party implementations for some of the omitted platforms are available. JavaComm hasn't seen much in the way of maintenance activities, only the bare minimum maintenance is performed by Sun, except that Sun has apparently responded to pressure from buyers of their own Sun Ray thin clients and has adapted JavaComm to this platform while dropping Windows support.
Эта ситуация, а также тот факт, что Sun изначально не предоставляла реализацию JavaComm для Linux (начиная с 2006 года, они теперь это делают), привели к разработке библиотеки свободного программного обеспечения RxTx. RxTx доступен для ряда платформ, а не только для Linux. Он может быть использован в сочетании с Джевецкому (RxTx обеспечения аппаратно-зависимые драйверы), или он может быть использован автономно. При использовании в качестве драйвера Джевецкому моста между Джевецкому API и RxTx осуществляется JCL с (Джевецкому для Linux). JCL является частью дистрибутива RxTx.
Халатность солнца конкретную модель программирования Джевецкому и Джевецкому набрала Джевецкому репутацию в негодность. К счастью, это не тот случай. К сожалению, эта репутация еще больше распространяется людьми, которые вообще не знают основ последовательного программирования и делают JavaComm ответственным за их непонимание.
RxTx - если не использовать в качестве водителя Джевецкому - предоставляет богатый интерфейс, но не нормируется. RxTx поддерживает больше платформ, чем существующие реализации JavaComm. Недавно, RxTx был принят, чтобы обеспечить такой же интерфейс, как Джевецкому, только что имена пакетов не совпадают имена пакетов Солнца.
Итак, какую из библиотек следует использовать в приложении? При максимальной переносимости (по некоторым значением "максимум") необходимы, то Джевецкому является хорошим выбором. Если для конкретной платформы отсутствует реализация JavaComm, но есть реализация RxTx, то RxTx можно использовать в качестве драйвера на этой платформе для JavaComm. Таким образом, с помощью JavaComm можно поддерживать все платформы, которые либо непосредственно поддерживаются эталонной реализацией Sun, либо RxTx с JCL. Таким образом, приложение не нуждается в изменении и может работать только с одним интерфейсом-стандартизированным интерфейсом JavaComm.
В этом модуле обсуждаются как Джевецкому и RxTx. Он в основном фокусируется на демонстрации концепций, а не готового к запуску кода. Те, кто хочет слепо скопировать код, обращаются к образцу кода, который поставляется вместе с пакетами. Те, кто хочет знать, что они делают, могут найти некоторую полезную информацию в этом модуле.
Приступая к работе
Изучите основы последовательной связи и программирования.
Подготовьте документацию устройства, с которым вы хотите установить связь (например, модем).
Настройка всего оборудования и тестовой среды
Используйте, например, терминальную программу для ручной связи с устройством. Это необходимо для того, чтобы убедиться, что тестовая среда настроена правильно и вы поняли команды и ответы устройства.
Загрузите реализацию API, которую вы хотите использовать для вашей конкретной операционной системы
Прочитай
в Джевецкому и/или RxTx инструкция по установке (и следовать ему)
документация API
пример отгруженного исходного кода
Установка
общий вопрос
Как Джевецкому и RxTX показать некоторые особенности установки. Настоятельно рекомендуется дословно следовать инструкциям по установке. Если они говорят, что файл jar или общая библиотека должны идти в определенный каталог, то это означает серьезно! Если в инструкциях говорится, что конкретный файл или устройство должны иметь определенные права собственности или доступа, это также подразумевается всерьез. Многие проблемы с установкой просто происходят из-за того, что вы не точно следуете инструкциям.
Это особенно следует отметить, что некоторые версии Джевецкому приходит с инструкцией по установке. Один для Java, начиная с версии 1.2, один для Java 1.1. Используя неправильный приведет к нерабочей установки. С другой стороны, некоторые версии/сборки/пакеты RxTx поставляются с неполными инструкциями. В этом случае необходимо получить соответствующий исходный код дистрибутива RxTx, который должен содержать полные инструкции.
Следует также отметить, что для установок Windows JDK также характерно наличие до трех виртуальных машин и, следовательно, трех каталогов расширений.
Один в составе JDK,
один из них является частью частной JRE, которая поставляется вместе с JDK для запуска инструментов JDK, и
один из них является частью общедоступной JRE, которая поставляется вместе с JDK для запуска приложений
Некоторые даже утверждают, что где-то в иерархии каталогов \Windows есть четвертый JRE.
Джевецкому как минимум должен быть установлен, как расширение в JDK и во всех общественных сред JRE.
Функция webstart
Джевецкому
Общей проблемой, как для Джевецкому и RxTx, что они сопротивляются установке через Java функция webstart:
JavaComm печально известен, потому что он требует, чтобы файл под названием javax.comm.properties был помещен в каталог JDK lib, что невозможно сделать с помощью Java WebStart. Это особенно печально, потому что необходимость в этом файле является результатом какого-то ненужного проектирования/решения в JavaComm и может быть легко избегнута дизайнерами JavaComm. ВС постоянно отказывается исправлять эту ошибку, ссылаясь на то, что механизм необходим. То есть они врут сквозь зубы, когда речь заходит о JavaComm, в частности, потому что Java уже давно имеет архитектуру поставщика услуг, предназначенную именно для таких целей.
Содержимое файла свойств обычно состоит всего из одной строки-имени класса java с собственным драйвером, например:
водитель=ком.солнце.прим.Win32Driver
Следующий хак, который позволяет развернуть Джевецкому через веб-начну игнорировать, что мозг мертв свойства файла. У него есть серьезные недостатки, и он может потерпеть неудачу с новыми выпусками JavaComm - если Sun когда - нибудь придет и сделает новую версию.
Во - первых, отключите диспетчер безопасности. Какой-то тупой программист из Sun решил, что было бы здорово снова и снова проверять наличие страшного файла javax.comm.properties, даже после того, как он был загружен изначально, без какой-либо другой видимой причины, кроме проверки файла.
Системы.setSecurityManager(нуль);
Затем, при инициализации АПИ Джевецкому, инициализировать драйвер вручную:
Строки имя_драйвера = "ком.солнце.прим.Win32Driver"; // или получить в собственность у jnlp
CommDriver commDriver = (CommDriver)Class.forName(имя драйвера).метод newinstance();
commDriver.инициализировать();
RxTx
RxTx на некоторых платформах требует изменения прав собственности и доступа к последовательным устройствам. Это также то, что не может быть сделано с помощью WebStart.
При запуске вашей программы вы можете попросить пользователя выполнить необходимую настройку в качестве суперпользователя.
Кроме того, RxTx имеет алгоритм сопоставления шаблонов для идентификации "допустимых" имен последовательных устройств. Это часто ломает вещи, когда кто-то хочет использовать нестандартные устройства, такие как USB-последовательные преобразователи. Этот механизм может быть переопределен системными свойствами. Дополнительные сведения см. В инструкции по установке RxTx.
АПИ Джевецкому
Вступление
Официальный API для последовательного обмена в Java API-интерфейс Джевецкому. Этот API не является частью стандартной версии Java 2. Вместо этого реализация API должна быть загружена отдельно. К сожалению, Джевецкому не получил большое внимание со стороны Солнца, и не было на самом деле сохраняется в течение длительного времени. Время от времени Солнце совсем тривиальных исправлений, но не давно назревшего капитального ремонта.
В этом разделе описаны основные операции по API Джевецкому. Предоставленный исходный код сохранен простым, чтобы продемонстрировать важный момент. Он должен быть улучшен при использовании в реальном приложении.
The source code in this chapter is not the only available example code. The JavaComm download comes with several examples. These examples almost contain more information about using the API than the API documentation. Unfortunately, Sun does not provide any real tutorial or some introductory text. Therefore, it is worth studying the example code to understand the mechanisms of the API. Still, the API documentation should be studied, too. But the best way is to study the examples and play with them. Due to the lack of easy-to-use application and people's difficulty in understanding the APIs programming model, the API is often bad-mouthed. The API is better than its reputation, and functional. But no more.
API использует механизм обратного вызова для информирования программиста о вновь поступающих данных. Также неплохо изучить этот механизм вместо того, чтобы полагаться на опрос порта. В отличие от других интерфейсов обратного вызова в Java (например, в графическом интерфейсе), этот позволяет прослушивать события только одному слушателю. Если несколько слушателей требуют прослушивания последовательных событий, один первичн