Android电阻触摸屏校准

本文介绍了在Android 2.3.7系统上针对freescale53平台进行电阻触摸屏校准的过程。通过分析ts_calibrator进程,详细讲解了3点校准的步骤,包括读取物理坐标、更新驱动参数和JNI技术在交互中的应用。在实施校准过程中遇到的读取坐标问题、驱动参数恢复以及应用程序交互的挑战,以及如何利用JNI创建线程监听设备节点来解决这些问题。
摘要由CSDN通过智能技术生成
首先电阻屏为什么需要校准,这是电气方面的知识,我也不懂,这里就不说了,这里主要讲讲自己在项目中是怎么通过应用程序来实现校准的,好记性不如烂笔头这里有一篇讲解触摸屏校准原理和优化的文章,道客巴巴上的,先看看了解怎么做 触摸屏校准原理与优化

通过一系列文章的了解,认识到要想真正做到实现校准,就必须能够更新android系统中的转换参数文件,看一些文章的介绍,不知道是因为版本或者平台,总感觉和我的系统版本不一样,该有的文件都找不到,这里我使用的是freescale53,android2.3.7平台

系统烧写后第一次启动的时候会有一个需要实现校准的过程,是在一个进程中做到的,文件目录system/core/ts_calibrator,分析这个文件主要分为检查文件,校准读取,画十字,计算并写入驱动:

首先在init.rc文件中我们能够会执行ts_calibrator进程,并在这里处于阻塞状态,等待用户触击屏幕

on boot
# basic network init
    ifup lo
    hostname localhost
    domainname localdomain

    mkdir /data/system 0775 system system
    exec /sbin/ts_calibrator

在ts_calibrator.c中,首先会检测有没有校准文件,如果没有需要重新生成,如果存在该文件就读出该文件中的数据并写入到驱动中生效(这个文件我们也可以自己生成并写入比较准确的数据,这样子开机的时候就不用校准)

property_get("ro.calibration", runme, "");
    if (runme[0] != '1')
	return 0;

    /* open log */
    log_fd = open(log, O_WRONLY | O_CREAT | O_TRUNC);

    if (check_conf())
        do_calib = 0;

/* check conf file */
    if (stat(cf_file, &s) == 0) {
	/* conf file already existed */
	cf_fd = open(cf_file, O_RDWR);
	if (cf_fd >= 0) {
	    buffer = calloc(1, s.st_size + 1);
	    read(cf_fd, buffer, s.st_size);
	    ret = sscanf(buffer, "%d\n%d\n%d\n%d\n%d\n%d\n%d",
				&data[0], &data[1], &data[2],
				&data[3], &data[4], &data[5],
				&data[6]);
	    if (ret == 7) {
		free(buffer);
		/* write to driver */
		write_conf(data);
		close(cf_fd);
		return 1;
	    }
	    log_write("Failed to get datas from conf file: %d\n", ret);
	    free(buffer);
	    close(cf_fd);
	}//else可以做自己的处理
    }


校准读取:系统采用3点校准,连续三次读取触摸点的物理坐标,其中显示屏的坐标是已知的

static void get_input(int *px, int *py)
{
    int rd, i;
    struct input_event ev[64];
    int step = 0;

    while (1) {

	/* read ts input 这里会一直读取,知道松手跳出循环*/
	rd = read(ts_fd, ev, sizeof(struct input_event) * 64);

	if (rd < (int) sizeof(struct input_event)) {
	    log_
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值