专利名称:一种滚球的实现方法
技术领域:
本发明涉及滚球的实现技术,尤其涉及一种嵌入式领域及误触发事件频繁 而规律少的事件领域中滚球的实现方法。
背景技术:
滚球在嵌入式消费电子产品中虽然是新兴产品,但是它使用灵活方便快速,
兼顾鼠标键盘的双重优点,正越来越受到用户的青睐。滚球由大球Ball和四个 小球Roller组成,那么我们平时滚动滚球实际上就是在滚动Ball,当Ball滚动 时带动其方向上的R0iier滚动,而R0iier的滚动会触发其相对应的霍尔元件产
生脉冲通过通用输入/输出接口 GPIO,从而在有关滚球的寄存器里会产生相应 变化。这里,有关滚球的寄存器,比如GPIO寄存器位于滚球控制器中。
现有滚球、滚球控制器与CPU之间的连接示意图如图1、图2所示。图1、 图2中皆包括CPU1、滚球控制器2和滚球3,滚球传递给滚球控制器的信号都 是状态信号即UP/DOWN/LEFT/RIGHT。图1与图2的区别主要在于图1的 滚球控制器2位于CPU1内。也就是说图1是CPU支持滚球器件的情况,图2 是CPU根本不支持滚球器件,只能通过外部扩展达到对滚球器件支持的情况。 以图2所示连接关系为例,具体来说,CPUl向滚球控制器2提供时钟信号; CPUl向滚球控制器2提供控制信号,用于开启滚球控制器;滚球控制器2向 CPUl提供中断信号,并且CPUl收到该中断信号后,会调用相应的中断处理 函数去读取滚球控制器2传来的GPIO电平变化。这里,该滚球控制器2传来 的GPIO电平变化是由于滚珠移动引起霍尔元件感应产生的GPIO电平变化。 另外,滚球控制器2还向CPUl反馈用户的输入/输出信号。这里,滚球3和滚 球控制器2之间只存在滚球滚动所产生的状态信号,该状态信号实际上是霍尔元件产生脉冲反馈给滚球控制器2的。
由于滚球在使用中,除了会触发霍尔元件产生UP/DOWN/LEFT/RIGHT方 向的脉冲作为状态信号反馈给滚球控制器,还经常会意外碰触其它方向的霍尔 元件,从而触发滚球其它方向上的波形形成误触发。目前从考虑改进硬件结构 的角度还无法将误触发的脉冲滤去,从而无法解决误触发带来的不良影响,比 如本来向下操作滚球,结果由于其它方向的误触发波形,使得产生向左、或向 右,甚至向上的脉沖。
发明内容
有鉴于此,本发明的主要目的在于提供一种滚球的实现方法,在兼容现有 硬件结构的基础上能避免误触发,克服误触发带来的不良影响。 为达到上述目的,本发明的技术方案是这样实现的
一种滚球的实现方法,该方法包括将读取的前次通用输入/输出接口 GPIO 值和本次GPIO值进行异或操作后,获得GPIO的电平变化;根据所述GPIO的 电平变化来判断出本次滚球的操作方向。
其中,所述将读取的前次GPIO值和本次GPIO值进行异或操作具体为.-直接读取与连接滚球四个霍尔元器件相对应的GPIO寄存器,将所述GPIO寄 存器中,前次记录的GPIO寄存器的值和本次GPIO寄存器的值进行异或操作。
其中,所述将读取的前次GPIO值和本次GPIO值进行异或操作具体为 直接读取GPIO电平值,将前次GPIO的电平值和本次GPIO的电平值进行异或 操作。
其中,所述方法进一步包括釆用从滚球的计数寄存器读取出滚球滚动的 方向和大小的方式,来修正所述滚球的操作方向。
其中,所述修正滚球的操作方向进一步包括统计5次GPIO的电平变化 发送滚球的键值,确定所述滚球的键值为所述5次GPIO的电平变化中出现 GPIO的电平变化机率最大方向的键值。
其中,所述修正滚球的操作方向进一步包括如果符合GPIO的电平变化次数>2;以及前两个发送的是同值且和本值相同的条件,则确定本次滚球的滚 动方向和前次滚球的滚动方向 一致。
其中,所述修正滚球的操作方向进一步包括如果3s定时器超时,则确定 接收完毕后,跳出接收循环。
由于滚球在操作时误触发频繁,而且规律不明显,因此目前从考虑改进硬 件结构的角度还无法将误触发形成的脉沖滤去。本发明是从软件算法实现的角 度解决误触发的。具体来说,本发明将读取的前次通用输入/输出接口 GPIO值 和本次GPIO值进行异或操作后,获得GPIO的电平变化;根据该GPIO的电平 变化来判断出本次滚球的操作方向。采用本发明能在兼容现有硬件结构的基础 上能避免误触发,克服误触发带来的不良影响。
进而,采用实现滚球功能的基本算法以及解决滾球误触发的优化算法相糅 合的方式,来避免误触发。采用本发明在实现滚球功能基本算法的基础上,进 一步优化滚球的实现,更好地避免误触发。并且,本发明还采用实现滚球功能 的基本算法,以及解决滚球灵敏度、准确度和响应速度的优化算法相糅合的方 式,来改善滚球的灵敏度、准确度和响应速度。采用本发明解决了滚球的响应 速度与灵敏度和准确性的矛盾,能实现滚球快速响应、准确和稳定地滚动。另 外,釆用实现滚球功能的基本算法,解决滚球误触发的优化算法,以及解决滚 球灵敏度、准确度和响应速度的优化算法相糅合的方式,不仅可以避免误触发, 而且还可以解决滚球的响应速度与灵敏度和准确性的矛盾,实现滚球快速响应、 准确和稳定地滚动。
图l为现有滚球、滚球控制器与CPU之间的一连接示意图; 图2为现有滚球、滚球控制器与CPU之间的另一连接示意图; 图3为本发明原理实现的流程示意图。
具体实施例方式
本发明的核心思想是本发明将读取的前次通用输入/输出接口 GPIO值和 本次GPIO值进行异或操作后,获得GPIO的电平变化;才艮据该GPIO的电平变 化来判断出本次滚球的操作方向。采用本发明能在兼容现有硬件和结构的基础 上能避免误触发,克服误触发带来的不良影响。
下面结合附图对技术方案的实施作进一步的详细描述。 如图3所示, 一种滚球的实现方法,该方法包括以下步骤 步骤101、将读取的前次GPIO值和本次GPIO值进4于异或操作后,获得 GPIO的电平变化。
步骤102、根据该GPIO的电平变化来判断出本次滚球的操作方向。 这里,为了达到更好的效果,上述步骤102中还可进一步包括采用从滚 球的计数寄存器读取出滚球滚动的方向和大小的方式,来修正所述滚球的操作 方向。使用这种方式进行修正,可以使得滚球的操作方向减少部分错误。
其中,上述步骤101中,将读取的前次GPIO值和本次GPIO值进行异或 操作包括两种情况。第一种情况是当硬件结构采用如图1所示的滚球、滚球 控制器与CPU之间的连接时,所述将读取的前次GPIO值和本次GPIO值进行 异或操作具体为直接读取与连接滚球四个霍尔元器件相对应的GPIO寄存器, 将所述GPIO寄存器中,前次记录的GPIO寄存器的值和本次该GPIO寄存器的 值进行异或操作。从而根据该异或操作获得GPIO的电平变化。这里,由于不 同的GPIO对应不同的UP/DOWN/LEFT/RIGHT操作,那么根据GPIO的电平 变化能判断出GPIO中,具体哪一个GPIO有变化,从而能判断出本次滚球的 操作方向。第二种情况是当硬件结构采用如图2所示的滚球、滚球控制器与 CPU之间的连接时,所述将读取的前次GPIO值和本次GPIO值进行异或才喿作 具体为直接读取GPIO电平值,将前次GPIO的电平值和本次GPIO的电平值 进行异或操作。从而根据该异或操作获得这段时间内GPIO的电平变化,也能 判断出本次滚球的操作方向。这里,需要指出的是,以上所描述的滚球的实现方法都是实现滚球功能的 基本算法。以下对实现滚球功能的优化算法进行阐述。
优化算法一为解决滚球误触发的优化算法。由于滚球在操作时误触发频 繁、规律不明显,从考虑硬件结构的角度还无法解决该问题,本发明是从软件 算法实现的角度解决误触发的,软件算法的实现采用统计学算法。经过验证, 采用本优化算法,即统计5次GPIO的电平变化发送一个滚球的键值,确定所 发送的滚球的键值为所述5次GPIO的电平变化中,出现GPIO的电平变化 机率最大的那一个方向的键值。那么,采用上述实现滚球功能的基本算法,以 及解决滚球误触发的优化算法相糅合的方式,在实现滚球功能基本算法的基础 上,进一步优化滚i^的实现,更好地避免误触发。
优化算法二为解决滚球灵敏度、准确度和响应速度的优化算法。由于仅 采用优化方法一会使用户觉得滚球反应不够灵敏,而滚球反应灵敏又会影响滚 球统计值的准确性,那么为了保证滚球快速响应又能准确,经过验证,采用本 优化算法,即如果符合GPIO的电平变化次数>2;以及前两个发送的是同值且 和本值相同的条件,这里所谓同值指滚球的键值相同,则确定本次滚球的滚动 方向和前次滚球的滚动方向一致。此时可以让接收滚球的滚动次数减少,从而 增加滚球的灵敏性及速度。也就是说,采用实现滚球功能的基本算法,以及解 决滚球灵敏度、准确度和响应速度的优化算法相糅合的方式,能改善滚球的灵 敏度、准确度和响应速度。
优化算法三为也是解决滚球灵敏度、准确度和响应速度的优化算法。经 过验证,采用本优化算法,即如果3s定时器超时,则确定接收完毕后,跳出接 收循环。这样,可增加滚球的速度,同时在滚球的发送条件上加以限制可以保 证滚球的准确性。也就是说,采用实现滚球功能的基本算法,以及解决滚球灵 敏度、准确度和响应速度的优化算法相糅合的方式,能改善滚球的灵敏度、准 确度和响应速度。
这里,需要指出的是,将实现滚球功能的基本算法,解决滚球误触发的优 化算法,以及与上述解决滚球灵敏度、准确度和响应速度的优化算法中的至少一个算法相糅合,不仅可以避免误触发,而且还可以解决滚球的响应速度与灵 敏度和准确性的矛盾,实现滚球快速响应、准确和稳定地滚动。举例来说,可
以将实现滚球功能的基本算法,优化算法一与优化算法二相糅合;将实现滚球 功能的基本算法,优化算法一与优化算法三相糅合;将实现滚球功能的基本算 法,优化算法一,优化算法二与优化算法三相糅合。
方法实施例在不改变现有硬件连接的基础之上,采用实现滚球功能的基 本算法以及优化算法一、优化算法二和优化算法三相糅合的方式,克服误触发 频繁且规律少的现象,从而实现滚球快速、准确、稳定的滚动。上述优化算法 体现在滚球接收跳出算法以及滚球键值发送条件算法中。具体来说,优化算法 一对应滚球接收跳出算法的①,以及滚球键值发送条件算法的①;优化算法二 对应滚球接收跳出算法的②,以及滚球4建值发送条件算法的②;优化算法三对 应滚球接收跳出算法的③,以及滚球键值发送条件算法的③。以下对本实施例 的具体处理流程进行阐述。
这里,针对滚球的初始化而言,滚球的初始化流程包括以下步骤 步骤201、预先定义滚球相关的GPIO,以及预先设置滚球控制器的相关控 制配置;CPU设置滚球GPIO的开中断。
步骤202、判断注册滚球中断函数是否成功,如果成功,则执行步骤203; 否则,结束当前滚i^的初始化流程。
步骤203、给滚球分配空间,判断分配滚球事件结构体空间是否成功,如 果成功,则执行步骤204;否则,结束当前滚球的初始化流程。
步骤204、创建并初始化完成(completion)事件,同步滚球信号。 步骤205、创建滚球的内核线程,判断创建滚球内核线程是否成功,如果 成功,则执行步骤206;否则,结束当前滚球的初始化流程。
步骤206、等待completion同步信号;结束当前滚球的初始化流程。 这里,针对滚球的中断处理而言,滚球的中断处理流程包括步骤当有中 断信号过来时,检查并判断是否为滚球中断信号,如果是,则给滚球线程发信 号,进行后续的滚球线程处理流程,否则不进行后续的滚球线程处理流程。这里,针对滚球线程处理而言,滚球线程处理包括线程初始化、由死循环
构成的滚球处理程序及退出线程的处理。那么滚球线程处理包括以下步骤 步骤301、初始化定时器和信号量。
这里,定时器使得滚球不能长时间运行在死循环中,在到达一定预设时间 后就跳出。以10ms定时器为例,在达到10ms后滚5求就跳出。信号量用于接收 由中断发来的信号。
步骤302、释放滚球线程的用户空间,使得该线程只能运行于内核空间中。
步骤303、重新初始化线程空间。
步骤304、锁定当前任务的信号掩码锁。
步骤305、设置杀死信号(SIGKILL)非阻塞,重新计算悬挂的信号数。
这里的两项操作都需要信号锁锁定。
步骤306、唤醒滚球的等待线程。
步骤307、进入由死循环构成的滚球处理程序。
步骤308、在接收到SIGKILL信号后,进行退出线程的处理。并在模块退 出时释放线程在内核所占用的内存空间。
这里,具体来说,退出线程的处理即为删除10ms定时器,退出completion 同步。从而结束当前滚球线程处理的流程。
这里需要指出的是,上述由步骤301 ~步骤306构成的流程即为线程初始 化的流程。上述步骤307即为滚球的死循环处理,这是线程启动初始化后,滚 J求处理的i也方。
这里,针对滚^l的死循环处理而言,滚球的死循环处理流程包括以下步骤 步骤401、使能滚球中断,对滚球线程处理模块中初始化的10ms定时器定 时10ms。
步骤402、等待接收中断处理函数发来的滚球信号,当收到滚球信号时就 到信号悬挂队列中读取,判断当前任务中是否有待处理信号,如果是,即队列 不为空,则执行步骤403;否则,对列为空,则转入执行步骤401。
步骤403、屏蔽滚球中断,延时4ms防抖动,通过异或前次GPIO电平和本次GPIO电平来计算各GPIO的本次电平变化。
步骤404、定时3s使得滚球在处理一定的中断数后能够跳出死循环,加快 滚球的速度。
步骤405、延时4ms,如步骤403中通过异或前次GPIO电平和本次GPIO 电平来计算各GPIO的本次电平变化,重新计算滚球各GPIO的电平变化,以 及滚球各GPIO电平变化凄t和脉宽。
步骤406、以5个统计值作为滚球模块最初电平变化参照;取得滚球方向 最大值。
步骤407、判断滚球GPIO的电平变化是否满足滚球接收跳出算法,如果是, 则执行步骤408;否则,转入执行步骤405。
这里,也可以理解为滚J斜艮据是否符合滚球接收跳出算法,来决定是转 入执行步骤405继续接收滚球GPIO的电平变化,还是继续往下执行滚球的其 他处理操作。
步骤408、判断滚球GPIO的电平变化是否满足斜方向滚动算法,如果是, 则保存滚球的斜方向后执行步骤409;否则,直接执行步骤409。
步骤409、判断滚球GPIO的电平变化是否满足滚球键值发送条件算法,如 果是,则保存前次及本次滚球的发送值方向,将滚球各方向的键值清0,给滚 球GPIO的电平变化最多的方向赋最大方向的4定值,执行步骤410;否则,转入 执行步骤412。
步骤410、判断滚球次最大方向是否存在,如果是,则赋值滚球次最大方 向后执行步骤411;否则,直接执行步骤411。
步骤411、发送滚球滚动键值及或滚球的释放键值,清0定时器10ms超 时标志。
步骤412、设置当前任务状态可中断,调度超时30ms后执行步骤401。 以下对上述滚球的死循环处理流程中涉及到的算法进行阐述。 针对滚球接收跳出算法而言,以下所选用的各优化算法是并列的关系。 ①GPIO的电平变化次数〉-5时,跳出本次循环,不再接收滚球各GPIO电平变化,改为执行滚球的其它操作。这是滚球的接收跳出的最基本算法,其他 都是在此基础上的优化算法,以解决快速与准确性的矛盾,达到灵敏准确稳定 的操作结果。
② 当滚球最大值>2;以及前两个发送的是同值且和本值相同时可以跳出本 次循环,执行滚球的其它操作。其中滚球最大值>2是为了加快滚球的速度,毕 竟若每次都采用GPIO的电平变化次数>=5时,跳出本次循环的条件,会使得 滚球反应比较慢。而前两个发送的是同值且和本值相同的条件是为了保证滚球 的准确性及稳定性。
③ 当3s定时器超时可以跳出本次循环,执行滚球的其它操作。本条件是为 了加快滚球的速度。
这里,针对斜方向滚动算法而言,以下所选用的各优化算法也是并列的关系。
① 当滚球最大值〉2;以及滚球其次最大值与滚球最大值相差<2且GPIO的 电平变化次数>3时认为滚球发生了斜方向的滚动。
② 当滚球最大值-5且滚球其次最大值与滚球最大值相差=2时也认为滚球 发生了斜方向的滚动。
这里,针对滚球键值发送条件算法而言,以下所选用的各优化算法也是并 列的关系。旨在增加滚球的准确性、稳定性,以及在按滚球确认时的防抖动。
① GPI0的电平变化次数>=5还是可发送的基础条件。
② GPI0的电平变化次数>2且前两个发送的是同值且和本值相同时,对应 滚球接收跳出算法的第2步,即滚球接收跳出算法的②。
③ GPI0的电平变化次数>2且超过定时10ms的条件,对应滚球处理程序中 的10ms定时器,即步骤308。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1、一种滚球的实现方法,其特征在于,该方法包括将读取的前次通用输入/输出接口GPIO值和本次GPIO值进行异或操作后,获得GPIO的电平变化;根据所述GPIO的电平变化来判断出本次滚球的操作方向。
2、 根据权利要求1所述的实现方法,其特征在于,所述将读取的前次GPIO 值和本次GPIO值进行异或操作具体为直接读取与连接滚球四个霍尔元器件 相对应的GPIO寄存器,将所述GPIO寄存器中,前次记录的GPIO寄存器的值 和本次GPIO寄存器的值进行异或操作。
3、 根据权利要求1所述的实现方法,其特征在于,所述将读取的前次GPIO 值和本次GPIO值进行异或操作具体为直接读取GPIO电平值,将前次GPIO 的电平值和本次GPIO的电平值进行异或操:作。
4、 根据权利要求1至3中任一项所述的实现方法,其特征在于,所述方法 进一步包括采用从滚球的计数寄存器读取出滚球滚动的方向和大小的方式, 来修正所述滚球的操作方向。
5、 根据权利要求4所述的实现方法,其特征在于,所述修正滚球的操作方 向进一步包括统计5次GPIO的电平变化发送滚球的键值,确定所述滚球的 键值为所述5次GPIO的电平变化中出现GPIO的电平变化机率最大方向的 键值。
6、 根据权利要求4所述的实现方法,其特征在于,所述修正滚球的操作方 向进一步包括如果符合GPIO的电平变化次数>2;以及前两个发送的是同值 且和本值相同的条件,则确定本次滚球的滚动方向和前次滚3求的滚动方向一致。
7、 根据权利要求4所述的实现方法,其特征在于,所述修正滚球的搡作方 向进一步包括如果3s定时器超时,则确定接收完毕后,跳出接收循环。
全文摘要
本发明公开了一种滚球的实现方法,该方法包括将读取的前次通用输入/输出接口GPIO值和本次GPIO值进行异或操作后,获得GPIO的电平变化;根据所述GPIO的电平变化来判断出本次滚球的操作方向。采用本发明能在兼容现有硬件结构的基础上能避免误触发,克服误触发带来的不良影响。
文档编号G06F3/033GK101593047SQ20081010018
公开日2009年12月2日 申请日期2008年5月28日 优先权日2008年5月28日
发明者刘艳玲 申请人:中兴通讯股份有限公司