⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qwsmouse_qws.cpp

📁 基于LINUX2.6.9触摸鼠标驱动QT3.0
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		

	}

		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 + -