From ed49b01838f3c07fa7a997b1f758ce2c983f49f7 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sun, 25 Jun 2023 08:03:53 +0200 Subject: GlueGen JavaCallback: Add more related documentation --- doc/GlueGen_Mapping.html | 30 ++++++++++++++++++++++++++++-- doc/GlueGen_Mapping.md | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 4 deletions(-) diff --git a/doc/GlueGen_Mapping.html b/doc/GlueGen_Mapping.html index dd63718..96c56c5 100644 --- a/doc/GlueGen_Mapping.html +++ b/doc/GlueGen_Mapping.html @@ -1809,11 +1809,37 @@ StructPackage T2_InitializeOptions com.jogamp.gluegen.test.junit.generation

GlueGen supports registering Java callback methods to native C-API functions in the form:

-
typedef int32_t ( * T_CallbackFunc)(size_t id, size_t msg_len, const char* msg, void* userParam);
+
typedef int32_t ( * T_CallbackFunc)(size_t id, const char* msg, void* userParam);
 
 void AddMessageCallback(T_CallbackFunc func, void* userParam);
 void RemoveMessageCallback(T_CallbackFunc func, void* userParam);
-void InjectMessageCallback(size_t id, size_t msg_len, const char* msg);
+void InjectMessageCallback(size_t id, const char* msg);
+

and the following GlueGen configuration

+
ArgumentIsString T2_CallbackFunc 1
+ArgumentIsString InjectMessageCallback 1
+
+# Define a JavaCallback, enacted on a function-pointer argument `T2_CallbackFunc` and a user-param `void*` for Java Object mapping
+JavaCallbackDef  T2_CallbackFunc 2
+

This will lead to the following result

+
public interface Bindingtest2 {
+
+  /** JavaCallback interface: T2_CallbackFunc -> int32_t (*T2_CallbackFunc)(size_t id, const char *  msg, void *  userParam) */
+  public static interface T2_CallbackFunc {
+    /** Interface to C language function: <br> <code>int32_t callback(size_t id, const char *  msg, void *  userParam)</code><br>Alias for: <code>T2_CallbackFunc</code>     */
+    public int callback(long id, String msg, Object userParam);
+  }
+
+  ...
+
+  /** Entry point (through function pointer) to C language function: <br> <code>void AddMessageCallback(int32_t (*func)(size_t id, const char *  msg, void *  userParam), void *  userParam)</code><br>   */
+  public void AddMessageCallback(T2_CallbackFunc func, Object userParam);
+
+  /** Entry point (through function pointer) to C language function: <br> <code>void RemoveMessageCallback(int32_t (*func)(size_t id, const char *  msg, void *  userParam), void *  userParam)</code><br>   */
+  public void RemoveMessageCallback(T2_CallbackFunc func, Object userParam);
+
+  /** Entry point (through function pointer) to C language function: <br> <code>void InjectMessageCallback(size_t id, const char *  msg)</code><br>   */
+  public void InjectMessageCallback(long id, String msg);
+

TODO: Work in progress

Example

Platform Header Files

diff --git a/doc/GlueGen_Mapping.md b/doc/GlueGen_Mapping.md index 2a0de78..8965dd6 100644 --- a/doc/GlueGen_Mapping.md +++ b/doc/GlueGen_Mapping.md @@ -667,11 +667,43 @@ and similar to `T2_CustomFuncB customFuncB1` ### Java Callback from Native C-API Support GlueGen supports registering Java callback methods to native C-API functions in the form: ``` -typedef int32_t ( * T_CallbackFunc)(size_t id, size_t msg_len, const char* msg, void* userParam); +typedef int32_t ( * T_CallbackFunc)(size_t id, const char* msg, void* userParam); void AddMessageCallback(T_CallbackFunc func, void* userParam); void RemoveMessageCallback(T_CallbackFunc func, void* userParam); -void InjectMessageCallback(size_t id, size_t msg_len, const char* msg); +void InjectMessageCallback(size_t id, const char* msg); +``` + +and the following GlueGen configuration +``` +ArgumentIsString T2_CallbackFunc 1 +ArgumentIsString InjectMessageCallback 1 + +# Define a JavaCallback, enacted on a function-pointer argument `T2_CallbackFunc` and a user-param `void*` for Java Object mapping +JavaCallbackDef T2_CallbackFunc 2 +``` + +This will lead to the following result +``` +public interface Bindingtest2 { + + /** JavaCallback interface: T2_CallbackFunc -> int32_t (*T2_CallbackFunc)(size_t id, const char * msg, void * userParam) */ + public static interface T2_CallbackFunc { + /** Interface to C language function:
int32_t callback(size_t id, const char * msg, void * userParam)
Alias for: T2_CallbackFunc */ + public int callback(long id, String msg, Object userParam); + } + + ... + + /** Entry point (through function pointer) to C language function:
void AddMessageCallback(int32_t (*func)(size_t id, const char * msg, void * userParam), void * userParam)
*/ + public void AddMessageCallback(T2_CallbackFunc func, Object userParam); + + /** Entry point (through function pointer) to C language function:
void RemoveMessageCallback(int32_t (*func)(size_t id, const char * msg, void * userParam), void * userParam)
*/ + public void RemoveMessageCallback(T2_CallbackFunc func, Object userParam); + + /** Entry point (through function pointer) to C language function:
void InjectMessageCallback(size_t id, const char * msg)
*/ + public void InjectMessageCallback(long id, String msg); + ``` *TODO: Work in progress* -- cgit v1.2.3