exynos9610: shim: add better reverse engineered mixer_read_event
authorJan Altensen <info@stricted.net>
Wed, 5 May 2021 11:53:33 +0000 (13:53 +0200)
committerJan Altensen <info@stricted.net>
Wed, 5 May 2021 22:27:58 +0000 (00:27 +0200)
 * decompiled output more or less matches now with thats on stock

Change-Id: I5b525342e0cf2b731f93bd3ac74b636fd533969d

shims/libaudioproxy/shim.cpp

index 5c9c33f7508229751d766119ca980af87e16ca56..fa79502014756a988c539013bb6f98dcc31b0a7f 100644 (file)
@@ -53,8 +53,26 @@ struct audio_route {
     struct mixer_path *mixer_path;
 };
 
-extern "C" int mixer_read_event(struct mixer *mixer, struct snd_ctl_event *ev) {
-    ssize_t count = read(mixer->fd, ev, sizeof(*ev));
+extern "C" int * mixer_read_event(struct mixer *mixer, uint param_2) {
+    struct snd_ctl_event *ev = NULL;
+    ssize_t count;
 
-    return (count >= 0) ? 0 : -errno;
-}
\ No newline at end of file
+    if (mixer && mixer->fd >= 0) {
+        ev = (struct snd_ctl_event *)calloc(1, sizeof(*ev));
+
+        if (ev) {
+            count = read(mixer->fd, ev, sizeof(*ev));
+
+            while (0 < count) {
+                if (ev->type == 0 && (ev->data.elem.mask & param_2) != 0) {
+                    return (int *)ev;
+                }
+
+                count = read(mixer->fd, ev, sizeof(*ev));
+            }
+            free(ev);
+        }
+    }
+
+    return NULL;
+}