aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkoekeishiya <aasvi93@hotmail.com>2018-05-13 04:37:20 +0200
committerkoekeishiya <aasvi93@hotmail.com>2018-05-13 04:37:20 +0200
commitb84d878effd520ac443e600bec95a4164f486618 (patch)
treef7b7e95cb3b7439f0f220fe88e67e6dfd4f42094
parent28499875304840b9a99d1389e0ee03b78fae834e (diff)
downloadskhd-b84d878effd520ac443e600bec95a4164f486618.tar.gz
skhd-b84d878effd520ac443e600bec95a4164f486618.zip
#33 initial support media-keys
-rw-r--r--src/skhd.c64
1 files changed, 63 insertions, 1 deletions
diff --git a/src/skhd.c b/src/skhd.c
index 9f86110..3ca08f8 100644
--- a/src/skhd.c
+++ b/src/skhd.c
@@ -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 = {};