📄 qwsmouse_qws.cpp
字号:
}
MyoldMousePos=mousePos;
// qDebug("oldmouse.x == %d oldmouse.y==%d\n",MyoldMousePos.x(),MyoldMousePos.y());
//qDebug("oldmouse.x == %d oldmouse.y==%d\n",MyoldMousePos.x(),MyoldMousePos.y());
stepx = prevPoint.x()-samp.x;
stepy = prevPoint.y()-samp.y;
pressure=samp.pressure;
qDebug("point***************prev.x=%d prev.y=%d samp.x=%d samp.y=%d prePressure=%d \n",prevPoint.x(),prevPoint.y(),samp.x,samp.y,prevPressure);
if (QABS(pressure-prevPressure)>200 )
{
qDebug("pressure outarea********** pressure=%d prePressure=%d\n",pressure,prevPressure);
//
// return;
}
if (QABS(stepx)<10 &&QABS(stepy)<10)
{
ignoreCount ++ ;
if (ignoreCount>=3&&samp.pressure<0x90)
{
prevPoint.setX(samp.x);
prevPoint.setY(samp.y);
prevPressure=samp.pressure;
mouseChanged(mousePos,Qt::LeftButton);
ignoreCount=0;
}
return;
}
///if (QABS(stepx)>200 || QABS(stepy)>200)
// return;
qDebug("OK********** stepx=%d stepy=%d presure=%d\n",stepx,stepy,(prevPressure+samp.pressure)/2);
stepx=(stepx/7.5)*2;
stepy=(stepy/15.5)*2;
//if (QABS(stepx)>40) return;
//if (QABS(stepy)>20) return;
pressure = (prevPressure+samp.pressure)/2;
prevPoint.setX(samp.x);
prevPoint.setY(samp.y);
prevPressure=samp.pressure;
if (stepx>0) currXdir = X_POSITIVE_DIRE;
else if (stepx==0) currXdir=X_ZERO_DIRE;
else currXdir=X_NEGATIVE_DIRE;
if (stepy>0) currYdir = Y_POSITIVE_DIRE;
else if (stepy==0) currYdir=Y_ZERO_DIRE;
else currYdir=Y_NEGATIVE_DIRE;
qDebug("Direct********** currXdir=%d currYdir=%d xDirect=%d yDirect=%d\n",currXdir,currYdir,xDirect,yDirect);
qDebug("ignoreCount=%d\n",ignoreCount);
// if ( currXdir!=xDirect||currYdir!=yDirect) //// direct changed
// {
// if (ignoreCount<3) {ignoreCount++;return;}
// ignoreCount=0;
// xDirect=currXdir;
// yDirect=currYdir;
// }
qDebug("Mouse current mouse.x = %d mouse.y = %d\n",mousePos.x(),mousePos.y());
mousePos.setX(MyoldMousePos.x()+stepx);
mousePos.setY(MyoldMousePos.y()+stepy);
limitToScreen(mousePos);
//if( samp.pressure>200 ) {
//if(pressure>0 &&pressure<0x60)
//{
//mouseChanged(mousePos,Qt::LeftButton);
//} else
//{
mouseChanged(mousePos,0);
//}
prevPoint.setX(0xffff);
prevPoint.setY(0xffff);
}*/
//#define ABS_X 00
//#define ABS_Y 01
//#define ABS_PRESSURE 0x18
/*
void QLubbockTPanelHandlerPrivate::readMouseData()
{
struct ts_sample samp;
struct ts_sample samp1;
struct input_event ev;
int ret,ret1,stepx,stepy,pressure;
QPoint MyoldMousePos;
if(!qt_screen)
return;
ret = read(ts->fd, &ev, sizeof(struct input_event));
if ( ret == sizeof(struct input_event) && ev.code ==ABS_X)
{
//qDebug("ev.value---->x = %x\n",ev.value);
samp.x=ev.value;
}else
{
//qDebug("ev.code -------------x%d\n",ev.code);
return;
}
ret = read(ts->fd, &ev, sizeof(struct input_event));
if ( ret == sizeof(struct input_event)&&ev.code==ABS_Y)
{
//qDebug("ev.value---->y = %x\n",ev.value);
samp.y=ev.value;
}else
{
//qDebug("ev.code -------------y%d\n",ev.code);
return;}
ret = read(ts->fd, &ev, sizeof(struct input_event));
if ( ret == sizeof(struct input_event)&&ev.code==ABS_PRESSURE)
{
//qDebug("ev.value---->pressure = %x\n",ev.value);
samp.pressure=ev.value;
}else
{
//qDebug("ev.code -------------pressure%d\n",ev.code);
return;
}
//qDebug("the 2nd =========================the 2nd\n");
ret = read(ts->fd, &ev, sizeof(struct input_event));
if ( ret == sizeof(struct input_event)&&ev.code==ABS_X)
{
//qDebug("ev.value---->x1 = %x\n",ev.value);
samp1.x=ev.value;
}else
{
// qDebug("ev.code -------------x1%d\n",ev.code);
return;
}
ret = read(ts->fd, &ev, sizeof(struct input_event));
if ( ret == sizeof(struct input_event)&&ev.code==ABS_Y)
{
// qDebug("ev.value---->y1 = %x\n",ev.value);
samp1.y=ev.value;
}else
{
// qDebug("ev.code -------------y1%d\n",ev.code);
return;
}
ret = read(ts->fd, &ev, sizeof(struct input_event));
if ( ret == sizeof(struct input_event)&&ev.code==ABS_PRESSURE)
{
// qDebug("ev.value---->pressure1 = %x\n",ev.value);
samp1.pressure=ev.value;
}else
{
// qDebug("ev.code -------------pressure1%d\n",ev.code);
return;
}
//qDebug("x===%d y==%d x1==%d y1==%d p==%d\n",samp.x,samp.y,samp1.x,samp1.y,samp.pressure);
//qDebug("x===%d y==%d x1==%d y1==%d p==%d\n",samp.x,samp.y,samp1.x,samp1.y,samp.pressure);
MyoldMousePos=mousePos;
// qDebug("oldmouse.x == %d oldmouse.y==%d\n",MyoldMousePos.x(),MyoldMousePos.y());
//qDebug("oldmouse.x == %d oldmouse.y==%d\n",MyoldMousePos.x(),MyoldMousePos.y());
stepx = samp.x - samp1.x;
stepy = samp.y - samp1.y;
if (QABS(stepx)<22||stepx>60)
stepx=0;
if (QABS(stepy)<22||stepy>60)
stepy=0;
if (stepx <22)
stepx/=10;
else
stepx/=4;
if (stepy<20)
stepy/=10;
else
stepy/=4;
mousePos.setX(MyoldMousePos.x()+stepx);
mousePos.setY(MyoldMousePos.y()+stepy);
limitToScreen(mousePos);
//mousePos.setX( samp.x);
//mousePos.setY( samp.y );
//if( samp.pressure>200 ) {
pressure=samp.pressure+samp1.pressure/2;
if (pressure>0 &&pressure<50)
{
mouseChanged(mousePos,Qt::LeftButton);
} else
{
mouseChanged(mousePos,0);
}
}*/
/*
#define MYTS_COUNT 2 //6
#define MY_X_LIMIT 60
#define MY_Y_LIMIT 50
#define MY_PRESSURE_LIMIT 80
void QLubbockTPanelHandlerPrivate::readMouseData()
{
struct ts_sample samp[MYTS_COUNT]; //x,y,pressure
int stepArray[MYTS_COUNT];
struct input_event ev;
int ret,ret1,stepx,stepy,pressure;
int i,exitFlag=0,x,y;
int realReadCount=0;
int totalx,totaly,totalPressure;
QPoint MyoldMousePos;
if(!qt_screen)
return;
do{
i=0;
exitFlag=0;
for(;;)
{
ret = read(ts->fd, &ev, sizeof(struct input_event));
if (ret!=sizeof(struct input_event)) {exitFlag=1; break;}
if ( i==0 )
{
if (ev.code ==ABS_X)
{
x=ev.value;
i++;
}
else return;
}else if (i==1)
{
if (ev.code == ABS_Y)
{
y=ev.value;
i++;
}else return;
}else if (i==2)
{
if (ev.code == ABS_PRESSURE)
{
pressure = ev.value;
break;
}else return;
}
//qDebug("i==================%d\n",i);
}
//qDebug("exitflag=%d realReadCount=%d\n",exitFlag,realReadCount);
if ( exitFlag ) //no data
{
if (realReadCount<5 ) return; /// if less than 5 samples, ignore it
qDebug("skip while -----------------realReadcount=%d\n",realReadCount);
break;
}
qDebug("x-%d y-%d pressure-%d\n",x,y,pressure);
samp[realReadCount].x=x;
samp[realReadCount].y=y;
samp[realReadCount].pressure=pressure;
if ( realReadCount>0 )
{
//if ( QABS(x-samp[realReadCount-1].x)<MY_X_LIMIT && QABS(y-samp[realReadCount-1].y)<MY_Y_LIMIT )
// realReadCount++;
//else
if (QABS(pressure-samp[realReadCount-1].pressure)>MY_PRESSURE_LIMIT)
{
samp[realReadCount] = samp[realReadCount-1]; //if invalid pressure ,set prev samp pressure
// realReadCount++;
}
realReadCount++;
}else realReadCount++;
}while(realReadCount<MYTS_COUNT);
// qDebug("Start count =================== realReadCount=%d\n",realReadCount);
totalx=0;
totaly=0;
totalPressure=0;
qDebug("************%d %d %d %d\n",samp[0].x,samp[0].y,samp[1].x,samp[1].y);
for(i=0;i<realReadCount-1;i++)
{
totalx+=samp[i].x-samp[i+1].x;
totaly+=samp[i].y-samp[i+1].y;
totalPressure+=samp[i].pressure+samp[i+1].pressure;
}
stepx = totalx/(realReadCount-1);
stepy = totaly/(realReadCount-1);
pressure=totalPressure/(realReadCount-1);
qDebug("stepx-----%d stepy ---- %d pressure ---- %d \n",stepx,stepy,pressure);
stepx/=2;
stepy/=2;
///qDebug("stepx-----%d stepy ---- %d pressure ---- %d \n",stepx,stepy,pressure);
MyoldMousePos=mousePos;
mousePos.setX(MyoldMousePos.x()+stepx);
mousePos.setY(MyoldMousePos.y()+stepy);
limitToScreen(mousePos);
if (pressure>0 &&pressure<90)
{
mouseChanged(mousePos,Qt::LeftButton);
} else
{
mouseChanged(mousePos,0);
}
}*/
#endif //QT_QWS_CUSTOMTOUCHPANEL
class QCustomTPanelHandlerPrivate : public QWSMouseHandler {
Q_OBJECT
public:
QCustomTPanelHandlerPrivate(MouseProtocol, QString dev);
~QCustomTPanelHandlerPrivate();
private:
int mouseFD;
private slots:
void readMouseData();
};
#ifdef QT_QWS_CUSTOMTOUCHPANEL
QCustomTPanelHandlerPrivate::QCustomTPanelHandlerPrivate( MouseProtocol, QString )
{
if ((mouseFD = open( "/dev/ts", O_RDONLY)) < 0) {
qWarning( "Cannot open /dev/ts (%s)", strerror(errno));
return;
} else {
sleep(1);
}
QSocketNotifier *mouseNotifier;
mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read,
this );
connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData()));
}
QCustomTPanelHandlerPrivate::~QCustomTPanelHandlerPrivate()
{
if (mouseFD >= 0)
close(mouseFD);
}
struct CustomTPdata {
unsigned char status;
unsigned short xpos;
unsigned short ypos;
};
void QCustomTPanelHandlerPrivate::readMouseData()
{
if(!qt_screen)
return;
CustomTPdata data;
unsigned char data2[5];
int ret;
ret=read(mouseFD,data2,5);
if(ret==5) {
data.status=data2[0];
data.xpos=(data2[1] << 8) | data2[2];
data.ypos=(data2[3] << 8) | data2[4];
QPoint q;
q.setX(data.xpos);
q.setY(data.ypos);
mousePos=q;
if(data.status & 0x40) {
mouseChanged(mousePos,Qt::LeftButton);
} else {
mouseChanged(mousePos,0);
}
}
if(ret<0) {
qDebug("Error %s",strerror(errno));
}
}
#endif //QT_QWS_CUSTOMTOUCHPANEL
/*
* Virtual framebuffer mouse driver
*/
#ifndef QT_NO_QWS_VFB
#include "qvfbhdr.h"
extern int qws_display_id;
QVFbMouseHandlerPrivate::QVFbMouseHandlerPrivate( MouseProtocol, QString mouseDev )
{
mouseFD = -1;
if ( mouseDev.isEmpty() )
mouseDev = QString(QT_VFB_MOUSE_PIPE).arg(qws_display_id);
if ((mouseFD = open( mouseDev.local8Bit(), O_RDWR | O_NDELAY)) < 0) {
qDebug( "Cannot open %s (%s)", mouseDev.ascii(),
strerror(errno));
} else {
// Clear pending input
char buf[2];
while (read(mouseFD, buf, 1) > 0) { }
mouseIdx = 0;
QSocketNotifier *mouseNotifier;
mouseNotifier = new QSocketNotifier( mouseFD, QSocketNotifier::Read, this );
connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData()));
}
}
QVFbMouseHandlerPrivate::~QVFbMouseHandlerPrivate()
{
if (mouseFD >= 0)
close(mouseFD);
}
void QVFbMouseHandlerPrivate::readMouseData()
{
int n;
do {
n = read(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx );
if ( n > 0 )
mouseIdx += n;
} while ( n > 0 );
int idx = 0;
while ( mouseIdx-idx >= int(sizeof( QPoint ) + sizeof( int )) ) {
uchar *mb = mouseBuf+idx;
QPoint *p = (QPoint *) mb;
mb += sizeof( QPoint );
int *bstate = (int *)mb;
mousePos = *p;
limitToScreen( mousePos );
mouseChanged(mousePos, *bstate);
idx += sizeof( QPoint ) + sizeof( int );
}
int surplus = mouseIdx - idx;
for ( int i = 0; i < surplus; i++ )
mouseBuf[i] = mouseBuf[idx+i];
mouseIdx = surplus;
}
#endif //QT_NO_QWS_VFB
/*
* return a QWSMouseHandler that supports /a spec.
*/
QWSMouseHandler* QWSServer::newMouseHandler(const QString& spec)
{
static int init=0;
if ( !init && qt_screen ) {
init = 1;
// mousePos = QPoint(qt_screen->width()/2,
// qt_screen->height()/2);
}
int c = spec.find(':');
QString mouseProto;
QString mouseDev;
if ( c >= 0 ) {
mouseProto = spec.left(c);
mouseDev = spec.mid(c+1);
} else {
mouseProto = spec;
}
MouseProtocol mouseProtocol = Unknown;
int idx = 0;
while (mouseProtocol == Unknown && mouseConfig[idx].name) {
if (mouseProto == QString(mouseConfig[idx].name)) {
mouseProtocol = mouseConfig[idx].id;
}
idx++;
}
QWSMouseHandler *handler = 0;
#ifdef QT_QWS_CUSTOMTOUCHPANEL
handler=new QCustomTPanelHandlerPrivate(mouseProtocol,mouseDev);
#endif
#ifdef QT_QWS_LUBBOCK
handler=new QLubbockTPanelHandlerPrivate(mouseProtocol,mouseDev);
#endif
#ifdef QT_QWS_YOPY
handler=new QYopyTPanelHandlerPrivate(mouseProtocol,mouseDev);
#endif
#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX)
handler=new QTPanelHandlerPrivate(mouseProtocol,mouseDev);
#endif
#ifdef Q_OS_QNX6
handler=new QQnxMouseHandlerPrivate(mouseProtocol, mouseDev );
#else
#ifndef QWS_CUSTOMTOUCHPANEL
#if !defined(QT_QWS_IPAQ) && !defined(QT_QWS_EBX)
switch ( mouseProtocol ) {
#ifndef QT_NO_QWS_MOUSE_AUTO
case Auto:
handler = new QAutoMouseHandlerPrivate();
break;
#endif
#ifndef QT_NO_QWS_MOUSE_MANUAL
case MouseMan:
case IntelliMouse:
case Microsoft:
case BusMouse:
handler = new QWSMouseHandlerPrivate( mouseProtocol, mouseDev );
break;
#endif
#ifndef QT_NO_QWS_VFB
case QVFBMouse:
handler = new QVFbMouseHandlerPrivate( mouseProtocol, mouseDev );
break;
#endif
#ifdef QT_QWS_CASSIOPEIA
case TPanel:
handler = new QVrTPanelHandlerPrivate( mouseProtocol, mouseDev );
break;
#endif
default:
qDebug( "Mouse type %s unsupported", spec.latin1() );
}
#endif
#endif
#endif //Q_OS_QNX6
return handler;
}
/*!
\fn QWSMouseHandler::clearCalibration()
This method is reimplemented in the calibrated mouse handler
to clear calibration information. This version does nothing.
*/
/*!
\fn QWSMouseHandler::calibrate(QWSPointerCalibrationData * )
This method is reimplemented in the calibrated mouse handler
to set calibration information (from, for instance, the QPE
calibration screen). This version does nothing.
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -