spike

Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору felix.h - здесь не все функции, а только те, что нужны для работы мне Код: //////////////////////////////////////////////////////////////////////////////// /******************************************************************************* Драйвер для работы с фискальным регистратором "Феликс-Ф Р" ОАО Счетмаш Пример использования драйвера: ........ HFelix H; H = frfInitTransport("COM1", "AERF", 0); frfNewCicle(H, "01.01.01", "09:00", "Доп. строка"); frfNewDocument(H, 0, 0, "Иванов", "1", "1", "00000001", "Доп. строка", NULL); frfAddGoods(H, 1, "Молоко", "097854658", "15.20", "1", "шт.", "Отдел 2", "Доп. строка", NULL, NULL); frfTotal(H, 1, NULL); frfPays(H, 0, "20.00", "", NULL, NULL); frfCloseDocument(H, 1); ........ frfDoneTransport(H); ........ *******************************************************************************/ //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// ////////////// Специфичные для драйвера функции и типы данных ////////////////// //////////////////////////////////////////////////////////////////////////////// // Дескриптор открытого для обмена устройства typedef unsigned int HFelix; typedef unsigned char byte; typedef unsigned short int word; typedef unsigned int cardinal; // Структура для получения состояния машины, // после выполнения последней команды struct frfFelixStatus { byte ErrorCode; // 22.3 Результат выполнения команды byte HardStatus; // 22.1 Постоянный статус машины word CurrentStatus; // 22.2 Текущий статус машины byte PrinterStatus; // 22.4 Состояние печатающего устройства }; // Открыть COM порт для обмена HFelix frfInitTransport(const char* PortName, const char* Password, int SPEED); // Закрыть COM порт int frfDoneTransport(HFelix H); // получить статус машины, возвращенный последней командой int frfGetFelixStatus(HFelix H, frfFelixStatus* Status); // получить строку с объяснением ошибки по коду ошибки int frfGetErrorString(HFelix H, byte ErrorCode, char* ErrorString); // Установить процедуру обратного вызова void frfSetCallBackProcedure(HFelix H, int (*Proc)(int, char*)); // при обработке команды драйвер может вызывать процедуру обратной связи. /* процедура обратной связи должна быть примерно такой: int MyCallBackProcedure(int Message, char* Param) { if (Message == 1) { после вызова команды для Феликса процедура обратной связи вызавается с Message == 1 Param содержит указатель на строку с названием выполняемой команды (на русском языке) } if (Message & 0x300 == 256) { после этого процедура обратной связи вызавается по одному разу для каждого входного параметра команды - Message имеет установленный восьмой бит и младший байт содержит номер параметра, а Param - значение (в том виде, как оно будет передано на Феликс) } if (Message == 0) { пока Феликс выполняет команду, драйвер примерно каждые 40 мс опрашивает Феликс. Если примерно 7 секунд ответа нет вообще, то цикл прерывается, и считается, что Феликс повис, или связи нет. Если же Феликс отвечает на запросы, то, после каждой проверки статуса, вызавается процедура обратной связи с Message == 0. Здесь можно прочитать состояние (командой frfGetFelixStatus), проанализировать его, (если, например, установлены биты "нет бумаги", то сообщить пользователю) и возвратить 1 или 0. Если возвратить 0 - драйвер прекратит ожидать ответ на текущей комаду и возвратит управление основной программе, если возвратить 1 - работа будет продолжена. } if (Message & 0x300 == 512) { после выполнения команды этого процедура обратной связи вызавается по одному разу для каждого возвращаемого параметра команды - Message имеет установленный девятый бит и младший байт содержит номер параметра, а Param - значение (в том виде, как оно принято с Феликса) } return 1; } */ //////////////////////////////////////////////////////////////////////////////// ////////////// Функции фискального регистратора ////////////////// //////////////////////////////////////////////////////////////////////////////// // 23.1 Открыть смену int frfNewCicle(HFelix H, char* Date, char* Time, char* Comment); // 25.1.1 Начать формирование документа на чековой ленте int frfNewDocument(HFelix H, int DocKind, int GroupKind, char* Operator, char* N1, char* N2, char* AccountNo, char* Comment, char* DocumentNumber); // 25.1.2 Продажа (чековая лента) typedef unsigned int frfGoodsKind; int frfAddGoods(HFelix H, frfGoodsKind IsGoods, char* GoodsName, char* GoodsCode, char* Price, char* Quantity, char* Units, char* Department, char* Comment, char* Summa, char* Total); // 25.1.3 Итог (чековая лента) int frfTotal(HFelix H, int Final, char* Total); // 25.1.4 Расчет (чековая лента) int frfPays(HFelix H, int PayKind, char* Summa, char* PayCardNameAndNumber, char* Need, char* Left); // 25.1.5 Закрытие документа (чековая лента) // 25.1.8 Аннулирование (чековая лента) int frfCloseDocument(HFelix H, int Apply); // 25.1.11 Повторный чек (чековая лента) int frfRepeatDocument(HFelix H); // 27.1 Печать финансового отчета (Отчет Х) int frfPrintReport(HFelix H); // 27.2 Печать отчета закрытия смены (Отчет Z) int frfCloseCicle(HFelix H); // 27.7 Внесение денежных сумм int frfPutMoney(HFelix H, char* Summa, char* OldSumma, char* NewSumma); // 27.8 Инкассация (изъятие) денежных сумм int frfGetMoney(HFelix H, char* Summa, char* OldSumma, char* NewSumma); |
| Всего записей: 693 | Зарегистр. 23-10-2003 | Отправлено: 10:10 18-02-2004 | Исправлено: spike, 10:13 18-02-2004 |
|