From 849615ba9590dfc5702e39ea091f7cd38e0b3f6d Mon Sep 17 00:00:00 2001 From: Alexander Orlenko Date: Mon, 5 Jul 2010 01:03:54 +1100 Subject: some impl's and fixes --- src/bt-adapter.c | 59 ++++----- src/bt-agent.c | 6 +- src/bt-device.c | 29 +++-- src/lib/agent.c | 79 ++++++++++-- src/lib/agent.h | 2 + src/lib/helpers.h | 1 - src/lib/marshallers.c | 340 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/marshallers.h | 68 ++++++++++ 8 files changed, 533 insertions(+), 51 deletions(-) create mode 100644 src/lib/marshallers.c create mode 100644 src/lib/marshallers.h diff --git a/src/bt-adapter.c b/src/bt-adapter.c index 859db3a..d28f4b6 100644 --- a/src/bt-adapter.c +++ b/src/bt-adapter.c @@ -31,18 +31,8 @@ #include "lib/dbus-common.h" #include "lib/helpers.h" #include "lib/adapter.h" -#include "lib/device.h" #include "lib/manager.h" -#define DISCOVERY_TIMEOUT 30 - -static gboolean stop_discovery(gpointer data) -{ - GMainLoop *mainloop = data; - g_main_loop_quit(mainloop); - return FALSE; -} - static void adapter_device_found(Adapter *adapter, const gchar *address, GHashTable *values, gpointer data) { GHashTable *found_devices = data; @@ -57,19 +47,27 @@ static void adapter_device_found(Adapter *adapter, const gchar *address, GHashTa g_print(" Name: %s\n", g_value_get_string(g_hash_table_lookup(values, "Name"))); g_print(" Alias: %s\n", g_value_get_string(g_hash_table_lookup(values, "Alias"))); g_print(" Address: %s\n", g_value_get_string(g_hash_table_lookup(values, "Address"))); - g_print(" Class: %d\n", g_value_get_uint(g_hash_table_lookup(values, "Class"))); + g_print(" Class: 0x%x\n", g_value_get_uint(g_hash_table_lookup(values, "Class"))); g_print(" LegacyPairing: %d\n", g_value_get_boolean(g_hash_table_lookup(values, "LegacyPairing"))); g_print(" Paired: %d\n", g_value_get_boolean(g_hash_table_lookup(values, "Paired"))); g_print(" RSSI: %d\n", g_value_get_int(g_hash_table_lookup(values, "RSSI"))); g_print("\n"); - g_hash_table_insert(found_devices, g_strdup(address), g_strdup("..")); + g_hash_table_insert(found_devices, g_strdup(address), g_value_dup_string(g_hash_table_lookup(values, "Name"))); } static void adapter_device_disappeared(Adapter *adapter, const gchar *address, gpointer data) { //GHashTable *found_devices = data; - //g_print("Device disappeared: %s\n", address); + //g_print("Device disappeared: %s (%s)\n", address, g_value_get_string(g_hash_table_lookup(found_devices, address))); +} + +static void adapter_property_changed(Adapter *adapter, const gchar *name, const GValue *value, gpointer data) +{ + GMainLoop *mainloop = data; + if (g_strcmp0(name, "Discovering") == 0 && g_value_get_boolean(value) == FALSE) { + g_main_loop_quit(mainloop); + } } static gboolean list_arg = FALSE; @@ -128,6 +126,7 @@ int main(int argc, char *argv[]) g_assert(adapters_list != NULL); g_print("Available adapters:\n"); + if (adapters_list->len == 0) { g_print("no adapters found\n"); } @@ -168,30 +167,22 @@ int main(int argc, char *argv[]) // To store pairs MAC => Name GHashTable *found_devices = g_hash_table_new(g_str_hash, g_str_equal); + // Mainloop + GMainLoop *mainloop = g_main_loop_new(NULL, FALSE); + g_signal_connect(adapter, "DeviceFound", G_CALLBACK(adapter_device_found), found_devices); g_signal_connect(adapter, "DeviceDisappeared", G_CALLBACK(adapter_device_disappeared), found_devices); + g_signal_connect(adapter, "PropertyChanged", G_CALLBACK(adapter_property_changed), mainloop); + g_print("Searching...\n"); adapter_start_discovery(adapter, &error); exit_if_error(error); - g_print("Searching...\n"); - - GSource *timeout_src = g_timeout_source_new_seconds(DISCOVERY_TIMEOUT); - g_source_attach(timeout_src, NULL); - GMainLoop *mainloop = g_main_loop_new(NULL, FALSE); - g_source_set_callback(timeout_src, stop_discovery, mainloop, NULL); g_main_loop_run(mainloop); - /* Discovering process here... */ - g_main_loop_unref(mainloop); - g_source_unref(timeout_src); - - adapter_stop_discovery(adapter, &error); - exit_if_error(error); g_print("Done\n"); - g_hash_table_unref(found_devices); g_object_unref(adapter); } else if (set_arg) { @@ -231,11 +222,23 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - adapter_set_property(adapter, set_name_arg, &v, &error); + GHashTable *props = adapter_get_properties(adapter, &error); exit_if_error(error); + GValue *old_value = g_hash_table_lookup(props, set_name_arg); + g_assert(old_value != NULL); + if (G_VALUE_HOLDS_STRING(old_value)) { + g_print("%s: %s -> %s\n", set_name_arg, g_value_get_string(old_value), g_value_get_string(&v)); + } else if (G_VALUE_HOLDS_BOOLEAN(old_value)) { + g_print("%s: %d -> %d\n", set_name_arg, g_value_get_boolean(old_value), g_value_get_boolean(&v)); + } else if (G_VALUE_HOLDS_UINT(old_value)) { + g_print("%s: %d -> %d\n", set_name_arg, g_value_get_uint(old_value), g_value_get_uint(&v)); + } + g_hash_table_unref(props); - g_print("Done\n"); + adapter_set_property(adapter, set_name_arg, &v, &error); + exit_if_error(error); + g_value_unset (&v); g_object_unref(adapter); } diff --git a/src/bt-agent.c b/src/bt-agent.c index da35d6b..d4ad882 100644 --- a/src/bt-agent.c +++ b/src/bt-agent.c @@ -73,7 +73,7 @@ int main(int argc, char *argv[]) Agent *agent = g_object_new(AGENT_TYPE, NULL); - adapter_register_agent(adapter, "/Agent", "DisplayYesNo", &error); + adapter_register_agent(adapter, AGENT_DBUS_PATH, "DisplayYesNo", &error); exit_if_error(error); g_print("Agent registered\n"); @@ -81,10 +81,10 @@ int main(int argc, char *argv[]) GMainLoop *mainloop = g_main_loop_new(NULL, FALSE); g_main_loop_run(mainloop); - adapter_unregister_agent(adapter, "/Agent", &error); + adapter_unregister_agent(adapter, AGENT_DBUS_PATH, &error); exit_if_error(error); - g_print("Adange unregistered\n"); + g_print("Agent unregistered\n"); g_object_unref(agent); g_object_unref(adapter); diff --git a/src/bt-device.c b/src/bt-device.c index 22d1aa4..2ba1172 100644 --- a/src/bt-device.c +++ b/src/bt-device.c @@ -32,7 +32,6 @@ #include "lib/helpers.h" #include "lib/adapter.h" #include "lib/device.h" -#include "lib/manager.h" #include "lib/agent.h" static gchar *adapter_arg = NULL; @@ -42,6 +41,7 @@ static gchar *remove_arg = NULL; static gchar *info_arg = NULL; static gchar *services_arg = NULL; static gboolean set_arg = FALSE; +static gchar *set_device_arg = NULL; static gchar *set_name_arg = NULL; static gchar *set_value_arg = NULL; @@ -88,8 +88,6 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } - Manager *manager = g_object_new(MANAGER_TYPE, NULL); - Adapter *adapter = find_adapter(adapter_arg, &error); exit_if_error(error); @@ -109,26 +107,41 @@ int main(int argc, char *argv[]) g_object_unref(device); } } else if (connect_arg) { - + g_print("Connecting to: %s\n", connect_arg); + Agent *agent = g_object_new(AGENT_TYPE, NULL); + adapter_create_paired_device(adapter, connect_arg, AGENT_DBUS_PATH, "DisplayYesNo", &error); + exit_if_error(error); + g_object_unref(agent); } else if (remove_arg) { - Device *device = find_device(adapter, info_arg, &error); + Device *device = find_device(adapter, remove_arg, &error); exit_if_error(error); + adapter_remove_device(adapter, device_get_dbus_object_path(device), &error); + exit_if_error(error); + + g_print("Done\n"); + g_object_unref(device); } else if (info_arg) { Device *device = find_device(adapter, info_arg, &error); exit_if_error(error); + g_print("[%s]\n", device_get_address(device)); + g_print(" Name: %s\n", device_get_name(device)); + g_print(" Alias: %s\n", device_get_alias(device)); + g_print(" Address: %s\n", device_get_address(device)); + g_print(" Class: %x\n", device_get_class(device)); + + g_object_unref(device); } else if (services_arg) { - Device *device = find_device(adapter, info_arg, &error); + Device *device = find_device(adapter, services_arg, &error); exit_if_error(error); } else if (set_arg) { - Device *device = find_device(adapter, info_arg, &error); + Device *device = find_device(adapter, set_device_arg, &error); exit_if_error(error); } - g_object_unref(manager); g_object_unref(adapter); exit(EXIT_SUCCESS); diff --git a/src/lib/agent.c b/src/lib/agent.c index e14703e..e4ea0d7 100644 --- a/src/lib/agent.c +++ b/src/lib/agent.c @@ -25,11 +25,13 @@ #include #endif +#include + #include "dbus-common.h" +#include "helpers.h" +#include "device.h" #include "agent.h" -#define BLUEZ_DBUS_AGENT_INTERFACE "org.bluez.Agent" - #define AGENT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), AGENT_TYPE, AgentPrivate)) struct _AgentPrivate { @@ -63,56 +65,111 @@ static void agent_init(Agent *self) g_assert(conn != NULL); - dbus_g_connection_register_g_object(conn, "/Agent", G_OBJECT(self)); + dbus_g_connection_register_g_object(conn, AGENT_DBUS_PATH, G_OBJECT(self)); } /* Methods */ gboolean agent_release(Agent *self, GError **error) { - g_print("agent_release\n"); return TRUE; } gboolean agent_request_pin_code(Agent *self, const gchar *device, gchar **ret, GError **error) { - g_print("agent_request_pin_code\n"); + Device *device_obj = g_object_new(DEVICE_TYPE, "DBusObjectPath", device, NULL); + g_print("Device: %s (%s)\n", device_get_address(device_obj), device_get_alias(device_obj)); + g_object_unref(device_obj); + + *ret = g_new0(gchar, 17); + g_print("Enter PIN code: "); + scanf("%16s", *ret); return TRUE; } gboolean agent_request_passkey(Agent *self, const gchar *device, guint *ret, GError **error) { - g_print("agent_request_passkey\n"); + Device *device_obj = g_object_new(DEVICE_TYPE, "DBusObjectPath", device, NULL); + g_print("Device: %s (%s)\n", device_get_address(device_obj), device_get_alias(device_obj)); + g_object_unref(device_obj); + + g_print("Enter passkey: "); + scanf("%u", ret); return TRUE; } gboolean agent_display_passkey(Agent *self, const gchar *device, guint passkey, guint8 entered, GError **error) { - g_print("agent_display_passkey\n"); + Device *device_obj = g_object_new(DEVICE_TYPE, "DBusObjectPath", device, NULL); + g_print("Device: %s (%s)\n", device_get_address(device_obj), device_get_alias(device_obj)); + g_object_unref(device_obj); + + g_print("Passkey: %u, entered: %u\n", passkey, entered); return TRUE; } gboolean agent_request_confirmation(Agent *self, const gchar *device, guint passkey, GError **error) { - g_print("agent_request_confirmation\n"); + Device *device_obj = g_object_new(DEVICE_TYPE, "DBusObjectPath", device, NULL); + g_print("Device: %s (%s)\n", device_get_address(device_obj), device_get_alias(device_obj)); + g_object_unref(device_obj); + + gchar yn[4] = {0,}; + g_print("Confirm passkey: %u (yes/no)? ", passkey); + scanf("%3s", yn); + if (g_strcmp0(yn, "y") == 0 || g_strcmp0(yn, "yes") == 0) { + return TRUE; + } else { + // TODO: Fix error code + if (error) + *error = g_error_new(g_quark_from_static_string("org.bluez.Error.Rejected"), 0, "Passkey doesn't match"); + return FALSE; + } + return TRUE; } gboolean agent_authorize(Agent *self, const gchar *device, const gchar *uuid, GError **error) { - g_print("agent_authorize\n"); + Device *device_obj = g_object_new(DEVICE_TYPE, "DBusObjectPath", device, NULL); + g_print("Device: %s (%s)\n", device_get_address(device_obj), device_get_alias(device_obj)); + g_object_unref(device_obj); + + gchar yn[4] = {0,}; + g_print("Authorize a connection to: %s (yes/no)? ", uuid2service(uuid)); + scanf("%3s", yn); + if (g_strcmp0(yn, "y") == 0 || g_strcmp0(yn, "yes") == 0) { + return TRUE; + } else { + // TODO: Fix error code + if (error) + *error = g_error_new(g_quark_from_static_string("org.bluez.Error.Rejected"), 0, "Connection rejected by user"); + return FALSE; + } + return TRUE; } gboolean agent_confirm_mode_change(Agent *self, const gchar *mode, GError **error) { - g_print("agent_confirm_mode_change\n"); + gchar yn[4] = {0,}; + g_print("Confirm mode change: %s (yes/no)? ", mode); + scanf("%3s", yn); + if (g_strcmp0(yn, "y") == 0 || g_strcmp0(yn, "yes") == 0) { + return TRUE; + } else { + // TODO: Fix error code + if (error) + *error = g_error_new(g_quark_from_static_string("org.bluez.Error.Rejected"), 0, "Confirmation rejected by user"); + return FALSE; + } + return TRUE; } gboolean agent_cancel(Agent *self, GError **error) { - g_print("agent_cancel\n"); + g_print("Cancelled\n"); return TRUE; } diff --git a/src/lib/agent.h b/src/lib/agent.h index 49b90dc..ae54e3c 100644 --- a/src/lib/agent.h +++ b/src/lib/agent.h @@ -29,6 +29,8 @@ #include "marshallers.h" +#define AGENT_DBUS_PATH "/agent" + /* * Type macros */ diff --git a/src/lib/helpers.h b/src/lib/helpers.h index 1b39097..1de7894 100644 --- a/src/lib/helpers.h +++ b/src/lib/helpers.h @@ -25,7 +25,6 @@ #define __HELPERS_H #include -#include #include "adapter.h" #include "device.h" diff --git a/src/lib/marshallers.c b/src/lib/marshallers.c new file mode 100644 index 0000000..80801c6 --- /dev/null +++ b/src/lib/marshallers.c @@ -0,0 +1,340 @@ + +#include + + +#ifdef G_ENABLE_DEBUG +#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) +#define g_marshal_value_peek_char(v) g_value_get_char (v) +#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) +#define g_marshal_value_peek_int(v) g_value_get_int (v) +#define g_marshal_value_peek_uint(v) g_value_get_uint (v) +#define g_marshal_value_peek_long(v) g_value_get_long (v) +#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) +#define g_marshal_value_peek_int64(v) g_value_get_int64 (v) +#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) +#define g_marshal_value_peek_enum(v) g_value_get_enum (v) +#define g_marshal_value_peek_flags(v) g_value_get_flags (v) +#define g_marshal_value_peek_float(v) g_value_get_float (v) +#define g_marshal_value_peek_double(v) g_value_get_double (v) +#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) +#define g_marshal_value_peek_param(v) g_value_get_param (v) +#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) +#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) +#define g_marshal_value_peek_object(v) g_value_get_object (v) +#else /* !G_ENABLE_DEBUG */ +/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. + * Do not access GValues directly in your code. Instead, use the + * g_value_get_*() functions + */ +#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int +#define g_marshal_value_peek_char(v) (v)->data[0].v_int +#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint +#define g_marshal_value_peek_int(v) (v)->data[0].v_int +#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint +#define g_marshal_value_peek_long(v) (v)->data[0].v_long +#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong +#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 +#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 +#define g_marshal_value_peek_enum(v) (v)->data[0].v_long +#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong +#define g_marshal_value_peek_float(v) (v)->data[0].v_float +#define g_marshal_value_peek_double(v) (v)->data[0].v_double +#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer +#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer +#endif /* !G_ENABLE_DEBUG */ + + +/* VOID:STRING,BOXED (lib/marshallers.list:1) */ +void +g_cclosure_bluez_marshal_VOID__STRING_BOXED (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) +{ + typedef void (*GMarshalFunc_VOID__STRING_BOXED) (gpointer data1, + gpointer arg_1, + gpointer arg_2, + gpointer data2); + register GMarshalFunc_VOID__STRING_BOXED callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + + g_return_if_fail (n_param_values == 3); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_VOID__STRING_BOXED) (marshal_data ? marshal_data : cc->callback); + + callback (data1, + g_marshal_value_peek_string (param_values + 1), + g_marshal_value_peek_boxed (param_values + 2), + data2); +} + +/* BOOLEAN:BOXED,UINT,UCHAR,POINTER (lib/marshallers.list:2) */ +void +g_cclosure_bluez_marshal_BOOLEAN__BOXED_UINT_UCHAR_POINTER (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) +{ + typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_UINT_UCHAR_POINTER) (gpointer data1, + gpointer arg_1, + guint arg_2, + guchar arg_3, + gpointer arg_4, + gpointer data2); + register GMarshalFunc_BOOLEAN__BOXED_UINT_UCHAR_POINTER callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + gboolean v_return; + + g_return_if_fail (return_value != NULL); + g_return_if_fail (n_param_values == 5); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_BOOLEAN__BOXED_UINT_UCHAR_POINTER) (marshal_data ? marshal_data : cc->callback); + + v_return = callback (data1, + g_marshal_value_peek_boxed (param_values + 1), + g_marshal_value_peek_uint (param_values + 2), + g_marshal_value_peek_uchar (param_values + 3), + g_marshal_value_peek_pointer (param_values + 4), + data2); + + g_value_set_boolean (return_value, v_return); +} + +/* BOOLEAN:BOXED,STRING,POINTER (lib/marshallers.list:3) */ +void +g_cclosure_bluez_marshal_BOOLEAN__BOXED_STRING_POINTER (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) +{ + typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_STRING_POINTER) (gpointer data1, + gpointer arg_1, + gpointer arg_2, + gpointer arg_3, + gpointer data2); + register GMarshalFunc_BOOLEAN__BOXED_STRING_POINTER callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + gboolean v_return; + + g_return_if_fail (return_value != NULL); + g_return_if_fail (n_param_values == 4); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_BOOLEAN__BOXED_STRING_POINTER) (marshal_data ? marshal_data : cc->callback); + + v_return = callback (data1, + g_marshal_value_peek_boxed (param_values + 1), + g_marshal_value_peek_string (param_values + 2), + g_marshal_value_peek_pointer (param_values + 3), + data2); + + g_value_set_boolean (return_value, v_return); +} + +/* BOOLEAN:POINTER (lib/marshallers.list:4) */ +void +g_cclosure_bluez_marshal_BOOLEAN__POINTER (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) +{ + typedef gboolean (*GMarshalFunc_BOOLEAN__POINTER) (gpointer data1, + gpointer arg_1, + gpointer data2); + register GMarshalFunc_BOOLEAN__POINTER callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + gboolean v_return; + + g_return_if_fail (return_value != NULL); + g_return_if_fail (n_param_values == 2); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_BOOLEAN__POINTER) (marshal_data ? marshal_data : cc->callback); + + v_return = callback (data1, + g_marshal_value_peek_pointer (param_values + 1), + data2); + + g_value_set_boolean (return_value, v_return); +} + +/* BOOLEAN:BOXED,POINTER,POINTER (lib/marshallers.list:5) */ +void +g_cclosure_bluez_marshal_BOOLEAN__BOXED_POINTER_POINTER (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) +{ + typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_POINTER_POINTER) (gpointer data1, + gpointer arg_1, + gpointer arg_2, + gpointer arg_3, + gpointer data2); + register GMarshalFunc_BOOLEAN__BOXED_POINTER_POINTER callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + gboolean v_return; + + g_return_if_fail (return_value != NULL); + g_return_if_fail (n_param_values == 4); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_BOOLEAN__BOXED_POINTER_POINTER) (marshal_data ? marshal_data : cc->callback); + + v_return = callback (data1, + g_marshal_value_peek_boxed (param_values + 1), + g_marshal_value_peek_pointer (param_values + 2), + g_marshal_value_peek_pointer (param_values + 3), + data2); + + g_value_set_boolean (return_value, v_return); +} + +/* BOOLEAN:BOXED,UINT,POINTER (lib/marshallers.list:6) */ +void +g_cclosure_bluez_marshal_BOOLEAN__BOXED_UINT_POINTER (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) +{ + typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_UINT_POINTER) (gpointer data1, + gpointer arg_1, + guint arg_2, + gpointer arg_3, + gpointer data2); + register GMarshalFunc_BOOLEAN__BOXED_UINT_POINTER callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + gboolean v_return; + + g_return_if_fail (return_value != NULL); + g_return_if_fail (n_param_values == 4); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_BOOLEAN__BOXED_UINT_POINTER) (marshal_data ? marshal_data : cc->callback); + + v_return = callback (data1, + g_marshal_value_peek_boxed (param_values + 1), + g_marshal_value_peek_uint (param_values + 2), + g_marshal_value_peek_pointer (param_values + 3), + data2); + + g_value_set_boolean (return_value, v_return); +} + +/* BOOLEAN:STRING,POINTER (lib/marshallers.list:7) */ +void +g_cclosure_bluez_marshal_BOOLEAN__STRING_POINTER (GClosure *closure, + GValue *return_value G_GNUC_UNUSED, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint G_GNUC_UNUSED, + gpointer marshal_data) +{ + typedef gboolean (*GMarshalFunc_BOOLEAN__STRING_POINTER) (gpointer data1, + gpointer arg_1, + gpointer arg_2, + gpointer data2); + register GMarshalFunc_BOOLEAN__STRING_POINTER callback; + register GCClosure *cc = (GCClosure*) closure; + register gpointer data1, data2; + gboolean v_return; + + g_return_if_fail (return_value != NULL); + g_return_if_fail (n_param_values == 3); + + if (G_CCLOSURE_SWAP_DATA (closure)) + { + data1 = closure->data; + data2 = g_value_peek_pointer (param_values + 0); + } + else + { + data1 = g_value_peek_pointer (param_values + 0); + data2 = closure->data; + } + callback = (GMarshalFunc_BOOLEAN__STRING_POINTER) (marshal_data ? marshal_data : cc->callback); + + v_return = callback (data1, + g_marshal_value_peek_string (param_values + 1), + g_marshal_value_peek_pointer (param_values + 2), + data2); + + g_value_set_boolean (return_value, v_return); +} + diff --git a/src/lib/marshallers.h b/src/lib/marshallers.h new file mode 100644 index 0000000..121b114 --- /dev/null +++ b/src/lib/marshallers.h @@ -0,0 +1,68 @@ + +#ifndef __g_cclosure_bluez_marshal_MARSHAL_H__ +#define __g_cclosure_bluez_marshal_MARSHAL_H__ + +#include + +G_BEGIN_DECLS + +/* VOID:STRING,BOXED (lib/marshallers.list:1) */ +extern void g_cclosure_bluez_marshal_VOID__STRING_BOXED (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +/* BOOLEAN:BOXED,UINT,UCHAR,POINTER (lib/marshallers.list:2) */ +extern void g_cclosure_bluez_marshal_BOOLEAN__BOXED_UINT_UCHAR_POINTER (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +/* BOOLEAN:BOXED,STRING,POINTER (lib/marshallers.list:3) */ +extern void g_cclosure_bluez_marshal_BOOLEAN__BOXED_STRING_POINTER (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +/* BOOLEAN:POINTER (lib/marshallers.list:4) */ +extern void g_cclosure_bluez_marshal_BOOLEAN__POINTER (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +/* BOOLEAN:BOXED,POINTER,POINTER (lib/marshallers.list:5) */ +extern void g_cclosure_bluez_marshal_BOOLEAN__BOXED_POINTER_POINTER (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +/* BOOLEAN:BOXED,UINT,POINTER (lib/marshallers.list:6) */ +extern void g_cclosure_bluez_marshal_BOOLEAN__BOXED_UINT_POINTER (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +/* BOOLEAN:STRING,POINTER (lib/marshallers.list:7) */ +extern void g_cclosure_bluez_marshal_BOOLEAN__STRING_POINTER (GClosure *closure, + GValue *return_value, + guint n_param_values, + const GValue *param_values, + gpointer invocation_hint, + gpointer marshal_data); + +G_END_DECLS + +#endif /* __g_cclosure_bluez_marshal_MARSHAL_H__ */ + -- cgit v1.2.1