rendered paste bodyvoid 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);
}