From: Andrei Emeltchenko <[email protected]>
Create hal-utils helpers which helps to decode packets Android
sends through HAL interface.
---
android/Android.mk | 2 ++
android/Makefile.am | 3 ++-
android/client/if-gatt.c | 1 +
android/client/textconv.c | 42 ++------------------------------
android/client/textconv.h | 2 --
android/hal-utils.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
android/hal-utils.h | 26 ++++++++++++++++++++
7 files changed, 91 insertions(+), 43 deletions(-)
create mode 100644 android/hal-utils.c
create mode 100644 android/hal-utils.h
diff --git a/android/Android.mk b/android/Android.mk
index 51037a7..0bc0e82 100644
--- a/android/Android.mk
+++ b/android/Android.mk
@@ -88,6 +88,7 @@ LOCAL_SRC_FILES := \
hal-pan.c \
hal-a2dp.c \
client/textconv.c \
+ hal-utils.c \
LOCAL_C_INCLUDES += \
$(call include-path-for, system-core) \
@@ -125,6 +126,7 @@ LOCAL_SRC_FILES := \
client/if-hh.c \
client/if-pan.c \
client/if-sock.c \
+ hal-utils.c \
ANDROID_4_3_OR_ABOVE := $(shell echo 0 | awk -v v=$(PLATFORM_SDK_VERSION) 'END {print (v > 17) ? 1 : 0}')
diff --git a/android/Makefile.am b/android/Makefile.am
index 073edc8..debe7c1 100644
--- a/android/Makefile.am
+++ b/android/Makefile.am
@@ -68,7 +68,8 @@ android_haltest_SOURCES = android/client/haltest.c \
android/client/if-hh.c \
android/client/if-pan.c \
android/client/if-sock.c \
- android/client/hwmodule.c
+ android/client/hwmodule.c \
+ android/hal-utils.h android/hal-utils.c
android_haltest_LDADD = android/libhal-internal.la
diff --git a/android/client/if-gatt.c b/android/client/if-gatt.c
index b2b20cb..bb53952 100644
--- a/android/client/if-gatt.c
+++ b/android/client/if-gatt.c
@@ -17,6 +17,7 @@
#include <hardware/bluetooth.h>
+#include "../hal-utils.h"
#include "if-main.h"
const btgatt_interface_t *if_gatt = NULL;
diff --git a/android/client/textconv.c b/android/client/textconv.c
index 4def3da..469b2c3 100644
--- a/android/client/textconv.c
+++ b/android/client/textconv.c
@@ -19,6 +19,8 @@
#include <stdio.h>
#include <hardware/bluetooth.h>
+#include "../hal-utils.h"
+
#include "textconv.h"
/*
@@ -154,39 +156,6 @@ void str2bt_bdaddr_t(const char *str, bt_bdaddr_t *bd_addr)
&p[0], &p[1], &p[2], &p[3], &p[4], &p[5]);
}
-static const char BT_BASE_UUID[] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
- 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb
-};
-
-/*
- * converts uuid to string
- * buf should be at least 39 bytes
- *
- * returns string representation of uuid
- */
-char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf)
-{
- int shift = 0;
- int i;
- int is_bt;
-
- is_bt = !memcmp(&uuid->uu[4], &BT_BASE_UUID[4], sizeof(bt_uuid_t) - 4);
-
- for (i = 0; i < (int) sizeof(bt_uuid_t); i++) {
- if (i == 4 && is_bt)
- break;
-
- if (i == 4 || i == 6 || i == 8 || i == 10) {
- buf[i * 2 + shift] = '-';
- shift++;
- }
- sprintf(buf + i * 2 + shift, "%02x", uuid->uu[i]);
- }
-
- return buf;
-}
-
/* converts string to uuid */
void str2bt_uuid_t(const char *str, bt_uuid_t *uuid)
{
@@ -234,13 +203,6 @@ char *bdaddr2str(const bt_bdaddr_t *bd_addr)
return bt_bdaddr_t2str(bd_addr, buf);
}
-static char *btuuid2str(const bt_uuid_t *uuid)
-{
- static char buf[MAX_UUID_STR_LEN];
-
- return bt_uuid_t2str(uuid, buf);
-}
-
char *btproperty2str(const bt_property_t *property)
{
static char buf[4096];
diff --git a/android/client/textconv.h b/android/client/textconv.h
index 1c848ef..837eb4e 100644
--- a/android/client/textconv.h
+++ b/android/client/textconv.h
@@ -103,8 +103,6 @@ static struct int2str __##type##2str[] = {
char *bt_bdaddr_t2str(const bt_bdaddr_t *bd_addr, char *buf);
void str2bt_bdaddr_t(const char *str, bt_bdaddr_t *bd_addr);
-#define MAX_UUID_STR_LEN 37
-char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf);
void str2bt_uuid_t(const char *str, bt_uuid_t *uuid);
char *btproperty2str(const bt_property_t *property);
diff --git a/android/hal-utils.c b/android/hal-utils.c
new file mode 100644
index 0000000..84cfad1
--- /dev/null
+++ b/android/hal-utils.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2013 Intel Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <hardware/bluetooth.h>
+
+#include "hal-utils.h"
+
+/*
+ * converts uuid to string
+ * buf should be at least 39 bytes
+ *
+ * returns string representation of uuid
+ */
+char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf)
+{
+ int shift = 0;
+ int i;
+ int is_bt;
+
+ is_bt = !memcmp(&uuid->uu[4], &BT_BASE_UUID[4], sizeof(bt_uuid_t) - 4);
+
+ for (i = 0; i < (int) sizeof(bt_uuid_t); i++) {
+ if (i == 4 && is_bt)
+ break;
+
+ if (i == 4 || i == 6 || i == 8 || i == 10) {
+ buf[i * 2 + shift] = '-';
+ shift++;
+ }
+ sprintf(buf + i * 2 + shift, "%02x", uuid->uu[i]);
+ }
+
+ return buf;
+}
+
+char *btuuid2str(const bt_uuid_t *uuid)
+{
+ static char buf[MAX_UUID_STR_LEN];
+
+ return bt_uuid_t2str(uuid, buf);
+}
diff --git a/android/hal-utils.h b/android/hal-utils.h
new file mode 100644
index 0000000..d40b430
--- /dev/null
+++ b/android/hal-utils.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2013 Intel Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#define MAX_UUID_STR_LEN 37
+
+static const char BT_BASE_UUID[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
+ 0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb
+};
+
+char *btuuid2str(const bt_uuid_t *uuid);
+char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf);
--
1.7.10.4
From: Andrei Emeltchenko <[email protected]>
At this moment Android uses uint8_t * and bt_uuid_t for representing
UUID for different HALs. Convert debug helper to use uint8_t * string.
---
android/client/textconv.c | 6 +++---
android/hal-utils.c | 15 +++++++--------
android/hal-utils.h | 7 ++++---
3 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/android/client/textconv.c b/android/client/textconv.c
index 469b2c3..60ac08a 100644
--- a/android/client/textconv.c
+++ b/android/client/textconv.c
@@ -267,12 +267,12 @@ char *btproperty2str(const bt_property_t *property)
case BT_PROPERTY_UUIDS:
{
int count = property->len / sizeof(bt_uuid_t);
- char *ptr = property->val;
+ uint8_t *ptr = property->val;
strcat(p, "{");
while (count--) {
- strcat(p, btuuid2str((bt_uuid_t *) ptr));
+ strcat(p, btuuid2str(ptr));
if (count)
strcat(p, ", ");
ptr += sizeof(bt_uuid_t);
@@ -287,7 +287,7 @@ char *btproperty2str(const bt_property_t *property)
{
bt_service_record_t *rec = property->val;
- sprintf(p, "{%s, %d, %s}", btuuid2str(&rec->uuid),
+ sprintf(p, "{%s, %d, %s}", btuuid2str(rec->uuid.uu),
rec->channel, rec->name);
}
break;
diff --git a/android/hal-utils.c b/android/hal-utils.c
index 84cfad1..96dc234 100644
--- a/android/hal-utils.c
+++ b/android/hal-utils.c
@@ -17,8 +17,7 @@
#include <stdio.h>
#include <string.h>
-
-#include <hardware/bluetooth.h>
+#include <stdint.h>
#include "hal-utils.h"
@@ -28,15 +27,15 @@
*
* returns string representation of uuid
*/
-char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf)
+char *bt_uuid_t2str(const uint8_t *uuid, char *buf)
{
int shift = 0;
- int i;
+ unsigned int i;
int is_bt;
- is_bt = !memcmp(&uuid->uu[4], &BT_BASE_UUID[4], sizeof(bt_uuid_t) - 4);
+ is_bt = !memcmp(&uuid[4], &BT_BASE_UUID[4], HAL_UUID_LEN - 4);
- for (i = 0; i < (int) sizeof(bt_uuid_t); i++) {
+ for (i = 0; i < HAL_UUID_LEN; i++) {
if (i == 4 && is_bt)
break;
@@ -44,13 +43,13 @@ char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf)
buf[i * 2 + shift] = '-';
shift++;
}
- sprintf(buf + i * 2 + shift, "%02x", uuid->uu[i]);
+ sprintf(buf + i * 2 + shift, "%02x", uuid[i]);
}
return buf;
}
-char *btuuid2str(const bt_uuid_t *uuid)
+char *btuuid2str(const uint8_t *uuid)
{
static char buf[MAX_UUID_STR_LEN];
diff --git a/android/hal-utils.h b/android/hal-utils.h
index d40b430..5287180 100644
--- a/android/hal-utils.h
+++ b/android/hal-utils.h
@@ -15,12 +15,13 @@
*
*/
-#define MAX_UUID_STR_LEN 37
+#define MAX_UUID_STR_LEN 37
+#define HAL_UUID_LEN 16
static const char BT_BASE_UUID[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb
};
-char *btuuid2str(const bt_uuid_t *uuid);
-char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf);
+char *bt_uuid_t2str(const uint8_t *uuid, char *buf);
+char *btuuid2str(const uint8_t *uuid);
--
1.7.10.4
Hi Andrei,
On Fri, Nov 08, 2013, Andrei Emeltchenko wrote:
> Create hal-utils helpers which helps to decode packets Android
> sends through HAL interface.
> ---
> android/Android.mk | 2 ++
> android/Makefile.am | 3 ++-
> android/client/if-gatt.c | 1 +
> android/client/textconv.c | 42 ++------------------------------
> android/client/textconv.h | 2 --
> android/hal-utils.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
> android/hal-utils.h | 26 ++++++++++++++++++++
> 7 files changed, 91 insertions(+), 43 deletions(-)
> create mode 100644 android/hal-utils.c
> create mode 100644 android/hal-utils.h
This first patch has been applied, however I'm waiting for v6 of the
other two as we discussed offline.
Johan
From: Andrei Emeltchenko <[email protected]>
At this moment Android uses uint8_t * and bt_uuid_t for representing
UUID for different HALs. Convert debug helper to use uint8_t * string.
---
android/client/textconv.c | 7 +++++--
android/hal-utils.c | 15 +++++++--------
android/hal-utils.h | 7 ++++---
3 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/android/client/textconv.c b/android/client/textconv.c
index 469b2c3..ebf6316 100644
--- a/android/client/textconv.c
+++ b/android/client/textconv.c
@@ -272,7 +272,9 @@ char *btproperty2str(const bt_property_t *property)
strcat(p, "{");
while (count--) {
- strcat(p, btuuid2str((bt_uuid_t *) ptr));
+ bt_uuid_t *uuid = (bt_uuid_t *) ptr;
+
+ strcat(p, btuuid2str(uuid->uu));
if (count)
strcat(p, ", ");
ptr += sizeof(bt_uuid_t);
@@ -286,8 +288,9 @@ char *btproperty2str(const bt_property_t *property)
case BT_PROPERTY_SERVICE_RECORD:
{
bt_service_record_t *rec = property->val;
+ bt_uuid_t *uuid = &rec->uuid;
- sprintf(p, "{%s, %d, %s}", btuuid2str(&rec->uuid),
+ sprintf(p, "{%s, %d, %s}", btuuid2str(uuid->uu),
rec->channel, rec->name);
}
break;
diff --git a/android/hal-utils.c b/android/hal-utils.c
index 84cfad1..96dc234 100644
--- a/android/hal-utils.c
+++ b/android/hal-utils.c
@@ -17,8 +17,7 @@
#include <stdio.h>
#include <string.h>
-
-#include <hardware/bluetooth.h>
+#include <stdint.h>
#include "hal-utils.h"
@@ -28,15 +27,15 @@
*
* returns string representation of uuid
*/
-char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf)
+char *bt_uuid_t2str(const uint8_t *uuid, char *buf)
{
int shift = 0;
- int i;
+ unsigned int i;
int is_bt;
- is_bt = !memcmp(&uuid->uu[4], &BT_BASE_UUID[4], sizeof(bt_uuid_t) - 4);
+ is_bt = !memcmp(&uuid[4], &BT_BASE_UUID[4], HAL_UUID_LEN - 4);
- for (i = 0; i < (int) sizeof(bt_uuid_t); i++) {
+ for (i = 0; i < HAL_UUID_LEN; i++) {
if (i == 4 && is_bt)
break;
@@ -44,13 +43,13 @@ char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf)
buf[i * 2 + shift] = '-';
shift++;
}
- sprintf(buf + i * 2 + shift, "%02x", uuid->uu[i]);
+ sprintf(buf + i * 2 + shift, "%02x", uuid[i]);
}
return buf;
}
-char *btuuid2str(const bt_uuid_t *uuid)
+char *btuuid2str(const uint8_t *uuid)
{
static char buf[MAX_UUID_STR_LEN];
diff --git a/android/hal-utils.h b/android/hal-utils.h
index d40b430..5287180 100644
--- a/android/hal-utils.h
+++ b/android/hal-utils.h
@@ -15,12 +15,13 @@
*
*/
-#define MAX_UUID_STR_LEN 37
+#define MAX_UUID_STR_LEN 37
+#define HAL_UUID_LEN 16
static const char BT_BASE_UUID[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb
};
-char *btuuid2str(const bt_uuid_t *uuid);
-char *bt_uuid_t2str(const bt_uuid_t *uuid, char *buf);
+char *bt_uuid_t2str(const uint8_t *uuid, char *buf);
+char *btuuid2str(const uint8_t *uuid);
--
1.7.10.4
From: Andrei Emeltchenko <[email protected]>
Socket HAL uses uint8_t * strings which are of size bt_uuid_t.
---
android/hal-sock.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/android/hal-sock.c b/android/hal-sock.c
index 32c7939..d24276e 100644
--- a/android/hal-sock.c
+++ b/android/hal-sock.c
@@ -25,6 +25,8 @@
#include "hal-msg.h"
#include "hal.h"
+#include "hal-utils.h"
+
static bt_status_t sock_listen_rfcomm(const char *service_name,
const uint8_t *uuid, int chan,
int *sock, int flags)
@@ -49,13 +51,13 @@ static bt_status_t sock_listen(btsock_type_t type, const char *service_name,
int *sock, int flags)
{
if ((!uuid && chan <= 0) || !sock) {
- error("%s: invalid params: uuid %p, chan %d, sock %p",
- __func__, uuid, chan, sock);
+ error("Invalid params: uuid %s, chan %d, sock %p",
+ btuuid2str(uuid), chan, sock);
return BT_STATUS_PARM_INVALID;
}
- DBG("uuid %p chan %d sock %p type %d service_name %s",
- uuid, chan, sock, type, service_name);
+ DBG("uuid %s chan %d sock %p type %d service_name %s",
+ btuuid2str(uuid), chan, sock, type, service_name);
switch (type) {
case BTSOCK_RFCOMM:
@@ -76,12 +78,13 @@ static bt_status_t sock_connect(const bt_bdaddr_t *bdaddr, btsock_type_t type,
struct hal_cmd_sock_connect cmd;
if ((!uuid && chan <= 0) || !bdaddr || !sock) {
- error("invalid params: bd_addr %p, uuid %p, chan %d, sock %p",
- bdaddr, uuid, chan, sock);
+ error("Invalid params: bd_addr %p, uuid %s, chan %d, sock %p",
+ bdaddr, btuuid2str(uuid), chan, sock);
return BT_STATUS_PARM_INVALID;
}
- DBG("uuid %p chan %d sock %p type %d", uuid, chan, sock, type);
+ DBG("uuid %s chan %d sock %p type %d", btuuid2str(uuid), chan, sock,
+ type);
if (type != BTSOCK_RFCOMM) {
error("Socket type %u not supported", type);
--
1.7.10.4