• 4270阅读
  • 3回复

suspend/resume之后触摸屏不能使用 [复制链接]

上一主题 下一主题
离线uytlm
 
只看楼主 倒序阅读 楼主  发表于: 2010-04-02

各位大侠,我已经移植成功了触摸屏,我们用的是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);
        }
    }
}

离线numen

只看该作者 1楼 发表于: 2010-04-08
不用,重新打开
我做过类似的,
欢迎访问我的blog:
http://www.cnblogs.com/baizx
离线numen

只看该作者 2楼 发表于: 2010-04-08
这里不应该动,如果要改,你可以在tslib库里动动,看看是不是那里休眠唤醒以后没有了数据
欢迎访问我的blog:
http://www.cnblogs.com/baizx
离线uytlm
只看该作者 3楼 发表于: 2010-04-19
tslib库里休眠唤醒以后仍然有数据传来啊,使用ts_printf可以看到有数据传来,但是就是界面没有反映,所以想到ts_printf重新open了一次设备
快速回复
限100 字节
 
上一个 下一个