CN200810100184.3
2008.05.28
CN101593047A
2009.12.02
终止
无权
未缴年费专利权终止IPC(主分类):G06F 3/038申请日:20080528授权公告日:20120222终止日期:20160528|||授权|||实质审查的生效|||公开
G06F3/038
中兴通讯股份有限公司
刘艳玲
518057广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部
本发明公开了一种滚球的实现方法,该方法包括:将读取的前次通用输入/输出接口GPIO值和本次GPIO值进行异或操作后,获得GPIO的电平变化;根据所述GPIO的电平变化来判断出本次滚球的操作方向。采用本发明能在兼容现有硬件结构的基础上能避免误触发,克服误触发带来的不良影响。
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;以及前两个发送的是同值且和本值相同的条件,则确定本次滚球的滚动方向和前次滚球的滚动方向一致。7、 根据权利要求4所述的实现方法,其特征在于,所述修正滚球的操作方向进一步包括:如果3s定时器超时,则确定接收完毕后,跳出接收循环。
一种滚球的实现方法 技术领域 本发明涉及滚球的实现技术,尤其涉及一种嵌入式领域及误触发事件频繁而规律少的事件领域中滚球的实现方法。 背景技术 滚球在嵌入式消费电子产品中虽然是新兴产品,但是它使用灵活方便快速,兼顾鼠标键盘的双重优点,正越来越受到用户的青睐。滚球由大球Ball和四个小球Roller组成,那么我们平时滚动滚球实际上就是在滚动Ball,当Ball滚动时带动其方向上的Roller滚动,而Roller的滚动会触发其相对应的霍尔元件产生脉冲通过通用输入/输出接口GPIO,从而在有关滚球的寄存器里会产生相应变化。这里,有关滚球的寄存器,比如GPIO寄存器位于滚球控制器中。 现有滚球、滚球控制器与CPU之间的连接示意图如图1、图2所示。图1、图2中皆包括CPU1、滚球控制器2和滚球3,滚球传递给滚球控制器的信号都是状态信号即UP/DOWN/LEFT/RIGHT。图1与图2的区别主要在于:图1的滚球控制器2位于CPU1内。也就是说图1是CPU支持滚球器件的情况,图2是CPU根本不支持滚球器件,只能通过外部扩展达到对滚球器件支持的情况。以图2所示连接关系为例,具体来说,CPU1向滚球控制器2提供时钟信号;CPU1向滚球控制器2提供控制信号,用于开启滚球控制器;滚球控制器2向CPU1提供中断信号,并且CPU1收到该中断信号后,会调用相应的中断处理函数去读取滚球控制器2传来的GPIO电平变化。这里,该滚球控制器2传来的GPIO电平变化是由于滚珠移动引起霍尔元件感应产生的GPIO电平变化。另外,滚球控制器2还向CPU1反馈用户的输入/输出信号。这里,滚球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的电平变化来判断出本次滚球的操作方向。采用本发明能在兼容现有硬件结构的基础上能避免误触发,克服误触发带来的不良影响。 进而,采用实现滚球功能的基本算法以及解决滚球误触发的优化算法相糅合的方式,来避免误触发。采用本发明在实现滚球功能基本算法的基础上,进一步优化滚球的实现,更好地避免误触发。并且,本发明还采用实现滚球功能的基本算法,以及解决滚球灵敏度、准确度和响应速度的优化算法相糅合的方式,来改善滚球的灵敏度、准确度和响应速度。采用本发明解决了滚球的响应速度与灵敏度和准确性的矛盾,能实现滚球快速响应、准确和稳定地滚动。另外,采用实现滚球功能的基本算法,解决滚球误触发的优化算法,以及解决滚球灵敏度、准确度和响应速度的优化算法相糅合的方式,不仅可以避免误触发,而且还可以解决滚球的响应速度与灵敏度和准确性的矛盾,实现滚球快速响应、准确和稳定地滚动。 附图说明 图1为现有滚球、滚球控制器与CPU之间的一连接示意图; 图2为现有滚球、滚球控制器与CPU之间的另一连接示意图; 图3为本发明原理实现的流程示意图。 具体实施方式 本发明的核心思想是:本发明将读取的前次通用输入/输出接口GPIO值和本次GPIO值进行异或操作后,获得GPIO的电平变化;根据该GPIO的电平变化来判断出本次滚球的操作方向。采用本发明能在兼容现有硬件和结构的基础上能避免误触发,克服误触发带来的不良影响。 下面结合附图对技术方案的实施作进一步的详细描述。 如图3所示,一种滚球的实现方法,该方法包括以下步骤: 步骤101、将读取的前次GPIO值和本次GPIO值进行异或操作后,获得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的电平变化机率最大的那一个方向的键值。那么,采用上述实现滚球功能的基本算法,以及解决滚球误触发的优化算法相糅合的方式,在实现滚球功能基本算法的基础上,进一步优化滚球的实现,更好地避免误触发。 优化算法二为:解决滚球灵敏度、准确度和响应速度的优化算法。由于仅采用优化方法一会使用户觉得滚球反应不够灵敏,而滚球反应灵敏又会影响滚球统计值的准确性,那么为了保证滚球快速响应又能准确,经过验证,采用本优化算法,即如果符合GPIO的电平变化次数>2;以及前两个发送的是同值且和本值相同的条件,这里所谓同值指滚球的键值相同,则确定本次滚球的滚动方向和前次滚球的滚动方向一致。此时可以让接收滚球的滚动次数减少,从而增加滚球的灵敏性及速度。也就是说,采用实现滚球功能的基本算法,以及解决滚球灵敏度、准确度和响应速度的优化算法相糅合的方式,能改善滚球的灵敏度、准确度和响应速度。 优化算法三为:也是解决滚球灵敏度、准确度和响应速度的优化算法。经过验证,采用本优化算法,即如果3s定时器超时,则确定接收完毕后,跳出接收循环。这样,可增加滚球的速度,同时在滚球的发送条件上加以限制可以保证滚球的准确性。也就是说,采用实现滚球功能的基本算法,以及解决滚球灵敏度、准确度和响应速度的优化算法相糅合的方式,能改善滚球的灵敏度、准确度和响应速度。 这里,需要指出的是,将实现滚球功能的基本算法,解决滚球误触发的优化算法,以及与上述解决滚球灵敏度、准确度和响应速度的优化算法中的至少一个算法相糅合,不仅可以避免误触发,而且还可以解决滚球的响应速度与灵敏度和准确性的矛盾,实现滚球快速响应、准确和稳定地滚动。举例来说,可以将实现滚球功能的基本算法,优化算法一与优化算法二相糅合;将实现滚球功能的基本算法,优化算法一与优化算法三相糅合;将实现滚球功能的基本算法,优化算法一,优化算法二与优化算法三相糅合。 方法实施例:在不改变现有硬件连接的基础之上,采用实现滚球功能的基本算法以及优化算法一、优化算法二和优化算法三相糅合的方式,克服误触发频繁且规律少的现象,从而实现滚球快速、准确、稳定的滚动。上述优化算法体现在滚球接收跳出算法以及滚球键值发送条件算法中。具体来说,优化算法一对应滚球接收跳出算法的①,以及滚球键值发送条件算法的①;优化算法二对应滚球接收跳出算法的②,以及滚球键值发送条件算法的②;优化算法三对应滚球接收跳出算法的③,以及滚球键值发送条件算法的③。以下对本实施例的具体处理流程进行阐述。 这里,针对滚球的初始化而言,滚球的初始化流程包括以下步骤: 步骤201、预先定义滚球相关的GPIO,以及预先设置滚球控制器的相关控制配置;CPU设置滚球GPIO的开中断。 步骤202、判断注册滚球中断函数是否成功,如果成功,则执行步骤203;否则,结束当前滚球的初始化流程。 步骤203、给滚球分配空间,判断分配滚球事件结构体空间是否成功,如果成功,则执行步骤204;否则,结束当前滚球的初始化流程。 步骤204、创建并初始化完成(completion)事件,同步滚球信号。 步骤205、创建滚球的内核线程,判断创建滚球内核线程是否成功,如果成功,则执行步骤206;否则,结束当前滚球的初始化流程。 步骤206、等待completion同步信号;结束当前滚球的初始化流程。 这里,针对滚球的中断处理而言,滚球的中断处理流程包括步骤:当有中断信号过来时,检查并判断是否为滚球中断信号,如果是,则给滚球线程发信号,进行后续的滚球线程处理流程,否则不进行后续的滚球线程处理流程。 这里,针对滚球线程处理而言,滚球线程处理包括线程初始化、由死循环构成的滚球处理程序及退出线程的处理。那么滚球线程处理包括以下步骤: 步骤301、初始化定时器和信号量。 这里,定时器使得滚球不能长时间运行在死循环中,在到达一定预设时间后就跳出。以10ms定时器为例,在达到10ms后滚球就跳出。信号量用于接收由中断发来的信号。 步骤302、释放滚球线程的用户空间,使得该线程只能运行于内核空间中。 步骤303、重新初始化线程空间。 步骤304、锁定当前任务的信号掩码锁。 步骤305、设置杀死信号(SIGKILL)非阻塞,重新计算悬挂的信号数。 这里的两项操作都需要信号锁锁定。 步骤306、唤醒滚球的等待线程。 步骤307、进入由死循环构成的滚球处理程序。 步骤308、在接收到SIGKILL信号后,进行退出线程的处理。并在模块退出时释放线程在内核所占用的内存空间。 这里,具体来说,退出线程的处理即为:删除10ms定时器,退出completion同步。从而结束当前滚球线程处理的流程。 这里需要指出的是,上述由步骤301~步骤306构成的流程即为线程初始化的流程。上述步骤307即为滚球的死循环处理,这是线程启动初始化后,滚球处理的地方。 这里,针对滚球的死循环处理而言,滚球的死循环处理流程包括以下步骤: 步骤401、使能滚球中断,对滚球线程处理模块中初始化的10ms定时器定时10ms。 步骤402、等待接收中断处理函数发来的滚球信号,当收到滚球信号时就到信号悬挂队列中读取,判断当前任务中是否有待处理信号,如果是,即队列不为空,则执行步骤403;否则,对列为空,则转入执行步骤401。 步骤403、屏蔽滚球中断,延时4ms防抖动,通过异或前次GPIO电平和本次GPIO电平来计算各GPIO的本次电平变化。 步骤404、定时3s使得滚球在处理一定的中断数后能够跳出死循环,加快滚球的速度。 步骤405、延时4ms,如步骤403中通过异或前次GPIO电平和本次GPIO电平来计算各GPIO的本次电平变化,重新计算滚球各GPIO的电平变化,以及滚球各GPIO电平变化数和脉宽。 步骤406、以5个统计值作为滚球模块最初电平变化参照;取得滚球方向最大值。 步骤407、判断滚球GPIO的电平变化是否满足滚球接收跳出算法,如果是,则执行步骤408;否则,转入执行步骤405。 这里,也可以理解为:滚球根据是否符合滚球接收跳出算法,来决定是转入执行步骤405继续接收滚球GPIO的电平变化,还是继续往下执行滚球的其他处理操作。 步骤408、判断滚球GPIO的电平变化是否满足斜方向滚动算法,如果是,则保存滚球的斜方向后执行步骤409;否则,直接执行步骤409。 步骤409、判断滚球GPIO的电平变化是否满足滚球键值发送条件算法,如果是,则保存前次及本次滚球的发送值方向,将滚球各方向的键值清0,给滚球GPIO的电平变化最多的方向赋最大方向的键值,执行步骤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时也认为滚球发生了斜方向的滚动。 这里,针对滚球键值发送条件算法而言,以下所选用的各优化算法也是并列的关系。旨在增加滚球的准确性、稳定性,以及在按滚球确认时的防抖动。 ①GPIO的电平变化次数>=5还是可发送的基础条件。 ②GPIO的电平变化次数>2且前两个发送的是同值且和本值相同时,对应滚球接收跳出算法的第2步,即滚球接收跳出算法的②。 ③GPIO的电平变化次数>2且超过定时10ms的条件,对应滚球处理程序中的10ms定时器,即步骤308。 以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
《一种滚球的实现方法.pdf》由会员分享,可在线阅读,更多相关《一种滚球的实现方法.pdf(13页珍藏版)》请在专利查询网上搜索。
本发明公开了一种滚球的实现方法,该方法包括:将读取的前次通用输入/输出接口GPIO值和本次GPIO值进行异或操作后,获得GPIO的电平变化;根据所述GPIO的电平变化来判断出本次滚球的操作方向。采用本发明能在兼容现有硬件结构的基础上能避免误触发,克服误触发带来的不良影响。 。
copyright@ 2017-2020 zhuanlichaxun.net网站版权所有经营许可证编号:粤ICP备2021068784号-1