2016-04-26 08:30:27

by François Beaufort

[permalink] [raw]
Subject: [PATCH BlueZ] FIx select-attribute behaviour

This patch fixes the weird terminal behaviour when performing the
`select-attribute` command in bluetoothctl.

Francois Beaufort (1):
[client] Fix select-attribute behaviour

client/main.c | 1 -
1 file changed, 1 deletion(-)

--
2.7.0



2016-04-26 10:39:04

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH BlueZ] [client] Fix select-attribute behaviour

Hi Francois,

On Tue, Apr 26, 2016 at 11:30 AM, Francois Beaufort
<[email protected]> wrote:
> ---
> client/main.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/client/main.c b/client/main.c
> index 209cf0c..c75b558 100644
> --- a/client/main.c
> +++ b/client/main.c
> @@ -350,7 +350,6 @@ done:
> rl_set_prompt(desc ? desc : PROMPT_ON);
> printf("\r");
> rl_on_new_line();
> - rl_redisplay();
> g_free(desc);
> }
>
> --
> 2.7.0

Applied, thanks.

--
Luiz Augusto von Dentz

2016-04-26 08:30:28

by François Beaufort

[permalink] [raw]
Subject: [PATCH BlueZ] Recognize Eddystone Configuration Service UUIDs

---
monitor/uuid.c | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/monitor/uuid.c b/monitor/uuid.c
index 54adb0d..1ceaa6f 100644
--- a/monitor/uuid.c
+++ b/monitor/uuid.c
@@ -31,7 +31,7 @@

#include "uuid.h"

-static struct {
+static const struct {
uint16_t uuid;
const char *str;
} uuid16_table[] = {
@@ -540,6 +540,31 @@ static struct {
{ }
};

+static const struct {
+ const char *uuid;
+ const char *str;
+} uuid128_table[] = {
+ { "a3c87500-8ed3-4bdf-8a39-a01bebede295",
+ "Eddystone Configuration Service" },
+ { "a3c87501-8ed3-4bdf-8a39-a01bebede295", "Capabilities" },
+ { "a3c87502-8ed3-4bdf-8a39-a01bebede295", "Active Slot" },
+ { "a3c87503-8ed3-4bdf-8a39-a01bebede295",
+ "Advertising Interval" },
+ { "a3c87504-8ed3-4bdf-8a39-a01bebede295", "Radio Tx Power" },
+ { "a3c87505-8ed3-4bdf-8a39-a01bebede295",
+ "(Advanced) Advertised Tx Power" },
+ { "a3c87506-8ed3-4bdf-8a39-a01bebede295", "Lock State" },
+ { "a3c87507-8ed3-4bdf-8a39-a01bebede295", "Unlock" },
+ { "a3c87508-8ed3-4bdf-8a39-a01bebede295", "Public ECDH Key" },
+ { "a3c87509-8ed3-4bdf-8a39-a01bebede295", "EID Identity Key" },
+ { "a3c8750a-8ed3-4bdf-8a39-a01bebede295", "ADV Slot Data" },
+ { "a3c8750b-8ed3-4bdf-8a39-a01bebede295",
+ "(Advanced) Factory reset" },
+ { "a3c8750c-8ed3-4bdf-8a39-a01bebede295",
+ "(Advanced) Remain Connectable" },
+ { }
+};
+
const char *uuid16_to_str(uint16_t uuid)
{
int i;
@@ -568,6 +593,7 @@ const char *uuid128_to_str(const unsigned char *uuid)
const char *uuidstr_to_str(const char *uuid)
{
uint32_t val;
+ int i;

if (!uuid)
return NULL;
@@ -575,6 +601,11 @@ const char *uuidstr_to_str(const char *uuid)
if (strlen(uuid) != 36)
return NULL;

+ for (i = 0; uuid128_table[i].str; i++) {
+ if (strcasecmp(uuid128_table[i].uuid, uuid) == 0)
+ return uuid128_table[i].str;
+ }
+
if (strncasecmp(uuid + 8, "-0000-1000-8000-00805f9b34fb", 28))
return "Vendor specific";

--
2.7.0


2016-04-26 08:30:29

by François Beaufort

[permalink] [raw]
Subject: [PATCH BlueZ] [client] Fix select-attribute behaviour

---
client/main.c | 1 -
1 file changed, 1 deletion(-)

diff --git a/client/main.c b/client/main.c
index 209cf0c..c75b558 100644
--- a/client/main.c
+++ b/client/main.c
@@ -350,7 +350,6 @@ done:
rl_set_prompt(desc ? desc : PROMPT_ON);
printf("\r");
rl_on_new_line();
- rl_redisplay();
g_free(desc);
}

--
2.7.0


2016-04-25 09:03:10

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [PATCH BlueZ] Recognize Eddystone Configuration Service UUIDs

Hi Francois,

On Fri, Apr 22, 2016 at 5:20 PM, Francois Beaufort
<[email protected]> wrote:
> ---
> monitor/uuid.c | 33 ++++++++++++++++++++++++++++++++-
> 1 file changed, 32 insertions(+), 1 deletion(-)
>
> diff --git a/monitor/uuid.c b/monitor/uuid.c
> index 54adb0d..1ceaa6f 100644
> --- a/monitor/uuid.c
> +++ b/monitor/uuid.c
> @@ -31,7 +31,7 @@
>
> #include "uuid.h"
>
> -static struct {
> +static const struct {
> uint16_t uuid;
> const char *str;
> } uuid16_table[] = {
> @@ -540,6 +540,31 @@ static struct {
> { }
> };
>
> +static const struct {
> + const char *uuid;
> + const char *str;
> +} uuid128_table[] = {
> + { "a3c87500-8ed3-4bdf-8a39-a01bebede295",
> + "Eddystone Configuration Service" },
> + { "a3c87501-8ed3-4bdf-8a39-a01bebede295", "Capabilities" },
> + { "a3c87502-8ed3-4bdf-8a39-a01bebede295", "Active Slot" },
> + { "a3c87503-8ed3-4bdf-8a39-a01bebede295",
> + "Advertising Interval" },
> + { "a3c87504-8ed3-4bdf-8a39-a01bebede295", "Radio Tx Power" },
> + { "a3c87505-8ed3-4bdf-8a39-a01bebede295",
> + "(Advanced) Advertised Tx Power" },
> + { "a3c87506-8ed3-4bdf-8a39-a01bebede295", "Lock State" },
> + { "a3c87507-8ed3-4bdf-8a39-a01bebede295", "Unlock" },
> + { "a3c87508-8ed3-4bdf-8a39-a01bebede295", "Public ECDH Key" },
> + { "a3c87509-8ed3-4bdf-8a39-a01bebede295", "EID Identity Key" },
> + { "a3c8750a-8ed3-4bdf-8a39-a01bebede295", "ADV Slot Data" },
> + { "a3c8750b-8ed3-4bdf-8a39-a01bebede295",
> + "(Advanced) Factory reset" },
> + { "a3c8750c-8ed3-4bdf-8a39-a01bebede295",
> + "(Advanced) Remain Connectable" },
> + { }
> +};
> +
> const char *uuid16_to_str(uint16_t uuid)
> {
> int i;
> @@ -568,6 +593,7 @@ const char *uuid128_to_str(const unsigned char *uuid)
> const char *uuidstr_to_str(const char *uuid)
> {
> uint32_t val;
> + int i;
>
> if (!uuid)
> return NULL;
> @@ -575,6 +601,11 @@ const char *uuidstr_to_str(const char *uuid)
> if (strlen(uuid) != 36)
> return NULL;
>
> + for (i = 0; uuid128_table[i].str; i++) {
> + if (strcasecmp(uuid128_table[i].uuid, uuid) == 0)
> + return uuid128_table[i].str;
> + }
> +
> if (strncasecmp(uuid + 8, "-0000-1000-8000-00805f9b34fb", 28))
> return "Vendor specific";
>
> --
> 2.7.0

Applied, thanks.

--
Luiz Augusto von Dentz

2016-04-20 12:45:26

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH BlueZ] Recognize Eddystone Configuration Service UUIDs

Hi Francois,

> ---
> monitor/uuid.c | 26 ++++++++++++++++++++++++++
> 1 file changed, 26 insertions(+)
>
> diff --git a/monitor/uuid.c b/monitor/uuid.c
> index 54adb0d..6c60a67 100644
> --- a/monitor/uuid.c
> +++ b/monitor/uuid.c
> @@ -540,6 +540,26 @@ static struct {
> { }
> };
>
> +static struct {

lets make the table also const.

> + const char *uuid;
> + const char *str;
> +} uuid128_table[] = {
> + { "a3c87500-8ed3-4bdf-8a39-a01bebede295", "Eddystone Configuration Service" },
> + { "a3c87501-8ed3-4bdf-8a39-a01bebede295", "Capabilities" },
> + { "a3c87502-8ed3-4bdf-8a39-a01bebede295", "Active Slot" },
> + { "a3c87503-8ed3-4bdf-8a39-a01bebede295", "Advertising Interval" },
> + { "a3c87504-8ed3-4bdf-8a39-a01bebede295", "Radio Tx Power" },
> + { "a3c87505-8ed3-4bdf-8a39-a01bebede295", "(Advanced) Advertised Tx Power" },
> + { "a3c87506-8ed3-4bdf-8a39-a01bebede295", "Lock State" },
> + { "a3c87507-8ed3-4bdf-8a39-a01bebede295", "Unlock" },
> + { "a3c87508-8ed3-4bdf-8a39-a01bebede295", "Public ECDH Key" },
> + { "a3c87509-8ed3-4bdf-8a39-a01bebede295", "EID Identity Key" },
> + { "a3c8750a-8ed3-4bdf-8a39-a01bebede295", "ADV Slot Data" },
> + { "a3c8750b-8ed3-4bdf-8a39-a01bebede295", "(Advanced) Factory reset" },
> + { "a3c8750c-8ed3-4bdf-8a39-a01bebede295", "(Advanced) Remain Connectable" },
> + { NULL, NULL }

Just us an empty { } here.

> +};
> +

I am fine doing it this way, but since we might add more than just Eddystone, maybe this should be split in a prefix match table and then subtable for UUID-16 or UUID-32 matches. Main reason is so that we can prefix these with Eddystone or other project/company/vendor names. Other a UUID name that just says "Unlock" for example is a bit to generic and misleading.

> const char *uuid16_to_str(uint16_t uuid)
> {
> int i;
> @@ -567,6 +587,7 @@ const char *uuid128_to_str(const unsigned char *uuid)
>
> const char *uuidstr_to_str(const char *uuid)
> {
> + int i;
> uint32_t val;

Generally I prefer that i iteration variable come last.

>
> if (!uuid)
> @@ -575,6 +596,11 @@ const char *uuidstr_to_str(const char *uuid)
> if (strlen(uuid) != 36)
> return NULL;
>
> + for (i = 0; uuid128_table[i].str; i++) {
> + if (strcasecmp(uuid128_table[i].uuid, uuid) == 0)
> + return uuid128_table[i].str;
> + }
> +
> if (strncasecmp(uuid + 8, "-0000-1000-8000-00805f9b34fb", 28))
> return "Vendor specific";

Regards

Marcel