1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-17 00:33:33 +00:00

Updated timing logic for remote keyboard input

This commit is contained in:
Bryan Roe
2020-11-20 11:10:24 -08:00
parent 473777c14b
commit cb131ae141
5 changed files with 325 additions and 47 deletions

View File

@@ -23,6 +23,11 @@ extern int change_display;
x11tst_struct *x11tst_exports = NULL;
extern void kvm_keyboard_unmap_unicode_key(Display *display, int keycode);
extern int kvm_keyboard_map_unicode_key(Display *display, uint16_t unicode);
extern int kvm_keyboard_update_map_unicode_key(Display *display, uint16_t unicode, int keycode);
#define g_keyboardMapCount 8
int g_keyboardMap[g_keyboardMapCount] = { 0 };
int g_keyboardMapIndex = 0;
static struct keymap_t g_keymap[] = {
{ XK_BackSpace, VK_BACK },
@@ -216,10 +221,25 @@ void KeyAction(unsigned char vk, int up, Display *display)
//printf("%x %x %d %d\n", keysym, vk, keycode, up);
if (keycode != 0)
{
//ILIBLOGMESSAGEX("VK: %u [%d]", vk, up);
if (!x11tst_exports->XTestFakeKeyEvent(display, keycode, !up, 0)) { return; }
x11tst_exports->XFlush(display);
}
}
void KeyActionUnicode_UNMAP_ALL(Display *display)
{
int i;
for (i = 0; i < g_keyboardMapCount; ++i)
{
if (g_keyboardMap[i] != 0)
{
kvm_keyboard_unmap_unicode_key(display, g_keyboardMap[i]);
g_keyboardMap[i] = 0;
}
}
g_keyboardMapIndex = 0;
}
void KeyActionUnicode(uint16_t unicode, int up, Display *display)
{
if (change_display) { return; }
@@ -227,16 +247,64 @@ void KeyActionUnicode(uint16_t unicode, int up, Display *display)
if (up == 0)
{
int keycode = kvm_keyboard_map_unicode_key(display, unicode); // Create a key mapping on an unmapped key
if (keycode > 0)
{
x11tst_exports->XTestFakeKeyEvent(display, keycode, 1, 0);
x11tst_exports->XFlush(display);
//ILIBLOGMESSAGEX("UNICODE: %u [%d] <<%ull>>", unicode, up, CurrentTime);
//if (g_keyboardMap[g_keyboardMapIndex] != 0) { kvm_keyboard_unmap_unicode_key(display, g_keyboardMap[g_keyboardMapIndex]); g_keyboardMap[g_keyboardMapIndex] = 0; }
//g_keyboardMap[g_keyboardMapIndex] = kvm_keyboard_map_unicode_key(display, unicode); // Create a key mapping on an unmapped key
//if (g_keyboardMap[g_keyboardMapIndex] > 0)
//{
// //ILIBLOGMESSAGEX("<<%d>>", g_keyboardMap[g_keyboardMapIndex]);
// x11tst_exports->XTestFakeKeyEvent(display, g_keyboardMap[g_keyboardMapIndex], 1, 0);
// x11tst_exports->XFlush(display);
usleep(10000); // We need a short sleep between KeyDown and KeyUp, to register correctly.
x11tst_exports->XTestFakeKeyEvent(display, keycode, 0, 0);
x11tst_exports->XFlush(display);
kvm_keyboard_unmap_unicode_key(display, keycode); // Delete the key mapping we created above
// x11tst_exports->XTestFakeKeyEvent(display, g_keyboardMap[g_keyboardMapIndex], 0, 0);
// x11tst_exports->XFlush(display);
//
// if (++g_keyboardMapIndex >= g_keyboardMapCount)
// {
// g_keyboardMapIndex = 0;
// }
//}
if (g_keyboardMap[g_keyboardMapIndex] != 0)
{
g_keyboardMap[g_keyboardMapIndex] = kvm_keyboard_update_map_unicode_key(display, unicode, g_keyboardMap[g_keyboardMapIndex]); // Create a key mapping on an unmapped key
}
else
{
g_keyboardMap[g_keyboardMapIndex] = kvm_keyboard_map_unicode_key(display, unicode); // Create a key mapping on an unmapped key
}
if (g_keyboardMap[g_keyboardMapIndex] > 0)
{
//ILIBLOGMESSAGEX("<<%d>>", g_keyboardMap[g_keyboardMapIndex]);
x11tst_exports->XTestFakeKeyEvent(display, g_keyboardMap[g_keyboardMapIndex], 1, 0);
x11tst_exports->XTestFakeKeyEvent(display, g_keyboardMap[g_keyboardMapIndex], 0, 15);
x11tst_exports->XFlush(display);
if (++g_keyboardMapIndex >= g_keyboardMapCount)
{
g_keyboardMapIndex = 0;
}
}
//x11tst_exports->XTestFakeKeyEvent(display, x11tst_exports->XKeysymToKeycode(display, 65), 1, 0);
//x11tst_exports->XFlush(display);
//x11tst_exports->XTestFakeKeyEvent(display, x11tst_exports->XKeysymToKeycode(display, 65), 0, 0);
//x11tst_exports->XFlush(display);
//int keycode = kvm_keyboard_map_unicode_key(display, unicode); // Create a key mapping on an unmapped key
//if (keycode > 0)
//{
// x11tst_exports->XTestFakeKeyEvent(display, keycode, 1, 0);
// x11tst_exports->XFlush(display);
// //usleep(1000 * 15); // We need a short sleep between KeyDown and KeyUp, to register correctly.
// x11tst_exports->XTestFakeKeyEvent(display, keycode, 0, 0);
// x11tst_exports->XFlush(display);
// kvm_keyboard_unmap_unicode_key(display, keycode); // Delete the key mapping we created above
//}
}
}