summaryrefslogtreecommitdiffstats
path: root/input
diff options
context:
space:
mode:
authorClaudio Takahasi <claudio.takahasi@openbossa.org>2007-01-19 21:12:49 +0000
committerClaudio Takahasi <claudio.takahasi@openbossa.org>2007-01-19 21:12:49 +0000
commitb820ab01df064df0c5e2936e78c8765a3eb6e446 (patch)
tree93fedb55095b77492ead84f7f64a11ad9e25a92e /input
parent4f2bc2345b99c4d0c187aae4f68f4509e50826a5 (diff)
Added function to request the HID record
Diffstat (limited to 'input')
-rw-r--r--input/input-service.c50
1 files changed, 42 insertions, 8 deletions
diff --git a/input/input-service.c b/input/input-service.c
index 19778c22..70d2a3f3 100644
--- a/input/input-service.c
+++ b/input/input-service.c
@@ -380,6 +380,42 @@ static int get_handles(struct pending_req *pr, const char *uuid,
return 0;
}
+static void hid_record_reply(DBusPendingCall *call, void *data)
+{
+ DBusMessage *reply = dbus_pending_call_steal_reply(call);
+ struct pending_req *pr = data;
+ DBusError derr;
+ uint8_t *rec_bin;
+ int len, scanned;
+
+ dbus_error_init(&derr);
+ if (dbus_set_error_from_message(&derr, reply)) {
+ err_generic(pr->conn, pr->msg, derr.name, derr.message);
+ dbus_error_free(&derr);
+ goto fail;
+ }
+
+ if (!dbus_message_get_args(reply, &derr,
+ DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &rec_bin, &len,
+ DBUS_TYPE_INVALID)) {
+ err_generic(pr->conn, pr->msg, derr.name, derr.message);
+ dbus_error_free(&derr);
+ goto fail;
+ }
+
+ if (len == 0) {
+ err_failed(pr->conn, pr->msg, "SDP error");
+ goto fail;
+ }
+
+ pr->hid_rec = sdp_extract_pdu(rec_bin, &scanned);
+ /* FIXME: parse SDP records */
+fail:
+ pending_req_free(pr);
+ dbus_message_unref(reply);
+ dbus_pending_call_unref(call);
+}
+
static void hid_handle_reply(DBusPendingCall *call, void *data)
{
DBusMessage *reply = dbus_pending_call_steal_reply(call);
@@ -404,14 +440,13 @@ static void hid_handle_reply(DBusPendingCall *call, void *data)
goto fail;
}
- if (len == 0) {
- err_failed(pr->conn, pr->msg, "SDP error");
- goto fail;
- } else {
- info("FIXME: request HID record");
+ if (len != 0) {
+ if (get_record(pr, *phandle, hid_record_reply) < 0)
+ error("HID record search error");
+ else
+ goto done;
}
-
- goto done;
+ err_failed(pr->conn, pr->msg, "SDP error");
fail:
pending_req_free(pr);
done:
@@ -458,7 +493,6 @@ done:
dbus_pending_call_unref(call);
}
-
static void pnp_handle_reply(DBusPendingCall *call, void *data)
{
DBusMessage *reply = dbus_pending_call_steal_reply(call);