LINUX.ORG.RU

Если сканер включается в разрыв клавиатуры или по USB как HID-устройство, то проблем с ним не будет.

С точки зрения системы ничем не отличается от обычной клавиатуры, т.е. после сканирования выдает строку цифр/букв штрихкода (как будто их набирали на клавиатуре).

ef37 ★★
()

любые, все работают по rs232, как эксперт и разработчик софта говорю.

Lee_Noox ★★★
()
Ответ на: комментарий от ef37

для COM-порта аналогично, после сканирования напишет в ttyS? считанный код

deathmagnetic
()

даже если по usb цепляются - это просто что-то типа pl2302 - интерфейса в rs232. Ну а дальше обычное программирование последовательного порта,
Что-то типа:

#define RS232 «/dev/ttyUSB0»
#define BRATE B9600

#include <string.h>
#include <signal.h> // timers / serial
#include <termios.h> // serial
#include <unistd.h> // serial, file
#include <fcntl.h> // serial, file
#include <stdio.h>
#include <stdlib.h>

char ser_buf[32]; // Unprocessed data off the serial port
struct termios oldtty; // will be used to save old port settings
int fd_rs232;

void serial_handler (int status) {
char tmp_buf[32];
memset(&tmp_buf, 0, sizeof(tmp_buf));
read(fd_rs232, tmp_buf, sizeof(tmp_buf));
if (strstr(tmp_buf, «\x0A») != NULL) {
printf(«%s\n», ser_buf);
if (strcmp(ser_buf, «8594737168710») == 0) {
tcsetattr(fd_rs232, TCSANOW, &oldtty); // restore the old port settings before quitting
exit(0);
}
memset(ser_buf, 0, sizeof(ser_buf));
} else {
if (strstr(tmp_buf, «\x0D») == NULL)
strcat(ser_buf, tmp_buf);
}
}

int main() {
struct termios tty; // will be used for new port settings
fd_rs232 = open(RS232, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd_rs232 < 0) {
printf(«Serial port %s access denied\n», RS232);
exit(1);
}
tcgetattr(fd_rs232, &oldtty); // save current port settings
bzero(&tty, sizeof(tty)); // Initialize the port settings structure to all zeros
tty.c_cflag = BRATE | CS8 | CLOCAL | CREAD | CRTSCTS; // 8N1
tty.c_iflag = IGNPAR;
tty.c_oflag = 0;
tty.c_lflag = 0;
tty.c_cc[VMIN] = 0; // 0 means use-vtime
tty.c_cc[VTIME] = 1; // time to wait until exiting read (tenths of a second)

tcflush(fd_rs232, TCIFLUSH); // flush old data
tcsetattr(fd_rs232, TCSANOW, &tty); // apply new settings
fcntl(fd_rs232, F_SETOWN, getpid()); // enable our PID to receive serial interrupts
fcntl(fd_rs232, F_SETFL, FASYNC);

struct sigaction saio; // set the serial interrupt handler
saio.sa_handler = serial_handler; // to this function
sigemptyset(&saio.sa_mask); // clear existing settings
saio.sa_flags = 0; // make sure sa_flags is cleared
saio.sa_restorer = NULL; // no restorer
sigaction(SIGIO, &saio, NULL); // apply new settings

while (1) { } // press ctrl-c to exit the program
tcsetattr(fd_rs232, TCSANOW, &oldtty); // restore the old port settings before quitting
exit(0);
}

Lee_Noox ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.