about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-18 14:20:24 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-03-18 14:20:24 +0100
commitf5bfb537da3a1ea8d24c573875602d211fc51cf5 (patch)
tree3c1f1a57030c8d1e9ad62dab5ea2a338f22bab2e /src
parente7f8ebaf77ad0eec62f14ee783e0a0b329eb1607 (diff)
downloadbox64-f5bfb537da3a1ea8d24c573875602d211fc51cf5.tar.gz
box64-f5bfb537da3a1ea8d24c573875602d211fc51cf5.zip
Added 3 more function to libasound
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt2
-rw-r--r--src/wrapped/generated/wrappedlibasoundtypes.h2
-rwxr-xr-xsrc/wrapped/wrappedlibasound.c27
-rwxr-xr-xsrc/wrapped/wrappedlibasound_private.h6
4 files changed, 34 insertions, 3 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 213232a0..40255cb6 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -3090,6 +3090,8 @@ wrappedlibasound:
 - iFp:
   - snd_dlclose
   - snd_lib_error_set_handler
+- vFpp:
+  - snd_mixer_elem_set_callback
 - pFppp:
   - snd_dlsym
 - iFpipp:
diff --git a/src/wrapped/generated/wrappedlibasoundtypes.h b/src/wrapped/generated/wrappedlibasoundtypes.h
index 3d88453f..0852abf9 100644
--- a/src/wrapped/generated/wrappedlibasoundtypes.h
+++ b/src/wrapped/generated/wrappedlibasoundtypes.h
@@ -12,6 +12,7 @@
 #endif
 
 typedef int64_t (*iFp_t)(void*);
+typedef void (*vFpp_t)(void*, void*);
 typedef void* (*pFppp_t)(void*, void*, void*);
 typedef int64_t (*iFpipp_t)(void*, int64_t, void*, void*);
 typedef int64_t (*iFpppp_t)(void*, void*, void*, void*);
@@ -20,6 +21,7 @@ typedef void* (*pFpipL_t)(void*, int64_t, void*, uintptr_t);
 #define SUPER() ADDED_FUNCTIONS() \
 	GO(snd_dlclose, iFp_t) \
 	GO(snd_lib_error_set_handler, iFp_t) \
+	GO(snd_mixer_elem_set_callback, vFpp_t) \
 	GO(snd_dlsym, pFppp_t) \
 	GO(snd_async_add_handler, iFpipp_t) \
 	GO(snd_async_add_pcm_handler, iFpppp_t) \
diff --git a/src/wrapped/wrappedlibasound.c b/src/wrapped/wrappedlibasound.c
index 11fffc68..b28a36ba 100755
--- a/src/wrapped/wrappedlibasound.c
+++ b/src/wrapped/wrappedlibasound.c
@@ -67,6 +67,28 @@ static void* findAsyncFct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for Asound Async callback\n");
     return NULL;
 }
+// snd_mixer_elem_callback_t
+#define GO(A)   \
+static uintptr_t my_elem_fct_##A = 0;   \
+static int my_elem_##A(void* elem, uint32_t mask)                       \
+{                                                                       \
+    return (int)RunFunction(my_context, my_elem_fct_##A, 2, elem, mask);\
+}
+SUPER()
+#undef GO
+static void* findElemFct(void* fct)
+{
+    if(!fct) return fct;
+    if(GetNativeFnc((uintptr_t)fct))  return GetNativeFnc((uintptr_t)fct);
+    #define GO(A) if(my_elem_fct_##A == (uintptr_t)fct) return my_elem_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_elem_fct_##A == 0) {my_elem_fct_##A = (uintptr_t)fct; return my_elem_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for Asound Elem callback\n");
+    return NULL;
+}
 
 
 EXPORT int my_snd_async_add_handler(x64emu_t *emu, void *handler, int fd, void* callback, void *private_data)
@@ -115,6 +137,11 @@ EXPORT int my_snd_lib_error_set_handler(x64emu_t* emu, void* handler)
     return my->snd_lib_error_set_handler(error_handler);
 }
 
+EXPORT void my_snd_mixer_elem_set_callback(x64emu_t* emu, void* handler, void* f)
+{
+    my->snd_mixer_elem_set_callback(handler, findElemFct(f));
+}
+
 void* my_dlopen(x64emu_t* emu, void *filename, int flag);   // defined in wrappedlibdl.c
 char* my_dlerror(x64emu_t* emu);
 int my_dlclose(x64emu_t* emu, void *handle);
diff --git a/src/wrapped/wrappedlibasound_private.h b/src/wrapped/wrappedlibasound_private.h
index fdb34b09..293ca326 100755
--- a/src/wrapped/wrappedlibasound_private.h
+++ b/src/wrapped/wrappedlibasound_private.h
@@ -919,9 +919,9 @@ GO(snd_mixer_get_count, uFp)
 GO(snd_mixer_class_unregister, iFp)
 GO(snd_mixer_elem_next, pFp)
 GO(snd_mixer_elem_prev, pFp)
-//GO(snd_mixer_elem_set_callback, vFpP)
-//GO(snd_mixer_elem_get_callback_private, pFp)
-//GO(snd_mixer_elem_set_callback_private, vFpp)
+GOM(snd_mixer_elem_set_callback, vFEpp)
+GO(snd_mixer_elem_get_callback_private, pFp)
+GO(snd_mixer_elem_set_callback_private, vFpp)
 GO(snd_mixer_elem_get_type, iFp)
 //GO(snd_mixer_class_register, iFpp)
 GO(snd_mixer_add_elem, iFpp)