2015-03-15 13:44:32

by Szymon Janc

[permalink] [raw]
Subject: [PATCH] android/hog: Allow to pass custom fd for uhid

This will be useful for unitests.
---
android/hidhost.c | 2 +-
android/hog.c | 25 ++++++++++++++++++++-----
android/hog.h | 9 +++++++--
3 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/android/hidhost.c b/android/hidhost.c
index 2e589f4..729b884 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -817,7 +817,7 @@ static void hog_conn_cb(const bdaddr_t *addr, int err, void *attrib)

if (!dev->hog) {
/* TODO: Get device details and primary */
- dev->hog = bt_hog_new("bluez-input-device", dev->vendor,
+ dev->hog = bt_hog_new_default("bluez-input-device", dev->vendor,
dev->product, dev->version, NULL);
if (!dev->hog) {
error("HoG: unable to create session");
diff --git a/android/hog.c b/android/hog.c
index 8133303..ff77bb3 100644
--- a/android/hog.c
+++ b/android/hog.c
@@ -87,6 +87,7 @@ struct bt_hog {
GAttrib *attrib;
GSList *reports;
struct bt_uhid *uhid;
+ int uhid_fd;
gboolean has_report_id;
uint16_t bcdhid;
uint8_t bcountrycode;
@@ -1170,8 +1171,16 @@ static void hog_free(void *data)
g_free(hog);
}

-struct bt_hog *bt_hog_new(const char *name, uint16_t vendor, uint16_t product,
- uint16_t version, void *primary)
+struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
+ uint16_t product, uint16_t version,
+ void *primary)
+{
+ return bt_hog_new(-1, name, vendor, product, version, primary);
+}
+
+struct bt_hog *bt_hog_new(int fd, const char *name, uint16_t vendor,
+ uint16_t product, uint16_t version,
+ void *primary)
{
struct bt_hog *hog;

@@ -1181,7 +1190,13 @@ struct bt_hog *bt_hog_new(const char *name, uint16_t vendor, uint16_t product,

hog->gatt_op = queue_new();
hog->bas = queue_new();
- hog->uhid = bt_uhid_new_default();
+
+ if (fd < 0)
+ hog->uhid = bt_uhid_new_default();
+ else
+ hog->uhid = bt_uhid_new(fd);
+
+ hog->uhid_fd = fd;

if (!hog->gatt_op || !hog->bas || !hog->uhid) {
hog_free(hog);
@@ -1305,8 +1320,8 @@ static void hog_attach_hog(struct bt_hog *hog, struct gatt_primary *primary)
return;
}

- instance = bt_hog_new(hog->name, hog->vendor, hog->product,
- hog->version, primary);
+ instance = bt_hog_new(hog->uhid_fd, hog->name, hog->vendor,
+ hog->product, hog->version, primary);
if (!instance)
return;

diff --git a/android/hog.h b/android/hog.h
index ddb2cea..2a9b899 100644
--- a/android/hog.h
+++ b/android/hog.h
@@ -23,8 +23,13 @@

struct bt_hog;

-struct bt_hog *bt_hog_new(const char *name, uint16_t vendor, uint16_t product,
- uint16_t version, void *primary);
+struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
+ uint16_t product, uint16_t version,
+ void *primary);
+
+struct bt_hog *bt_hog_new(int fd, const char *name, uint16_t vendor,
+ uint16_t product, uint16_t version,
+ void *primary);

struct bt_hog *bt_hog_ref(struct bt_hog *hog);
void bt_hog_unref(struct bt_hog *hog);
--
1.9.3



2015-03-16 15:28:47

by Szymon Janc

[permalink] [raw]
Subject: Re: [PATCH] android/hog: Allow to pass custom fd for uhid

On Sunday 15 of March 2015 14:44:32 Szymon Janc wrote:
> This will be useful for unitests.
> ---
> android/hidhost.c | 2 +-
> android/hog.c | 25 ++++++++++++++++++++-----
> android/hog.h | 9 +++++++--
> 3 files changed, 28 insertions(+), 8 deletions(-)
>
> diff --git a/android/hidhost.c b/android/hidhost.c
> index 2e589f4..729b884 100644
> --- a/android/hidhost.c
> +++ b/android/hidhost.c
> @@ -817,7 +817,7 @@ static void hog_conn_cb(const bdaddr_t *addr, int err,
> void *attrib)
>
> if (!dev->hog) {
> /* TODO: Get device details and primary */
> - dev->hog = bt_hog_new("bluez-input-device", dev->vendor,
> + dev->hog = bt_hog_new_default("bluez-input-device", dev->vendor,
> dev->product, dev->version, NULL);
> if (!dev->hog) {
> error("HoG: unable to create session");
> diff --git a/android/hog.c b/android/hog.c
> index 8133303..ff77bb3 100644
> --- a/android/hog.c
> +++ b/android/hog.c
> @@ -87,6 +87,7 @@ struct bt_hog {
> GAttrib *attrib;
> GSList *reports;
> struct bt_uhid *uhid;
> + int uhid_fd;
> gboolean has_report_id;
> uint16_t bcdhid;
> uint8_t bcountrycode;
> @@ -1170,8 +1171,16 @@ static void hog_free(void *data)
> g_free(hog);
> }
>
> -struct bt_hog *bt_hog_new(const char *name, uint16_t vendor, uint16_t
> product, - uint16_t version, void *primary)
> +struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
> + uint16_t product, uint16_t version,
> + void *primary)
> +{
> + return bt_hog_new(-1, name, vendor, product, version, primary);
> +}
> +
> +struct bt_hog *bt_hog_new(int fd, const char *name, uint16_t vendor,
> + uint16_t product, uint16_t version,
> + void *primary)
> {
> struct bt_hog *hog;
>
> @@ -1181,7 +1190,13 @@ struct bt_hog *bt_hog_new(const char *name, uint16_t
> vendor, uint16_t product,
>
> hog->gatt_op = queue_new();
> hog->bas = queue_new();
> - hog->uhid = bt_uhid_new_default();
> +
> + if (fd < 0)
> + hog->uhid = bt_uhid_new_default();
> + else
> + hog->uhid = bt_uhid_new(fd);
> +
> + hog->uhid_fd = fd;
>
> if (!hog->gatt_op || !hog->bas || !hog->uhid) {
> hog_free(hog);
> @@ -1305,8 +1320,8 @@ static void hog_attach_hog(struct bt_hog *hog, struct
> gatt_primary *primary) return;
> }
>
> - instance = bt_hog_new(hog->name, hog->vendor, hog->product,
> - hog->version, primary);
> + instance = bt_hog_new(hog->uhid_fd, hog->name, hog->vendor,
> + hog->product, hog->version, primary);
> if (!instance)
> return;
>
> diff --git a/android/hog.h b/android/hog.h
> index ddb2cea..2a9b899 100644
> --- a/android/hog.h
> +++ b/android/hog.h
> @@ -23,8 +23,13 @@
>
> struct bt_hog;
>
> -struct bt_hog *bt_hog_new(const char *name, uint16_t vendor, uint16_t
> product, - uint16_t version, void *primary);
> +struct bt_hog *bt_hog_new_default(const char *name, uint16_t vendor,
> + uint16_t product, uint16_t version,
> + void *primary);
> +
> +struct bt_hog *bt_hog_new(int fd, const char *name, uint16_t vendor,
> + uint16_t product, uint16_t version,
> + void *primary);
>
> struct bt_hog *bt_hog_ref(struct bt_hog *hog);
> void bt_hog_unref(struct bt_hog *hog);

Applied.

--
BR
Szymon Janc