/DrvFR

DrvFR is a driver for Shtrih-FR-F fiscal cash registrator produced by Shtrih-M Company (Russia) http://www.shtrih-m.ru implements programming interface between the device connected to serial port and client software.

Primary LanguageC++GNU General Public License v2.0GPL-2.0

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 динамической библиотеки драйвера.

По всем вопросам обращаться к автору.