packet drvfr author Igor V. Youdytsky <Pitcher@gw.tander.ru>, <Pitcher@newmail.ru> file README language Russian encoding koi8-r copyright GPL This file contains information about drvfr packet. Содержание: 1. Описание принципов работы драйвера 2. Требования для установки 1. Описание принципов работы драйвера Данная программа драйвера базируется на собственной разработке драйвера компании Штрих-М для фискального регистратора Штрих-ФР-Ф под ОС Windows. В основу работы драйвера под Windows положена технология OLE сервера, что позволяет легко работать сосвойствами и методами драйвера. Структура драйвера (drvfr) построена для максимальной совместимости с версией для Windows и облегчением адаптации прикладных программ под ОС GNU/Linux. Основой для работы является указатель на структуру данных fr_func, возвращаемый функцией инициализации drvfrInintialize(). Использование структуры объясняется попыткой упрощения, при потере надежности. В данном случае возможно изменение любого свойства драйвера из пользовательской программы. Следующая стабильная версия драйвера будет содержать нормальный класс C++ и работа будет осуществляться с методами и свойствами (только чнение или чтение/запись) класса. При инициализации драйвера происходит выделение необходимой памяти для переменных. Соединение с устройством не осуществляется. Ошибки выделения памяти не контролируются. При инициализации драйвера происходит поиск и чтение конфигурационного файла в следующем порядке: /etc/drvfrrc $HOME/.drvfrrc Соответственно настройки в домашнем каталоге пользователя приоритетнее общих настроек. Файл настройки может содержать следующие данные: #config file for drvfr portnum=1 passwd=30 boudrate=115200 timeout=50 где: portnum - номер коммуникационного порта COM1,COM2... passwd - пароль пользователя boudrate - скорость обмена по порту, пишется в виде: 2400, 4800 ... 115200 timeout - таймаут при ожидании ответа от устройства Примеры rc файлов находятся в каталоге rc исходников. При отсутствии обоих конфигурационных файлов в поток stderr будет выведено сообщение: Failed reading drvfrrc file При этом перед вызовом функции Connect(), необходимо указать в свойствах ComPortNumber, BaudRate и Timeout значения для установки соединения. Структура fr_func содержит указатели на интерфейсные функции с прототипом int function(void) и указатель на структуру свойств драйвера fr_prop. Наименования функций и свойств соответствуют методам драйвера производителя. Возвращаемые значения функций - код ошибки от ККМ или -1 при невозможности выполнения функции. Исключение составляет функция запроса дампа, которая возвращает количество блоков данных при успешном выполнении или -1 при ошибке. Что бы инициализировать драйвер, произвести подключение к устройству и послать команду гудок, необходимо сделать следующее: fr_func* fr; /* Инициализация драйвера */ fr = drvfrInintialize(); if(fr == NULL) { perror("Could not initialize drvfr"); return; } /* Установление связи с ккм */ fr->prop->ComPortNumber = 1; // COM1 fr->prop->BaudRate = 6; // 115200 fr->prop->Timeout = 50; if(fr->Connect() == -1) { perror("Could not initialize drvfr"); return; } fr->Beep(); ... Для упрощения можно использовать отдельный указатель на структуру свойств драйвера. Например тот же код: fr_func* fr; fr_prop* prop; /* Инициализация драйвера */ fr = drvfrInintialize(); if(fr == NULL) { perror("Could not initialize drvfr"); return; } prop = fr->prop; /* Установление связи с ккм */ prop->ComPortNumber = 1; // COM1 prop->BaudRate = 6; // 115200 prop->Timeout = 50; if(fr->Connect() == -1) { perror("Could not initialize drvfr"); return; } fr->Beep(); ... Далее при работе с драйвером свойства записываются в структуру fr->prop или prop (см. примеры), функции вызываются через указатели в структуре fr. Сообщения, возвращаемые в свойстве ResultCodeDescription на английском языке и не зависят от локали. 2. Требования для установки и установка драйвера Проект составлен с использованием Trolltech Qt 3.0.1 файла проекта (drvfr.pro) для обработки утилитой qmake и создания Makefile. Драйвер написан с использованием GNU C библиотек и на данный момент является непереносимым на не GNU системы. Соответственно для компиляции необходимо наличие установленных пакетов glibc-2.2.4 и glibc-devel-2.2.4. Для компиляции необходимо сделать следующее: # cd drvfr # qmake (или qmake drvfr.pro) # make После компиляции будет создан файл динамической библиотеки: libdrvfr.so.1.0.0 и символические ссылки libdrvfr.so libdrvfr.so.1 libdrvfr.so.1.0 Для дальнейшего использования драйвера эти файлы необходимо поместить в каталог /usr/lib или /usr/local/lib и запустить утилиту ldconfig. При создании пользовательских программ, использующих динамическую библиотеку драйвера необходимо в пользовательский проект включать файл заголовка drvfr.h, описывающий структуры функций (методов) и свойств драйвера, а так же функцию инициализации drvfrInitialize(). При линковании проекта необходимо указывать опцию -ldrvfr динамической библиотеки драйвера. По всем вопросам обращаться к автору.