各位大侠,我已经移植成功了触摸屏,我们用的是USB连接的intellipen超声波模块和一个超声波笔,
启动的时候触摸屏是ok的,但是在将整个系统suspend并resume之后触摸屏不能使用,
这时使用ts_read和ts_read_raw又可以看到有数据传来,仅仅是界面上没有反应,猜想是USB在suspend
之后断开了一次,如果之后再使用readMouseData就要重新open一下/dev/ts这个设备啊,求达人见解~
我们使用的是qt-embedded-linux-opensource-src-4.5.3\src\gui\embedded\qmousetslib_qws.cpp
void QWSTslibMouseHandlerPrivate::readMouseData()
{
if (!qt_screen)
return;
//在suspend/resuem之后,是不是这里要重新打开一次设备?
for(;;) {
struct ts_sample sample = lastSample;
bool pressed = wasPressed;
// Fast return if there's no events.
if (!get_sample(&sample))
return;
pressed = (sample.pressure > 0);
// Only return last sample unless there's a press/release event.
while (pressed == wasPressed) {
if (!get_sample(&sample))
break;
pressed = (sample.pressure > 0);
}
// work around missing coordinates on mouse release in raw mode
if (!calibrated && !pressed && sample.x == 0 && sample.y == 0) {
sample.x = lastSample.x;
sample.y = lastSample.y;
}
int dx = sample.x - lastSample.x;
int dy = sample.y - lastSample.y;
// Remove small movements in oppsite direction
if (dx * lastdx < 0 && qAbs(dx) < jitter_limit) {
sample.x = lastSample.x;
dx = 0;
}
if (dy * lastdy < 0 && qAbs(dy) < jitter_limit) {
sample.y = lastSample.y;
dy = 0;
}
if (wasPressed == pressed && dx == 0 && dy == 0)
return;
#ifdef TSLIBMOUSEHANDLER_DEBUG
qDebug() << "last" << QPoint(lastSample.x, lastSample.y)
<< "curr" << QPoint(sample.x, sample.y)
<< "dx,dy" << QPoint(dx, dy)
<< "ddx,ddy" << QPoint(dx*lastdx, dy*lastdy)
<< "pressed" << wasPressed << pressed;
#endif
lastSample = sample;
wasPressed = pressed;
if (dx != 0)
lastdx = dx;
if (dy != 0)
lastdy = dy;
const QPoint p(sample.x, sample.y);
if (calibrated) {
// tslib should do all the translation and filtering, so we send a
// "raw" mouse event
handler->QWSMouseHandler::mouseChanged(p, pressed);
} else {
handler->sendFiltered(p, pressed);
}
}
}