* [PATCH 01/12] android: Add support for more configuration options
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 02/12] android/gatt: Bring back System ID in DIS Szymon Janc
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
This adds support for system ID, serial number and PnP ID options.
---
android/hal-bluetooth.c | 15 ++++++
android/hal-ipc-api.txt | 3 ++
android/hal-msg.h | 3 ++
android/main.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++
android/utils.h | 6 +++
5 files changed, 146 insertions(+)
diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index 07e86b0..f7db416 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -438,6 +438,21 @@ static int send_configuration(void)
cmd->num++;
}
+ if (get_config("serialno", prop, "ro.serialno") > 0) {
+ len += add_prop(prop, HAL_CONFIG_SERIAL_NUMBER, buf + len);
+ cmd->num++;
+ }
+
+ if (get_config("systemid", prop, NULL) > 0) {
+ len += add_prop(prop, HAL_CONFIG_SYSTEM_ID, buf + len);
+ cmd->num++;
+ }
+
+ if (get_config("pnpid", prop, NULL) > 0) {
+ len += add_prop(prop, HAL_CONFIG_PNP_ID, buf + len);
+ cmd->num++;
+ }
+
return hal_ipc_cmd(HAL_SERVICE_ID_CORE, HAL_OP_CONFIGURATION, len, cmd,
NULL, NULL, NULL);
}
diff --git a/android/hal-ipc-api.txt b/android/hal-ipc-api.txt
index 81aab50..82067f2 100644
--- a/android/hal-ipc-api.txt
+++ b/android/hal-ipc-api.txt
@@ -158,6 +158,9 @@ Core Service (ID 0)
Valid configure option types: 0x00 = Vendor
0x01 = Model
0x02 = Name
+ 0x03 = Serial Number
+ 0x04 = System ID
+ 0x05 = PnP ID
In case of an error, the error response will be returned.
diff --git a/android/hal-msg.h b/android/hal-msg.h
index bb6b1e0..9ae8c24 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -73,6 +73,9 @@ struct hal_cmd_unregister_module {
#define HAL_CONFIG_VENDOR 0x00
#define HAL_CONFIG_MODEL 0x01
#define HAL_CONFIG_NAME 0x02
+#define HAL_CONFIG_SERIAL_NUMBER 0x03
+#define HAL_CONFIG_SYSTEM_ID 0x04
+#define HAL_CONFIG_PNP_ID 0x05
struct hal_config_prop {
uint8_t type;
diff --git a/android/main.c b/android/main.c
index 27f5c48..9ee9960 100644
--- a/android/main.c
+++ b/android/main.c
@@ -74,6 +74,12 @@
static char *config_vendor = NULL;
static char *config_model = NULL;
static char *config_name = NULL;
+static char *config_serial = NULL;
+static uint64_t config_system_id = 0;
+static uint16_t config_pnp_source = 0x0002; /* USB */
+static uint16_t config_pnp_vendor = 0x1d6b; /* Linux Foundation */
+static uint16_t config_pnp_product = 0x0247; /* BlueZ for Android */
+static uint16_t config_pnp_version = 0x0000;
static guint quit_timeout = 0;
@@ -109,6 +115,36 @@ const char *bt_config_get_model(void)
return DEFAULT_MODEL;
}
+const char *bt_config_get_serial(void)
+{
+ return config_serial;
+}
+
+uint64_t bt_config_get_system_id(void)
+{
+ return config_system_id;
+}
+
+uint16_t bt_config_get_pnp_source(void)
+{
+ return config_pnp_source;
+}
+
+uint16_t bt_config_get_pnp_vendor(void)
+{
+ return config_pnp_vendor;
+}
+
+uint16_t bt_config_get_pnp_product(void)
+{
+ return config_pnp_product;
+}
+
+uint16_t bt_config_get_pnp_version(void)
+{
+ return config_pnp_version;
+}
+
static void service_register(const void *buf, uint16_t len)
{
const struct hal_cmd_register_module *m = buf;
@@ -284,6 +320,61 @@ static char *get_prop(char *prop, uint16_t len, const uint8_t *val)
return prop;
}
+static void parse_pnp_id(uint16_t len, const uint8_t *val)
+{
+ int result;
+ uint16_t vendor, product, version , source;
+ char *pnp;
+
+ /* version is optional */
+ version = config_pnp_version;
+
+ pnp = get_prop(NULL, len, val);
+ if (!pnp)
+ return;
+
+ DBG("pnp_id %s", pnp);
+
+ result = sscanf(pnp, "bluetooth:%4hx:%4hx:%4hx",
+ &vendor, &product, &version);
+ if (result != EOF && result >= 2) {
+ source = 0x0001;
+ goto done;
+ }
+
+ result = sscanf(pnp, "usb:%4hx:%4hx:%4hx", &vendor, &product, &version);
+ if (result != EOF && result >= 2) {
+ source = 0x0002;
+ goto done;
+ }
+
+ free(pnp);
+ return;
+done:
+ free(pnp);
+
+ config_pnp_source = source;
+ config_pnp_vendor = vendor;
+ config_pnp_product = product;
+ config_pnp_version = version;
+}
+
+static void parse_system_id(uint16_t len, const uint8_t *val)
+{
+ uint64_t res;
+ char *id;
+
+ id = get_prop(NULL, len, val);
+ if (!id)
+ return;
+
+ res = strtoull(id, NULL, 16);
+ if (res == ULLONG_MAX && errno == ERANGE)
+ return;
+
+ config_system_id = res;
+}
+
static void configuration(const void *buf, uint16_t len)
{
const struct hal_cmd_configuration *cmd = buf;
@@ -324,6 +415,21 @@ static void configuration(const void *buf, uint16_t len)
DBG("model %s", config_model);
break;
+ case HAL_CONFIG_SERIAL_NUMBER:
+ config_serial = get_prop(config_serial, prop->len,
+ prop->val);
+
+ DBG("serial %s", config_serial);
+
+ break;
+ case HAL_CONFIG_SYSTEM_ID:
+ parse_system_id(prop->len, prop->val);
+
+ break;
+ case HAL_CONFIG_PNP_ID:
+ parse_pnp_id(prop->len, prop->val);
+
+ break;
default:
error("Invalid configuration option (%u), terminating",
prop->type);
@@ -561,12 +667,24 @@ static bool set_capabilities(void)
return true;
}
+static void set_version(void)
+{
+ uint8_t major, minor;
+
+ if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2)
+ return;
+
+ config_pnp_version = major << 8 | minor;
+}
+
int main(int argc, char *argv[])
{
GOptionContext *context;
GError *err = NULL;
guint signal;
+ set_version();
+
context = g_option_context_new(NULL);
g_option_context_add_main_entries(context, options, NULL);
@@ -651,6 +769,7 @@ int main(int argc, char *argv[])
free(config_vendor);
free(config_model);
free(config_name);
+ free(config_serial);
return EXIT_SUCCESS;
}
diff --git a/android/utils.h b/android/utils.h
index c70f8cb..9bf2195 100644
--- a/android/utils.h
+++ b/android/utils.h
@@ -34,3 +34,9 @@ static inline void bdaddr2android(const bdaddr_t *src, void *buf)
const char *bt_config_get_vendor(void);
const char *bt_config_get_model(void);
const char *bt_config_get_name(void);
+const char *bt_config_get_serial(void);
+uint64_t bt_config_get_system_id(void);
+uint16_t bt_config_get_pnp_source(void);
+uint16_t bt_config_get_pnp_vendor(void);
+uint16_t bt_config_get_pnp_product(void);
+uint16_t bt_config_get_pnp_version(void);
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 02/12] android/gatt: Bring back System ID in DIS
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
2014-09-30 11:06 ` [PATCH 01/12] android: Add support for more configuration options Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 03/12] android/gatt: Fix serial number " Szymon Janc
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/gatt.c | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/android/gatt.c b/android/gatt.c
index 1d9971c..37bdeb6 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -6414,6 +6414,38 @@ done:
entry->state = REQUEST_DONE;
}
+static void device_info_read_system_id_cb(uint16_t handle, uint16_t offset,
+ uint8_t att_opcode, bdaddr_t *bdaddr,
+ void *user_data)
+{
+ struct pending_request *entry;
+ struct gatt_device *dev;
+
+ dev = find_device_by_addr(bdaddr);
+ if (!dev) {
+ error("gatt: Could not find device ?!");
+ return;
+ }
+
+ entry = queue_find(dev->pending_requests, match_dev_request_by_handle,
+ UINT_TO_PTR(handle));
+ if (!entry)
+ return;
+
+ entry->value = malloc0(sizeof(uint64_t));
+ if (!entry->value) {
+ entry->error = ATT_ECODE_UNLIKELY;
+ goto done;
+ }
+
+ entry->length = sizeof(uint64_t);
+ put_le64(bt_config_get_system_id(), entry->value);
+ entry->offset = offset;
+
+done:
+ entry->state = REQUEST_DONE;
+}
+
static void register_device_info_service(void)
{
bt_uuid_t uuid;
@@ -6447,6 +6479,15 @@ static void register_device_info_service(void)
(void *) data);
}
+ if (bt_config_get_system_id()) {
+ bt_uuid16_create(&uuid, GATT_CHARAC_SYSTEM_ID);
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid,
+ GATT_PERM_READ,
+ GATT_CHR_PROP_READ,
+ device_info_read_system_id_cb,
+ NULL, NULL);
+ }
+
/* TODO */
data = NULL;
if (data) {
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 03/12] android/gatt: Fix serial number in DIS
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
2014-09-30 11:06 ` [PATCH 01/12] android: Add support for more configuration options Szymon Janc
2014-09-30 11:06 ` [PATCH 02/12] android/gatt: Bring back System ID in DIS Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 04/12] android/gatt: Require encryption for Serial and System ID " Szymon Janc
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
Fix use of name as serial number value. Since now proper config option
exists use real serial if provided.
---
android/gatt.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/android/gatt.c b/android/gatt.c
index 37bdeb6..c482364 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -6469,7 +6469,7 @@ static void register_device_info_service(void)
(void *) data);
}
- /* TODO */
+ data = bt_config_get_serial();
if (data) {
bt_uuid16_create(&uuid, GATT_CHARAC_SERIAL_NUMBER_STRING);
gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid,
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 04/12] android/gatt: Require encryption for Serial and System ID in DIS
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (2 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 03/12] android/gatt: Fix serial number " Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 05/12] android/bluetooth: Use configured values for DID Szymon Janc
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
Those chararcteristics are unique for device and could allow tracking
with privacy enabled. Require devices to be paired before reading
those.
---
android/gatt.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/android/gatt.c b/android/gatt.c
index c482364..c00265a 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -6451,6 +6451,7 @@ static void register_device_info_service(void)
bt_uuid_t uuid;
uint16_t srvc_handle, end_handle;
const char *data;
+ uint32_t enc_perm = GATT_PERM_READ | GATT_PERM_READ_ENCRYPTED;
DBG("");
@@ -6473,8 +6474,7 @@ static void register_device_info_service(void)
if (data) {
bt_uuid16_create(&uuid, GATT_CHARAC_SERIAL_NUMBER_STRING);
gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid,
- GATT_PERM_READ,
- GATT_CHR_PROP_READ,
+ enc_perm, GATT_CHR_PROP_READ,
device_info_read_cb, NULL,
(void *) data);
}
@@ -6482,8 +6482,7 @@ static void register_device_info_service(void)
if (bt_config_get_system_id()) {
bt_uuid16_create(&uuid, GATT_CHARAC_SYSTEM_ID);
gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid,
- GATT_PERM_READ,
- GATT_CHR_PROP_READ,
+ enc_perm, GATT_CHR_PROP_READ,
device_info_read_system_id_cb,
NULL, NULL);
}
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 05/12] android/bluetooth: Use configured values for DID
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (3 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 04/12] android/gatt: Require encryption for Serial and System ID " Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 06/12] lib/uuid: Add define for GATT PnP ID UUID Szymon Janc
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/bluetooth.c | 25 ++++++++-----------------
1 file changed, 8 insertions(+), 17 deletions(-)
diff --git a/android/bluetooth.c b/android/bluetooth.c
index c7ccf9d..3016ea4 100644
--- a/android/bluetooth.c
+++ b/android/bluetooth.c
@@ -94,10 +94,6 @@
#define DEVICES_FILE ANDROID_STORAGEDIR"/devices"
#define CACHE_FILE ANDROID_STORAGEDIR"/cache"
-#define DEVICE_ID_SOURCE 0x0002 /* USB */
-#define DEVICE_ID_VENDOR 0x1d6b /* Linux Foundation */
-#define DEVICE_ID_PRODUCT 0x0247 /* BlueZ for Android */
-
#define ADAPTER_MAJOR_CLASS 0x02 /* Phone */
#define ADAPTER_MINOR_CLASS 0x03 /* Smartphone */
@@ -2827,26 +2823,21 @@ static void set_io_capability(void)
static void set_device_id(void)
{
struct mgmt_cp_set_device_id cp;
- uint8_t major, minor;
- uint16_t version;
-
- if (sscanf(VERSION, "%hhu.%hhu", &major, &minor) != 2)
- return;
-
- version = major << 8 | minor;
memset(&cp, 0, sizeof(cp));
- cp.source = htobs(DEVICE_ID_SOURCE);
- cp.vendor = htobs(DEVICE_ID_VENDOR);
- cp.product = htobs(DEVICE_ID_PRODUCT);
- cp.version = htobs(version);
+ cp.source = htobs(bt_config_get_pnp_source());
+ cp.vendor = htobs(bt_config_get_pnp_vendor());
+ cp.product = htobs(bt_config_get_pnp_product());
+ cp.version = htobs(bt_config_get_pnp_version());
if (mgmt_send(mgmt_if, MGMT_OP_SET_DEVICE_ID, adapter.index,
sizeof(cp), &cp, NULL, NULL, NULL) == 0)
error("Failed to set device id");
- register_device_id(DEVICE_ID_SOURCE, DEVICE_ID_VENDOR,
- DEVICE_ID_PRODUCT, version);
+ register_device_id(bt_config_get_pnp_source(),
+ bt_config_get_pnp_vendor(),
+ bt_config_get_pnp_product(),
+ bt_config_get_pnp_version());
bt_adapter_add_record(sdp_record_find(0x10000), 0x00);
}
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 06/12] lib/uuid: Add define for GATT PnP ID UUID
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (4 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 05/12] android/bluetooth: Use configured values for DID Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 07/12] android/gatt: Add support for PnP ID in DIS Szymon Janc
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
lib/uuid.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/uuid.h b/lib/uuid.h
index 7901d34..8303772 100644
--- a/lib/uuid.h
+++ b/lib/uuid.h
@@ -127,6 +127,7 @@ extern "C" {
#define GATT_CHARAC_HARDWARE_REVISION_STRING 0x2A27
#define GATT_CHARAC_SOFTWARE_REVISION_STRING 0x2A28
#define GATT_CHARAC_MANUFACTURER_NAME_STRING 0x2A29
+#define GATT_CHARAC_PNP_ID 0x2A50
/* GATT Characteristic Descriptors */
#define GATT_CHARAC_EXT_PROPER_UUID 0x2900
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 07/12] android/gatt: Add support for PnP ID in DIS
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (5 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 06/12] lib/uuid: Add define for GATT PnP ID UUID Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 08/12] android/gatt: Use release version for software revision " Szymon Janc
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/gatt.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/android/gatt.c b/android/gatt.c
index c00265a..7346d98 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -6446,6 +6446,43 @@ done:
entry->state = REQUEST_DONE;
}
+static void device_info_read_pnp_id_cb(uint16_t handle, uint16_t offset,
+ uint8_t att_opcode, bdaddr_t *bdaddr,
+ void *user_data)
+{
+ struct pending_request *entry;
+ struct gatt_device *dev;
+
+ dev = find_device_by_addr(bdaddr);
+ if (!dev) {
+ error("gatt: Could not find device ?!");
+ return;
+ }
+
+ entry = queue_find(dev->pending_requests, match_dev_request_by_handle,
+ UINT_TO_PTR(handle));
+ if (!entry)
+ return;
+
+ entry->value = malloc0(sizeof(uint8_t) + 3 * sizeof(uint16_t));
+ if (!entry->value) {
+ entry->error = ATT_ECODE_UNLIKELY;
+ goto done;
+ }
+
+ entry->length = sizeof(uint8_t) + 3 * sizeof(uint16_t);
+
+ entry->value[0] = bt_config_get_pnp_source();
+ put_le16(bt_config_get_pnp_vendor(), entry->value + 1);
+ put_le16(bt_config_get_pnp_product(), entry->value + 3);
+ put_le16(bt_config_get_pnp_version(), entry->value + 5);
+
+ entry->offset = offset;
+
+done:
+ entry->state = REQUEST_DONE;
+}
+
static void register_device_info_service(void)
{
bt_uuid_t uuid;
@@ -6530,6 +6567,15 @@ static void register_device_info_service(void)
(void *) data);
}
+ if (bt_config_get_pnp_source()) {
+ bt_uuid16_create(&uuid, GATT_CHARAC_PNP_ID);
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid,
+ GATT_PERM_READ,
+ GATT_CHR_PROP_READ,
+ device_info_read_pnp_id_cb,
+ NULL, NULL);
+ }
+
gatt_db_service_set_active(gatt_db, srvc_handle, true);
/* SDP */
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 08/12] android/gatt: Use release version for software revision in DIS
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (6 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 07/12] android/gatt: Add support for PnP ID in DIS Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 09/12] android: Remove few not needed blank lines Szymon Janc
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/gatt.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/android/gatt.c b/android/gatt.c
index 7346d98..425f6a5 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -6546,16 +6546,10 @@ static void register_device_info_service(void)
(void *) data);
}
- /* TODO */
- data = NULL;
- if (data) {
- bt_uuid16_create(&uuid, GATT_CHARAC_SOFTWARE_REVISION_STRING);
- gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid,
- GATT_PERM_READ,
- GATT_CHR_PROP_READ,
- device_info_read_cb, NULL,
- (void *) data);
- }
+ bt_uuid16_create(&uuid, GATT_CHARAC_SOFTWARE_REVISION_STRING);
+ gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid, GATT_PERM_READ,
+ GATT_CHR_PROP_READ, device_info_read_cb,
+ NULL, VERSION);
data = bt_config_get_vendor();
if (data) {
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 09/12] android: Remove few not needed blank lines
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (7 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 08/12] android/gatt: Use release version for software revision " Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 10/12] android: Add support for FW and HW revision config options Szymon Janc
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/main.c | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/android/main.c b/android/main.c
index 9ee9960..014b763 100644
--- a/android/main.c
+++ b/android/main.c
@@ -397,38 +397,28 @@ static void configuration(const void *buf, uint16_t len)
case HAL_CONFIG_VENDOR:
config_vendor = get_prop(config_vendor, prop->len,
prop->val);
-
DBG("vendor %s", config_vendor);
-
break;
case HAL_CONFIG_NAME:
config_name = get_prop(config_name, prop->len,
prop->val);
-
DBG("name %s", config_name);
-
break;
case HAL_CONFIG_MODEL:
config_model = get_prop(config_model, prop->len,
prop->val);
-
DBG("model %s", config_model);
-
break;
case HAL_CONFIG_SERIAL_NUMBER:
config_serial = get_prop(config_serial, prop->len,
prop->val);
-
DBG("serial %s", config_serial);
-
break;
case HAL_CONFIG_SYSTEM_ID:
parse_system_id(prop->len, prop->val);
-
break;
case HAL_CONFIG_PNP_ID:
parse_pnp_id(prop->len, prop->val);
-
break;
default:
error("Invalid configuration option (%u), terminating",
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 10/12] android: Add support for FW and HW revision config options
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (8 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 09/12] android: Remove few not needed blank lines Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 11/12] android/pts: Update PTS settings and results for DIS Szymon Janc
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/gatt.c | 6 ++----
android/hal-bluetooth.c | 10 ++++++++++
android/hal-ipc-api.txt | 2 ++
android/hal-msg.h | 2 ++
android/main.c | 24 ++++++++++++++++++++++++
android/utils.h | 2 ++
6 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/android/gatt.c b/android/gatt.c
index 425f6a5..ad20a71 100644
--- a/android/gatt.c
+++ b/android/gatt.c
@@ -6524,8 +6524,7 @@ static void register_device_info_service(void)
NULL, NULL);
}
- /* TODO */
- data = NULL;
+ data = bt_config_get_fw_rev();
if (data) {
bt_uuid16_create(&uuid, GATT_CHARAC_FIRMWARE_REVISION_STRING);
gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid,
@@ -6535,8 +6534,7 @@ static void register_device_info_service(void)
(void *) data);
}
- /* TODO */
- data = NULL;
+ data = bt_config_get_hw_rev();
if (data) {
bt_uuid16_create(&uuid, GATT_CHARAC_HARDWARE_REVISION_STRING);
gatt_db_add_characteristic(gatt_db, srvc_handle, &uuid,
diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c
index f7db416..6754279 100644
--- a/android/hal-bluetooth.c
+++ b/android/hal-bluetooth.c
@@ -453,6 +453,16 @@ static int send_configuration(void)
cmd->num++;
}
+ if (get_config("fwrev", prop, "ro.build.version.release") > 0) {
+ len += add_prop(prop, HAL_CONFIG_FW_REV, buf + len);
+ cmd->num++;
+ }
+
+ if (get_config("hwrev", prop, "ro.board.platform") > 0) {
+ len += add_prop(prop, HAL_CONFIG_HW_REV, buf + len);
+ cmd->num++;
+ }
+
return hal_ipc_cmd(HAL_SERVICE_ID_CORE, HAL_OP_CONFIGURATION, len, cmd,
NULL, NULL, NULL);
}
diff --git a/android/hal-ipc-api.txt b/android/hal-ipc-api.txt
index 82067f2..739fdbf 100644
--- a/android/hal-ipc-api.txt
+++ b/android/hal-ipc-api.txt
@@ -161,6 +161,8 @@ Core Service (ID 0)
0x03 = Serial Number
0x04 = System ID
0x05 = PnP ID
+ 0x06 = Firmware Rev
+ 0x07 = Hardware Rev
In case of an error, the error response will be returned.
diff --git a/android/hal-msg.h b/android/hal-msg.h
index 9ae8c24..71969b5 100644
--- a/android/hal-msg.h
+++ b/android/hal-msg.h
@@ -76,6 +76,8 @@ struct hal_cmd_unregister_module {
#define HAL_CONFIG_SERIAL_NUMBER 0x03
#define HAL_CONFIG_SYSTEM_ID 0x04
#define HAL_CONFIG_PNP_ID 0x05
+#define HAL_CONFIG_FW_REV 0x06
+#define HAL_CONFIG_HW_REV 0x07
struct hal_config_prop {
uint8_t type;
diff --git a/android/main.c b/android/main.c
index 014b763..4f3a6bf 100644
--- a/android/main.c
+++ b/android/main.c
@@ -75,6 +75,8 @@ static char *config_vendor = NULL;
static char *config_model = NULL;
static char *config_name = NULL;
static char *config_serial = NULL;
+static char *config_fw_rev = NULL;
+static char *config_hw_rev = NULL;
static uint64_t config_system_id = 0;
static uint16_t config_pnp_source = 0x0002; /* USB */
static uint16_t config_pnp_vendor = 0x1d6b; /* Linux Foundation */
@@ -120,6 +122,16 @@ const char *bt_config_get_serial(void)
return config_serial;
}
+const char *bt_config_get_fw_rev(void)
+{
+ return config_fw_rev;
+}
+
+const char *bt_config_get_hw_rev(void)
+{
+ return config_hw_rev;
+}
+
uint64_t bt_config_get_system_id(void)
{
return config_system_id;
@@ -420,6 +432,16 @@ static void configuration(const void *buf, uint16_t len)
case HAL_CONFIG_PNP_ID:
parse_pnp_id(prop->len, prop->val);
break;
+ case HAL_CONFIG_FW_REV:
+ config_fw_rev = get_prop(config_fw_rev, prop->len,
+ prop->val);
+ DBG("fw_rev %s", config_fw_rev);
+ break;
+ case HAL_CONFIG_HW_REV:
+ config_hw_rev = get_prop(config_hw_rev, prop->len,
+ prop->val);
+ DBG("hw_rev %s", config_hw_rev);
+ break;
default:
error("Invalid configuration option (%u), terminating",
prop->type);
@@ -760,6 +782,8 @@ int main(int argc, char *argv[])
free(config_model);
free(config_name);
free(config_serial);
+ free(config_fw_rev);
+ free(config_hw_rev);
return EXIT_SUCCESS;
}
diff --git a/android/utils.h b/android/utils.h
index 9bf2195..7adc2da 100644
--- a/android/utils.h
+++ b/android/utils.h
@@ -35,6 +35,8 @@ const char *bt_config_get_vendor(void);
const char *bt_config_get_model(void);
const char *bt_config_get_name(void);
const char *bt_config_get_serial(void);
+const char *bt_config_get_fw_rev(void);
+const char *bt_config_get_hw_rev(void);
uint64_t bt_config_get_system_id(void);
uint16_t bt_config_get_pnp_source(void);
uint16_t bt_config_get_pnp_vendor(void);
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 11/12] android/pts: Update PTS settings and results for DIS
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (9 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 10/12] android: Add support for FW and HW revision config options Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-09-30 11:06 ` [PATCH 12/12] android/README: Update with new configuration options Szymon Janc
2014-10-02 13:50 ` [PATCH 00/12] More customization options Szymon Janc
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/pics-dis.txt | 4 ++--
android/pixit-dis.txt | 2 +-
android/pts-dis.txt | 8 ++++----
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/android/pics-dis.txt b/android/pics-dis.txt
index 1fd24d8..0a1ab3f 100644
--- a/android/pics-dis.txt
+++ b/android/pics-dis.txt
@@ -29,11 +29,11 @@ TSPC_DIS_2_4 True Serial Number String Characteristic (O)
TSPC_DIS_2_5 True Hardware Revision String Characteristic (O)
TSPC_DIS_2_6 True Firmware Revision String Characteristic (O)
TSPC_DIS_2_7 True Software Revision String Characteristic (O)
-TSPC_DIS_2_8 False (*) System ID Characteristic (O)
+TSPC_DIS_2_8 True System ID Characteristic (O)
TSPC_DIS_2_9 False (*) IEEE 11073-20601 Regulatory Certification
Data List Characteristic (O)
TSPC_DIS_2_10 True SDP Interoperability (C.1)
-TSPC_DIS_2_11 False (*) PnP ID (O)
+TSPC_DIS_2_11 True PnP ID (O)
-------------------------------------------------------------------------------
C.1: Mandatory if 1/1 (BR/EDR) is supported, otherwise excluded.
-------------------------------------------------------------------------------
diff --git a/android/pixit-dis.txt b/android/pixit-dis.txt
index 0847d76..c29ec36 100644
--- a/android/pixit-dis.txt
+++ b/android/pixit-dis.txt
@@ -19,7 +19,7 @@ TSPX_delete_link_key FALSE
TSPX_pin_code 0000
TSPX_use_dynamic_pin FALSE
TSPX_delete_ltk FALSE
-TSPX_security_enabled FALSE
+TSPX_security_enabled TRUE
TSPX_iut_setup_att_over_br_edr FALSE
TSPX_tester_appearance 0000
-------------------------------------------------------------------------------
diff --git a/android/pts-dis.txt b/android/pts-dis.txt
index 8f2bae6..8489430 100644
--- a/android/pts-dis.txt
+++ b/android/pts-dis.txt
@@ -21,17 +21,17 @@ TC_DEC_BV_03_C PASS
TC_DEC_BV_04_C PASS
TC_DEC_BV_05_C PASS
TC_DEC_BV_06_C PASS
-TC_DEC_BV_07_C N/A
+TC_DEC_BV_07_C PASS
TC_DEC_BV_08_C N/A
-TC_DEC_BV_09_C N/A
+TC_DEC_BV_09_C PASS
TC_CR_BV_01_C PASS
TC_CR_BV_02_C PASS
TC_CR_BV_03_C PASS
TC_CR_BV_04_C PASS
TC_CR_BV_05_C PASS
TC_CR_BV_06_C PASS
-TC_CR_BV_07_C N/A
+TC_CR_BV_07_C PASS
TC_CR_BV_08_C N/A
-TC_CR_BV_09_C N/A
+TC_CR_BV_09_C PASS
TC_SDP_BV_01_C PASS
-------------------------------------------------------------------------------
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* [PATCH 12/12] android/README: Update with new configuration options
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (10 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 11/12] android/pts: Update PTS settings and results for DIS Szymon Janc
@ 2014-09-30 11:06 ` Szymon Janc
2014-10-02 13:50 ` [PATCH 00/12] More customization options Szymon Janc
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-09-30 11:06 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Szymon Janc
---
android/README | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/android/README b/android/README
index 706d424..4bfe10b 100644
--- a/android/README
+++ b/android/README
@@ -216,6 +216,18 @@ model <any> Set model name used as default adapter name.
If not set fallback to "ro.product.model".
name <any> Set model number in DIS. If not set fallback to
"ro.product.name".
+serialno <any> Set serial number in DIS. If not set fallback to
+ "ro.serialno".
+systemid <uint64> Set system ID in DIS. Hex string encoded uint64.
+pnpid <any> PnP information used in DIS and DID profiles.
+ Required format: "Source:VID:PID:Version".
+ Source must be either "bluetooth" or "usb".
+ VID, PID and Version are uint16. Version is
+ optional.
+fwrev <any> Firmware revision in DIS. If not set fallback to
+ "ro.build.version.release".
+hwrew <any> Hardware revision in DIS. If not set fallback to
+ "ro.board.platform".
Building and running on Linux
--
1.9.1
^ permalink raw reply related [flat|nested] 14+ messages in thread* Re: [PATCH 00/12] More customization options
2014-09-30 11:06 [PATCH 00/12] More customization options Szymon Janc
` (11 preceding siblings ...)
2014-09-30 11:06 ` [PATCH 12/12] android/README: Update with new configuration options Szymon Janc
@ 2014-10-02 13:50 ` Szymon Janc
12 siblings, 0 replies; 14+ messages in thread
From: Szymon Janc @ 2014-10-02 13:50 UTC (permalink / raw)
To: linux-bluetooth
On Tuesday 30 of September 2014 13:06:15 Szymon Janc wrote:
> Hi,
>
> Following patches extend configuration with more options required by DIS and
> DID profiles.
>
> Characteristics in DIS that would allow device tracking (serial and system id)
> now require pairing before reading.
>
> Proposed Android properties and fallbacks are described in last patch.
>
> Comments are welcome.
> Szymon Janc
>
> Szymon Janc (12):
> android: Add support for more configuration options
> android/gatt: Bring back System ID in DIS
> android/gatt: Fix serial number in DIS
> android/gatt: Require encryption for Serial and System ID in DIS
> android/bluetooth: Use configured values for DID
> lib/uuid: Add define for GATT PnP ID UUID
> android/gatt: Add support for PnP ID in DIS
> android/gatt: Use release version for software revision in DIS
> android: Remove few not needed blank lines
> android: Add support for FW and HW revision config options
> android/pts: Update PTS settings and results for DIS
> android/README: Update with new configuration options
>
> android/README | 12 ++++
> android/bluetooth.c | 25 +++------
> android/gatt.c | 108 +++++++++++++++++++++++++++++++-----
> android/hal-bluetooth.c | 25 +++++++++
> android/hal-ipc-api.txt | 5 ++
> android/hal-msg.h | 5 ++
> android/main.c | 145 ++++++++++++++++++++++++++++++++++++++++++++++--
> android/pics-dis.txt | 4 +-
> android/pixit-dis.txt | 2 +-
> android/pts-dis.txt | 8 +--
> android/utils.h | 8 +++
> lib/uuid.h | 1 +
> 12 files changed, 303 insertions(+), 45 deletions(-)
>
>
Applied.
--
Best regards,
Szymon Janc
^ permalink raw reply [flat|nested] 14+ messages in thread