-
Notifications
You must be signed in to change notification settings - Fork 6
/
README
141 lines (108 loc) · 7.99 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
packet drvfr
author Igor V. Youdytsky <[email protected]>, <[email protected]>
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 динамической библиотеки драйвера.
По всем вопросам обращаться к автору.