add connect, disconnect and is_connected methods to fake_input
RFC PATCH 2/4 add connect, disconnect and is_connected methods to fake_input
This patch adds three methods to fake_input structure, in order to prepare fake_hid support addition.
device.c +43 -25
@@ -65,6 +65,9 @@int rfcomm;/* RFCOMM socket */ int uinput;/* uinput socket */ uint8_t ch;/* RFCOMM channel number */ +gboolean (*connect)(struct device *idev); +int (*disconnect)(struct device *idev); +int (is_connected)(struct device *idev); };struct device {
@@ -761,6 +764,26 @@return FALSE; } +static int fake_disconnect (struct device *idev) +{ +struct fake_input *fake = idev->fake; + +if (!fake->io) +return -ENOTCONN ; + +g_io_channel_close (fake->io); +g_io_channel_unref (fake->io); + fake->io =NULL ; + +if (fake->uinput >=0 ) { +ioctl (fake->uinput,UI_DEV_DESTROY ); +close (fake->uinput); + fake->uinput =-1 ; + } + +return 0 ; +} +static int disconnect (struct device *idev,uint32_t flags) {struct fake_input *fake = idev->fake;
@@ -769,22 +792,8 @@int ctl, err;/* Fake input disconnect */ -if (fake) { -if (!fake->io) -return -ENOTCONN ; - -g_io_channel_close (fake->io); -g_io_channel_unref (fake->io); - fake->io =NULL ; - -if (fake->uinput >=0 ) { -ioctl (fake->uinput,UI_DEV_DESTROY ); -close (fake->uinput); - fake->uinput =-1 ; - } - -return 0 ; - } +if (fake) +return fake->disconnect (idev);/* Standard HID disconnect */ if (idev->ctrl_sk >=0 ) {
@@ -837,12 +846,8 @@int ctl;/* Fake input */ -if (fake) { -if (fake->io) -return 1 ; -else -return 0 ; - } +if (fake) +return fake->is_connected (idev);/* Standard HID */ ctl =socket (AF_BLUETOOTH ,SOCK_RAW ,BTPROTO_HIDP );
@@ -871,6 +876,7 @@ DBusMessage *msg, void *data) {struct device *idev = data; +struct fake_input *fake = idev->fake;if (idev->pending_connect)return err_connection_failed (conn, msg,"Connection in progress" );
@@ -881,10 +887,10 @@ idev->pending_connect =dbus_message_ref (msg);/* Fake input device */ -if (idev->fake) { -if (rfcomm_connect (idev) <0 ) { +if (fake) { +if (fake->connect (idev) <0 ) {const char *str =strerror (errno); -error ("RFCOMM connect failed: %s(%d)" , str, errno); +error ("Connect failed: %s(%d)" , str, errno);dbus_message_unref (idev->pending_connect); idev->pending_connect =NULL ;return err_connection_failed (conn, msg, str);
@@ -1117,6 +1123,15 @@return err; } +static int fake_is_connected (struct device *idev) +{ +struct fake_input *fake = idev->fake; + +if (fake->io) +return 1 ; +return 0 ; +} +int fake_input_register (DBusConnection *conn,bdaddr_t *src,bdaddr_t *dst,uint8_t ch,const char **ppath) {
@@ -1141,6 +1156,9 @@ idev->fake = g_new0(struct fake_input, 1); idev->fake->ch = ch; + idev->fake->connect = rfcomm_connect; + idev->fake->disconnect = fake_disconnect; + idev->fake->is_connected = fake_is_connected; err =register_path (conn, path, idev);
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Bluez-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bluez-devel