IPB

Здравствуйте, гость ( Вход | Регистрация )

> Внимание!

Группа компаний «АТОЛ» информирует Вас о том, что с 4 июля 2011 года закрываются электронные форумы ГК «АТОЛ»,
посвященные дистрибутируемому и собственному оборудованию.
С 4 июля 2011 года данный раздел будет доступен только для чтения.

Для получения технической поддержки и сервиса мы рекомендуем всем партнерам зарегистрироваться в системе управления инцидентами Service Desk.

 
Добавить ответ в эту темуОткрыть тему
Помогите с драйвером под *nix, FPrint-02K отвечает но команды не исполняет
zhekha
сообщение 24.6.2010, 7:43
Сообщение #1


Прохожий


Группа: Новички
Сообщений: 6
Регистрация: 23.6.2010
Пользователь №: 21 733



В общем, нужен драйвер под *nix-системы, конкретнее для линукс и, скорее всего, под убунту и сусе. На рабочих станциях, к которым будут подключены ККМ, будет один из указанных дистрибов. Винда, в любом случае, не вариант... Печать чеков будет осуществляться с биллинговой системы под доступу через браузер.

Пошерстив инет и не найдя такового решил попробовать реализовать несколько элементарных функций по доке "Протокол работы ККМ, руководство программиста, Москва 2008" (релиз версия 4.15) + приобрели FPrint-02K для пробы.

Написал следующее (Kubuntu 10.04):

Код
const unsigned char* prepareCmd(const unsigned char* cmd, unsigned& length) {

    unsigned char* ret = new unsigned char[CMD_MAX_LENGTH];
    memset(ret, 0, CMD_MAX_LENGTH);
    int addlength = 0;
    for (int i = 0, j = 0; i < length; ++i) {

    if (cmd[i] == DLE || cmd[i] == ETX) {
      
        ret[j++] = DLE;
        ++addlength;
    }
    ret[j++] = cmd[i];
    }
    length += addlength;
    ret[length] = ETX;
    ++length;

    unsigned char CRC = ret[0];
    for (int i = 1; i < length; ++i)
    CRC ^= ret[i];
    ret[length] = CRC;
    ++length;
    for (int i = length; i > 0; --i)
      ret[i] = ret[i-1];
    ret[0] = STX;
    ++length;
    return ret;
}

int main(int argc, char **argv) {
  
    FILE* f = fopen("/dev/ttyUSB0", "r+"); //"r+b");
    if (f == NULL) {
      
    std::cout << "Failed to open USB device \"ttyUSB0!\"" << std::endl;
    return -1;
    }

    unsigned char cmd[CMD_MAX_LENGTH] = {0x4C, 0x31, 0x32, 0x33, 0x00};

    unsigned length = 4;
    const unsigned char* cmdReady = prepareCmd(cmd, length);
    
    unsigned char buf = ENQ;
    fwrite(&buf, 1, 1, f);
    memset(cmd, 0, CMD_MAX_LENGTH);
    fread(cmd, 1, 1, f);
    if (cmd[0] == ACK)
    std::cout << "answer: ACK " << (unsigned)cmd[0]  << std::endl;
    else {
      
    std::cout << "code=" << (unsigned)cmd[0] << std::endl;
    fclose(f);
    return 0;
    }

    fwrite(cmdReady, length, 1, f);
    delete[] cmdReady;
    memset(cmd, 0, CMD_MAX_LENGTH);
    fread(&cmd[0], 1, 1, f);
    if (cmd[0] == ACK)
    std::cout << "answer: ACK " << (unsigned)cmd[0] << std::endl;
    else if (cmd[0] == NAK)
    std::cout << "answer: NAK " << (unsigned)cmd[0] << std::endl;
    else
    std::cout << "error! code=" << (unsigned)cmd[0] << std::endl;

    buf = EOT;
    fwrite(&buf, 1, 1, f);
      
    fclose(f);
    
    return 0;
}


Вроде бы все по науке и пример из руководства, даже ответы читаются (ACK) с устройства, но ничего не печатается.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Бабурин Михаил
сообщение 25.6.2010, 10:04
Сообщение #2


Продукт-менеджер по системному ПО
*******

Группа: Пользователи
Сообщений: 1 770
Регистрация: 27.8.2007
Из: ГК АТОЛ
Пользователь №: 11 651



Так как проблема не имеет отношения конкретно к продукту АТОЛ драйвер ККМ, переношу тему в раздел по ФР-ам.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Илья Золотарев
сообщение 25.6.2010, 10:34
Сообщение #3


выБывший
********

Группа: Пользователи
Сообщений: 2 996
Регистрация: 26.9.2007
Из: Москва
Пользователь №: 11 833



Непосредственно из Драйвера ККМ на WinXP пробовали печатать?


--------------------
экс-сотрудник АТОЛ
"Féci quód potuí, faciánt melióra poténtes" ©
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhekha
сообщение 25.6.2010, 10:39
Сообщение #4


Прохожий


Группа: Новички
Сообщений: 6
Регистрация: 23.6.2010
Пользователь №: 21 733



в винде из атоловского драйвера - все работает
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Алексей Ес...
сообщение 25.6.2010, 11:41
Сообщение #5


Начинающий
*

Группа: Специалисты
Сообщений: 83
Регистрация: 2.10.2009
Пользователь №: 17 729



Во-первых, хорошо б показать обмен. Думать, что же там получится, лениво smile.gif Заодно посравниваете с расширенным журналом нашего драйвера ККМ.
Во-вторых, у вас пароль доступа (два байта перед всеми командами, по умолчанию 00 00) в ФРе отключен, что-ли? По умолчанию он включен.
В-третьих, драйвер неполный. Нужно не только отсылать команду (ACK - подтверждение того, что команда пришла, но не подтверждение, что она исполнена), но и считывать ответ. Алгоритм точно такой же, но данные передаёт ККМ.
В четвёртых, не вижу никаких таймаутов. Рекомендую добавить.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhekha
сообщение 25.6.2010, 12:09
Сообщение #6


Прохожий


Группа: Новички
Сообщений: 6
Регистрация: 23.6.2010
Пользователь №: 21 733



Поставил прослушивание ком-порта в винде и разобрался: неправильно передавал параметры команды и забыл пароль (2 нулевых байта вначале). Отправил команду - вариант подсмотренный у Вашего драйвера и все получилось...

Таймауты в продакшн обязательно добавлю, это был тестовый вариант - "пощупать" как это все работает.

Спасибо за ответы!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: АлексейК
сообщение 30.6.2010, 11:06
Сообщение #7


Мозг
******

Группа: Специалисты
Сообщений: 1 043
Регистрация: 11.12.2006
Из: Мой адрес - не дом и не улица...
Пользователь №: 9 852



Не хотите попробовать запустить драйвер под Wine? Официально драйвер такой режим не поддерживает, однако были клиенты, у которых драйвер использовался под Wine в реальных магазинах. Можете поискать здесь на форуме - кажется, тема поднималась года два назад.
Думаю, это всё-таки будет проще ;-)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhekha
сообщение 30.6.2010, 11:38
Сообщение #8


Прохожий


Группа: Новички
Сообщений: 6
Регистрация: 23.6.2010
Пользователь №: 21 733



увы, но я не нашел ни одного рабочего примера через wine - доступ к драйверу по сети, примеры wine + работа с фс локально есть, но тоже не очень-то стабильно...

да, и функционал мне требуется небольшой: чеки (печатать и отрезать) по продажам, по возвратам и снятие x & z - отчетов (открыть и закрыть смену).

учитывая то, что настройка схемы с вайном на каждой отдельной машине - это достаточно не просто для рядового администратора, а таких машин будет около 10 сразу, плюс перспектива на увеличение - проще, на мой взгляд, выработать более универсальное решение.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhekha
сообщение 10.12.2010, 8:08
Сообщение #9


Прохожий


Группа: Новички
Сообщений: 6
Регистрация: 23.6.2010
Пользователь №: 21 733



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

http://webfile.ru/4964338
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Айнур
сообщение 4.2.2011, 9:25
Сообщение #10


Завсегдатай
***

Группа: Пользователи
Сообщений: 242
Регистрация: 24.3.2009
Из: Оренбург
Пользователь №: 16 075



Цитата(zhekha @ 10.12.2010, 10:08) *
Для юникс-систем драйвер был разработан и работает нормально. Заодно портировали и для винды: если кому интересно - хочу предложить потестить, авось кому еще пригодится... инструкция с файлом установщика в архиве.

http://webfile.ru/4964338

Можно ещё раз ссылочку ваша уже не работает?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zhekha
сообщение 4.2.2011, 10:39
Сообщение #11


Прохожий


Группа: Новички
Сообщений: 6
Регистрация: 23.6.2010
Пользователь №: 21 733



В архиве установщик и инструкция, ключи и сертификаты нужно сгенерить - можно использовать утилиту openssl.

http://webfile.ru/5102753

Вопросы можно на мыло zhekha[at]ngs.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Добавить ответ в эту темуОткрыть тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 5.10.2022, 9:06
 Яндекс цитирования  Rambler's Top100