北京理工大学 20981 陈罡
a1200的触摸屏开发,如果完全从底层开发的话,那就是对/dev/touchscreen设备文件的访问和操作了。
但是有一个很郁闷的问题,那就是本身手机的gui环境——ezx,就在使用着这个文件,我编写程序测试过,
我用程序直接打开/dev/touchscreen,得到每次16个字节的数据,可以知道起总0xffff后面的就是真实触摸屏数据了,但是系统会对鼠标动作进行处理和响应,直接会切出你的程序。
所以,只有两个选择,第一个是在你的程序启动以后,把ezx系统的qwe的windowserver环境关掉,就不会影响/dev/touchscreen文件数据读取和响应;第二个是利用现有的ezx破解头文件,重载其中的可以处理鼠标事件的类,完成鼠标事件的捕获。
#include
#include
#include
#include
class MyApplication:public QApplication{
//Q_OBJECT, 这里没有用qt常用的宏,不知道是为什么。。。可能破解不完全吧。
public:
MyApplication(int argc,char **argv):QApplication(argc,argv) {}
virtual ~MyApplication() {}
virtual bool qwsEventFilter( QWSEvent * event) {
QApplication::qwsEventFilter(event);
QWSMouseEvent * mouse = NULL;
QWSFocusEvent * focus = NULL ;
int x,y,z;
if(!event) return false;
switch(event->type){
case QWSEvent::NoEvent:
//printf("no event\n");
break;
case QWSEvent::Connected:
//printf("connected\n");
break;
case QWSEvent::Mouse:
mouse = event->asMouse();
if(mouse==0) return false;
x=mouse->simpleData.x_root;
y=mouse->simpleData.y_root;
z=mouse->simpleData.state;
printf("mouse: x=%d,y=%d,state=%d\n",x,y,z);
//这里的x,y代表触摸笔在触摸屏上的坐标,z代表当前的按压状态,z=1时,代表触摸笔是贴在触摸屏上的,z=0时,代表触摸笔离开触摸屏,我们可以通过对z值变化的判断来确定触摸笔的单击或者双击,例如:z值从1变为0,代表用户按下后,又离开触摸屏,代表一次click事件。当z全为1,并且x值有增大趋势时,代表用户向上滑动触摸笔,反之代表向下滑动触摸笔,由此可以计算出滑动的速度,加速度,利用这些参数,就可以做出类似苹果的iphone界面效果的ui出来。
break;
case QWSEvent::Focus:
focus=(QWSFocusEvent *)event;
printf("focus %d\n",focus->simpleData.get_focus);
break;
case QWSEvent::Key:
//printf("key\n");
break;
}
return false ;
}
};
int main (int argc, char** argv)
{
MyApplication app (argc, argv);
QWidget* w = new QWidget ;
app.setMainWidget ((QWidget *)w);
w->showFullScreen();
return app.exec();
}
编译的时候,偶是直接编写makefile的,没有用openezx项目中提到的工具。所以稍微繁琐一点:
EZX_BASE=..
XPREFIX=arm-linux-
CXX=$(XPREFIX)g++
CC=$(XPREFIX)gcc
STRIP=$(XPREFIX)strip
CXXFLAGS=-fno-exceptions -fno-rtti -DQWS -Wall -g
MOC=$(EZX_BASE)/moc/moc
INCLUDE=-I$(EZX_BASE)/include/qt -I$(EZX_BASE)/include/ezx
LIBDIRS=-L$(EZX_BASE)/lib -L$(EZX_BASE)/lib/ezx/lib
LIBS= -lezxappsdk -lipp-jp -lezxopenwindow -lipp-miscGen -lezxappbase -lqte-mt -lezxjpeg -lezxpm -lpthread
OBJS=t3.o
APP=t3
all: $(APP)
dist: $(APP).pkg
t3.o: t3.cpp t3.moc
$(APP).pkg: $(APP).o
$(STRIP) $(APP)/$(APP)
tar cvfz $(APP).tar.gz $(APP)
mv $(APP).tar.gz $(APP).pkg
clean:
rm -f $(OBJS) $(APP)/$(APP) $(APP).pkg *~ $(APP)/*~ *.moc
%.o: %.cpp
$(CXX) $(CXXFLAGS) $(INCLUDE) -c $<
%.moc: %.cpp
$(MOC) $< -o $@
$(APP): $(OBJS)
$(CXX) $^ -o $(APP)/$@ $(LIBDIRS) $(LIBS)
下面是telnet运行后的输出:
阅读(3876) | 评论(0) | 转发(0) |