linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC 0/3] Fix ascii to hex conversion in HAL to deamon ipc PDU
@ 2013-11-07  9:26 Ravi kumar Veeramally
  2013-11-07  9:26 ` [RFC 1/3] android/hid: Remove fixed number of hid set report data length in ipc doc Ravi kumar Veeramally
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Ravi kumar Veeramally @ 2013-11-07  9:26 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

In case of set report and send data HAL receives the data in ascii format
but it should be in hex. This patch set updates the document, provides
utility and fix the issue in set report case.

Ravi kumar Veeramally (3):
  android/hid: Remove fixed number of hid set report data length in ipc
    doc
  android/hid: Add a ascii2hex utility
  android/hid: Fix set report data format

 android/Android.mk      |  1 +
 android/Makefile.am     |  2 +-
 android/hal-ipc-api.txt |  2 +-
 android/hal-msg.h       |  2 +-
 android/hid.c           | 12 +++++++---
 android/utils.c         | 60 +++++++++++++++++++++++++++++++++++++++++++++++++
 android/utils.h         |  3 +++
 7 files changed, 76 insertions(+), 6 deletions(-)
 create mode 100644 android/utils.c

-- 
1.8.3.2


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [RFC 1/3] android/hid: Remove fixed number of hid set report data length in ipc doc
  2013-11-07  9:26 [RFC 0/3] Fix ascii to hex conversion in HAL to deamon ipc PDU Ravi kumar Veeramally
@ 2013-11-07  9:26 ` Ravi kumar Veeramally
  2013-11-07  9:27 ` [RFC 2/3] android/hid: Add a ascii2hex utility Ravi kumar Veeramally
  2013-11-07  9:27 ` [RFC 3/3] android/hid: Fix set report data format Ravi kumar Veeramally
  2 siblings, 0 replies; 4+ messages in thread
From: Ravi kumar Veeramally @ 2013-11-07  9:26 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

HAL receives data in ascii format but it should be in hex format. So remove
fixed size of report data length and depend on report length parameter.
---
 android/hal-ipc-api.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/android/hal-ipc-api.txt b/android/hal-ipc-api.txt
index c39cb0d..297f565 100644
--- a/android/hal-ipc-api.txt
+++ b/android/hal-ipc-api.txt
@@ -553,7 +553,7 @@ Commands and responses:
 		Command parameters: Remote address (6 octets)
 		                    Report type (1 octet)
 		                    Report length (2 octets)
-		                    Report data (670 octets)
+		                    Report data (Report length)
 
 		Response parameters: <none>
 
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [RFC 2/3] android/hid: Add a ascii2hex utility
  2013-11-07  9:26 [RFC 0/3] Fix ascii to hex conversion in HAL to deamon ipc PDU Ravi kumar Veeramally
  2013-11-07  9:26 ` [RFC 1/3] android/hid: Remove fixed number of hid set report data length in ipc doc Ravi kumar Veeramally
@ 2013-11-07  9:27 ` Ravi kumar Veeramally
  2013-11-07  9:27 ` [RFC 3/3] android/hid: Fix set report data format Ravi kumar Veeramally
  2 siblings, 0 replies; 4+ messages in thread
From: Ravi kumar Veeramally @ 2013-11-07  9:27 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

Data from few interfaces on HAL is in ascii format but it should be
in hex format. This conversion utility does that job.
---
 android/Android.mk  |  1 +
 android/Makefile.am |  2 +-
 android/utils.c     | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 android/utils.h     |  3 +++
 4 files changed, 65 insertions(+), 1 deletion(-)
 create mode 100644 android/utils.c

diff --git a/android/Android.mk b/android/Android.mk
index d76dfaf..9493f89 100644
--- a/android/Android.mk
+++ b/android/Android.mk
@@ -27,6 +27,7 @@ LOCAL_SRC_FILES := \
 	ipc.c ipc.h \
 	a2dp.c \
 	pan.c \
+	utils.c \
 	../src/log.c \
 	../src/shared/mgmt.c \
 	../src/shared/util.c \
diff --git a/android/Makefile.am b/android/Makefile.am
index 8619641..eb0c8d7 100644
--- a/android/Makefile.am
+++ b/android/Makefile.am
@@ -9,7 +9,7 @@ noinst_PROGRAMS += android/bluetoothd
 android_bluetoothd_SOURCES = android/main.c \
 				src/log.c \
 				android/hal-msg.h \
-				android/utils.h \
+				android/utils.h android/utils.c \
 				src/sdpd-database.c src/sdpd-server.c \
 				src/sdpd-service.c src/sdpd-request.c \
 				src/glib-helper.h src/glib-helper.c \
diff --git a/android/utils.c b/android/utils.c
new file mode 100644
index 0000000..9179a6f
--- /dev/null
+++ b/android/utils.c
@@ -0,0 +1,60 @@
+/*
+ *
+ *  BlueZ - Bluetooth protocol stack for Linux
+ *
+ *  Copyright (C) 2013  Intel Corporation. All rights reserved.
+ *
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#include "utils.h"
+
+static inline uint8_t ascii2hex_c(uint8_t ascii)
+{
+	return g_ascii_isdigit(ascii) ? (ascii - '0') :
+				(g_ascii_toupper(ascii) - 'A' + 10);
+}
+
+int ascii2hex(const uint8_t *ascii, int ascii_len, uint8_t *hex)
+{
+	uint8_t h;
+	int i;
+
+	if (!ascii || !hex)
+		return -1;
+
+	i = 0;
+
+	while (i < ascii_len) {
+		h = ascii2hex_c(ascii[i++]) << 4;
+
+		if (!(i < ascii_len)) {
+			*hex++ = h;
+			break;
+		}
+
+		h |= ascii2hex_c(ascii[i++]);
+		*hex++ = h;
+	}
+
+	return 0;
+}
diff --git a/android/utils.h b/android/utils.h
index 5b009bc..2ec3fc1 100644
--- a/android/utils.h
+++ b/android/utils.h
@@ -21,6 +21,7 @@
  *
  */
 
+#include "lib/bluetooth.h"
 
 static inline void android2bdaddr(const void *buf, bdaddr_t *dst)
 {
@@ -31,3 +32,5 @@ static inline void bdaddr2android(const bdaddr_t *src, void *buf)
 {
 	baswap(buf, src);
 }
+
+int ascii2hex(const uint8_t *ascii, int ascii_len, uint8_t *hex);
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [RFC 3/3] android/hid: Fix set report data format
  2013-11-07  9:26 [RFC 0/3] Fix ascii to hex conversion in HAL to deamon ipc PDU Ravi kumar Veeramally
  2013-11-07  9:26 ` [RFC 1/3] android/hid: Remove fixed number of hid set report data length in ipc doc Ravi kumar Veeramally
  2013-11-07  9:27 ` [RFC 2/3] android/hid: Add a ascii2hex utility Ravi kumar Veeramally
@ 2013-11-07  9:27 ` Ravi kumar Veeramally
  2 siblings, 0 replies; 4+ messages in thread
From: Ravi kumar Veeramally @ 2013-11-07  9:27 UTC (permalink / raw)
  To: linux-bluetooth; +Cc: Ravi kumar Veeramally

Data is in ascii format from HAL. Convert it to hex and send it to
hid device.
---
 android/hal-msg.h |  2 +-
 android/hid.c     | 12 +++++++++---
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/android/hal-msg.h b/android/hal-msg.h
index a5e5c76..89366df 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -293,7 +293,7 @@ struct hal_cmd_hid_set_report {
 	uint8_t  bdaddr[6];
 	uint8_t  type;
 	uint16_t len;
-	uint8_t  data[670];
+	uint8_t  data[0];
 } __attribute__((packed));
 
 #define HAL_OP_HID_SEND_DATA		0x09
diff --git a/android/hid.c b/android/hid.c
index c38c4c1..e28e22d 100644
--- a/android/hid.c
+++ b/android/hid.c
@@ -898,18 +898,24 @@ static uint8_t bt_hid_set_report(struct hal_cmd_hid_set_report *cmd,
 		return HAL_STATUS_FAILED;
 
 	dev = l->data;
-	req_size = 1 + cmd->len;
+	/* Report data coming from HAL is in ascii format, so convert
+	 * it to hex and calculate length according to it. */
+	req_size = 1 + ((cmd->len + 1) / 2);
 	req = g_try_malloc0(req_size);
 	if (!req)
 		return HAL_STATUS_NOMEM;
 
 	req[0] = HID_MSG_SET_REPORT | cmd->type;
-	memcpy(req + 1, cmd->data, req_size - 1);
+
+	if (!ascii2hex(cmd->data, cmd->len, (req + 1))) {
+		g_free(req);
+		return HAL_STATUS_FAILED;
+	}
 
 	fd = g_io_channel_unix_get_fd(dev->ctrl_io);
 
 	if (write(fd, req, req_size) < 0) {
-		error("error while querying device protocol");
+		error("error while sending report");
 		g_free(req);
 		return HAL_STATUS_FAILED;
 	}
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2013-11-07  9:27 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-11-07  9:26 [RFC 0/3] Fix ascii to hex conversion in HAL to deamon ipc PDU Ravi kumar Veeramally
2013-11-07  9:26 ` [RFC 1/3] android/hid: Remove fixed number of hid set report data length in ipc doc Ravi kumar Veeramally
2013-11-07  9:27 ` [RFC 2/3] android/hid: Add a ascii2hex utility Ravi kumar Veeramally
2013-11-07  9:27 ` [RFC 3/3] android/hid: Fix set report data format Ravi kumar Veeramally

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).