wince 5.0/wince6.0 2440/6410/S5PV210 触摸屏驱动 滤波函数的介绍

发布者:Harmonious88最新更新时间:2025-01-02 来源: cnblogs关键字:wince  wince6  S5PV210  触摸屏驱动  滤波函数 手机看文章 扫描二维码
随时随地手机看文章

以前曾经遇到过wince 手持机,POS机触摸屏 抖动,跳点,飞点的问题,其中起作用最大的就是触摸屏滤波函数,现在给大家介绍一下。

//-----------------------------------------------------------------------------

//--函数介绍:触摸屏滤波函数,每次输入一个采集到的触摸屏点(x/y),然后进行滤波

//------------------------------------------------------------------------------
static BOOL
Touch_Pen_Filtering(INT *px, INT *py)
{
    BOOL RetVal = TRUE;
    // TRUE  : Valid pen sample
    // FALSE : Invalid pen sample
    INT Filter_Margin;
    static int count = 0; // 用来记录 存储点数,对static INT x[2], y[2];很有帮助,详情看函数。
    static INT x[2], y[2];// 用数组来存储 采集数的两个点x[0],y[0]存储的是第一个点,x[1],y[1]存储的是(第二个点)

    INT TmpX, TmpY;    // 用来暂存点
    INT dx, dy;             // 点差值变量

    if(*px <0 && *py <0) // 如果点的值小于0 ,那么就是无效点,函数返回FALSE
    {
        count = 0;
        return FALSE;
    }
    else                        // 点有效,count 值加1
    {
        count++;
    }

    if (count > 2) // 当采集的点大于或者等于3 个的时候(count=0/1/2 )
    {
        // apply filtering rule
        count = 2;// 重新 赋值2

        // average between x,y[0] and *px,y  第一个点和当前点的平均值
        TmpX = (x[0] + *px)>>1;
        TmpY = (y[0] + *py)>>1;

        // difference between x,y[1] and TmpX,Y  求出第二个点和第一个点和当前点的均值差值绝对值,
        dx = (x[1] > TmpX) ? (x[1] - TmpX) : (TmpX - x[1]);
        dy = (y[1] > TmpY) ? (y[1] - TmpY) : (TmpY - y[1]);

        Filter_Margin = (x[1] > x[0]) ? (x[1]-x[0]) : (x[0]-x[1]);
        Filter_Margin += (y[1] > y[0]) ? (y[1]-y[0]) : (y[0]-y[1]);
        Filter_Margin += TSP_FILTER_LIMIT;

        if ((dx > Filter_Margin) || (dy > Filter_Margin)) {  //  无效 返回重新采集点
      // Invalid pen sample
            *px = x[1]; // 这个应该没有关系的
        *py = y[1]; // previous valid sample
            RetVal = FALSE;
            count = 0;
        }
        else   // 点有效,更新x[0] = x[1]; y[0] = y[1]; 存储的值
   {
            // Valid pen sample
            x[0] = x[1]; y[0] = y[1];
            x[1] = *px; y[1] = *py; // reserve pen samples

            RetVal = TRUE;
        }
    }
    else // (count < 2) // 采集点不够多,更新x[0] = x[1]; y[0] = y[1]; 存储的值,继续采集下面的值,至少采集三个点才行
   { // till 2 samples, no filtering rule
        x[0] = x[1]; y[0] = y[1];
        x[1] = *px; y[1] = *py; // reserve pen samples

        RetVal = FALSE;    // 

    }

    return RetVal;

}


关键字:wince  wince6  S5PV210  触摸屏驱动  滤波函数 引用地址:wince 5.0/wince6.0 2440/6410/S5PV210 触摸屏驱动 滤波函数的介绍

上一篇:【ARM裸机s5pv210】Makefile
下一篇:S5PV210 移植无线wifi网卡 MT7601

推荐阅读最新更新时间:2026-03-13 10:35

wince 5.0/wince6.0 2440/6410/S5PV210 触摸屏驱动 滤波函数的介绍
以前曾经遇到过wince 手持机,POS机触摸屏 抖动,跳点,飞点的问题,其中起作用最大的就是触摸屏滤波函数,现在给大家介绍一下。 //----------------------------------------------------------------------------- //--函数介绍:触摸屏滤波函数,每次输入一个采集到的触摸屏点(x/y),然后进行滤波 //------------------------------------------------------------------------------ static BOOL Touch_Pen_Filtering(INT *px, INT *py
[单片机]
S3C2440 WINCE6将USB DEVICE改成USB HOST,实现两个USB HOST
S3C2440一般默认的是一个USB DEVICE,一个USB HOST,即一个主口,一个从口,先来看看USB Device与USB Host相关知识。 USB Host: 最底层就是USB Host控制器了,上层是USB Host Controller Driver,该驱动负责和硬件通讯来传输数据,在WinCE中支持UHCI,OHCI和EHCI。Host Core Driver & Hub Driver是独立于硬件的USB协议栈,支持USB Host协议及USB Hub功能。最上层就是USB Host Class driver是USB Host的应用协议,目前在WinCE中,支持RNDIS,Print,Mass Storag
[单片机]
S3C2440 触摸屏驱动(针对Android版)
和原来的触摸屏驱动区别不是很大,增加了report函数来将事件发送到应用层。 驱动结构: 很简单的字符设备+平台设备驱动,总的结构来说,主要四个部分构成: probe remove resume suspend 工作机制则是注册设备,然后发生ts按下事件后产生ts中断以及adc中断,获得按下坐标。 没有读写函数,重点就是在两个中断处理函数上。 1,平台设备架构部分分析: probe函数: 流程:ts基址的重映射- 获得并启动时钟- ADCCON、ADCDLY、ADCTSC的初始化- 初始化input设备完善ts结构体- 建立ts_filter_chain- 申请中断- 注册input设备(2.6.27后为event0不再是ts0)
[单片机]
mini2440触摸屏驱动----非input子系统实现方法
触摸屏的驱动程序在不是使用input子系统的实现过程中,其实和普通的字符设备驱动没有太大的差别,只要按照触摸屏那几个步骤正常进行就可以。 ①s3c2410_ts_init函数,这是整个程序的入口处。实现了各类初始化的作用。 /*设备初始化函数*/ static int __init s3c2410_ts_init(void) { int ret; tsEvent = tsEvent_dummy; /* 注册字符设备 第一个参数为0表示自动分配 */ ret = register_chrdev(0, DEVICE_NAME, &s3c2410_fops); //普通的注册失败判
[单片机]
S3C2440触摸屏驱动详解
2440的触摸屏转换接口搭载在ADC接口之上,使用上比ADC接口多了一些花样,首先,触摸屏接口有几种转换模式 1. 普通转换模式 单转换模式是最合适的通用ADC转换。此模式可以通过设置ADCCON(ADC控制寄存器)初始化并且通过读写ADCDAT0(ADC数据寄存器0)就能够完成 2. 分离的X/Y方向转换模式 触摸屏控制器可以工作在两个转换模式之一。方向转换模式如下方法操作。X方向模式写X方向转换数据到ADCDAT0,故触摸屏接口产生中断源给中断控制器。Y方向模式写Y方向转换数据到ADCDAT1,故触摸屏接口产生中断源给中断控制器。 3. 自动(顺序)X/Y方向转换模式 自动(顺序)X/Y方向转换模式操作如下。触摸屏控制器顺序变
[单片机]
S3C<font color='red'>2440</font><font color='red'>触摸屏</font><font color='red'>驱动</font>详解
Linux-2.6.32.2内核在mini2440上的移植(九)---触摸屏驱动移植
移植环境 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE 3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,linux 版本:linux-2.6.32.2 7,参考文章: 嵌入式linux应用开发完全手册,韦东山,编著。 Mini2440 之Linux 移植开发实战指南 【1】在内核中添加触摸屏驱动程序 Linux-2.6.32.2 内核也没有包含支持S3
[单片机]
Linux-2.6.32.2内核在mini<font color='red'>2440</font>上的移植(九)---<font color='red'>触摸屏</font><font color='red'>驱动</font>移植
触摸屏驱动分析之S3C2440_ts.c
//短短两百余行程序颇具玄机,在光标抬起后的处理中尤其值得推敲。 #include linux/errno.h #include linux/kernel.h #include linux/module.h #include linux/slab.h #include linux/input.h #include linux/init.h #include linux/serio.h #include linux/delay.h #include linux/platform_device.h #include linux/clk.h #include asm/io.h #include asm/irq.h #include p
[单片机]
S3C2440触摸屏驱动
建立触摸屏驱动程序my2440_ts.c,首先实现加载和卸载部分,在驱动加载部分,我们主要做的事情是:启用ADC所需要的时钟、映射IO口、初始化寄存器、申请中断、初始化输入设备、将输入设备注册到输入子系统。代码如下: #include linux/module.h #include linux/kernel.h #include linux/clk.h #include linux/init.h #include linux/input.h #include linux/serio.h #include plat/regs-adc.h #include asm/irq.h #include asm/io.h /*用于保存从平台时
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved