Proximity-card reader: no data when app window out of focus


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Programming Proximity-card reader: no data when app window out of focus
# 1  
Data Proximity-card reader: no data when app window out of focus

Hello. I can't get it work Smilie
My application receives data from em-marin reader only being active. Switching to another app makes the port become silent.
MarinReader works in another thread.
Port reading is going while the app is inactive (tested).
Env: Ubuntu 9.04, Gnome, Qt (i've tryed pure open and fopen - the same result)
Please, help anybody!

Code:
bool MarinReader::read_port(QFile* file)
{
	char first_char = '\0';
	file->getChar(&first_char);
	if (first_char == ':')
	{
		QByteArray bres = file->readAll();
		QString s(bres);
		s.resize(10);
		emit CardProcessed(s);
	}
	tcflush(file->handle(), TCIOFLUSH);
	return true;
}

void MarinReader::run()
{
	emit Message("opening port " + port_name);
	struct termios Posix_CommConfig;
	QFile* Posix_File = new QFile(port_name);
	if (!Posix_File->open(QIODevice::ReadOnly))
	{
		emit Error("open file error"); exit(-1); return;
	}
/* doesn't solve the problem
	struct flock fl;
	fl.l_type   = F_RDLCK;
	fl.l_whence = SEEK_SET;
	fl.l_start  = 0; 
	fl.l_len    = 0; 
	fl.l_pid    = getpid(); 
	fcntl(Posix_File->handle(), F_SETLK, &fl); 
*/
	tcgetattr(Posix_File->handle(), &Posix_CommConfig);
	Posix_CommConfig.c_cflag |= CREAD|CLOCAL;
	Posix_CommConfig.c_lflag &= (~(ICANON|ECHO|ECHOE|ECHOK|ECHONL|ISIG));
	Posix_CommConfig.c_iflag &= (~(INPCK|IGNPAR|PARMRK|ISTRIP|ICRNL|IXANY));
	Posix_CommConfig.c_oflag &= (~OPOST);
	Posix_CommConfig.c_cc[VMIN] = 0;
	Posix_CommConfig.c_cc[VINTR] = _POSIX_VDISABLE;
	Posix_CommConfig.c_cc[VQUIT] = _POSIX_VDISABLE;
	Posix_CommConfig.c_cc[VSTART] = _POSIX_VDISABLE;
	Posix_CommConfig.c_cc[VSTOP] = _POSIX_VDISABLE;
	Posix_CommConfig.c_cc[VSUSP] = _POSIX_VDISABLE;
	//speed
	cfsetispeed(&Posix_CommConfig, B9600);
	cfsetospeed(&Posix_CommConfig, B9600);
	//data bits
	Posix_CommConfig.c_cflag&=(~CSIZE);
	Posix_CommConfig.c_cflag|=CS8;
	//parity
	Posix_CommConfig.c_cflag&=(~PARENB);
	//stop bits
	Posix_CommConfig.c_cflag&=(~CSTOPB);
	//flow control
	Posix_CommConfig.c_cflag&=(~CRTSCTS);
	Posix_CommConfig.c_iflag&=(~(IXON|IXOFF|IXANY));
	//timeout
	Posix_CommConfig.c_cc[VTIME] = 1;
	if (tcsetattr(Posix_File->handle(), TCSAFLUSH, &Posix_CommConfig) == -1)
	{
		emit Error("tcsetattr error"); exit(-1); return;
	}
	is_open = true;
	emit Message("port opened successfully");
	do
	{
		if (!read_port(Posix_File)) break;
	}
	while (!needClose);
	needClose = false;
	//fl.l_type = F_UNLCK;
	//fcntl(Posix_File->handle(), F_SETLK, &fl); 
	Posix_File->close();
	delete Posix_File;
	emit Message("port closed");
	is_open = false;
}

# 2  
Can you not make the reader a separate process - a daemon - that raises a signal or otherwise sends something to your windowing code? An unblocked signal is never ignored, for example.

Regardless of focus.
# 3  
With the following modification my windowing code gets all the counted signals:
Code:
bool MarinReader::read_port(QFile* file)
{
	static int i = 0;
	emit Message("debug message #" + QString::number(i++));
	char first_char = '\0';
	file->getChar(&first_char);
	if (first_char == ':')
	{
		QByteArray bres = file->readAll();
		QString s(bres);
		s.resize(10);
		emit CardProcessed(s);
	}
	tcflush(file->handle(), TCIOFLUSH);
	return true;
}

Signals CardProcessed and Message are identical, and the destination slots are in the same thread of main window (I can process these signals with the same slot).
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #688
Difficulty: Medium
The first computer to implement architectures enabling reverse Polish notation (RPN) was the Apple I computer.
True or False?

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

How to regain the focus back to the launch window?

Consider this code snippet below:- char=`which afplay` if then xterm -e 'while true; do clear; echo "Press Ctrl-C to Quit..."; afplay /tmp/pulse.wav; done' & > /dev/null 2>&1 fi This launches a second terminal window that generates a specific waveform for the next calibration of... (4 Replies)
Discussion started by: wisecracker
4 Replies

2. Programming

Building app. to send data to website

Hi. I plan to build an application which takes text data from a user. It then sends this to a website, login required. The business case being this site contains many text fields, mostly redundant to user. My application would only prompt user for necessary text. What language, methods... (4 Replies)
Discussion started by: cic
4 Replies

3. What is on Your Mind?

CNET News Reader App for the Forums

We are thinking of building a CNET style reader app for reading threads in the forums. One developer suggested we look at a CNN vBulletin app, which I am not familiar with (he said he will post the link tomorrow, Monday). Anyway, I asked the (potential) developer for this app to work with us in... (1 Reply)
Discussion started by: Neo
1 Replies

4. UNIX for Dummies Questions & Answers

grab the data from the unix window

Hi, How could i grab a set of data (eg:file execution start & stop time stamp f) from unix? (1 Reply)
Discussion started by: siriv
1 Replies

5. Programming

Multithread app - Read-Only Data

Hello, I'm coding an application using pthreads.At some point the threads will read some read-only variables.Is it safe NOT to use mutexes, in order to make the program lighter since mutex operations are resource-demanding... Thanks (1 Reply)
Discussion started by: jonas.gabriel
1 Replies

6. Shell Programming and Scripting

Bash: Exiting while true loop when terminal is not the focus window

I am running an Ubuntu Gutsy laptop with Advanced Compiz fusion options enabled. I am using xdotool to simulate keyboard input in order to rotate through multiple desktops. I am looking for a way to kill a while true loop when the Enter key (or Control+C if it is easier) is pushed when the... (2 Replies)
Discussion started by: acclaypool
2 Replies

7. Solaris

Secure Card Reader

I see on some of the recent Sun workstations that there is a secure card reader installed. I have a Sunblade 100 and 150 and would like to know, how do you access this device or turn it on to use it? Thanks, (2 Replies)
Discussion started by: stocksj
2 Replies

8. Programming

Hiding app window

I am facing a problem while creating/executing a process in C. I am using old fork/exec mechanism. The problem is: I want to hide the console window of the app i am instantiating. Remember i am instantiating a console application from a GUI application. Is this possible? How? Comments are... (1 Reply)
Discussion started by: amessbee
1 Replies

9. UNIX for Dummies Questions & Answers

MSR magnetic stripe card reader

Hi all I am working on MSR110 ...Can anyone plz tell me how to use the configuration commands with magnetic reader???. Please help me out as i have to develop API in C on linux platform.MSR110 is not responding to the configuration commands. Please help... Regards Mahima (0 Replies)
Discussion started by: mahima_er
0 Replies

Featured Tech Videos