summaryrefslogtreecommitdiff
path: root/profiles
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2023-01-23 15:56:49 -0800
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2023-01-31 17:07:31 -0800
commitdcbdf5e67f3e4cba29f2fb9f0e5fcdad06540738 (patch)
tree2b53effd91b4521ce9ff44d7e066e058125eedaf /profiles
parentd611a40ffc7bdc6b2e727550369a5aee7ffdb4cf (diff)
downloadbluez-dcbdf5e67f3e4cba29f2fb9f0e5fcdad06540738.tar.gz
media: Rework support of Vendor to use uint32_t as type
This reworks the handlings of Vendor property to use a single uint32_t.
Diffstat (limited to 'profiles')
-rw-r--r--profiles/audio/media.c37
1 files changed, 17 insertions, 20 deletions
diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index 76a378e69..889cd59b0 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -1379,6 +1379,11 @@ media_endpoint_create(struct media_adapter *adapter,
return endpoint;
}
+struct vendor {
+ uint16_t cid;
+ uint16_t vid;
+} __packed;
+
static int parse_properties(DBusMessageIter *props, const char **uuid,
gboolean *delay_reporting, uint8_t *codec,
uint16_t *cid, uint16_t *vid,
@@ -1388,6 +1393,7 @@ static int parse_properties(DBusMessageIter *props, const char **uuid,
{
gboolean has_uuid = FALSE;
gboolean has_codec = FALSE;
+ struct vendor vendor;
while (dbus_message_iter_get_arg_type(props) == DBUS_TYPE_DICT_ENTRY) {
const char *key;
@@ -1412,14 +1418,11 @@ static int parse_properties(DBusMessageIter *props, const char **uuid,
dbus_message_iter_get_basic(&value, codec);
has_codec = TRUE;
} else if (strcasecmp(key, "Vendor") == 0) {
- if (var != DBUS_TYPE_UINT16)
- return -EINVAL;
- dbus_message_iter_get_basic(&value, cid);
- dbus_message_iter_next(&value);
- var = dbus_message_iter_get_arg_type(&value);
- if (var != DBUS_TYPE_UINT16)
+ if (var != DBUS_TYPE_UINT32)
return -EINVAL;
- dbus_message_iter_get_basic(&value, vid);
+ dbus_message_iter_get_basic(&value, &vendor);
+ *cid = vendor.cid;
+ *vid = vendor.vid;
} else if (strcasecmp(key, "DelayReporting") == 0) {
if (var != DBUS_TYPE_BOOLEAN)
return -EINVAL;
@@ -2543,8 +2546,7 @@ static void app_register_endpoint(void *data, void *user_data)
const char *uuid;
gboolean delay_reporting = FALSE;
uint8_t codec;
- uint16_t cid = 0;
- uint16_t vid = 0;
+ struct vendor vendor;
struct bt_bap_pac_qos qos;
uint8_t *capabilities = NULL;
int size = 0;
@@ -2577,16 +2579,10 @@ static void app_register_endpoint(void *data, void *user_data)
dbus_message_iter_get_basic(&iter, &codec);
if (g_dbus_proxy_get_property(proxy, "Vendor", &iter)) {
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT16)
- goto fail;
-
- dbus_message_iter_get_basic(&iter, &cid);
-
- dbus_message_iter_next(&iter);
- if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT16)
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_UINT32)
goto fail;
- dbus_message_iter_get_basic(&iter, &vid);
+ dbus_message_iter_get_basic(&iter, &vendor);
}
/* DelayReporting and Capabilities are considered optional */
@@ -2666,9 +2662,10 @@ static void app_register_endpoint(void *data, void *user_data)
}
endpoint = media_endpoint_create(app->adapter, app->sender, path, uuid,
- delay_reporting, codec, cid,
- vid, &qos, capabilities,
- size, metadata, metadata_size,
+ delay_reporting, codec,
+ vendor.cid, vendor.vid, &qos,
+ capabilities, size,
+ metadata, metadata_size,
&app->err);
if (!endpoint) {
error("Unable to register endpoint %s:%s: %s", app->sender,