文件名称:
STM32F103C8 Serial to USB HID Keyboard Mouse Joystick 串口 转 USB键盘;鼠标;手柄;GPIO 源码
开发工具:
文件大小: 295kb
下载次数: 0
上传时间: 2018-04-09
详细说明: STM32F103C8 Serial(UART) to USB HID Keyboard Mouse Joystick 串口 转 USB键盘;鼠标;手柄 (1) 使用Composite Device 组合(复合)设备 (1.1) 1个Device -> 1个 Configuation -> 3个Interfance (Keyboard & Mouse & Joystick) (1.2) 支持BIOS模式中的操作(使用HID boot模式) 以便兼容在计算器中设定BIOS : (1.2.1) Keyboard Interfance -> HID (boot mode) -> 2个Endpoint(IN_0x81 & OUT_0x01) -> KeyboardReportDescriptor(不使用Report ID) (1.2.2) Mouse Interfance -> HID (boot mode) -> 1个Endpoint(IN_0x82) -> MouseReportDescriptor(不使用Report ID) (1.3) 支持Windows模式中的 操作(使用Report ID) : (1.3.1) Multimedia Keyboard Interfance -> HID -> 1个Endpoint(IN_0x85) -> KeyboardReportDescriptor(使用Report ID) (1.3.1.1) Report ID (1) : HID Usage Page 0x0C, MediaKey (1.3.1.2) Report ID (2) : HID Usage Page 0x01, PowerControl (1.3.2) Mouse Interfance -> HID (boot mode) -> 1个Endpoint(IN_0x84) -> MouseReportDescriptor(使用Report ID) (1.3.2.1) Report ID (1) : 相对坐标 (-32768 ~ 32767) (1.3.2.2) Report ID (2) : 绝对坐标 (0 ~ 2048) (1.4) 支持反馈Keyboard_LED灯号: All Off; Num Lock; Caps Lock; Scroll Lock; Compose; Kana (1.5) Joystick Interfance -> HID -> 1个Endpoint(IN_0x83) -> JoyStickReportDescriptor (1.7) 支持GPIO命令, 可控制 12个GPIO 0/1 (hi/low)输出 (1.8) 支持Hardware或Software 插拔(Connect/Disconnect)命令 (1.9) 支持Software Reset命令 (2) 串口接收 命令 (2.1) UART协议: 115200, n, 8, 1 (2.2) 1帧发送字符串格式, 以 '{'开始, '}'结束 ','分隔 共10个10进制数字 例如: {1,2,3,4,5,6,7,8,9,10} (2.3) 第1位 区分 Keyboard(128) 或是 Mouse(64) 或是 Joystick(32) 或是 Control(32) 命令 Control_cmd = 0x10, Joystick_cmd = 0x20, Mouse_cmd = 0x40, MouseHold_cmd = 0x41, AbsMouse_cmd = 0x42, AbsMouseHold_cmd= 0x43, Keyboard_cmd = 0x80, KeyboardHold_cmd= 0x81, MediaKey_cmd = 0x82, MediaKeyHold_cmd= 0x83, Switch_cmd = 0xC0, SwitchHold_cmd = 0xC1 例如: {16, 0,0,0,0,0,0,0,0} --- 发送Control命令 {32, 0,0,0,0,0,0,0,0} --- 发送Joystick命令 {64, 0,0,0,0,0,0,0,0} --- 发送Mouse命令(相对坐标) {65, 0,0,0,0,0,0,0,0} --- 发送Mouse命令(相对坐标)(按住不放) {66, 0,0,0,0,0,0,0,0} --- 发送WinMouse命令(相对坐标/绝对坐标) {67, 0,0,0,0,0,0,0,0} --- 发送WinMouse命令(相对坐标/绝对坐标)(按住不放) {128,0,0,0,0,0,0,0,0} --- 发送Keyboard命令 {129,0,0,0,0,0,0,0,0} --- 发送Keyboard命令(按住不放) {130,0,0,0,0,0,0,0,0} --- 发送MediaKey命令 {131,0,0,0,0,0,0,0,0} --- 发送MediaKey命令(按住不放) (3) 发送Keyboard键盘命令时 : 第2~9位 分别如下 (3.1) 第2位 : Modify_Key(修饰键) Key_Release = 0x00, Left_Control = 0x01, Left_Shift = 0x02, Left_Alt = 0x04, Left_GUI = 0x08, Right_Control = 0x10, Right_Shift = 0x20, Right_Alt = 0x40, Right_GUI = 0x80, 例如: {128, 8,0,0,0,0,0,0,0} --- 发送 Win_Key键 {128, 128,0,0,0,0,0,0,0} --- 发送 WinApp_Key键 {128, 32,0,0,0,0,0,0,0} --- 发送 右Shift键 (3.2) 第3位 : 保留,不使用,一律填0 (3.3) 第4~9位 : 可以同时发送6个Keyboard按键 例如: {128, 0,0,4,5,6,7,8,9} --- 发送 'abcdef'键 {128, 2,0,4,5,6,7,8,9} --- 按住 左Shift 发送 'abcdef'键 => 'ABCDEF' {128, 0,0,0,5,0,7,0,9} --- 发送 'bdf'键 (0表示 无按键) {129, 0,0,4,0,0,0,0,0} --- 按住 'a'键不放 (不是 'a'键 连发) {129, 0,0,0,0,0,0,0,0} --- 释放所有按住的键 (3.4) 发送MediaKeyboard键盘命令时 : 第2~3位 分别如下 (3.4.1) 第2位 : report ID Report ID = 1 : 使用 HID Usage Page 0x0C Report ID = 2 : 使用 HID Usage Page 0x01 (3.4.2) 第3位 : 发送WindowsKey 例如: {130, 1,233} --- (report ID = 1, HID Usage Page 0x0C) 发送 Volume Up (0xE9 = 233) {130, 1,402} --- (report ID = 1, HID Usage Page 0x0C) 执行 Calculator (0x0192 = 402) {130, 2,130} --- (report ID = 2, HID Usage Page 0x01) 执行 System Sleep (0x82 = 130) 按键码 可参阅: (HID Usage ID) http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf https://www.hiemalis.org/~keiji/PC/scancode-translate.pdf https://gist.github.com/MightyPork/6da26e382a7ad91b5496ee55fdc73db2 http://www.usb.org/developers/hidpage/Hut1_12v2.pdf (4) 发送Mouse鼠标命令时 : 第2~9位 分别如下 (4.1) 第2位 : 鼠标按钮(左,中,右)占3bits Button_Release = 0x00, Left_Button = 0x01, Right_Button = 0x02, Mid_Button = 0x04, 例如: {64, 1,0,0,0,0,0,0,0} --- 点击 左键 {64, 2,0,0,0,0,0,0,0} --- 点击 右键 {64, 4,0,0,0,0,0,0,0} --- 点击 中键 {65, 1,0,0,0,0,0,0,0} --- 按住 左键 不放 {65, 0,30,40,0,0,0,0} --- 移动鼠标 并 释放按键 (4.2) 第3~5位 : 移动(X,Y), 滚轮(Wheel) X: -127~127:左右移动鼠标 Y: -127~127:上下移动鼠标 Wheel: -127~127:上下转动滚轮 例如: {64, 0,20,-10, 0, 0,0,0,0} --- 鼠标 右移20,上移10 {64, 0, 0, 0,-30} --- 滚轮-30 (4.3) 第6~9位 : 保留,不使用,一律填0 (或不填) (4.4) 发送Windows模式中的Mouse键盘命令时 : 第2~3位 分别如下 (4.4.1) 第2位 : report ID Report ID = 1 : 使用 相对坐标 Report ID = 2 : 使用 绝对坐标 (4.4.2) 第3位 : 鼠标按钮(左,中,右)占3bits Button_Release = 0x00, Left_Button = 0x01, Right_Button = 0x02, Mid_Button = 0x04, (4.4.3) 第4~6位 : 移动(X,Y), 滚轮(Wheel) (4.4.3.1) Report ID = 1 : 使用 相对坐标 X: -32768 ~ 32767:左右移动鼠标 Y: -32768 ~ 32767:上下移动鼠标 Wheel: -127~127:上下转动滚轮 (4.4.3.2) Report ID = 2 : 使用 绝对坐标 X: 0 ~ 2048:左右移动鼠标 Y: 0 ~ 2048:上下移动鼠标 Wheel: -127~127:上下转动滚轮 例如: {66, 1, 0,500,-400} --- 鼠标 右移500,上移400 {66, 2, 0,500, 400} --- 鼠标跳到 距右上角 右边500位置, 距右上角下方400位置 (5) 发送Joystick手柄命令时 : 第2~10位 分别如下 (5.1) 第2~4位 : 移动X,Y,Z X: -127~127:X轴左右移动手柄 Y: -127~127:Y轴上下移动手柄 Z: -127~127:Z轴转动手柄 例如: {32,-127, 0, 0, 0,0,0, 0,0,0} --- 移动手柄X轴到-127(最右边) {32, 0,127, 0, 0,0,0, 0,0,0} --- 移动手柄Y轴到127(最下面) {32, -95, 32,96, 0,0,0, 0,0,0} --- 移动手柄X,Y,Z轴到(-95,32,96) (5.2) 第5~7位 : 旋转X,Y,Z X: -127~127:X轴旋转 Y: -127~127:Y轴旋转 Z: -127~127:Z轴旋转 例如: {32, 0,0,0, 63, 0, 0, 0,0,0} --- 旋转手柄X轴到63 {32, 0,0,0, 0,-32, 0, 0,0,0} --- 旋转手柄Y轴到-32 {32, 0,0,0, 0, 0,127, 0,0,0} --- 旋转手柄Z轴到127 (5.3) 第8位 : 8个按钮(每个按钮占1bit) 例如: {32, 0,0,0, 0,0,0, 85, 0,0} --- 按钮: (0x55=85) 1,3,5,7:ON; 2,4,6,8:OFF {32, 0,0,0, 0,0,0, 170, 0,0} --- 按钮: (0xAA=170) 1,3,5,7:OFF; 2,4,6,8:ON (5.4) 第9~10位 : 2个 Hat_switch(方向帽) POV1, POV2 POV1: -8~7 POV1_0 = 0, (-8) POV1_45 = 1, (-6) POV1_90 = 2, (-6) POV1_135 = 3, (-5) POV1_180 = 4, (-4) POV1_225 = 5, (-3) POV1_270 = 6, (-2) POV1_315 = 7, (-1) POV2: -8~7 POV2_0 = 0, (-8) POV2_45 = 1, (-7) POV2_90 = 2, (-6) POV2_135 = 3, (-5) POV2_180 = 4, (-4) POV2_225 = 5, (-3) POV2_270 = 6, (-2) POV2_315 = 7, (-1) 例如: {32, 0,0,0, 0,0,0, 2,0} --- POV1 到90度 {32, 0,0,0, 0,0,0, 0,6} --- POV2 到270度 (6) 发送Switch控制命令时 : 第2~10位 分别如下 (6.1) 第2位 : 控制 PB5 ~ PB0 的输出 例如: {192, 7,0} --- 发出200ms后关闭, [PB5,PB4,PB3,PB2,PB1,PB0] 的输出: [0,0,0,1,1,1] {193, 1,0} --- 持续发出PB=1, [PB5,PB4,PB3,PB2,PB1,PB0] 的输出: [0,0,0,0,0,1] (6.2) 第3位 : 控制 PB13 ~ PB8 的输出 例如: {192, 7,12} --- 发出200ms后关闭, [PB5,PB4,PB3,PB2,PB1,PB0] 的输出: [0,0,0,1,1,1] --- [PB13,PB12,PB11,PB10,PB9,PB8] 的输出: [0,0,1,1,0,0] {192, 0,0} --- 关闭所有, PB5~PB0 PB13~PB8 的输出皆为: 0 (6.3) 第4~9位 : 保留,不使用,一律填0 (或不填) (7) 发送Control控制命令时 : 第2~10位 分别如下 (7.1) 第2位 : 控制命令 0: 反馈目前的USB状态 1: 重启 此USB HID设备 2: USB联机 (USB Coneect) 15: USB断线 (USB Disconeect) 需电阻(1.0~1.5K)接在 PA8和PA12间,做为 USB V-Bus控制 例如: {16, 0} --- 反馈目前的USB状态 {16, 1} --- 重启 此USB HID设备 {16, 2} --- USB重新联机 (USB Coneect) {16, 15} --- USB断线 (USB Disconeect) PA0 -------- 接GND, USB断线 (USB Disconeect) PA0 -------- 空接(或接+3V), USB联机 (USB Coneect) (7.2) 第3~9位 : 保留,不使用,一律填0 (或不填) ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.