仿USB键盘文件植入器(模拟人工按键)_第1页
仿USB键盘文件植入器(模拟人工按键)_第2页
仿USB键盘文件植入器(模拟人工按键)_第3页
仿USB键盘文件植入器(模拟人工按键)_第4页
仿USB键盘文件植入器(模拟人工按键)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编号: 嵌入式系统综合实训嵌入式系统综合实训说明书说明书题 目: 仿 USB 键盘文件植入器 院 (系): 信息与通信学院 专 业: 电子信息工程 学生姓名: 万玉 学 号: 1161170125 指导教师: 叶金才 2015 年 1 月 11 日摘 要这次设计任务所做的工作就是实现模拟人工按键,将开发板接上位机后,不用板子上的按键,直接用程序产生键盘码,计算机收到 USB 键盘的键码,会执行相应的功能。具体的动作是打开计算机的命令行,在命令行里面运行记事本,并新建一个 a.txt记事本文件,并向该文件录入若干的英文字符。运行命令行通过键盘操作是 win+R -cmd-notepad a.tx

2、t-enter-录入英文字符。最后,会在本文介绍如何实现向电脑发送 WIN+R 这样的组合键键码,可以类似去模拟 ALT+F4,SHIFT+1 之类的按键。关键词:ARM;USB 键盘;模拟人工按键;USB HID 协议;组合键AbstractThe design task is to realize the simulation of artificial work key, development board connected with a host computer, no board of the key, the direct use of program generation k

3、eyboard code, computer received USB keyboard key code, executes the corresponding function. The specific action is to open the computer command line, the command line which run Notepad, and a new a.txt notepad file, and some to the file entry English character. Run command lines through the keyboard

4、 operation is win+R - cmd- Notepad a.txt- enter- input English character.Finally, in this paper introduces how to realize the computer to send WIN+R this combination key code, can be similar to the simulated ALT+F4, SHIFT+1 and the like button.Keywords: ARM; USB keyboard keys; artificial simulation;

5、 USB HID protocol; key combination目 录引言 11 设计软件基础知识21.1 C 编译器 KEIL 介绍 21.2 ARM 相关知识21.3 USB-HID 简介22 模拟人工按键设计32.1 程序设计的任务要求 32.2 程序的设计思路和想法 32.3 报告描述符 32.4 普通按键程序设计42.5 特殊(功能)按键程序设计 63 功能程序设计73.1 程序总流程图 73.2 开始程序的修改84 结论 10谢辞11参考文献12附录13桂林电子科技大学课程设计(论文)报告用纸0第 0 页 共 22 页引言 USB,是英文 Universal Serial Bu

6、s(通用串行总线)的缩写,而其中文简称为“通串线”,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。USB 接口支持设备的即插即用和热插拔功能。USB 是在 1994 年底由英特尔、康柏、IBM、Microsoft 等多家公司联合提出的。USB-HID 是 Human Interface Device 的缩写,由其名称可以了解 HID 设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过 HID 设备并不一定要有人机接口,只要符合 HID 类别规范的设备都是 HID 设备。交换的数据存储在称为报表(report)的结构内,设备的固件必须支持 HID

7、报表的格式。主机在控制与中断传输中传送与要求报表,来传送与接收数据。报表的格式非常有弹性,可以处理任何类别的数据。键盘是最常用也是最主要的输入设备,通过键盘可以将英文字母、数字、标点符号等输入到计算机中,从而向计算机发出命令、输入数据等。起初这类键盘多用于品牌机,如 HP、联想等品牌机都率先采用了这类键盘,受到广泛的好评,并曾一度被视为品牌机的特色。随着时间的推移,渐渐的市场上也出现独立的具有各种快捷功能的产品单独出售,并带有专用的驱动和设定软件,在兼容机上也能实现个性化的操作。桂林电子科技大学课程设计(论文)报告用纸1第 1 页 共 22 页1 设计软件基础知识 包括 keil uVisio

8、n4,ARM 核心知识,USB-HID 简介。1.1 C 编译器 Keil 介绍Keil C51 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比,C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C51 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。KeilSoftware 公司推出的

9、 uVision4 是一款可用于多种 8051MCU 的集成开发环境(IDE),该 IDE 同时也是 PK51 及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3 还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标 MCU,包括指令集、片上外围设备及外部信号等。uVision3 提供逻辑分析器,可监控基于 MCUI/O 引脚和外设状态变化下的程序变量。uVision4 提供对多种最新的 8051 类微处理器的支持,包括AnalogDevices 的 ADuC83x 和 ADuC84x,以及 Infineo

10、n 的 XC866 等。1.2 ARM 核心相关知识 2012 年 3 月 14 日,中国上海ARM 公司今天发布了一款拥有全球最低功耗效率的微处理器ARM Cortex-M0+处理器。支持 ARMv6M 指令集,该款经过优化的Cortex-M0+处理器可针对家用电器、白色商品、医疗监控、电子测量、照明设备以及功耗与汽车控制器件等各种广泛应用的智能传感器与智能控制系统,提供超低功耗、低成本微控制器(MCU)。1.3 USB-HID 简介是 Human Interface Device 的缩写,由其名称可以了解 HID 设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过 HID 设备并不一

11、定要有人机接口,只要符合 HID 类别规范的设备都是 HID 设备。交换的数据存储在称为报表(report)的结构内,设备的固件必须支持 HID 报表的格式。主机在控制与中断传输中传送与要求报表,来传送与接收数据。报表的格式非常有弹性,可以处理任何类别的数据。每个 USB 只有一个主机。在 USB 中,USB HOST 是通过各种描述符来识别设备的,有设备描述符,配置描述符,接口描述符,端点描述符,字符串描述符,报告描述符等等。USB 报告描述符(Report Descriptor)是 HID 设备中的一个描述符,它是比较复杂的一个描述符。USB-HID 设备是通过报告来给传送数据的,报告有输

12、入报告和输出报告。输入报告桂林电子科技大学课程设计(论文)报告用纸2第 2 页 共 22 页是 USB 设备发送给主机的,例如 USB 鼠标将鼠标移动和鼠标点击等信息返回给电脑,键盘将按键数据数据返回给电脑等;输出报告是主机发送给 USB 设备的,例如键盘上的数字键盘锁定灯和大写字母锁定灯等。报告是一个数据包,里面包含的是所要传送的数据。输入报告是通过中断输入端点输入的,而输出报告有点区别,当没有中断输出端点时,可以通过控制输出端点 0 发送,当有中断输出端点时,通过中断输出端点发出。而报告描述符,是描述一个报告以及报告里面的数据是用来干什么用的。通过它,USB HOST 可以分析出报告里面的

13、数据所表示的意思。它通过控制输入端点 0 返回,主机使用获取报告描述符命令来获取报告描述符,注意这个请求是发送到接口的,而不是到设备。一个报告描述符可以描述多个报告,不同的报告通过报告 ID 来识别,报告ID 在报告最前面,即第一个字节。当报告描述符中没有规定报告 ID 时,报告中就没有ID 字段,开始就是数据。2 模拟人工按键设计包括设计要求,普通按键的程序设计,组合键(功能键组合)的程序设计。2.1 程序设计的任务要求模拟人工按键(默认路径),win+r(组合键,Win 键即 window 键) 输入 cmd 回车 输入 notepad a.txt 回车 回车(由于第一次在默认路径C:Us

14、ersAdministrator 新建文件,所以对弹出的是否创建文件的提示框按一次回车) 输入 abcd1234 按下 Ctrl+S(组合键,对记事本进行保存的快捷键)进行保存 完成 。2.2 程序的设计思路和想法开始前应该把 Win+R 和 Ctrl+S 这两个组合键环节分别定成一个程序的开始和结束,而 cmd,回车,notepad 空格 a.txt,回车,回车,abcd1234 这个单个按键的环节定为中间环节,整体的思路就是这样。由于一开始通过例程知道单个按键比较容易实现,于是可以是先做了单个按键的数组,再去做组合键,做完之后回头总结,这样的想法确实是对的,遵循先易后难得原则,而且也可以从

15、简单的实现方法中去发现组合键的做法。在设计组合键的时候最难得莫过于 window 键都按不下去,通过查询和阅读了很多的资料后,总结了 win 键和类似的功能键如何实现,然后在不断的尝试中发现组合键的实现方法,后面会做详细的介绍。2.3 报告描述符在上面的 USB-HID 简介中已经介绍了报告描述符。报告描述符是描述一个报告以及报告里面的数据是用来干什么用的。通过它,USB HOST 可以分析出报告里面的数据所表示的意思。所以有必要解释一下报告描述符。const uint8_t g_HID_au8KeyboardReportDescriptor = 0 x05, 0 x01, / Usage P

16、age (Generic Desktop)桂林电子科技大学课程设计(论文)报告用纸3第 3 页 共 22 页 /表示用途页为通用桌面设备 0 x09, 0 x06, / Usage (Keyboard) /表示用途为键盘 0 xA1, 0 x01, / Collection (Application) /表示应用集合,必须以 END_COLLECTION 来结束它 0 x05, 0 x07, / Usage Page (Key Code) /表示用途页为按键 0 x19, 0 xE0, / Usage Minimum (224) /用途最小值,这里为左 Ctrl 键 0 x29, 0 xE7,

17、 / Usage Maximum (231) /用途最大值,这里为右 GUI,即 window 键 0 x15, 0 x00, / Logical Minimum (0) /逻辑最小值为 0 0 x25, 0 x01, / Logical Maximum (1) /逻辑最大值 1 0 x75, 0 x01, / Report Size (1) /报告大小(即这个字段的宽度)为 1bit 0 x95, 0 x08, / Report Count(8) /报告的个数为 8,即总共有 8 个 bits 0 x81, 0 x02, / Input (Data, Variable, Absolute)

18、;Modifier byte /输入用,变量,值,绝对值2.4 普通按键程序设计由于例程里是扫描按键,然后对按下的按键赋上对应的键值,可以实现按下按键,在 TXT 里得到对应的字母。首先,任务的要求是模拟人工按键,在原 USB 键盘程序上进行修改,所以只需要向上位机发送我们想按下的按键键值的报告,并不用人亲自去按键,所以在这里用不到键盘扫描。主要是明白报告描述符和报告。接下来根据 USB HID to PS/2 Scan Code Translation Table 去找到自己想要的键码,对应的十六进制,只用看 HID Usage ID这一列。例如,a 对应的键值为 0 x04,b 为 0 x

19、05,0 x03 为没定义。所以对应之前设计思路中的中间环节,即为普通按键环节。cmd,回车,notepad空格 a.txt,回车,回车,abcd1234,均为单个的按键。于是有了下面定义的数组:a31=0 x00,0 x00,0 x00,0 x00,0 x03,0 x0D,0 x04,0 x25,0 x0E,0 x0F,0 x14, 0 x05,0 x10,0 x01,0 x04,0 x29,0 x01,0 x34,0 x14,0 x18,0 x14,0 x25,0 x025,0 x01,0 x02,0 x03,0 x04,0 x1B,0 x1C,0 x1D,0 x1E;需要解释的是,在实验

20、的过程中,在反复的尝试后,发现前几个数组没办法执行,桂林电子科技大学课程设计(论文)报告用纸4第 4 页 共 22 页于是可以加入了几个空的定义将其放空,几个空的定义执行后再执行想要的功能。另外,在程序里有这么一句:buf2=0 x03+amyi,所以在上述的数组中就将其减了 0 x03,在本文后面附录的 USB HID to PS/2 Scan Code Translation Table 中,可以简单地看成想要的那个键值往上数三个就是需要的键值。附录会给出键值表图。这里给出一些需要用到的键值。表 2.1Key NameHID Usage PageHID Usage IDErorrUndef

21、ined0703a A0704c C0706d D0707m M0710n N0711o O0712p P0713r R0715t T0717x X071B.0737Return0728Space0739所以设计要求中的依次输 c,m,d,回车,空格都可以找到对应的键码,回车这类不算是功能按键,也算是普通按键,一样可以找到对应的键码,附录会放上 USB HID to PS/2 Scan Code Translation Table,于是,一开始普通按键环节的程序设计如下。 void HID_SetInReport() uint8_t *buf; Static int myi=0; inta31

22、=0 x00,0 x00,0 x00,0 x00,0 x03,0 x0D,0 x04,0 x25,0 x0E,0 x0F,0 x14, 0 x05,0 x10,0 x01,0 x04,0 x29,0 x01,0 x34,0 x14,0 x18,0 x14,0 x25,0 x025,0 x01,0 x02,0 x03,0 x04,0 x1B,0 x1C,0 x1D,0 x1E;桂林电子科技大学课程设计(论文)报告用纸5第 5 页 共 22 页if(g_HID_sDevice.isReportReady) return; / check if previous report done buf =

23、g_HID_sDevice.pu8Report;/ update new report dataIf ( myi31 ) DrvSYS_Delay(250000); buf2=0 x03+amyi; /output myi +; else buf2=0 x03;这段程序可以看出,每次进来可以自动加一,并且按照自己定义的数组去给 buf2一个值,所以可以将想要输出的字母顺序依次给数组里的每个元素。这样会向上位机报告哪些按键被按下,于是可以实现普通按键的设计。2.5 特殊(功能)按键程序设计这部分最难解决的是如何将两个键位同时按下,通过上面的分析,可以知道如何报告单个按键按下的情况给上位机,但是如

24、何按下一个键不放,然后去按下另个键呢?如果把 win 和 R 键的键值一起放到 buf2里,可以肯定的是,这是不可能实现的。在多次尝试未果之后,可以试着把 win 键的键值放入到 buf2去试试,看能不能实现这个功能键,最后也可以发现这是不可能实现的。于是通过查询大量的资料,以及一些网上参考的资料。通过分析,有了如下的总结,这个报告中只有一个报告,所以没有报告 ID,因此返回的都是实际使用的数据。总共有 8 字节输入,1 字节输出。其中输入的第一字节用表示特殊按键,第二字节保留,后面的六字节为普通按键。在附录中有图片,这里简单解释下,总结如下。如果想只按下 win 键,则返回 08 00 00

25、 00 00 00 00 00(十六进制),如果想只按下 r 键,则返回 00 00 15 00 00 00 00 00 , 如果想 win+r 按下,则返回 08 00 15 00 00 00 00 00 ,如果想全部按键释放,则返回 00 00 00 00 00 00 00 00 。这些数据(即报告)都是通过中断端点返回的。键一共有八个字节,即一起发送要发八个字节的数据,第 1 个字节是八个控制键,第 2 个字节是保留,第三至第八个字节为普通按键键值,没有固定位置,只需要往上填上 HID Usage Tables 上的键值,系统即会确认为该键按下。而功能(特殊)按键实际上为键盘的八个控制键

26、,包括:左/右 CTL,在/右 ALT,在/右 SHIFT,左/右 WIN 键盘。一开始以为在 USB HID to PS/2 Scan Code Translation Table 中的 left GUI 的键值为 0 xE7,最后明白上述的原理,也查询了资桂林电子科技大学课程设计(论文)报告用纸6第 6 页 共 22 页料,最后结合查询的资料,总结出来的就是 buf0能表示功能键,buf1保留字节,buf2到 buf7为普通按键。所以特殊按键的开始环节部分为if (myi 5 )DrvSYS_Delay(250000);buf0=0 x08; / 按下 win 键 buf3=0 x15;

27、/ 按下 R 键myi +;在程序的最后还有一次 Ctrl+S 的组合键来结束 if (myi 41) DrvSYS_Delay(250000); buf0=0 x01; buf3=0 x16; myi +; 3 功能程序设计在设计之前,首先明确了要做的事情,需要在一次数组的循环调用中,前几次先不执行。因为在调试的过程中,可以发现,前几个数组根本没有按键,于是在上述的程序中,不要一开始就把 cmd 或者 win+R 这类一开始的按键立即执行,而是在中间多次让它没定义,从第五次开始执行 win+R,而不是让它立即执行 win+R。所以通过看程序,int a里多次使用了 0 x00,这样,才能执行

28、成功。可以看到每次进入下一个 if 或 else if 语句时,在数组其实已经预留了很多的0 x00,并且一定要在每个 if 和 else if 里加上延时,这点很重要。3.1 程序总流程图此次程序设计首先明确普通按键和特殊按键的区别,组合键可以加入到报告里,但是在程序里,往下执行的时候必须清零,否则会一直按着组合键不放,最后导致后面的按键也不能执行,如下为程序设计总流程图。需要解释的是,在程序的一开始,在 myi5 时进入到下一个 else if()语句中,开始执行之前自己定义的普通按键环节,不同的是加入了将 buf0,buf3清零的动作,不然程序会反复执行win+R,导致之后普通按键没办法

29、执行,同样开头也做了放空。直到 myi36 时再次进桂林电子科技大学课程设计(论文)报告用纸7第 7 页 共 22 页入到下一个 else if()语句中,开始执行 Ctrl+S 进行保存,同样开头放空,最后myi36 进入到 else()语句中 buf2=0 x03 进行清零,否则会一直按着最后一个按键。程序总流程图如下。 N Y myi+; 当 myi 5 时 Y N myi+; 当 myi 36 时 N Y myi+; else图 3.1 程序流程图开始If myi 5Win,R 同时按下If myi 36cmd,回车,.If myi 42Ctrl,R 同时按结束桂林电子科技大学课程设计

30、(论文)报告用纸8第 8 页 共 22 页3.2 开始程序的修改由于在确认 USB 设备被识别后马上开始程序,每次开始都太突然,没办法看清每一次修改程序后的变化,于是可以在 main.c 里加入了一段。按 key1 执行开始,这样会比较方便调试。while(1)number=ScanKey();if(number=1) HID_MainProcess();这里用到了键盘扫描,并且当 key1 按下时,开始执行 HID_MainProcess。桂林电子科技大学课程设计(论文)报告用纸9第 9 页 共 22 页4 结论在这次课程设计中,我学会了怎样去根据设计的要求去设计程序和调试程序。动手能力得到

31、很大的提高。从中我发现自己并不能很好的熟练去使用我所学到的嵌入式知识。在以后学习中我要加强对嵌入式的理解和解决问题的能力。在这次完成设计的过程中,遇到最难的就是组合键的键值问题,为此我也纠结了很多天,查阅了很多 USB的资料和很多协议,最后能在自己的能力下完成这份设计,也感觉比较开心。也由于有例程,所以比较简单、定型,而不是真实的生产、科研任务,所以我基本上能有章可循,完成起来并不困难。掌握了设计的步骤和方法,能比较明确自己的设计任务,了解程序和实施方法,这对今后从事技术工作无疑是个很好的训练。通过这种综合训练,我们可以掌握嵌入式设计的基本方法,培养分析解决问题的实际本领,为以后毕业设计和从事

32、嵌入式方向实际工作打下基础。同时也让我充分认识到自己的空想与实践的差别,认识到自己的不足,在弄不懂组合键方法的几天中脾气和态度都不好,这是我的不足。而扎实的基础是一切创造的源泉,只有从本质上理解了原理,才能更好的于疑途寻求柳暗花明,实现在科学界的美好畅游和寻得创造的快乐。桂林电子科技大学课程设计(论文)报告用纸10第 10 页 共 22 页谢 辞本次设计和论文的完成,得益于叶金才老师传授的知识,当我在遇到设计上的难题而四处找不到解答的时候,在老师的无私帮助和耐心指导下,我找到了解决的方法,完成了课程设计。非常感谢老师!在这里,还要特别感谢同班的同学,在我遇到难题时,帮我想解决的办法,令我非常感动,感谢同学!同时,我要特别感谢我的家人,一直在背后默默支持、理解、鼓励我,正因为有了家人,我所做的一切才更有意义。感恩,感谢父母!最后,由于时间的仓促及自身专业水平的不足,正片论文肯定存在尚未发现的缺点和错误。恳请阅读此篇论文的老师、同学,多予指证,不胜感激!桂林电子科技大学课程设计(论文)报告用纸11第 11

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论