Драйвер opos что это

Обновлено: 05.07.2024

В этой статье рассказывается о том, как настроить драйверы для устройств с интерфейсом LPR для принтера Epson, например TM-T88II в Microsoft Business Solutions — операции магазина системы управления розничными магазинами.

Дополнительная информация

Примечание. Обратитесь в Epson, чтобы узнать, поддерживает ли принтер драйвер OPOS. Чтобы обратиться в службу поддержки Epson, звоните (562) 276-1314.To настройте драйверы OLE для POS-терминалов (OPOS) для принтера Epson в магазинах, описанные в статье.

Загрузите драйверы Epson OPOS на веб-сайте Epson по адресу:

Прежде чем вы сможете загрузить драйверы Epson OPOS, Epson необходимо зарегистрироваться в программе "EpsonExpert стратегическое разработчик". Это бесплатная программа, разработанная специально для пользователей Северной Америки. Эта программа предоставляет единый источник информации о продуктах и услугах Epson OPOS.

Рекомендуется использовать Epson OPOS ADK версии 2.50 e. Однако для некоторых сочетаний принтеров и денежных ящиков может потребоваться более ранняя версия.

Некоторые новые принтеры могут не отображаться в списке. В этом случае необходимо загрузить и установить Epson OPOS 2.50 e с пакетом обновления 10. Например, принтеры TM-T88IV недоступны в базовой версии Epson OPOS, версия для e.

Чтобы запустить установку, дважды щелкните файл Setup. exe в папке unzipped disk1.

Во время установки используйте все параметры по умолчанию, за исключением случаев, когда вам будет предложено выбрать элемент " совместныйобъект" (CCO)Epson. В этом случае выберите объект общего управления (CCO). Примечание. Если вы принимаете все значения по умолчанию, убедитесь, что вы удалите драйверы OPOS, а затем переустановите их. Это действие требуется для операций магазина, а не в драйверах Epson. Дополнительные сведения об удалении приложений для Windows можно найти в справке Windows Online.

Щелкните правой кнопкой мыши POSPrinterи выберите команду Добавить новое устройство.

Щелкните имя устройства, которое вы используете. Например, выберите TM-T88II.

Щелкните детальную модель. Выберите "P" для параллельной обработки или "U" для USB. Последовательные устройства, которые подключаются к COM-портам, обычно не имеют суффикса.

Введите имя в поле Добавить новое LDN . Например, введите принтер. Запомните это имя. Это имя будет использоваться при настройке ККМ в диспетчере операций магазина.

Выберите порт LPT или COM, к которому подключен принтер.

Если у вас есть денежный ящик, подключенный к принтеру Epson, выполните указанные ниже действия, чтобы настроить денежный ящик.

Щелкните правой кнопкой мыши CashDrawerи выберите команду Добавить новое устройство.

Щелкните, чтобы выбрать StandardP в качестве подробной модели, и нажмите кнопку Далее.

Выберите один и тот же порт LPT, на котором находится денежный ящик. Это будет тот же порт, который вы выбрали в действии 7.

В диспетчере операций магазина откройте свойства ККМ. Для этого щелкните база данных, наведите указатель мыши на пункт регистрыи выберите пункт список регистров.

Откройте вкладку принтер для чека 1 .

Для устройства OPOS введите принтер, где принтер — имя LDN, созданное в действии 8.

Убедитесь в том, что для принтера чеков выбран формат чека. Для имени устройства OPOS для кассового лотка откройте вкладку денежный ящик , а затем введите денежный ящик, где LDN — имя, созданное в действии 11b).

Проверка принтера и денежного ящика путем ввода транзакции продажи в POS. Чтобы узнать, как ввести транзакцию продаж, ознакомьтесь с руководством пользователя или справочной системой в диспетчере или POS, нажав клавишу F1 .

Примечание. Если проверка работоспособности интерактивного теста не удалась из-за ошибки, обратитесь в службу технической поддержки Epson. Техническая поддержка Microsoft Dynamics для розничной торговли не поддерживает настройку драйверов устройств OPOS. Чтобы обратиться в службу поддержки Epson, звоните (562) 276-1314.Примечание. В некоторых случаях, когда принтер и денежный ящик успешно проверяются в программе настройки Epson, но не работают в магазинах. В этих случаях удалите драйверы 2.50 e с помощью приложения "Установка и удаление Windows" на панели управления, а затем загрузите и установите более раннюю версию драйверов Epson OPOS. Последние версии драйверов Epson OPOS можно найти на веб-сайте Epson по следующему адресу:

В данной статье описан процесс написания простейшего драйвера, который выводит скан-коды нажатых клавиш.
Также в данной статье описан процесс настройки рабочего места для написания драйверов.
Если Вам интересно, прошу под кат.

Подготовка стенда

Установка необходимого ПО для написания простейшего драйвера
  1. Windows DDK (Driver Development Kit);
  2. VMware Workstation или Virtual Box;
  3. Windows XP;
  4. Visual Studio 2005;
  5. DDKWizard;
  6. KmdManager
  7. DebugView;
Настройка рабочего места
Установка DDK

Установка предельно проста. Единственное на что необходимо обратить внимание — это диалог, в котором Вам предлагается выбрать компоненты, которые будут установлены. Настоятельно рекомендую отметить всю документацию и примеры.

Установка и настройка Microsoft® Visual Studio 2005

Установка Microsoft® Visual Studio 2005 ничем не сложнее установки DDK. Если Вы будете использовать её только для написания драйверов, то когда инсталлятор спросит какие компоненты необходимо установить, выберите только Visual C++.
Далее можно установить Visual Assist X. С помощью этой программы (аддона) можно будет легко настроить подсказки для удобного написания драйверов.
После установки Visual Assist X в Visual Studio 2005 появится новое меню VAssistX. Далее в этом меню: Visual Assist X Options -> Projects -> C/C++ Directories -> Platform: Custom, Show Directories for: Stable include files . Нажимаем Ins или на иконку добавить новую директорию и в появившейся строке, если у вас Windows XP вписываем %WXPBASE%\inc\ddk\wxp .

Установка и настройка DDKWizard
  • Создать системные (рекомендуется) или пользовательские переменные со следующими именами и значением, которое соответствует пути к DDK
    Версия DDK
    Имя переменной
    Путь по умолчанию
    Windows XP DDK
    WXPBASE
    C:\WINDDK\2600
    Windows 2003 Server DDK
    WNETBASE
    C:\WINDDK\3790.1830
    Windows Vista/Windows 2008 Server WDK
    WLHBASE
    Windows 7/Windows 2008 Server R2 WDK
    W7BASE

    Например, если я использую Windows XP DDK, то я должен создать переменную WXPBASE со значением, которое соответствует пути к DDK. Так как я не изменял путь установки, то значение у меня будет C:\WINDDK\2600.
  • Скопируйте скачанный скрипт ddkbuild.cmd, например, в папку с DDK. У меня это C:\WINDDK\.
  • Добавьте в конец системной переменной Path путь к скрипту ddkbuild.cmd.
Установка необходимого ПО для запуска драйверов
  • DebugView (link) — это утилитка, которая позволяет просматривать отладочный вывод как режима пользователя так и режима ядра.
  • KmdManager (link) — утилита динамической загрузки/выгрузки драйверов

Постановка задачи

Задача: написать драйвер, который будет выводить в дебаг скан-коды нажатых клавиш и их комбинаций.

Немного теории
  • драйверы классов;
  • минидрайверы;
  • функциональные драйверы;
  • фильтрующие драйверы.

Необязательно определять все возожные функции в своем драйвере, но он обязательно должен содержать DriverEntry и AddDevice .

IRP — это структура, которая используется драйверами для обмена данными.

  • верхние фильтрующие драйверы;
  • нижние фильтрующие драйверы.
Отличия между верхними и нижними фильтрующими драйверами

Через верхние фильтрующие драйверы проходят все запросы, а это значит, что они могут изменять и/или фильтровать информацию, идущую к функциональному драйверу, ну и далее, возможно, к устройству.
Пример использования верхних фильтрующих драйверов:
Фильтр-хук драйвер, который устанавливает свою хук-функцию для системного драйвера IpFilterDirver, для отслеживания и фильтрации траффика. Такие драйверы используются в брандмауэрах.

Через нижние фильтрующие драйверы проходит меньше запросов потому что большинство запросов выполняет и завершает функциональный драйвер.

Проблемы синхронизации

В драйвере, который мы будем писать, есть несколько «проблемных» секций. Для нашего драйвера вполне достаточно использования ассемблерных вставок:

Префикс lock позволяет безопасно выполнить идущую за ним команду. Она блокирует остальные процессоры, пока выполняется команда.

Экшен

Для начала необходимо включить заголовочные файлы «ntddk.h», «ntddkbd.h»


Также необходимо описать структуру DEVICE_EXTENSION

Объект pLowerDO это объект устройства, который находится ниже нас в стеке. Он нужен нам для того чтобы знать кому дальше отправлять IRP-пакеты.
Еще для работы нашего драйвера нам нужна переменная, в которой будет храниться количество не завершенных запросов.

Начнем с функции, которая является главной точкой входа нашего драйвера.

theDriverObject – объект драйвера, содержит указатели на все необходимые операционной системе функции, которые мы должны будем инициализировать.
ustrRegistryPath – имя раздела в реестре, где хранится информация о данном драйвере.
Для начала необходимо объявить и обнулить переменные:

Далее, как я и писал выше, нужно инициализировать указатели на функции

Функция DispatchRead будет обрабатывать запросы на чтение. Она будет вызываться, когда нажата или отпущена клавиша клавиатуры.
Функция DriverUnload вызывается, когда драйвер уже не нужен и его можно выгрузить из памяти, или когда пользователь сам выгружает драйвер. В данной функции должна производиться «зачистка», т.е. освобождаться ресурсы, которые использовались драйвером, завершаться все незавершенные запросы и т.д.
Функция DispatchThru это функция-заглушка. Все что она делает это передача IRP-пакета следующему драйверу (драйверу который находится под нашим в стеке, т.е. pLowerDO из DEVICE_EXTENSION ).
Далее мы вызываем нашу функцию, для создания и установки нашего устройства в стек устройств:

Эту функцию я опишу чуть ниже.
Возвращаем status , в котором, если функция InstallFilter завершилась удачей, хранится значение STATUS_SUCCESS .
Переходим к функции InstallFilter . Вот её прототип:

Эта функция создает объект устройства, настраивает его и включает в стек устройств поверх \\Device\\KeyboardClass0

pKeyboardDevice – это объект устройсва, которое мы должны создать.
Вызываем IoCreateDevice для создания нового устройства

  • Первый аргумент это объект драйвера, который мы получили как параметр функции InstallFilter. Он передается в IoCreateDevice для того чтобы установить связь между нашим драйвером и новым устройством.
  • Третий параметр это имя устройства
  • Четвертый параметр это тип устройства
  • Пятый параметр это флаги, которые обычно устанавливаются для запоминающих устройств.
  • Шестой параметр описывает можно ли открывать манипуляторы устройства в количестве больше одного. Если FALSE можно открыть только один манипулятор. Иначе можно открыть любое количество манипуляторов.
  • Седьмой параметр это память, в которой будем сохранен созданный объект устройства.

Флаги, которые мы устанавливаем для нашего устройства, должны быть эквивалентными флагам устройства, поверх которого мы включаемся в стек.
Далее мы должны выполнить преобразования имени устройства, которое мы включаем в стек.

Функция IoAttachDevice внедряет наше устройство в стек. В pdx->pLowerDO будет храниться объект следующего (нижнего) устройства.

Далее разберем функцию DispatchRead с прототипом:

Данная функция будет вызываться операционной системой при нажатии или отпускании клавиши клавиатуры
Увеличиваем счетчик незавершенных запросов

Перед тем как передать запрос следующему драйверу мы должны настроить указатель стека для драйвера. IoCopyCurrentIrpStackLocationToNext копирует участок памяти, который принадлежит текущему драйверу, в область памяти следующего драйвера.
Когда запрос идет вниз по стеку в нем еще нет нужных нам данных, поэтому мы должны задать функцию, которая вызовется, когда запрос будет идти вверх по стеку с нужными нам данными.

где ReadCompletionRoutine наша функция.
Передаем IRP следующему драйверу:

Теперь разберем функцию, которая будет вызываться каждый раз при завершении IRP . Прототип:

Структура PKEYBOARD_INPUT_DATA используется для описания нажатой клавиши.

Проверяем, удачно завершен запрос или нет

Чтобы достать структуру KEYBOARD_INPUT_DATA нужно обратиться к системному буферу IRP -пакета.

Узнаем количество клавиш

И выводим каждую клавишу:

И не забываем уменьшать количество не обработанных запросов

Возвращаем статус запроса

Разберем функцию завершения работы. Прототип:

Извлекаем устройство из стека:

Проверяем есть незавершенные запросы или нет. Если мы выгрузим драйвер без этой проверки, при первом нажатии на клавишу после выгрузки будет БСоД.

Как запустить драйвер и просмотреть отладочную информацию

Для запуска драйвера я использовал утилиту KmdManager. Для просмотра отладочной информации использовалась утилита DbgView.

P. S. Статью писал давно, ещё на третьем курсе, сейчас уже почти ничего не помню. Но если есть вопросы, постараюсь ответить.
P. P. S. Прошу обратить внимание на комментарии, в частности на этот


Хотелось бы побольше узнать о POS-периферии, а именно: как подключаются (какие порты и разьёмы) чековый принтер и терминалы сбора информации к кассовому аппарату, как происходит взаимодействие между устройтсвами, как можно запрограммировать touch screen кассовый аппарат и какой язык программирования для этого используется, как создаются такие системы.


В общем более подробнее, чем выдаёт Google «купить кассовый аппарат».


Это простой интерес, я не владелец бизнеса, но очень интересно как всё это работает изнутри.


Большое спасибо за любую информацию/ссылки!

JhaoDa

Я понимаю, что это некрофилия, но если вдруг кто заглянет в этот вопрос :)

Во-первых, есть единые комплексы из системника, фискального регистратора (ФР), монитора и, возможно, чего-то ещё, собранное в одном корпусе или в общих модулях. Ставятся на учет в налоговую единым куском. И есть сборная солянка из чего угодно, на учет ставится только один ФР. Хотя опять же, деление зачастую весьма условно…

  • программируемые клавиатуры, интерфейсы PS/2 и USB-HID;
  • ридеры магнитных и бесконтактных карт;
  • сканеры штрих-кода: светодиодные (надёжность топора, но дальность считывания едва ли пара сантиметров), лазерные (из-за точной механики средней силы удар может оказаться смертельным — сбивается юстировка зеркала, дальность считывания… ну 10-15 см точно можно получить), интерфейсы PS/2, COM, USB-HID, USB-COM (последние два как проводные, так и беспроводные — Wi-Fi, Bluetooth);
  • различные термо- и матричные принтеры, сюда же отнесём ФР, интерфейсы LPT, COM, USB, USB-VCOM, Bluetooth, Wi-Fi, Ethernet
  • дисплеи покупателя, LCD и VFD, последние более популярны, интерфейсы COM, USB-VCOM

Украинская POSUA делает весьма приятные клавиатуры и ридеры карт.

ChipherLab, Metroligic, Honeywell делают хорошие сканеры ШК.

Некоторые протоколы стандартизованы, в частности OPOS, JPOS. Другие протоколы уже устоялись за годы как неофициальные стандарты.

image


При реализации проектов на 1С зачастую приходится сталкиваться с разного рода устройствами и их сопряжением. Покуда будут существовать устройства на древним RS232 будет необходимость во внешних компонентах такого рода. Как правило с устройством идет документация, которая нередко содержит систему команд и некий драйвер который распространяется «так как есть». Очень часто драйвера «так как они есть» оставляют ожидать лучшего. Я предлагаю немного окунутся в системное программирование и решить для себя сей вопрос раз и навсегда.

Прекрасная статья содержит пример и достаточное описание что к чему, что где менять. Пример компилируется. Для быстрого старта замечательная статья. Подобный пример свободно распространяется фирмой 1С и валяется в куче хлама на диске ИТС. Много раз мелькало в глазах но было заложено на дальнюю полку с ярлыком «обязательно изучить».

Для простоты внешнюю компоненту далее по тексту буду называть драйвером.

При этом предварительно никаких действий типа regsvr32. Да и на сколько мне известно, OLE32 ужа давно не флагманская технология Microsoft.

2. Хранение самого драйвера в составе обработки или конфигурации.
Файл драйвера вставляем в макет 1С как двоичные данные и по надобности распаковываем его в временный каталог пользователя.


3. Реализация интерфейса драйвера. Вынос логики команд на сторону 1С.
Первоначально при написании драйвера, была использована идеология существующих драйверов. ДемоКомп.СделайЧтото(МногоРаз).

По-сути был повторен драйвер, разумеется без ограничений наложенных производителем. Но сия наследственность оказалась мучительной и пагубной. Раз в пол года возникает необходимость добавления каких-то команд, изменении существующих.
Был написан универсальный драйвер RS232 порта для 1С. Он был протестирован usb-модемом Huawei-1550 и с Марией. Для этого драйвера необходимо переписать сервис обработку для 1С.
После очередного «усовершенствования» родилась идея выноса логики команд на сторону 1С. Драйвер занимается только реализацией транспортного протокола. Системные программисты ликуют. Теперь команда драйвера выглядит:

И да на радость каждому программисту 1С Native API дает возможность вызывать функции по-русски (русские псевдонимы функций).

4. Запись протокола обмена.
Для записи в файл maria.log в каталог временных файлов пользователя команд и реакций на них необходимо:

В файле пишется время и вид события: с — команда; а — ответ; u — соединение; t — количество циклов для получения ответа; e — ошибка.


Вот минимальный набор необходимого чтоб «заработало». Теперь немного о будущем:

5. Другие устройства такого класса.
По задумке не сложно заменить транспортный протокол Марии на протокол например ИКС-а. Можно было б говорить о семействе драйверов. Сам скелет основных необходимых функций готов.

6. Внешние события.
В процедурах реализации транспортного протокола стоит перейти на threads, а сигнализацию о завершении работы команды делать внешним событием. Хочу сделать именно так, но немножко чего-то не хватает: времени или знаний или того и другого. И рок «уже работает так», " работает не трогай" немного охлаждает пыл порыва.

7. Совместная работа.
В планах написание простого web-сервиса, который бы принимал команды, организовывал очередь команд и перенаправлял их на устройство. Сервисная обработка в таком случае будет выглядеть аналогично, команды не поменяются. Изменится только инициализация объекта.

Ссылка на проект на github
Проект состоит из проекта Visual Studio, демонстрации команд на 1С (в модуле управляемого приложения) и сервис обработки для 1С.

Читайте также: