summaryrefslogtreecommitdiffstats
path: root/input
diff options
context:
space:
mode:
authorClaudio Takahasi <claudio.takahasi@openbossa.org>2007-02-23 18:45:54 +0000
committerClaudio Takahasi <claudio.takahasi@openbossa.org>2007-02-23 18:45:54 +0000
commitc436cfee30f6272b256f7cdbf66b2e35c70ac603 (patch)
tree0c8b72efdec350168db1012c8cb9ec9e63f3baaa /input
parente977c52ef242556e3af44bec99c64bac91cc0b11 (diff)
Fake input: added initial skeleton for Connect method
Diffstat (limited to 'input')
-rw-r--r--input/device.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/input/device.c b/input/device.c
index 20c2a1d0..c487b4ee 100644
--- a/input/device.c
+++ b/input/device.c
@@ -406,6 +406,18 @@ static const char *create_input_path(uint8_t major, uint8_t minor)
return path;
}
+static int rfcomm_connect(struct pending_connect *pc, uint8_t ch)
+{
+ char addr[18];
+ /* FIXME: not implemented */
+
+ ba2str(&pc->dst, addr);
+ debug("RFCOMM connecting to %s on channel:%d", addr, ch);
+ errno = EIO;
+
+ return -EIO;
+}
+
static int l2cap_connect(struct pending_connect *pc,
unsigned short psm, GIOFunc cb)
{
@@ -673,17 +685,33 @@ static DBusHandlerResult device_connect(DBusConnection *conn,
DBusMessage *msg, void *data)
{
struct input_device *idev = data;
+ struct fake_input *fake = idev->fake;
struct input_manager *mgr;
struct pending_connect *pc;
+ /* FIXME: check if the fake input is connected */
if (is_connected(&idev->dst))
return err_connection_failed(conn, msg, "Already connected");
+ /* FIXME: Check if there is a pending connection */
+
dbus_connection_get_object_path_data(conn, INPUT_PATH, (void *) &mgr);
pc = pending_connect_new(&mgr->src, &idev->dst, conn, msg);
if (!pc)
return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ /* Fake input device */
+ if (fake) {
+ if (rfcomm_connect(pc, fake->ch) < 0) {
+ const char *str = strerror(errno);
+ error("RFCOMM connect failed: %s(%d)", str, errno);
+ pending_connect_free(pc);
+ return err_connection_failed(conn, msg, str);
+ }
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+
+ /* HID devices */
if (l2cap_connect(pc, L2CAP_PSM_HIDP_CTRL,
(GIOFunc) control_connect_cb) < 0) {
error("L2CAP connect failed: %s(%d)", strerror(errno), errno);