Bluetooth HID(人机界面设备)-发送键CMD+空格
我想使用HID将键盘快捷键CMD+空格发送到mac,mac将打开Spotlight。所以我需要CMD作为一个hold键,需要空格来触发快捷键。我该怎么做?我使用的是LightBlueBean,它使用HID协议通过蓝牙与mac进行通信。在其他地方对我有用的一个例子是:Bluetooth HID(人机界面设备)-发送键CMD+空格,bluetooth,escaping,hid,Bluetooth,Escaping,Hid,我想使用HID将键盘快捷键CMD+空格发送到mac,mac将打开Spotlight。所以我需要CMD作为一个hold键,需要空格来触发快捷键。我该怎么做?我使用的是LightBlueBean,它使用HID协议通过蓝牙与mac进行通信。在其他地方对我有用的一个例子是: BeanHid.sendKeys("/dnd "); //turn do not disturb off if it is on BeanHid.sendKeys("\r\n"); //return / newline light
BeanHid.sendKeys("/dnd "); //turn do not disturb off if it is on
BeanHid.sendKeys("\r\n"); //return / newline
lightblue bean的HID类的参考如下:
我猜我需要holdKey、sendKey和releaseKey方法。但我需要的是表示cmd和空格的任何键码。苹果命令键、Windows Windows键和Linux超级键都由USB GUI键修改器位表示 其中有两个:左GUI和右GUI。空格键只是USB空格键的用法。例如,您需要在缓冲区中构建并发送左GUI修改器+空格键 该缓冲区的确切内容取决于您使用的HID报告描述符,但对于以下相当典型的键盘报告描述符:
05 01 (GLOBAL) USAGE_PAGE 0x0001 Generic Desktop Page
09 06 (LOCAL) USAGE 0x00010006 Keyboard (CA=Application Collection)
A1 01 (MAIN) COLLECTION 0x00000001 Application (Usage=0x00010006: Page=Generic Desktop Page, Usage=Keyboard, Type=CA)
05 07 (GLOBAL) USAGE_PAGE 0x0007 Keyboard/Keypad Page
19 E0 (LOCAL) USAGE_MINIMUM 0x000700E0 Keyboard Left Control (DV=Dynamic Value)
29 E7 (LOCAL) USAGE_MAXIMUM 0x000700E7 Keyboard Right GUI (DV=Dynamic Value)
15 00 (GLOBAL) LOGICAL_MINIMUM 0x00 (0)
25 01 (GLOBAL) LOGICAL_MAXIMUM 0x01 (1)
75 01 (GLOBAL) REPORT_SIZE 0x01 (1) Number of bits per field
95 08 (GLOBAL) REPORT_COUNT 0x08 (8) Number of fields
81 02 (MAIN) INPUT 0x00000002 (8 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
95 01 (GLOBAL) REPORT_COUNT 0x01 (1) Number of fields
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field
81 01 (MAIN) INPUT 0x00000001 (1 field x 8 bits) 1=Constant 0=Array 0=Absolute
95 05 (GLOBAL) REPORT_COUNT 0x05 (5) Number of fields
75 01 (GLOBAL) REPORT_SIZE 0x01 (1) Number of bits per field
05 08 (GLOBAL) USAGE_PAGE 0x0008 LED Indicator Page
19 01 (LOCAL) USAGE_MINIMUM 0x00080001 Num Lock (OOC=On/Off Control)
29 05 (LOCAL) USAGE_MAXIMUM 0x00080005 Kana (OOC=On/Off Control)
91 02 (MAIN) OUTPUT 0x00000002 (5 fields x 1 bit) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
95 01 (GLOBAL) REPORT_COUNT 0x01 (1) Number of fields
75 03 (GLOBAL) REPORT_SIZE 0x03 (3) Number of bits per field
91 01 (MAIN) OUTPUT 0x00000001 (1 field x 3 bits) 1=Constant 0=Array 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
95 06 (GLOBAL) REPORT_COUNT 0x06 (6) Number of fields
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field
25 65 (GLOBAL) LOGICAL_MAXIMUM 0x65 (101)
05 07 (GLOBAL) USAGE_PAGE 0x0007 Keyboard/Keypad Page
19 00 (LOCAL) USAGE_MINIMUM 0x00070000 Keyboard No event indicated (Sel=Selector)
29 65 (LOCAL) USAGE_MAXIMUM 0x00070065 Keyboard Application (Sel=Selector)
81 00 (MAIN) INPUT 0x00000000 (6 fields x 8 bits) 0=Data 0=Array 0=Absolute
C0 (MAIN) END_COLLECTION Application
…表示LeftGUI修饰符+空格键的缓冲区应为十六进制:
08 2C
或者,您可以发送RightGUI修改器+空格键:
80 2C
发送上述其中一项后,您需要通过发送无按键缓冲区来指示未按下按键:
00 00
值得注意的是,2C是逻辑_最小值0x00到逻辑_最大值0x65之间的索引,该索引是在HID报告描述符中定义的从使用_最小值0x00到使用_最大值0x65的使用数组中的索引,而不是键盘使用页面中的实际使用代码0x0007002C
如果您只想指示按下空格键,可以在HID报告描述符中对用法0007002C、逻辑_最小值1、逻辑_最大值1进行编码,然后发送:
80 01
…指示当前已按下空格键和GUI修改器,然后是:
00 00
…表示当前未按下任何键。这很有帮助-但似乎不是我可以在HID协议中使用的东西,或者至少不是通过Lightblue Bean的sendKeys方法。如果您可以使用wireshark获取数据包捕获,例如在插入设备时进行握手,则可以分析HID报告描述符以找到答案如果它们支持空格键的使用…那么您可以在调用holdKeyKEY\u LEFT\u GUI之后发送该使用的索引