C++[LINUX] : Lettura Emulatore di Tastiera

di il
8 risposte

C++[LINUX] : Lettura Emulatore di Tastiera

Salve a tutti

sto creando un progetto in c++ sotto Linux(Debian), sul mio PC è collegato un lettore di Barcode che ha la funzione di emulazione di tastiera,premetto che il programma girerà in background quindi non c'è nessuna interazione grafica con l'utente, apparte il lettore, quindi mi servirebbe sapere come fare a gestire correttamente la lettura del barcode.
Ho già fatto una porzione di codice ma mi sembra che non sia propriamente corretta, tutto il codice gira in un thread parallelo al main:

int fd;
bool b_UpperCase = false;
char c;
string strLog;
struct input_event ev;
while(1)
{
     fd = open("/dev/input/event0", O_RDONLY);//____Apertura del file eventi del Lettore di barcode.
	//cout << "Apro il file di tastiera \n";
	if(!fd)
	{
	//std::cout << "File non aperto \n";
	}
	else
	{
		//std::cout << "File aperto \n";
		
		while (1)
		{
			read(fd, &ev, sizeof(struct input_event));
			if(ev.type == 1)
			{
				if(ev.value == 1)
				{
					if(ev.code == 42 || ev.code == 54 || b_UpperCase == true) //_____Se viene vista la pressione di Shift destro o Sinistro si procederà con Upper case
					{
						if(b_UpperCase == false)
						{
							b_UpperCase = true;
						}
						else
						{
							c = (char)(i_EncodASCII(ev.code) - 32);
							strLog += c ;
							cout << endl;
							//cout << "\r";
							b_UpperCase = false;
						}
					}
					else
					{
						c = (char)i_EncodASCII(ev.code);
						strLog += c ;
						cout << endl;
						//cout << "\r";
					}
				}
				if(ev.code == 28)
				{
					str_LogUser = strLog;							//_____Assegnamento della stringa letta, il carattere di fine stringa è CR o 28 in Linux
					break;
				}
			}
		}
}

8 Risposte

  • Re: C++[LINUX] : Lettura Emulatore di Tastiera

    Se a te sembra che ci sia qualche problema ma non sai cosa e conosci il device e quello che devi fare, figurati chi ti legge cosa ti può rispondere.

    Dai maggiori dettagli o dubito che qualcuno ti potrà rispondere ...
  • Re: C++[LINUX] : Lettura Emulatore di Tastiera

    Scusami
    provo a rifare la domanda in modo più semplice e più chiaro.

    Devo fare un programma che legga l'input da uno scanner laser per Barcode che si collega via USB al mio PC come emulatore di tastiera, il sistema operativo che sto utilizzando è Linux(Debian), volevo avere dei consigli su che librerie C++ da utilizzare e magari se possibile un piccolo esempio di come và gestita la cosa.
    Purtroppo non ho trovato in internet degli esempi, ma solo degli articoli che indicavano l'utilizzo del File eventX e di leggerlo tramite la struttura "input_event" ma purtroppo utilizzando la routine che ho postato sopra ogni volta che passo il barcode la stringa di ritorno è sempre più lunga, cioè contiene sia la lettura precedente sia quella appena fatta.
  • Re: C++[LINUX] : Lettura Emulatore di Tastiera

    Probabilmente devi solo eseguire una lettura tradizionale dei caratteri che la tua "tastiera" ti sta spedendo, in maniera tale da fare un flush del buffer.
  • Re: C++[LINUX] : Lettura Emulatore di Tastiera

    Strlog non viene mai azzerrato nel codice.
  • Re: C++[LINUX] : Lettura Emulatore di Tastiera

    Grazie ragazzi per le risposte.

    ciao skynet, ma per azzerare lo strlog come si fa?? basta assegnargli una stringa vuota del tipo
    
    
    strlog = "";
    
    
    Ciao candaluar, per leggere da tastiera intendi di utilizzare un "cin" o un getchar() ?
    Io ad oggi leggo il file eventX con la funzione read() che si usa per un normalissimo file, il fatto è che per leggere il carattere successivo sono costretto ad eseguire un ritorno a capo con un cout,
    
    
    cout << endl;
    
    
    nel codice che ho postato precedentemente si vede anche se si capisce poco .
  • Re: C++[LINUX] : Lettura Emulatore di Tastiera

    Ciao candaluar, per leggere da tastiera intendi di utilizzare un "cin" o un getchar() ?
    Esatto, siccome il tuo lettore barcode è a tutti gli effetti una tastiera supponevo che ci sia bisogno di svuotare il buffer. Questa però è solo una mia supposizione.
    Ad ogni modo, l'emulazione tastiera serve ad utilizzare questi lettori senza dover modificare il software applicativo, basta posizionarsi a video sul campo di input ed eseguire la lettura. Se si vuole invece avere il controllo del lettore (come nel tuo caso), la modalità "emulazione tastiera" diventa un ostacolo: meglio sarebbe provare a vedere se il lettore può essere utilizzato in qualche altra modalità.
  • Re: C++[LINUX] : Lettura Emulatore di Tastiera

    Purtroppo non penso sia possibile cambiare la modalità di inserimento o di funzionalità perchè nella scatola non c'era allegato nessun manuale di configurazione, che di solito è un manuale contenete pagine di barcode da far leggere allo strumento per la sua configurazione.

    Diciamo che per leggere l'input ce la faccio lo stesso con la routine che ho implementato ma mi rimane solo il problema che il set di caratteri che leggo di volta in volta è sempre più lungo, nel senso che nel file eventX mi ritrovo sempre anche le stringhe precedentemente lette, anche se faccio l'operazione di apertura e chiusura del file.
  • Re: C++[LINUX] : Lettura Emulatore di Tastiera

    Hai provato a leggere il buffer della tastiera con cin o getchar()?
Devi accedere o registrarti per scrivere nel forum
8 risposte