diff --git a/client/advertising.c b/client/advertising.c
index 571b6e6..696621b 100644
--- a/client/advertising.c
+++ b/client/advertising.c
bool registered;
char *type;
char *local_name;
+ uint16_t local_appearance;
char **uuids;
size_t uuids_len;
struct service_data service;
bool tx_power;
bool name;
bool appearance;
-} ad;
+} ad = {
+ .local_appearance = UINT16_MAX,
+};
static void ad_release(DBusConnection *conn)
{
return TRUE;
}
+static gboolean appearance_exits(const GDBusPropertyTable *property, void *data)
+{
+ return ad.local_appearance != UINT16_MAX ? TRUE : FALSE;
+}
+
+static gboolean get_appearance(const GDBusPropertyTable *property,
+ DBusMessageIter *iter, void *user_data)
+{
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16,
+ &ad.local_appearance);
+
+ return TRUE;
+}
+
static const GDBusPropertyTable ad_props[] = {
{ "Type", "s", get_type },
{ "ServiceUUIDs", "as", get_uuids, NULL, uuids_exists },
manufacturer_data_exists },
{ "Includes", "as", get_includes, NULL, includes_exists },
{ "LocalName", "s", get_local_name, NULL, local_name_exits },
+ { "Appearance", "q", get_appearance, NULL, appearance_exits },
{ }
};
void ad_advertise_appearance(bool value)
{
ad.appearance = value;
+
+ if (!value)
+ ad.local_appearance = UINT16_MAX;
+}
+
+void ad_advertise_local_appearance(uint16_t value)
+{
+ ad.local_appearance = value;
}
diff --git a/client/advertising.h b/client/advertising.h
index 2557435..5ea57ad 100644
--- a/client/advertising.h
+++ b/client/advertising.h
void ad_advertise_name(bool value);
void ad_advertise_appearance(bool value);
void ad_advertise_local_name(const char *name);
+void ad_advertise_local_appearance(uint16_t value);
diff --git a/client/main.c b/client/main.c
index 328a5ee..6b1c73f 100644
--- a/client/main.c
+++ b/client/main.c
static void cmd_set_advertise_appearance(const char *arg)
{
+ long int value;
+ char *endptr = NULL;
+
if (arg == NULL || strlen(arg) == 0) {
rl_printf("Missing value argument\n");
return;
return;
}
- rl_printf("Invalid argument\n");
+ value = strtol(arg, &endptr, 0);
+ if (!endptr || *endptr != '\0' || value > UINT16_MAX) {
+ rl_printf("Invalid argument\n");
+ return;
+ }
+
+ ad_advertise_local_appearance(value);
}
static const struct {