Android电阻触摸屏校准

首先电阻屏为什么需要校准,这是电气方面的知识,我也不懂,这里就不说了,这里主要讲讲自己在项目中是怎么通过应用程序来实现校准的,好记性不如烂笔头这里有一篇讲解触摸屏校准原理和优化的文章,道客巴巴上的,先看看了解怎么做 触摸屏校准原理与优化

通过一系列文章的了解,认识到要想真正做到实现校准,就必须能够更新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_
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值