编译内核:
参考http://www.limofans.com/forum.ph ... tid=5353&page=1
不过里面有一个地方是错误的:
CONFIG_KPL不能取消,取消后会造成dcm模块无法加载,无法控制led亮度。
编译KPL需要添加包含目录:
CFLAGS_KERNEL = -march=armv7-a -I./drivers/txsr/Inc
多点:
i8320内核版本及tinyx版本不支持现在流行的MT。有几个方法可以解决这个问题。
1)升级内核输入部分、升级tinyx。(需要做很多工作)
2)把驱动该为双鼠标模式(现在的版本支持,需要把驱动编译成可加载模块,以便调试。这个不难,谁有时间可以尝试一下)
3)改一下驱动,让应用程序直接访问。(30分钟搞定,目前gba0.7使用的方法)
在sysfs里面增加一个目录directtouchop,应用程序直接读取
static DEVICE_ATTR(directtouchop, S_IRUGO | S_IWUSR, direct_touch_show, direct_touch_store);
直接读取驱动源码:
http://www.115disk.com/viewfile.php?file_id=18271&file_key=h9CbSNpM
应用程序读取sysfs示例:
void read_touch(void)
{
char buf[1024];
int finger_type,finger_switched,x1,y1,x2,y2;
FILE * file=fopen("/sys/class/input/input1/directtouchop","r");
while(fscanf(file,"%d,%d,%d,%d,%d,%d",&finger_type,&finger_switched,&x1,&y1,&x2,&y2)!=EOF) {
process_finger_type(finger_type,finger_switched,800-y1,x1,800-y2,x2);
}
fclose(file);
}
void clear_touch(void)
{
char a='1';
FILE * file=fopen("/sys/class/input/input1/directtouchop","w");
fwrite(&a,1,1,file);
fclose(file);
}
static unsigned short syna_old_x_position = 0;
static unsigned short syna_old_y_position = 0;
static unsigned short syna_old_x2_position = 0;
static unsigned short syna_old_y2_position = 0;
static int syna_old_old_finger_type=0;
static int syna_old_finger_type = 0;
int distance(int x1, int y1, int x2, int y2)
{
int diffx,diffy;
if(x1>x2) {
diffx=x1-x2;
}
else diffx=x2-x1;
if(y1>y2)
diffy=y1-y2;
else
diffy=y2-y1;
if(diffy>diffx)
return diffy;
else
return diffx;
}
void process_finger_type(int finger_type,int finger_switched,int x_position,int y_position, int x2_position,int y2_position)
{
if ((finger_type > 0) && (finger_type < 7)) // press
{
//same point filtering
if( finger_type == syna_old_finger_type)
{
if(distance(x_position,y_position,syna_old_x_position,syna_old_y_position)<30&&
distance(x2_position,y2_position,syna_old_x2_position,syna_old_y2_position)<30)
{
return;
}
}
//end same point filtering
dprintf("finger_type=%d finger_switched=%d/n",finger_type,finger_switched);
syna_old_x_position = x_position;
syna_old_y_position = y_position;
syna_old_x2_position = x2_position;
syna_old_y2_position = y2_position;
if((syna_old_finger_type==3) || (syna_old_finger_type==4))
{
if((finger_type == 2) || (finger_type == 5)) {
if((syna_old_old_finger_type == 1) || (syna_old_old_finger_type == 6)) {
buttonRelease(finger1);
}
}
else if((finger_type == 1) || (finger_type == 6)) {
if((syna_old_old_finger_type == 2) || (syna_old_old_finger_type == 5)) {
buttonRelease(finger2);
}
}
}
int skip_report=0;
//send press event
if((finger_type == 1) || (finger_type == 2) || (finger_type == 5) || (finger_type == 6)) {
if(finger_type == 1) {
if(syna_old_finger_type == 2) {
buttonRelease(finger2);
}
else if(syna_old_finger_type==3) {
skip_report=1;
buttonRelease(finger2);
}
}
else if(finger_type == 2) {
if(syna_old_finger_type == 1) {
buttonRelease(finger1);
}
else if(syna_old_finger_type==3) {
skip_report=1;
buttonRelease(finger1);
}
}
if(skip_report) {
}
else if(finger_switched == 0) {
buttonPress(finger1,x_position,y_position);
}
else {
buttonPress(finger2,x2_position,y2_position);
}
}
else if((finger_type == 3) || (finger_type == 4)) {
if((syna_old_finger_type == 1)||(syna_old_finger_type == 6)){
buttonPress(finger2,x2_position,y2_position);
}
else if((syna_old_finger_type == 2)||(syna_old_finger_type == 5)) {
buttonPress(finger1,x_position,y_position);
}
else {
buttonPress(finger1,x_position,y_position);
buttonPress(finger2,x2_position,y2_position);
}
}
}
//end press event((finger_type > 0) && (finger_type < 7))
/ release event processing start //
else if(finger_type == 0)
{
buttonRelease(finger1);
buttonRelease(finger2);
finger_switched = 0;
syna_old_x_position = -1;
syna_old_y_position = -1;
syna_old_x2_position = -1;
syna_old_y2_position = -1;
}
syna_old_finger_type = finger_type;
if((syna_old_finger_type != 3) && (syna_old_finger_type != 4))
syna_old_old_finger_type = finger_type;
}
完整代码下载:
http://www.115disk.com/viewfile.php?file_id=18272&file_key=hLSWgjG3