原创 USB的“JoyStickMouse”例程移植过程分析02

2010-4-20 21:10 3488 10 11 分类: MCU/ 嵌入式

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

 


一、利用串口终端控制鼠标


1、功能说明


   while (1)


  {


    CtrlCode = Uart_GetChar( );  //从串口消息队列获取控制字符。


      if ( CtrlCode == 0x1B ) {


            PowerOff();    //如果用户按下ESC,则断开该设备。


            break;


      }


      switch ( CtrlCode ){


          case 'a':


                  MouseAct = LEFT;  //按下a,则鼠标左移。


                     break;


          case 'd':


                  MouseAct = RIGHT;


                     break;


          case 'w':


                  MouseAct = UP;


                     break;


          case 'x':


                  MouseAct = DOWN;


                     break;


          case 'u':          


                  MouseAct = ROLLUP;  //按下u,滚轮上滚


                     break;


          case 'j':


                  MouseAct = ROLLDOWN;


                     break;


          case 's':


                  MouseAct = LeftKeyPressed;  //按下s,相当于左键按下


                     break;


          case ' ':


                  MouseAct = RightKeyPressed;


                     break;              


             default :


                  MouseAct = 0;


                  break;


      }                      


    if ( (bDeviceState == CONFIGURED) && ( MouseAct != 0) ){


       Joystick_Send(MouseAct);


         MouseAct = 0;


    }


  }


2、实现效果


Adwx控制鼠标的上下左右移动是可以的,但是鼠标的“左右键”单击有些问题,跟我预想的不同。但这与串口终端的使用环境有关,下面我就用“智林开发板”上的按键来控制鼠标。


 


二、利用开发板上的按键控制鼠标


1、功能说明


智林开发板上有一个五向摇杆和两个用户按键,可以当成七个键,分配如下:


摇杆的上下左右对应鼠标的上下左右,OK键对应左键。PB2对应右键,PB3断开USB鼠标设备,并退出。


 


2、功能实现过程


1开启按键扫描任务,这个任务将扫描到得按键消息解释以后发到按键消息队列,“1”表示“UP”,“2”表示“RIGHT”,“3”表示“LEFT”,“4”表示“DOWN”,“5”表示“OK”,“6”表示“PB2”,“7”表示“PB3”。


2编写获取按键的函数


该函数以总是等待的方式从按键消息队列获取按键值,返回给用户。


 


将程序下载到开发板后,鼠标移动是正常的,但是左键和右键仍然不正常。表现为OK键按下去,对象被选中,但是不会产生单击、双击的效果。


分析了一下,发现是鼠标释放的消息没有发送出去。改变了一个按键扫描任务的输出效果,让它在按键释放时产生释放消息。在鼠标的报告中体现这一点。


再次下载程序,鼠标左键单击、双击,右键单击的效果都正常了。虽然由于按键少的原因,不能同时实现上下滚轮的效果。但我通过先不用左右键,也达到了滚轮的效果。


 


从明天开始,把这个例程的源代码做一个简单分析,更深入的了解STUSB库实现的特点、HID设备工作的过程。有概念不清楚的地方,通过断点调试来测试。


 


 

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2010-4-21 16:32

占座之后再看
相关推荐阅读
nthq2004 2010-05-08 20:04
USB自定义设备驱动02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  本来还想编写应用程序测试一下自定...
nthq2004 2010-05-07 21:35
USB自定义设备驱动01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、USB设备驱动入门1、学习目...
nthq2004 2010-05-04 21:01
智林开发板上实现自定义的USB HID设备
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />  一、自定义HID设备的相关概念1...
nthq2004 2010-05-01 21:58
U盘例程在智林开发板上的移植
 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 一、移植前的准备工作1、有哪些操...
nthq2004 2010-04-30 19:19
U盘实现流程跟踪分析02
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   二、追踪USB大容量设备的实现...
nthq2004 2010-04-27 21:51
U盘实现流程跟踪分析01
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   一、追踪USB大容量设备的实现...
我要评论
1
10
关闭 站长推荐上一条 /2 下一条