Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
5 years, 4 months ago.
USB Keyboard, 3 key combinations
Hello
I'm using MBed board to forward key strokes and mouse movements from a control PC to a target PC. I already have the system working for single keystrokes and two key combinations with a modifier key, such as CTRL + C. However I have been unable to figure out how I can send key combinations with 3 keys, such as CTRL + ALT + DEL or CTRL + SHIFT + ESC.
I'm using Mbed-os 5.12.0 and the included USBMouseKeyboard library. With single keystrokes and combinations with a modifier key I have so far survived with keyboard.printf() and keyboard.key_code() as shown in examples.
So how can I get 3 key combinations with two modifier keys to work?
EDIT: I just managed to find a solution based on https://usb.org/sites/default/files/documents/hid1_11.pdf page 66/97. The example shows that the modifier keys are all sent in one modifier byte. In the example CTLR + ALT results in modifier byte value of 00010100, which equals 0x14. This means we can do keyboard.key_code(KEY_DELETE, 0x14); to send CTRL+ALT+DEL key combination.
Combinations of any other modifier keys can be used by figuring out the correct modifier byte value using the Bit and Key table on the same page.
1 Answer
5 years, 3 months ago.
The full list of keyboard modifiers are:
enum MODIFIER_KEY { KEY_CTRL = 0x01, KEY_SHIFT = 0x02, KEY_ALT = 0x04, KEY_LOGO = 0x08, KEY_RCTRL = 0x10, KEY_RSHIFT = 0x20, KEY_RALT = 0x40, KEY_RLOGO = 0x80, };
So CTRL-ALT-Delete could be written as keyboard.key_code(KEY_DELETE,KEY_CTRL | KEY_ALT );
For software that cares about exact key use your use of 0x14 is using the left hand ALT key and the right hand CTRL key.