版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统下鼠标操作原理软件组整理 目 录1、鼠标的类型及与主板的连接关系2、鼠标工作原理3、鼠标硬件原理图4、HID协议与操作系统HID驱动简介5、操作系统HID接口6、图形显示基本原理与操作系统焦点模型7、应用程序鼠标捕获与程序处理鼠标的类型按照与电脑的连接方式来分的话有串口鼠标、PS/2鼠标和USB鼠标。如下图所示:鼠标与主板的连接关系鼠标分别连接到主板的串口、PS2、USB口。串口PS2口USB口鼠标工作原理光电鼠标工作原理示意图,激光鼠标原理与之类似。鼠标光学跟踪引擎部分横截面示意图光学鼠标主要由四部分的核心组件构成,分别是发光二极管、透镜组件、光学引擎(Optical Engine)
2、以及控制芯片组成。光学鼠标通过底部的LED灯,灯光以30度角射向桌面,照射出粗糙的表面所产生的阴影,然后再通过平面的折射透过另外一块透镜反馈到传感器上。当鼠标移动的时候,成像传感器录得连续的图案,然后通过“数字信号处理器”(DSP)对每张图片的前后对比分析处理,以判断鼠标移动的方向以及位移,从而得出鼠标x, y方向的移动数值。再通过SPI传给鼠标的微型控制单元(Micro Controller Unit)。鼠标的处理器对这些数值处理之后,传给电脑主机。传统的光电鼠标采样频率约为3000 Frames/sec(帧/秒),也就是说它在一秒钟内只能采集和处理3000张图像。鼠标硬件原理图1鼠标硬件原
3、理图2HID协议简介一、应用场合USB HID类是比较大的一个类,HID类设备属于人机交互操作的设备。用于控制计算机操作的一些方面,如USB鼠标,USB键盘,USB游戏操纵杆,USB触摸板,USB轨迹球、电话拨号设备、VCR遥控等等设备。另外,使用HID设备的一个好处就是,操作系统自带了HID类的驱动程序,而用户无需去开发很麻烦的驱动程序,只要直接使用API调用即可完成通信。所以很多简单的USB设备,喜欢枚举成HID设备,这样就可以不用安装驱动而直接使用。HID协议简介二、USB HID类可采用的通信管道所有的HID设备通过USB的控制管道(默认管道,即端点0)和中断管道与主机通信。USB H
4、ID规范定义的HID设备可用端点包含三种管道:1、控制(端点0)( 必选) 传输USB描述符、类请求代码以及供查询的消息数据等2、中断输入 (必选) 传输从设备到主机的输入数据3、中断输出 (可选 )传输从主机到设备的输出数据HID协议简介控制管道主要用于以下3个方面: 1、接收/响应USB主机的控制请示及相关的类数据。 2、在USB主机查询时传输数据(如响应Get_Report请求等)。 3、接收USB主机的数据。中断管道主要用于以下两个方面: 1、USB主机接收USB设备的异步传输数据。 2、USB主机发送有实时性要求的数据给USB设备;从USB主机到USB设备的中断输出数据传输是可选的,
5、当不支持中断输出数据传输时,USB主机通过控制管道将数据传输给USB设备。HID协议简介三、USB HID设备的描述符HID设备的描述符除了5个USB的标准描述符(设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符,还包括3个HID设备类特定描述符:HID描述符、报告描述符、实体描述符。HID协议简介除了HID的三个特定描述符组成对HID设备的解释外,5个标准描述符中与HID设备有关的部分有:设备描述符中bDeviceClass、bDeviceSubClass和bDeviceProtocol三个字段的值必须为零。接口描述符中bInterfaceClass的值必须为0 x03,bInt
6、erfaceSubClass的值为0或1,为1表示HID设备符是一个启动设备(Boot Device,一般对PC机而言才有意义,意思是BIOS启动时能识别并使用您的HID设备,且只有标准鼠标或键盘类设备才能成为Boot Device。如果为0则只有在操作系统启动后才能识别并使用您的HID设备),bInterfaceProtocol的取值含义如下表所示:表2、HID接口描述符中bInterfaceProtocol的含义bInterfaceProtocol的取值(十进制) 含义0 NONE1 键盘2 鼠标3255 保留HID协议简介下面仅对这3个HID设备类特定描述符中的HID描述符进行说明。HI
7、D描述符关联于接口描述符,因而如果一个设备只有一个接口描述符,则无论它有几个端点描述符,HID设备只有一个HID描述符。HID设备描述符主要描述HID规范的版本号、HID通信所使用的额外描述符、报表描述符的长度等。其他信息请自行百度。操作系统HID驱动简介 HID 设备驱动简介为简化USB设备的开发过程,USB提出了设备类的概念。HID设备类,即人机接口设备。典型的HID设备如键盘、鼠标。所有设备类都必须支持标准USB描述符和标准USB设备请求。如果有必要,设备类还可以自行定义其专用的描述符和设 备请求,这分别被称为设备类定义描述符和设备类定义请求。另外,一个完整的设备类还将指明其接口和端点的
8、使用方法,如如接口所包含端点的个数、端点的最大 数据包长度等。操作系统HID驱动简介HID设备既可以是低速设备也可以是全速设备,其典型的数据传输类型为中断IN传输,即它适用于主机接收USB设备 发来的小量到中等量的数据。HID具有以下的功能特点:1)适用于传输少量或中量的数据;2)传输的数据具有突发性;3)传输的最大速率有限制;4)无固 定的传输率。HID设备类除支持标准USB描述符外(设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符),还自行 定义了3种类描述符,分别为HID描述符(主要用于识别HID设备所包含的其他类描述符)、报告描述符(提供HID设备和主机间交换数据的格式)和
9、物理描 述符。一个HID设备只能支持一个HID描述符;可以支持一个或多个报告描述符;物理描述符是可选的,大多数HID设备不需要使用它。操作系统HID驱动简介 USB HID设备驱动原理设备的USB 人机交互设备必须遵循以下的USB开始程序,如右图所示:1) 插入设备 USB设备第一次连接到总线时,虽然接上了电源,但是总线仍然没有任何功能,一定要到重置总线为止才可以开始运作。注意,一旦USB在D端使用了 1.5k的提升电阻,就会立即通知总线的集线器,有一个低速设备(1.5Mb/s)刚被连接上。而程序以设备地址0开始运行。 设备插上时,电源打开重置的过程: 重置执行初始设置并出发总线重置中断-位于
10、中止模式下知道总线被重置为止等待设备列举执行程序循环操作系统HID驱动简介2) 总线重置 接着主机将会辨认新的USB设备并重置它。在总线重置过程中,除了设定堆栈指针外,也出发所有被使用到的中断。(总线重置的中断服务程序ISR功能)3) 设备列举。 主机会负责检测与设定所有连接至根集线器的设备,辨别与设定一个USB设备的程序,称为设备列举。主机首先会送出SETUP封包以读取默认地址0的设备描 述符。当收到描述符后,主机将会指定新的USB地址给设备。从设备所返回的信息中,主机就会知道设备所支持的数据端点的数量。完成设备列举。操作系统HID驱动简介4) 数据捕捉与转换 这里以键盘为例,在固件中将以周
11、期性的方式,把扫描的形式写入到扫描矩阵的列I/O端口伤(接口2),并且在行I/O接口伤读取结果值以决定哪个键被按下 了。通过键盘扫描后所得到的数据码,可以使用中断传输以端点1来传送给主机。设备就将键盘的8B数据放置在IN令牌包随后跟随的资料封包的数据域位内,再 返回给主机。 当含有LED的按键(如NumLock ,Caps lock 与 Scroll lock)被按下或放开时,主机就会送出含有设定报告(Set_Report)要求的SETUP封包,通过控制传输传至设备的端口0上。操作系统HID驱动简介 USB HID设备驱动程序设计的流程说明USB总线与设备间的交互都是通过USBD即USB总线驱
12、动程序完成。USBD起着中间桥梁作用,解释USB设备类驱动程序发来的命令并将其划分为一系列的USB事务,然后发送给USB主控制器驱动程序。具体流程是插入一个USB设备后,主机检测到有设备接入,USBD就从链表中查找匹配HID设备类。为每一个接入的 HID设备驱动建立一个对应的USB_HID_SIO_CHAN结构来对该HID设备驱动进行管理。这里的USB_HID_SIO_CHAN结构是 USBD为每一个HID设备所分配的一个关键的内部数据结构。此后由USB主控制器驱动程序来负责硬件底层的驱动。 而HID设备移除时,会调用函数usbHIDDeviceAttachCallback() ,这时先判断是
13、否有与该HID设备绑定的结构,有则清除该结构。 而HID设备移除时,会调用函数usbHIDDeviceAttachCallback() ,这时先判断是否有与该HID设备绑定的结构,有则清除该结构。操作系统HID驱动简介从框图中,可以看出除了USB标准定义的一些描述符外,HID设备还必须定义HID描述符。另外设备和主机的通信是通过报告的形式来实现的,所以还必须定义报告描述符;而物理描述符不是必需的。还有就是HID描述符是关联于接口(而不是端点)的,所以设备不需要为每个端点都提供一个HID描述符。接口描述符中bInterfaceClass的值必须为0 x03,bInterfaceSubClass的
14、值为0或1,为1表示HID设备符是一个启动设备(Boot Device,一般对PC机而言才有意义,意思是BIOS启动时能识别并使用您的HID设备,且只有标准鼠标或键盘类设备才能成为Boot Device。如果为0则只有在操作系统启动后才能识别并使用您的HID设备)。操作系统HID驱动简介成功注册一个没有被初始化的HID设备的程序流程如右图所示。USB HID设备驱动程序的简单介绍见下页。操作系统HID接口设备文件一般注册为“/dev/input/mouse0”,对应的驱动程序及接口如下:/输入子系统层的操作-drivers/input/input.copen /dev/input/mouse0
15、mousedev_open() /drivers/input/mousedev.c /*打开鼠标类输入设备*/input_open_device()input_handle-dev-open/驱动层物理设备的操作-drivers/usb/input/usbmouse.cusb_mouse_open()注册Input Handler 驱动层只是把输入设备注册到输入子系统中,在驱动层的代码中本身并不创建设备结点。应用程序用来与设备打交道的设备结点的创建由Event Handler层调用Input core中的函数来实现。操作系统HID接口而在创建具体的设备节点之前,Event Handler层需要
16、先注册一类设备的输入事件处理函数及相关接口static int _init mousedev_init(void)/注册输入事件处理、连接、断开、设备(文件)操作函数 input_register_handler(&mousedev_handler);/创建输入设备节点devfs_mk_cdev(MKDEV(INPUT_MAJOR, MOUSEDEV_MINOR_BASE + MOUSEDEV_MIX), S_IFCHR|S_IRUGO|S_IWUSR, input/mice);static struct input_handler mousedev_handler = .event
17、= mousedev_event,/REL(相对坐标)、按键、ABS(绝对坐标)、SYNC等事件处理 .connect = mousedev_connect, .disconnect = mousedev_disconnect, .fops = &mousedev_fops,/鼠标打开、poll、读写等操作 .minor = MOUSEDEV_MINOR_BASE, .name = mousedev, .id_table = mousedev_ids,;操作系统HID接口下面集中分析mousedev_event事件处理:分析数据事件结构体linux/input.h中有定义,这个文件还定
18、义了标准按键的编码等struct input_event struct timeval time; /按键时间 _u16 type; /类型,在下面有定义 _u16 code; /要模拟成什么按键 _s32 value;/是按下还是释放;code:事件的代码.如果事件的类型代码是EV_KEY,该代码code为设备键盘代码.代码植0127为键盘上的按键代码,0 x1100 x116 为鼠标上按键代码,其中0 x110(BTN_ LEFT)为鼠标左键,0 x111(BTN_RIGHT)为鼠标右键,0 x112(BTN_ MIDDLE)为鼠标中键.其它代码含义请参看include/linux/inp
19、ut.h文件. 如果事件的类型代码是EV_REL,code值表示轨迹的类型.如指示鼠标的X轴方向REL_X(代码为0 x00),指示鼠标的Y轴方向REL_Y(代码为0 x01),指示鼠标中轮子方向REL_WHEEL(代码为0 x08).操作系统HID接口对HID接口的测试结果如右图所示。图形显示基本原理随着计算机科学技术的迅猛发展,借助于计算机的图形显示技术、图像处理技术和模式识别技术均取得了重大进展。仅在电视节目制作系统中,就有电视字幕机、三维动画工作站和非线性编辑系统等几大应用领域。而在这几大应用领域中,都离不开计算机图形显示技术。图形显示基本原理谈到计算机图形显示技术,可分为硬件和软件两
20、大部分,且这两大部分密切相关。就广义的图形来说,可以分为由计算机生成的字幕与图形、由扫描仪输入的图 形、由图像卡输入的活动图像及由该卡捕捉到的单帧图像(可以用某一规定的图形格式来存储)等。当这些图形图像以文件形式存储下来时,可以有静态或动态、低 分辨率或高分辨率等数十种格式。图形显示基本原理1图形适配器及其显示模式从1981年问世的ibmpc机到当今的第4代Core系列微机,其图形显示方式都是通过图形适配器送到光栅扫描帧缓冲式显示器进行显示的,而图形适配器则是一块插在计算机主板上总线扩充槽内的插卡,它沟通了主机与显示器的联系,一般简称作显示卡。图形显示基本原理2光栅图形显示器的工作原理在图形显
21、示卡上都有一个由视频存储器vram组成的显示缓冲区,它接受并暂存计算机送来的图形图像数字信息,经da转换为模拟信号后,再送到显示器 去显示。早期的mda卡上仅有4kb容量的显示缓冲存储器,到标准vga卡时容量增至512kb。增强vga卡一般为1mb容量,而目前扩展功能的显示卡 上,显示缓冲区(显存)的容量已达到2Gb甚至更大。显示缓冲区可以看成是一个与屏幕上像素分布一一对应的二维矩阵,其中的每一个存储单元对应着屏幕上的一个像素,其位置可以由二维坐标(x,y)来表示。显示缓冲区的存储单元与显示器屏幕坐标的对应关系可以由下页图片所示。图形显示基本原理图形显示基本原理3图形显示过程图形的显示过程应该
22、从硬件和软件两个方面来说。就硬件方面来说,当电子束扫描到屏幕上某一像素的位置(坐标)时,显示器中的显示处理器 dpu(display processing unit)会同时从对应的显示缓冲单元中取出像素值,并以此查找彩色表的地址,从该地址处得到该像素的红、绿、蓝三基色分量,经da转换后分别控制三基 色电子枪或LCD显示电路,使屏幕上该像素显示出三基色的混合色。在图2示例中,彩色表的红、绿分量分别为15,而蓝分量为0,因此,屏幕上该像素的颜色会是黄色。图形显示基本原理就软件方面来说,要完成图形显示的初始化及图形的加工。这里,初始化的意思是要将计算机的显示方式设置为显示器所能够显示的某一种模式,并
23、将所有的显示缓冲单元清零,另外,对彩色表的每一个单元要分别填上预定的颜色值,使彩色索引与具体的颜色联系起来。图形加工则是图形软件的主要任务,其主要内容是:根据需要显示的图形内容,随时改写显示缓冲单元的内容。这是因为屏幕上显示的图形是由显示卡上显示缓冲区中的内容唯一决定的。一旦在显示缓冲单元中写入要求的彩色索引值,图形就自然在屏幕上显示出来了。操作系统焦点模型无论是 Windows 应用程序还是 Linux 应用程序的开发人员,焦点( focus )都是一个非常常见的一个概念。那么焦点究竟是什么呢?简单的说,焦点决定了由哪个窗口或者控件接收键盘或鼠标输入信息,因此,它又被称作输入焦点。对于用户来
24、说,最直观的感觉是,有光标闪动的窗口或者被高亮的控件就有焦点。操作系统焦点模型很多初级应用程序员或者 Windows 用户有这样一个误解,认为凡是鼠标点击的窗口就是焦点窗口。当出现有的窗口或者控件点击后没有反应的现象时,就认为是焦点出现了问题。事实上,焦点仅仅控制着键盘的输入,而鼠标输入与焦点没有直接关系。用户之所以有这样的误解是由于另一个概念,系统的焦点模式(focus mode )。焦点模式决定了鼠标如何使一个窗口获得焦点。操作系统焦点模型一般来说,焦点模式被分为三种: click-to focus :这种模式就是指鼠标点击的窗口就可获得焦点。这是Windows用户最常见的一种模式。鼠标点
25、击的窗口会被激活,被置于所有窗口的最前面,并接收键盘输入。 focus-follow-mouse :有的地方也称这种模式为 pointer focus 。它是指鼠标下的窗口可以获取焦点。当鼠标移到一个可以获得焦点的窗口的范围内,用户不需要点击窗口的某个地方就可以激活这个窗口,接收键盘输入。但是,这个窗口不一定会被置于所有窗口的最前面。当鼠标移出这个窗口的范围时,这个窗口也会随之失去焦点。 sloppy focus :这种模式与 focus-follow-mouse 一样,当鼠标移至某窗口的范围内的时候,该窗口会获得焦点。与 focus-follow-mouse 不同的是,当鼠标移出这个窗口范围
26、时,焦点也不会随之改变。只有当鼠标移动到别的可以接收焦点的窗口时,系统焦点才改变。不同的系统对焦点模式的支持不同,所使用的焦点模型也有很大的区别。操作系统焦点模型Linux X 系统中的焦点系统Linux 上的界面系统使用的是 X 窗口系统。X 是一个面向网络的窗口系统,它采用了 Client-Server 的模型。Client 可以看做是X系统下运行的应用程序。X Server 为各个 Client 提供了界面方面的服务。Client 和 Server 可以不在同一台机器上运行,它们通过网络发送请求和消息。操作系统焦点模型Windows 上的焦点是一个局部的概念,每个线程都拥有自己的焦点窗口
27、。但是在 X 系统中,焦点是一个全局的概念。整个系统中只有一个 X 窗口拥有 X 焦点。应用程序可以通过 XSetInputFocus 来设置焦点窗口。与 Windows 不同的是,在 Linux 上不可见的窗口是不能被设置为焦点窗口的。在 X 系统中, X Server 会在窗口获得或者失去焦点时发送 FocusIn 和 FocusOut 事件通知Client。但是和 Windows 不同的是,并不是所有窗口都能在焦点切换时收到通知,只有创建时选择了 FocusChangeMask 的窗口才能接收到焦点变化事件。操作系统焦点模型Linux上鼠标与键盘输入模型操作系统焦点模型X 系统有着非常特
28、殊的键盘输入模型。在一般情况下(没有应用调用了 XGrabKey 或者XGrabKeyboard 的情况下),X 系统下键盘输入不仅与焦点有关,还与鼠标位置相关。如果当前鼠标位于焦点窗口之外,那么,和 Windows 一样,X Server 会将键盘或鼠标事件发送给焦点窗口。但是,如果鼠标位于焦点窗口的子窗口上,那么,键盘事件会直接发送给这个子窗口。应用程序鼠标捕获与程序处理前面我们已经讲过键盘与鼠标事件的处理,这次聊聊鼠标事件处理。我们从队列里获取到事件以后,可以检测事件的类型,鼠标事件有两个:鼠标键(按下、松开)和鼠标移动。一般的检测代码如下:应用程序鼠标捕获与程序处理SDL_Event
29、myEvent;/事件 int quit=0; while (!quit) while (SDL_PollEvent(&myEvent) switch (myEvent.type)/检测事件类型 case SDL_QUIT: quit = 1; break; case SDL_MOUSEBUTTONDOWN:/鼠标按下 break; case SDL_MOUSEBUTTONUP:/鼠标键松开 break; case SDL_MOUSEMOTION:/鼠标移动 break; 应用程序鼠标捕获与程序处理在SDL_MOUSEBUTTONDOWN、SDL_MOUSEBUTTONUP事件中,我们可以检测鼠标按键信息,然后加以处理。鼠标按键事件的结构:复制代码typedef struct SDL_MouseButtonEvent Uint8 type; /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 换挡拔叉课程设计
- DB51T 1928-2014 高钛重矿渣混凝土施工技术规程
- 时钟嵌入式课课程设计
- 智能控制原理课程设计
- 2024年中国空白面板市场调查研究报告
- 《《教育话语中的隐喻》翻译实践报告》
- 2024至2030年四脚圆面凳子项目投资价值分析报告
- 2024至2030年园林套装工具项目投资价值分析报告
- 2024年中国漂液市场调查研究报告
- 2024至2030年三次群100M网桥项目投资价值分析报告
- 电力安全工作规程(变电部分)课件
- 初期支护设计验算
- 石关煤矿紧急避险系统管理制度及技术档案汇编
- 备件更换保障措施方案
- 2023年华侨、港澳、台联考高考语文试卷(含解析)
- 非织造学讲义(大学期末复习资料)
- 《菜根谭》读书分享
- 全国身份证号地区对应表
- 机械租赁施工公司机构设置
- 《借贷记账法》教学设计
- 【试题】人教版二年级下数学暑假每日一练
评论
0/150
提交评论