static int ns2009_ts_report(struct ns2009_data *data) { u16 x[10], y[10], z1; u16 agvx,agvy,maxx,minx,maxy,miny; s32 sx,sy,stx,sty,stax,stay; int i; int ret; /* * NS2009 chip supports pressure measurement, but currently it needs * more investigation, so we only use z1 axis to detect pen down * here. */ ret = ns2009_ts_read_data(data, NS2009_READ_Z1_LOW_POWER_12BIT, &z1); if (ret) return ret; if (z1 >= NS2009_PEN_UP_Z1_ERR) { for(i=0;i<10;i++) { ret = ns2009_ts_read_data(data, NS2009_READ_X_LOW_POWER_12BIT,&x[i]); if (ret) return ret; ret = ns2009_ts_read_data(data, NS2009_READ_Y_LOW_POWER_12BIT,&y[i]); if (ret) return ret; } //计算平均值 agvx=0; agvx=0; maxx=x[2]; minx=maxx; maxy=y[2]; miny=maxy; for(i=0;i<10;i++) { agvx += x[i]; agvy += y[i]; if(minx > x[i]) minx = x[i]; if(maxx < x[i]) maxx = x[i]; if(miny > y[i]) miny = y[i]; if(maxy < y[i]) maxy = y[i]; } //agvx -= maxx; //agvx -= minx; ///agvy -= maxy; //agvy -= miny; agvx /= 10; agvy /= 10; //计算方差 stax = agvx; stay = agvy; sx = 0; sy = 0; for(i=0;i<10;i++) { stx = x[i]; sx += (stx-stax)*(stx-stax); sty = y[i]; sy += (sty-stay)*(sty-stay); } sx /= 10; sy /= 10; if(sx>50) return sx; if(sy>50) return sy; if (!data->pen_down) { input_report_key(data->input, BTN_TOUCH, 1); data->pen_down = true; } input_report_abs(data->input, ABS_X, agvx); input_report_abs(data->input, ABS_Y, agvy); input_sync(data->input); } else if (data->pen_down) { input_report_key(data->input, BTN_TOUCH, 0); input_sync(data->input); data->pen_down = false; } return 0; }
我修改了驱动部分代码之后发现在执行ts_calibrate和ts_test效果还没有原来在好
运行QT程序也没有什么作用
static int ns2009_ts_report(struct ns2009_data *data)
{
u16 x[10], y[10], z1;
u16 agvx,agvy,maxx,minx,maxy,miny;
s32 sx,sy,stx,sty,stax,stay;
int i;
int ret;
/*
* NS2009 chip supports pressure measurement, but currently it needs
* more investigation, so we only use z1 axis to detect pen down
* here.
*/
ret = ns2009_ts_read_data(data, NS2009_READ_Z1_LOW_POWER_12BIT, &z1);
if (ret) return ret;
if (z1 >= NS2009_PEN_UP_Z1_ERR)
{
for(i=0;i<10;i++)
{
ret = ns2009_ts_read_data(data, NS2009_READ_X_LOW_POWER_12BIT,&x[i]);
if (ret) return ret;
ret = ns2009_ts_read_data(data, NS2009_READ_Y_LOW_POWER_12BIT,&y[i]);
if (ret) return ret;
}
//计算平均值
agvx=0;
agvx=0;
maxx=x[2];
minx=maxx;
maxy=y[2];
miny=maxy;
for(i=0;i<10;i++)
{
agvx += x[i];
agvy += y[i];
if(minx > x[i]) minx = x[i];
if(maxx < x[i]) maxx = x[i];
if(miny > y[i]) miny = y[i];
if(maxy < y[i]) maxy = y[i];
}
//agvx -= maxx;
//agvx -= minx;
///agvy -= maxy;
//agvy -= miny;
agvx /= 10;
agvy /= 10;
//计算方差
stax = agvx;
stay = agvy;
sx = 0;
sy = 0;
for(i=0;i<10;i++)
{
stx = x[i];
sx += (stx-stax)*(stx-stax);
sty = y[i];
sy += (sty-stay)*(sty-stay);
}
sx /= 10;
sy /= 10;
if(sx>50) return sx;
if(sy>50) return sy;
if (!data->pen_down)
{
input_report_key(data->input, BTN_TOUCH, 1);
data->pen_down = true;
}
input_report_abs(data->input, ABS_X, agvx);
input_report_abs(data->input, ABS_Y, agvy);
input_sync(data->input);
} else if (data->pen_down) {
input_report_key(data->input, BTN_TOUCH, 0);
input_sync(data->input);
data->pen_down = false;
}
return 0;
}
]]>就参考晕哥的方法改的。代码在另一电脑,等空上传。
谢谢,谢谢
]]>-------------粘贴代码出现下面的错误,难道不能用[]?
继续发帖前请修正以下错误:
[ i ] 标签不允许在其自身内部使用
quote 标签是有这个问题,
用 code 标签可以解决这个问题
]]>继续发帖前请修正以下错误:
[ i ] 标签不允许在其自身内部使用
]]>晕哥 说:john78 说:哦,那我也用这个芯片了。呵呵,跟着吃螃蟹。
这个是荔枝派zero开发板的触摸屏驱动程序,驱动是现成的,不用吃螃蟹,改进优化一下就可以了。
大神,您好,您修改好的,ns2009驱动,可以分享一下给我学习一下吗?本人小白,正在学习这方面知识
这个是 。。。。 你懂的
你到时候有什么问题, 直接发上来看看
后来我想想, 应该是当时 tslib 静态链接造成的, 没有正确使用 tslib 的插件。
因为 tslib 里面本身自带了各种滤波器插件, 所以你不用改任何代码,但是我一直没有来得及验证这个想法
]]>