发明内容
本发明所要解决的技术问题是,如何实现对任意触摸屏进行校屏。
本发明实施例提供了在安卓系统下触摸屏的校屏方法,包括:
S1,用户对触摸屏上指定校准点的点击后,应用层APK获得对应校准点显示屏坐标值;
S2,后台程序将内核层上报的事件转化为指定校准点的触摸屏坐标;
S3,后台程序通过TCP/IP协议,将指定校准点的触摸屏坐标传送给所述应用层校屏APK;
S4,所述应用层校屏APK调用校准算法,根据指定校准点的显示屏坐标、指定校准点的触摸屏坐标得到校屏系数,将校屏系数存入指定文件中;
S5,在应用框架层,通过函数调用所述校准算法,根据任意点的触摸屏坐标、所述校屏系数得到校准后的任意点的触摸屏坐标。
本发明另一实施例提供了在安卓系统下触摸屏的校屏装置,包括:
接收模块,用于由应用层校屏APK接收用户对触摸屏上指定校准点的点击事件;
转换模块,用于将获取的事件转化为指定校准点的触摸屏坐标;
传送模块,用于通过TCP/IP协议,将指定校准点的触摸屏坐标传送给所述应用层校屏APK;
校屏系数计算模块,用于由所述应用层校屏APK调用校准算法,根据指定校准点的显示屏坐标、指定校准点的触摸屏坐标得到校屏系数,将校屏系数存入指定文件中;
校准模块,用于在应用框架层,通过函数调用所述校准算法,根据任意点的触摸屏坐标、所述校屏系数得到校准后的任意点的触摸屏坐标。
从以上技术方案可以看出,本发明实施例具有以下优点:本发明针对android4.0系统提供具体方案,实现在framework框架层对触摸屏进行校屏。由于android 系统framework框架层提供了一般化的机制,对所有底层上报的触摸事件均可处理与上报给应用层,因此在framework框架层可实现任意触摸屏的校屏,相比在驱动层上校准更为灵活。
具体实施方式
下面将结合本发明中的说明书附图,对发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
Android系统从下到上分为:Linux内核层、系统运行库层、应用程序框架层(framework层)和应用程序层,本发明涉及到其中的Linux内核层、应用程序框架层与应用程序层。
参见图1,本发明实施例提供了在安卓系统下触摸屏的校屏方法,包括:
S1,应用层校屏APK响应用户对触摸屏上指定校准点的点击;
android应用层指定5个校准点,校屏时用户依次点击此5点。用户点击校准点时,通过Linux内核层的read函数获取驱动层的点击事件:
read(ufds[i].fd, &event, sizeof(event));
S2,后台程序将获取的事件转化为指定校准点的触摸屏坐标;
例如,输入的代码如下:
Void convert_events_to_coord(struct input_event* event, touchscreen_position* ts)
{
switch (event->code) {
case ABS_MT_POSITION_X:
ts->position_x = event->value;
break;
case ABS_MT_POSITION_Y:
ts->position_y= event->value;
break;
default:
break;
}
}
在本实施例中,优选地,所述指定校准点包括:左上,右上,左下,右
下,中间点;S2中还包括,将获取的事件取均值操作,将5个均值操作后的事件转化为5个指定校准点的触摸屏坐标。
S3,后台程序通过TCP/IP协议,将指定校准点的触摸屏坐标传送给所述应用层校屏APK;
S4,所述应用层校屏APK调用校准算法,根据指定校准点的显示屏坐标、指定校准点的触摸屏坐标得到校屏系数,将校屏系数存入指定文件中;
在本实施例中,需要说明的是,所述S4中的指定文件具体指:/data/TS_CONFIG文件。
参见图2,在本实施例中,需要说明的是,所述S4中得到校准系数的步
骤如下:
S41,应用层校屏APK调用校准算法,所述校准算法为:
其中,XT、YT为触摸屏坐标,XL、YL为对应的显示屏坐标,其中a(0)、
a(1)、a(2)、a(3)、a(4)、a(5)为校准系数;
S42,输入5个指定校准点的显示屏坐标和5个指定校准点的触摸屏坐标,
对方程式求解,得到校屏系数a(0)、a(1)、a(2)、a(3)、a(4)、a(5)。
在本实施例中,利用上述10个方程,可求得校屏系数。
参见图3,在本实施例中,优选地,所述S42具体步骤如下:
S421,构建x轴的目标函数f(x)、y轴的目标函数f(y):
校准算法的目的为求得最佳的校准系数,可通过最小均方误差的方法求得。
S422,将f(x)分别对系数进行求导,并设f(x)为0,解方程可得校屏系数
a(0)、a(1)、a(2);f(y)分别对系数进行求导,并设f(y)为0,解方程可得校屏系数a(3)、a(4)、a(5);
为得到最佳的校准系数,只需使f(x)为最小。对上式分别对系数进行求导:解上述方程可得最佳的校屏系数组a(0)、a(1)、a(2);
为得到最佳的校准系数,只需使f(y)为最小。对上式分别对系数进行求导:解上述方程可得最佳的校屏系数组a(3)、a(4)、a(5)。
例如,将APK层得到的最佳校准系数从文件中读取出来,存入结构体calibration中的数组a中,输入代码如下:
#define CALIBRATION_FILE "/data/TS_CONFIG"
typedef struct{
int a(6);
}calibration;
void read_calibrate_param(int * calibrate_param)
{
FILE* fp = NULL;
fp = fopen(CALIBRATION_FILE, "r");
if(fp == NULL)
{
printf("file open error!");
}
fread(calibrate_param, sizeof(int), 6, fp);
fclose(fp);
fp=NULL;
}
S5,在应用框架层,通过函数调用所述校准算法,根据任意点的触摸屏坐标、所述校屏系数得到校准后的任意点的触摸屏坐标。
在本实施例中,需要说明的是,所述S5中的函数具体指:\frameworks\base\services\input\ InputReader .cpp 中的cookPointerData()函数。
因此校准方程是:
其中, 为校准后的任意点的触摸屏坐标,其与显示屏坐标值无限接近,,为任意点的触摸屏坐标,a(0)~a(5)为6个最佳校屏系数。
例如:
android4.0系统处理触摸屏坐标与显示屏坐标的转换关系在应用程序框架层\frameworks\base\services\input\ InputReader .cpp 中的cookPointerData()函数中,在此函数中添加触摸屏校准代码:
x = float((in.x)*calibrate_param[0] + (in.y)*calibrate_param[1] + calibrate_param[2]);
y = float((in.x)*calibrate_param[3] + (in.y)*calibrate_param[4] + calibrate_param[5]);
优选地,利用全局标志变量,强制每次校屏只读取一次校准系数文件,以提高代码执行效率;
因此,在上述函数之前,还包括如下代码:
if(calibrate_param_flag == 0)
{
read_calibrate_param(calibrate_param);
calibrate_param_flag = 1;
}
综上所述,本发明能较好的解决电容屏在android系统使用中出现的缩放,翻转,平移等问题,本发明是在android4.0 framework层对触摸坐标进行修正,可对任意类型触摸屏进行校屏,相比在驱动层上修正更为灵活。
实施例二
参见图4,在安卓系统下触摸屏的校屏装置,包括:
接收模块201,用于由应用层校屏APK响应用户对触摸屏上指定校准点的点击;
转换模块202,用于将获取的事件转化为指定校准点的触摸屏坐标;
传送模块203,用于通过TCP/IP协议,将指定校准点的触摸屏坐标传送给所述应用层校屏APK;
校屏系数计算模块204,用于由所述应用层校屏APK调用校准算法,根据指定校准点的显示屏坐标、指定校准点的触摸屏坐标得到校屏系数,将校屏系数存入指定文件中;
校准模块205,用于在应用框架层,通过函数调用所述校准算法,根据任意点的触摸屏坐标、所述校屏系数得到校准后的任意点的触摸屏坐标。
在本实施例中,优选地,所述指定校准点包括:左上,右上,左下,右下,中间点;转换模块中还包括:均值处理单元,用于将获取的事件取均值操作;转化单元,用于将5个均值操作后的事件转化为5个指定校准点的触摸屏坐标。
参见图5,在本实施例中,需要说明的是,所述校屏系数计算模块204具体包括:
调用单元2041,用于由应用层校屏APK调用校准算法,所述校准算法为:
其中,XT、YT为触摸屏坐标,XL、YL为对应的显示屏坐标,其中a(0)、
a(1)、a(2)、a(3)、a(4)、a(5)为校准系数;
计算单元2042,用于输入5个指定校准点的显示屏坐标和5个指定校准
点的触摸屏坐标,对方程式求解,得到校屏系数a(0)、a(1)、a(2)、a(3)、a(4)、a(5)。
参见图6,在本实施例中,优选地,所述计算单元2042具体包括:
构建子单元20421,用于构建x轴的目标函数f(x)、y轴的目标函数f(y):
求解子单元20422,用于将f(x)分别对系数进行求导,并设f(x)为0,解
方程可得校屏系数a(0)、a(1)、a(2);将f(y)分别对系数进行求导,并设f(y)为0,解方程可得校屏系数a(3)、a(4)、a(5);
综上所述,本发明能较好的解决电容屏在android系统使用中出现的缩放,翻转,平移等问题,本发明是在android4.0 framework层对触摸坐标进行修正,可对任意类型触摸屏进行校屏,相比在驱动层上修正更为灵活。
以上对本发明所提供的在安卓系统下触摸屏的校屏方法和装置进行了详细介绍,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。