void IOHIDKeyboardDevice::postKeyboardEvent(UInt8 key, bool keyDown) { GenericKeyboardRpt *report = (GenericKeyboardRpt *)_report->getBytesNoCopy(); UInt8 usbKey; if (!report) return; // Convert ADB scan code to USB if (! (usbKey = _adb2usb[key])) return; // Check if modifier if ((usbKey >= 0xe0) && (usbKey <= 0xe7)) { SET_MODIFIER_BIT(report->modifiers, usbKey, keyDown); } else { for (int i=0; i<6; i++) { if (report->keys[i] == usbKey) { if (keyDown) return; for (int j=i; j<5; j++) report->keys[j] = report->keys[j+1]; report->keys[5] = 0; break; } else if ((report->keys[i] == 0) && keyDown) { report->keys[i] = usbKey; break; } } } handleReport(_report); }