diff options
author | koekeishiya <aasvi93@hotmail.com> | 2018-05-13 04:37:20 +0200 |
---|---|---|
committer | koekeishiya <aasvi93@hotmail.com> | 2018-05-13 04:37:20 +0200 |
commit | b84d878effd520ac443e600bec95a4164f486618 (patch) | |
tree | f7b7e95cb3b7439f0f220fe88e67e6dfd4f42094 /src/skhd.c | |
parent | 28499875304840b9a99d1389e0ee03b78fae834e (diff) | |
download | skhd-b84d878effd520ac443e600bec95a4164f486618.tar.gz skhd-b84d878effd520ac443e600bec95a4164f486618.zip |
#33 initial support media-keys
Diffstat (limited to 'src/skhd.c')
-rw-r--r-- | src/skhd.c | 64 |
1 files changed, 63 insertions, 1 deletions
@@ -106,6 +106,68 @@ internal EVENT_TAP_CALLBACK(key_handler) if (result) return NULL; } break; + case NX_SYSDEFINED: { + CFDataRef event_data = CGEventCreateData(kCFAllocatorDefault, event); + uint8_t *data = CFDataGetBytePtr(event_data); + +#if 0 + // NOTE(koekeishiya): dump raw event-data for reverse engineering + CFIndex length = CFDataGetLength(event_data); + for (int i = 0; i < length; ++i) { + if (i % 16 == 0) printf("\n"); + printf("%02X ", data[i]); + } +#endif + + uint8_t event_subtype = data[123]; + if (event_subtype == 0x08) { + uint8_t key_code = data[129]; + uint8_t key_state = data[130]; + if (key_state == NX_KEYDOWN) { + switch (key_code) { + case NX_KEYTYPE_SOUND_UP: { + printf("pressed media_sound_up\n"); + } break; + case NX_KEYTYPE_SOUND_DOWN: { + printf("pressed media_sound_down\n"); + } break; + case NX_KEYTYPE_MUTE: { + printf("pressed media_mute\n"); + } break; + case NX_KEYTYPE_PLAY: { + printf("pressed media_play\n"); + } break; + case NX_KEYTYPE_PREVIOUS: { + printf("pressed media_prev\n"); + } break; + case NX_KEYTYPE_NEXT: { + printf("pressed media_next\n"); + } break; + case NX_KEYTYPE_REWIND: { + printf("pressed media_rewind\n"); + } break; + case NX_KEYTYPE_FAST: { + printf("pressed media_fast\n"); + } break; + case NX_KEYTYPE_BRIGHTNESS_UP: { + printf("pressed media_brightness_up\n"); + } break; + case NX_KEYTYPE_BRIGHTNESS_DOWN: { + printf("pressed media_brightness_down\n"); + } break; + case NX_KEYTYPE_ILLUMINATION_UP: { + printf("pressed media_brightness_up\n"); + } break; + case NX_KEYTYPE_ILLUMINATION_DOWN: { + printf("pressed media_brightness_down\n"); + } break; + default: { + printf("pressed system-key %d\n", key_code); + } break; + } + } + } + } break; } return event; } @@ -201,7 +263,7 @@ int main(int argc, char **argv) signal(SIGCHLD, SIG_IGN); struct event_tap event_tap; - event_tap.mask = (1 << kCGEventKeyDown); + event_tap.mask = (1 << kCGEventKeyDown) | CGEventMaskBit(NX_SYSDEFINED); event_tap_begin(&event_tap, key_handler); struct hotloader hotloader = {}; |