Data read on uhid events output and feature has to be send through
SET_REPORT request to HID device.
---
android/hidhost.c | 37 ++++++++++++++++++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/android/hidhost.c b/android/hidhost.c
index 683938f..816fe3e 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -155,7 +155,42 @@ static void hid_device_free(struct hid_device *dev)
static void handle_uhid_event(struct hid_device *dev, struct uhid_event *ev)
{
- DBG("UHID_OUTPUT UHID_FEATURE unsupported");
+ int fd;
+ uint8_t *req = NULL;
+ uint8_t req_size = 0;
+
+ if (!(dev->ctrl_io))
+ return;
+
+ switch (ev->type) {
+ case UHID_OUTPUT:
+ req_size = 1 + ev->u.output.size;
+ req = g_try_malloc0(req_size);
+ if (!req)
+ return;
+
+ req[0] = HID_MSG_SET_REPORT | HID_DATA_TYPE_OUTPUT;
+ memcpy(req + 1, ev->u.output.data, ev->u.output.size);
+ break;
+
+ case UHID_FEATURE:
+ req_size = sizeof(struct uhid_feature_req);
+ req = g_try_malloc0(req_size);
+ if (!req)
+ return;
+
+ req[0] = HID_MSG_SET_REPORT | HID_DATA_TYPE_FEATURE;
+ memcpy(req + 1, (ev + sizeof(ev->type)), req_size - 1);
+ break;
+ }
+
+ fd = g_io_channel_unix_get_fd(dev->ctrl_io);
+
+ if (write(fd, req, req_size) < 0)
+ error("error writing hid_set_report: %s (%d)",
+ strerror(errno), errno);
+
+ g_free(req);
}
static gboolean uhid_event_cb(GIOChannel *io, GIOCondition cond,
--
1.8.3.2
Hi Ravi,
>>> Idle time is deprecated in HID 1_1. So remove it from ipc document
>>> and update GET_REPORT and VIRTUAL_UNPLUG opcode values.
>>> ---
>>> android/hal-ipc-api.txt | 10 ++--------
>>> android/hal-msg.h | 4 ++--
>>> 2 files changed, 4 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/android/hal-ipc-api.txt b/android/hal-ipc-api.txt
>>> index 91ea280..57f4c13 100644
>>> --- a/android/hal-ipc-api.txt
>>> +++ b/android/hal-ipc-api.txt
>>> @@ -614,20 +614,14 @@ Notifications:
>>> 0x01 = Boot
>>> 0xff = Unsupported
>>>
>>> - Opcode 0x84 - Idle Time notification
>>> -
>>> - Notification parameters: Remote address (6 octets)
>>> - Status (1 octet)
>>> - Idle time (2 octets)
>> so what does HID_1.1 actually mean? I still see this notification in bt_hh.h.
>>
>> Regards
>>
>> Marcel
>>
> In HID_SPEC_V11 (3.1) Get Idle and Set Idle are deprecated. And even in bt_hh.h
> get_idle and set_idle interfaces are not available. Bluedroid had implementation
> of those two in bluedroid/btif/src/btif_hh.c but in interface struct those are commented out.
> I didn't find the call back call there. That's why I updated ipc-doc.
if they are not using this notification in the Bluetooth service, then we do not need to implemented.
Regards
Marcel
Hi Marcel,
Any comments on my reply?
Thanks,
Ravi.
On 11/12/2013 11:29 AM, Ravi Kumar Veeramally wrote:
> Hi Marcel,
>
> On 11/12/2013 01:05 AM, Marcel Holtmann wrote:
>> Hi Ravi,
>>
>>> Idle time is deprecated in HID 1_1. So remove it from ipc document
>>> and update GET_REPORT and VIRTUAL_UNPLUG opcode values.
>>> ---
>>> android/hal-ipc-api.txt | 10 ++--------
>>> android/hal-msg.h | 4 ++--
>>> 2 files changed, 4 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/android/hal-ipc-api.txt b/android/hal-ipc-api.txt
>>> index 91ea280..57f4c13 100644
>>> --- a/android/hal-ipc-api.txt
>>> +++ b/android/hal-ipc-api.txt
>>> @@ -614,20 +614,14 @@ Notifications:
>>> 0x01 = Boot
>>> 0xff = Unsupported
>>>
>>> - Opcode 0x84 - Idle Time notification
>>> -
>>> - Notification parameters: Remote address (6 octets)
>>> - Status (1 octet)
>>> - Idle time (2 octets)
>> so what does HID_1.1 actually mean? I still see this notification in
>> bt_hh.h.
>>
>> Regards
>>
>> Marcel
>>
> In HID_SPEC_V11 (3.1) Get Idle and Set Idle are deprecated. And even
> in bt_hh.h
> get_idle and set_idle interfaces are not available. Bluedroid had
> implementation
> of those two in bluedroid/btif/src/btif_hh.c but in interface struct
> those are commented out.
> I didn't find the call back call there. That's why I updated ipc-doc.
>
> Please let me know if I miss anything.
>
> Thanks,
> Ravi.
>
> --
> To unsubscribe from this list: send the line "unsubscribe
> linux-bluetooth" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
Hi,
This patch is buggy. Conversion needs to be done like set_report and
send_data methods. I will send _v2 of this particular patch.
Sorry for inconvenience.
Thanks,
Ravi.
On 11/11/2013 02:15 PM, Ravi kumar Veeramally wrote:
> Data read on uhid events output and feature has to be send through
> SET_REPORT request to HID device.
> ---
> android/hidhost.c | 37 ++++++++++++++++++++++++++++++++++++-
> 1 file changed, 36 insertions(+), 1 deletion(-)
>
> diff --git a/android/hidhost.c b/android/hidhost.c
> index 683938f..816fe3e 100644
> --- a/android/hidhost.c
> +++ b/android/hidhost.c
> @@ -155,7 +155,42 @@ static void hid_device_free(struct hid_device *dev)
>
> static void handle_uhid_event(struct hid_device *dev, struct uhid_event *ev)
> {
> - DBG("UHID_OUTPUT UHID_FEATURE unsupported");
> + int fd;
> + uint8_t *req = NULL;
> + uint8_t req_size = 0;
> +
> + if (!(dev->ctrl_io))
> + return;
> +
> + switch (ev->type) {
> + case UHID_OUTPUT:
> + req_size = 1 + ev->u.output.size;
> + req = g_try_malloc0(req_size);
> + if (!req)
> + return;
> +
> + req[0] = HID_MSG_SET_REPORT | HID_DATA_TYPE_OUTPUT;
> + memcpy(req + 1, ev->u.output.data, ev->u.output.size);
> + break;
> +
> + case UHID_FEATURE:
> + req_size = sizeof(struct uhid_feature_req);
> + req = g_try_malloc0(req_size);
> + if (!req)
> + return;
> +
> + req[0] = HID_MSG_SET_REPORT | HID_DATA_TYPE_FEATURE;
> + memcpy(req + 1, (ev + sizeof(ev->type)), req_size - 1);
> + break;
> + }
> +
> + fd = g_io_channel_unix_get_fd(dev->ctrl_io);
> +
> + if (write(fd, req, req_size) < 0)
> + error("error writing hid_set_report: %s (%d)",
> + strerror(errno), errno);
> +
> + g_free(req);
> }
>
> static gboolean uhid_event_cb(GIOChannel *io, GIOCondition cond,
Hi Marcel,
On 11/12/2013 01:05 AM, Marcel Holtmann wrote:
> Hi Ravi,
>
>> Idle time is deprecated in HID 1_1. So remove it from ipc document
>> and update GET_REPORT and VIRTUAL_UNPLUG opcode values.
>> ---
>> android/hal-ipc-api.txt | 10 ++--------
>> android/hal-msg.h | 4 ++--
>> 2 files changed, 4 insertions(+), 10 deletions(-)
>>
>> diff --git a/android/hal-ipc-api.txt b/android/hal-ipc-api.txt
>> index 91ea280..57f4c13 100644
>> --- a/android/hal-ipc-api.txt
>> +++ b/android/hal-ipc-api.txt
>> @@ -614,20 +614,14 @@ Notifications:
>> 0x01 = Boot
>> 0xff = Unsupported
>>
>> - Opcode 0x84 - Idle Time notification
>> -
>> - Notification parameters: Remote address (6 octets)
>> - Status (1 octet)
>> - Idle time (2 octets)
> so what does HID_1.1 actually mean? I still see this notification in bt_hh.h.
>
> Regards
>
> Marcel
>
In HID_SPEC_V11 (3.1) Get Idle and Set Idle are deprecated. And even in
bt_hh.h
get_idle and set_idle interfaces are not available. Bluedroid had
implementation
of those two in bluedroid/btif/src/btif_hh.c but in interface struct
those are commented out.
I didn't find the call back call there. That's why I updated ipc-doc.
Please let me know if I miss anything.
Thanks,
Ravi.
Hi Ravi,
> Idle time is deprecated in HID 1_1. So remove it from ipc document
> and update GET_REPORT and VIRTUAL_UNPLUG opcode values.
> ---
> android/hal-ipc-api.txt | 10 ++--------
> android/hal-msg.h | 4 ++--
> 2 files changed, 4 insertions(+), 10 deletions(-)
>
> diff --git a/android/hal-ipc-api.txt b/android/hal-ipc-api.txt
> index 91ea280..57f4c13 100644
> --- a/android/hal-ipc-api.txt
> +++ b/android/hal-ipc-api.txt
> @@ -614,20 +614,14 @@ Notifications:
> 0x01 = Boot
> 0xff = Unsupported
>
> - Opcode 0x84 - Idle Time notification
> -
> - Notification parameters: Remote address (6 octets)
> - Status (1 octet)
> - Idle time (2 octets)
so what does HID_1.1 actually mean? I still see this notification in bt_hh.h.
Regards
Marcel
Data from hal_cmd_hidhost_set_info is usefull only when we create
UHID device. Once device is created all the transactions will be
done through the fd. There is no way to use this information
once device is created with HID internals.
---
android/hidhost.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/android/hidhost.c b/android/hidhost.c
index 816fe3e..6579ff3 100644
--- a/android/hidhost.c
+++ b/android/hidhost.c
@@ -857,7 +857,11 @@ static uint8_t bt_hid_virtual_unplug(struct hal_cmd_hidhost_virtual_unplug *cmd,
static uint8_t bt_hid_info(struct hal_cmd_hidhost_set_info *cmd, uint16_t len)
{
- DBG("Not Implemented");
+ /* Data from hal_cmd_hidhost_set_info is usefull only when we create
+ * UHID device. Once device is created all the transactions will be
+ * done through the fd. There is no way to use this information
+ * once device is created with HID internals. */
+ DBG("Not supported");
return HAL_STATUS_FAILED;
}
--
1.8.3.2
Idle time is deprecated in HID 1_1. So remove it from ipc document
and update GET_REPORT and VIRTUAL_UNPLUG opcode values.
---
android/hal-ipc-api.txt | 10 ++--------
android/hal-msg.h | 4 ++--
2 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/android/hal-ipc-api.txt b/android/hal-ipc-api.txt
index 91ea280..57f4c13 100644
--- a/android/hal-ipc-api.txt
+++ b/android/hal-ipc-api.txt
@@ -614,20 +614,14 @@ Notifications:
0x01 = Boot
0xff = Unsupported
- Opcode 0x84 - Idle Time notification
-
- Notification parameters: Remote address (6 octets)
- Status (1 octet)
- Idle time (2 octets)
-
- Opcode 0x85 - Get Report notification
+ Opcode 0x84 - Get Report notification
Notification parameters: Remote address (6 octets)
Status (1 octet)
Report length (2 octets)
Report data (variable)
- Opcode 0x86 - Virtual Unplug notification
+ Opcode 0x85 - Virtual Unplug notification
Notification parameters: Remote address (6 octets)
Status (1 octet)
diff --git a/android/hal-msg.h b/android/hal-msg.h
index 569c8ea..1d20afd 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -472,7 +472,7 @@ struct hal_ev_hidhost_proto_mode {
uint8_t mode;
} __attribute__((packed));
-#define HAL_EV_HIDHOST_GET_REPORT 0x85
+#define HAL_EV_HIDHOST_GET_REPORT 0x84
struct hal_ev_hidhost_get_report {
uint8_t bdaddr[6];
uint8_t status;
@@ -480,7 +480,7 @@ struct hal_ev_hidhost_get_report {
uint8_t data[0];
} __attribute__((packed));
-#define HAL_EV_HIDHOST_VIRTUAL_UNPLUG 0x86
+#define HAL_EV_HIDHOST_VIRTUAL_UNPLUG 0x85
struct hal_ev_hidhost_virtual_unplug {
uint8_t bdaddr[6];
uint8_t status;
--
1.8.3.2