SkillAgentSearch skills...

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.

Install / Use

/learn @pretorean/DrvFR
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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. Требования для установки

  3. Описание принципов работы драйвера Данная программа драйвера базируется на собственной разработке драйвера компании Штрих-М для фискального регистратора Штрих-ФР-Ф под ОС 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 на английском языке и не зависят от локали.

  1. Требования для установки и установка драйвера Проект составлен с использованием 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 динамической библиотеки драйвера.

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

View on GitHub
GitHub Stars14
CategoryDevelopment
Updated2mo ago
Forks7

Languages

C++

Security Score

90/100

Audited on Jan 10, 2026

No findings