diff --git a/client/player.c b/client/player.c
index b961c0b..45a2fc8 100644
--- a/client/player.c
+++ b/client/player.c
{} },
};
-static char *endpoint_generator(const char *text, int state)
-{
- return generic_generator(text, state, endpoints);
-}
-
static char *local_endpoint_generator(const char *text, int state)
{
int len = strlen(text);
return NULL;
}
+static char *endpoint_generator(const char *text, int state)
+{
+ char *ret;
+
+ ret = generic_generator(text, state, endpoints);
+ if (ret)
+ return ret;
+
+ return local_endpoint_generator(text, state);
+}
+
static void print_endpoint(void *data, void *user_data)
{
GDBusProxy *proxy = data;
return 0;
}
+static void print_hexdump(const char *label, struct iovec *iov)
+{
+ if (!iov)
+ return;
+
+ bt_shell_printf("%s:\n", label);
+ bt_shell_hexdump(iov->iov_base, iov->iov_len);
+}
+
+static void print_codec(const char *uuid, uint8_t codec, struct iovec *caps,
+ struct iovec *meta)
+{
+ if (!strcasecmp(uuid, A2DP_SINK_UUID) ||
+ !strcasecmp(uuid, A2DP_SOURCE_UUID)) {
+ print_a2dp_codec(codec, caps->iov_base, caps->iov_len);
+ return;
+ }
+
+ if (codec != LC3_ID) {
+ print_hexdump("Capabilities", caps);
+ print_hexdump("Metadata", meta);
+ return;
+ }
+
+ print_lc3_caps(caps->iov_base, caps->iov_len);
+
+ if (!meta)
+ return;
+
+ print_lc3_meta(meta->iov_base, meta->iov_len);
+}
+
static void print_capabilities(GDBusProxy *proxy)
{
DBusMessageIter iter, subiter;
const char *uuid;
uint8_t codec;
- uint8_t *data;
- int len;
+ struct iovec caps, meta;
if (!g_dbus_proxy_get_property(proxy, "UUID", &iter))
return;
dbus_message_iter_recurse(&iter, &subiter);
- dbus_message_iter_get_fixed_array(&subiter, &data, &len);
-
- if (!strcasecmp(uuid, A2DP_SINK_UUID) ||
- !strcasecmp(uuid, A2DP_SOURCE_UUID)) {
- print_a2dp_codec(codec, data, len);
- return;
- }
+ dbus_message_iter_get_fixed_array(&subiter, &caps.iov_base,
+ (int *)&caps.iov_len);
- if (codec != LC3_ID) {
- print_property(proxy, "Capabilities");
- return;
+ if (g_dbus_proxy_get_property(proxy, "Metadata", &iter)) {
+ dbus_message_iter_recurse(&iter, &subiter);
+ dbus_message_iter_get_fixed_array(&subiter, &meta.iov_base,
+ (int *)&meta.iov_len);
+ } else {
+ meta.iov_base = NULL;
+ meta.iov_len = 0;
}
- print_lc3_caps(data, len);
-
- if (!g_dbus_proxy_get_property(proxy, "Metadata", &iter))
- return;
-
- dbus_message_iter_recurse(&iter, &subiter);
-
- dbus_message_iter_get_fixed_array(&subiter, &data, &len);
+ print_codec(uuid, codec, &caps, &meta);
+}
- print_lc3_meta(data, len);
+static void print_local_endpoint(struct endpoint *ep)
+{
+ bt_shell_printf("Endpoint %s\n", ep->path);
+ bt_shell_printf("\tUUID %s\n", ep->uuid);
+ bt_shell_printf("\tCodec 0x%02x (%u)\n", ep->codec, ep->codec);
+ if (ep->caps)
+ print_codec(ep->uuid, ep->codec, ep->caps, ep->meta);
+ if (ep->locations)
+ bt_shell_printf("\tLocations 0x%08x (%u)\n", ep->locations,
+ ep->locations);
+ if (ep->supported_context)
+ bt_shell_printf("\tSupportedContext 0x%08x (%u)\n",
+ ep->supported_context, ep->supported_context);
+ if (ep->context)
+ bt_shell_printf("\tContext 0x%08x (%u)\n", ep->context,
+ ep->context);
}
static void cmd_show_endpoint(int argc, char *argv[])
proxy = g_dbus_proxy_lookup(endpoints, NULL, argv[1],
BLUEZ_MEDIA_ENDPOINT_INTERFACE);
if (!proxy) {
+ struct endpoint *ep;
+
+ ep = endpoint_find(argv[1]);
+ if (ep)
+ return print_local_endpoint(ep);
+
bt_shell_printf("Endpoint %s not found\n", argv[1]);
return bt_shell_noninteractive_quit(EXIT_SUCCESS);
}