From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> The codec under bt_ascs_config is in little endian which may differ from the native endianness when it comes to vendor specific field that are multibyte causing the following error: BAP/USR/SCC/BV-033-C [USR SNK Config Codec, VS] - setup complete BAP/USR/SCC/BV-033-C [USR SNK Config Codec, VS] - run ... bt_gatt_server:src/shared/gatt-server.c:write_cb() Write Cmd - handle: 0x0022 bt_bap:src/shared/bap.c:ascs_ase_cp_write() Codec Config bt_bap:src/shared/bap.c:ascs_config() codec 0xff phy 0x02 latency 2 bt_bap:src/shared/bap.c:ep_config() ep 0x21d6600 id 0x01 dir 0x01 handle 0x0022 len 5 test-bap: > 1b 22 00 01 01 01 09 01 ."...... test-bap: ! 1b 22 00 01 01 01 00 00 ."...... --- src/shared/bap.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/shared/bap.c b/src/shared/bap.c index 2a08f3eea7b8..ca3a9e5c3a36 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -2975,6 +2975,7 @@ static uint8_t ep_config(struct bt_bap_endpoint *ep, struct bt_bap *bap, { struct iovec cc; const struct queue_entry *e; + struct bt_bap_codec codec; DBG(bap, "ep %p id 0x%02x dir 0x%02x", ep, ep->id, ep->dir); @@ -3019,10 +3020,16 @@ static uint8_t ep_config(struct bt_bap_endpoint *ep, struct bt_bap *bap, e = NULL; } + /* Convert to native endianness before comparing */ + memset(&codec, 0, sizeof(codec)); + codec.id = req->codec.id; + codec.cid = le16_to_cpu(req->codec.cid); + codec.vid = le16_to_cpu(req->codec.vid); + for (; e; e = e->next) { struct bt_bap_pac *pac = e->data; - if (!bap_codec_equal(&req->codec, &pac->codec)) + if (!bap_codec_equal(&codec, &pac->codec)) continue; if (!ep->stream) -- 2.49.0