Форум проекта PuppyRus Linux

Разработки проекта PuppyRus => Программирование и компиляция => Тема начата: eai от 29 Сентябрь 2010, 13:20:22

Название: Linux и сканер штрихкодов
Отправлено: eai от 29 Сентябрь 2010, 13:20:22
Всем доброго времЯчка

Может быть односельчане не владеют вопросом, но все же хочу поднять тему.

Вот приспичило мне в магазинах где я работаю сделать информационный киоск.
Что это такое, да простой компьютер где покупатель может лазить по товарам, смотреть описалово.
Формально тот же инет магазин или каталог.
Посему нет ничего проще, поставь компов в зале магазина с Пуппи или ChromeOS(ждем) и пусть покупатели ходЮть и смотрят.
Но есть одна закавыка.
Очень важна функция когда покупатель подносит товар со штрихкодом к компьютеру сканирует его и ФА! комп сам нашел товар по штрихкоду и развернул все описалово и цены.
НО браузеры не работают с внешними устройствами, и судя по всему не будут!
В винде я бы решал проблемы следующим образом.
Делается приложение, которое умеет перехватывать события сканера, визуальная же часть приложения просто является контейнером для Осла.
Запустился комп, открылось приложение запросило нужную страницу, работай не хочу.
Покупатель сканирует товар и оп, оболочка загружает нужную страницу или того паче вызывает JS код в осле с указанием штрихкода.
Красиво, но как что либо подобное сделать Nix не знаю.
Посоветуйте кто чем может :)


Название: Re: Linux и сканер штрихкодов
Отправлено: Liss от 29 Сентябрь 2010, 14:11:26
Вот решение любопытное. Но тут есть одна зависимость. winserver...
Название: Re: Linux и сканер штрихкодов
Отправлено: eai от 29 Сентябрь 2010, 14:36:01
Вот решение любопытное. Но тут есть одна зависимость. winserver...
Где вот? ;-)

Уточню, мы придумали как с клавитурным сканером решить проблемы через JS
Однако я оцениваю сие решение как ненадежное.
Название: Re: Linux и сканер штрихкодов
Отправлено: gmaster от 29 Сентябрь 2010, 20:03:40
Самый простой вариант (общая идея):

1. Подключаем сканер в разрыв клавиатуры, настраиваем завершение скана символом CR.
2. На страничке среди прочих красивостей делаем форму с одним текстовым полем для приёма штрих-кода, в которое скрипт устанавливает фокус ввода.
3. При срабатывании сканера завершающий CR является аналогом нажатия Enter. Срабатывает форма.
4. Далее понятно и, по-моему, надёжно.

Паппи справится.
Название: Re: Linux и сканер штрихкодов
Отправлено: eai от 30 Сентябрь 2010, 15:08:44
1. Подключаем сканер в разрыв клавиатуры, настраиваем завершение скана символом CR.

Ok

2. На страничке среди прочих красивостей делаем форму с одним текстовым полем для приёма штрих-кода, в которое скрипт устанавливает фокус ввода.
А если еще есть поля или ссылка фокусирована, или не дай бог адресная строка.

3. При срабатывании сканера завершающий CR является аналогом нажатия Enter. Срабатывает форма.
Только если был фокус у нужного элемента


Мы сделали по другому
1. Кроме CR  в конце еще и спец символ в начале
2. Для document ловим событие keydown, если key спец символ то фокус в поле поиска
ну а дальше как было описано

Но все равно мне это не кажется очень надежным.
Что например произойдет если браузер не успеет передать фокус в нужный элемент до того как пойдут другие символы.
Опять таки управление может быть передано каким то элементам браузера (не страницы) которые не сгенерируют событие keydown для документа ...
Название: Re: Linux и сканер штрихкодов
Отправлено: takefive от 30 Сентябрь 2010, 19:38:38
Тема для меня интересная. Хочу попробовать себя в программировании. Мне нужно прочитать штрих код со сканера. Нашел ссылку http://www.opennet.ru/docs/RUS/serial_guide/#2_5_2 - подскажите, я на верном пути?
Название: Re: Linux и сканер штрихкодов
Отправлено: eai от 01 Октябрь 2010, 09:58:58
Тема для меня интересная. Хочу попробовать себя в программировании. Мне нужно прочитать штрих код со сканера. Нашел ссылку http://www.opennet.ru/docs/RUS/serial_guide/#2_5_2 - подскажите, я на верном пути?
Путь то верный но ... долгий
Обычно делается не совсем так
К сканёру идет драйвер который цепляется программой

кроме того это только для COM варианта, 50% рынка занимают сканеры USB&PS/2
Они сточки зрения компа выглядят обычной клавиатурой.
Но и тут есть драйвера, которые вешают слушатель глобальный на ввод клавы и смотрят, если быстро ведена последовательность и это штрихкод (анализ) то не передавать ввод клавиатуры а генерировать событие "введен штрихкод"
Название: Re: Linux и сканер штрихкодов
Отправлено: gmaster от 01 Октябрь 2010, 12:18:23
2. На страничке среди прочих красивостей делаем форму с одним текстовым полем для приёма штрих-кода, в которое скрипт устанавливает фокус ввода.
А если еще есть поля или ссылка фокусирована, или не дай бог адресная строка.

Давай усовершенствуем пункт 2. Откроем страничку без адресной строки с информационным блоком, который строго не более экрана, чтобы не использовать прокрутку, и с ОДНИМ полем ввода ШК, чтобы фокусу деваться было просто некуда. После запуска информационного киоска уносим клавиатуру в подсобку.

В рабочем режиме киоска пусть на экране будет всегда одно единственное описанное выше окно. В информационном блоке либо приглашение поднести штрих-код к сканеру (если многоплоскостной), либо инфо по товару, либо рекламные сообщения (по таймеру раз в пять минут). И всегда готовое к вводу одно единственное поле.

То есть даём покупателю возможность совершать только одно действие - ввод ШК.
Название: Re: Linux и сканер штрихкодов
Отправлено: eai от 01 Октябрь 2010, 19:12:32
2. На страничке среди прочих красивостей  После запуска информационного киоска уносим клавиатуру в подсобку.
Не реально потому что
1. 25 магазинов, по 10 компов в каждом = 250. по теории вероятности постоянно случается неприятность, то завис то свет выключили .... кто будет ходить и приносить клаву
2. А коли юзер захочет по названию поискать ;-)
3. А коли я захочу расширить функционал и пользователь сам можетсоставить себе покупку и передать продавцу и споконйо подождать пока ему соберут заказ. Тут как не крути клава нужна

(тачскрин не предлагать, зело дорого)
Название: Re: Linux и сканер штрихкодов
Отправлено: gmaster от 01 Октябрь 2010, 21:57:45
Нашел ссылку http://www.opennet.ru/docs/RUS/serial_guide/#2_5_2 - подскажите, я на верном пути?

Думаю, на верном. Я пытал первоисточник http://www.easysw.com/~mike/serial/serial.html  :)
Название: Re: Linux и сканер штрихкодов
Отправлено: takefive от 01 Октябрь 2010, 22:16:36
В моем понимании в виндовс драйвер сканера - некий: ком, оле, активХ и т.п. объект посредник между приложением и портом. В линукс-юникс ничего подобного не обнаружил. Просветите в общих чертах - как должно взаимодействовать мое приложение с портом?

eai - почему нельзя пойти от обратного? Получаем ШК от сканера, формируем ссылку и отправляем в броузер
Название: Re: Linux и сканер штрихкодов
Отправлено: gmaster от 02 Октябрь 2010, 12:33:29
Просветите в общих чертах - как должно взаимодействовать мое приложение с портом?

Можно обойтись без написания своего драйвера. Есть утилита для взаимодействия с портом. Делаем поиск на форуме по слову catty.
Название: Re: Linux и сканер штрихкодов
Отправлено: takefive от 02 Октябрь 2010, 21:11:55
на работе взял сканер на уикэнд и наваял. Первый опыт борьбы с СИ
Код
#include <stdio.h>   /* Стандартные объявления ввода/вывода */
#include <string.h>  /* Объявления строковых функций */
#include <unistd.h>  /* Объявления стандартных функций UNIX */
#include <fcntl.h>   /* Объявления управления файлами */
#include <errno.h>   /* Объявления кодов ошибок */
#include <termios.h> /* Объявления управления POSIX-терминалом */
 
int open_port(void);      //Функция открытия порта

int main(int argc,char **argv)
{
 char link[100];
 int fd=open_port(); //дескриптор файла порта
 int k;
 char scan_code[20];
 

 while(k!=-1)
  {
   k=read(fd,scan_code,20);
   strcpy(link, "firefox http://www.market.takefive.index.php?scan=");//адрес нужно изменить на реальный
   strncat(link, scan_code, k-1); //к ссылке добавляем ШК
   printf(" Hello World! %s \n",link); //на экран
   system(link); //запуск браузера
  }
 close(fd);
 return(0);
}

int  open_port(void)
{
 int fd;
 fd = open("/dev/ttyS0", O_RDONLY | O_NOCTTY |O_NONBLOCK);//чтение COM1 (ttyS0)
 //fd = open("/dev/ttyS1", O_RDONLY | O_NOCTTY |O_NONBLOCK);//чтение COM2 (ttyS1)
 if (fd == -1)
  {
   perror("open_port: Unable to open /dev/ttyS0 - ");
  }
 else
  {
   fcntl(fd, F_SETFL, 0);
  }
 return (fd);
}
Название: Re: Linux и сканер штрихкодов
Отправлено: eai от 04 Октябрь 2010, 09:29:00
eai - почему нельзя пойти от обратного? Получаем ШК от сканера, формируем ссылку и отправляем в броузер
Дык, я же что то того и описал что я бы сделал для Windows. Как в nix  сделать не знаю, ибо не знаю что использовать взаместо OLE
Название: Re: Linux и сканер штрихкодов
Отправлено: eai от 04 Октябрь 2010, 09:34:46
на работе взял сканер на уикэнд и наваял. Первый опыт борьбы с СИ
Код
#include <stdio.h>   /* Стандартные объявления ввода/вывода */
#include <string.h>  /* Объявления строковых функций */
#include <unistd.h>  /* Объявления стандартных функций UNIX */
#include <fcntl.h>   /* Объявления управления файлами */
#include <errno.h>   /* Объявления кодов ошибок */
#include <termios.h> /* Объявления управления POSIX-терминалом */
 
int open_port(void);      //Функция открытия порта

int main(int argc,char **argv)
{
 char link[100];
 int fd=open_port(); //дескриптор файла порта
 int k;
 char scan_code[20];
 

 while(k!=-1)
  {
   k=read(fd,scan_code,20);
   strcpy(link, "firefox http://www.market.takefive.index.php?scan=");//адрес нужно изменить на реальный
   strncat(link, scan_code, k-1); //к ссылке добавляем ШК
   printf(" Hello World! %s \n",link); //на экран
   system(link); //запуск браузера
  }
 close(fd);
 return(0);
}

int  open_port(void)
{
 int fd;
 fd = open("/dev/ttyS0", O_RDONLY | O_NOCTTY |O_NONBLOCK);//чтение COM1 (ttyS0)
 //fd = open("/dev/ttyS1", O_RDONLY | O_NOCTTY |O_NONBLOCK);//чтение COM2 (ttyS1)
 if (fd == -1)
  {
   perror("open_port: Unable to open /dev/ttyS0 - ");
  }
 else
  {
   fcntl(fd, F_SETFL, 0);
  }
 return (fd);
}

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


Код
if (!browser)
     browser = new ....;

if (browser->address != "sdcvsvcs")
     browser->address = "sdcvsvcs";
else
     browser->document->DOM->callJSfunction(code);

Код конечно не на сях, ибо с детства на С++ фигачу, и строковые тупо сравниваю операторами :)



Название: Re: Linux и сканер штрихкодов
Отправлено: dim-kut от 04 Октябрь 2010, 17:38:44
Можно обойтись без написания своего драйвера. Есть утилита для взаимодействия с портом. Делаем поиск на форуме по слову catty.
А можно просто заглянуть в мое хранилище.

Утилитка меня выручает когда надо с портом обмениваться двочными данными. Пользую ее из скрипта на tcl/tk с графической мордой.