Skip to content

Commit 21be69f

Browse files
Thalleykartben
authored andcommitted
Bluetooth: PACS: Fix issue with PACS flags
The PACS flags were incorrectly defined without ATOMIC_DEFINE and then it treated the atomit_t as an array with the atomic functions. Signed-off-by: Emil Gydesen <[email protected]>
1 parent 057de45 commit 21be69f

File tree

1 file changed

+39
-39
lines changed

1 file changed

+39
-39
lines changed

subsys/bluetooth/audio/pacs.c

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ struct pacs_client {
102102
#endif /* CONFIG_BT_PAC_SRC */
103103

104104
/* Pending notification flags */
105-
ATOMIC_DEFINE(flags, FLAG_NUM);
105+
ATOMIC_DEFINE(flags, PACS_FLAG_NUM);
106106
};
107107

108108
static struct pacs {
109-
atomic_t flags;
109+
ATOMIC_DEFINE(flags, BT_ADV_NUM_FLAGS);
110110

111111
struct pacs_client clients[CONFIG_BT_MAX_PAIRED];
112112
} pacs;
@@ -242,15 +242,15 @@ static enum bt_audio_context pacs_get_available_contexts_for_conn(struct bt_conn
242242
switch (dir) {
243243
case BT_AUDIO_DIR_SINK:
244244
#if defined(CONFIG_BT_PAC_SNK)
245-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SNK_PAC) &&
245+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SNK_PAC) &&
246246
client->snk_available_contexts != NULL) {
247247
return POINTER_TO_UINT(client->snk_available_contexts);
248248
}
249249
#endif /* CONFIG_BT_PAC_SNK */
250250
break;
251251
case BT_AUDIO_DIR_SOURCE:
252252
#if defined(CONFIG_BT_PAC_SRC)
253-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SRC_PAC) &&
253+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SRC_PAC) &&
254254
client->src_available_contexts != NULL) {
255255
return POINTER_TO_UINT(client->src_available_contexts);
256256
}
@@ -291,13 +291,13 @@ static uint16_t supported_context_get(enum bt_audio_dir dir)
291291
switch (dir) {
292292
#if defined(CONFIG_BT_PAC_SNK)
293293
case BT_AUDIO_DIR_SINK:
294-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SNK_PAC)) {
294+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SNK_PAC)) {
295295
return snk_supported_contexts | BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED;
296296
}
297297
#endif /* CONFIG_BT_PAC_SNK */
298298
#if defined(CONFIG_BT_PAC_SRC)
299299
case BT_AUDIO_DIR_SOURCE:
300-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SRC_PAC)) {
300+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SRC_PAC)) {
301301
return src_supported_contexts | BT_AUDIO_CONTEXT_TYPE_UNSPECIFIED;
302302
}
303303
#endif /* CONFIG_BT_PAC_SRC */
@@ -437,7 +437,7 @@ static void snk_loc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value)
437437

438438
static void set_snk_location(enum bt_audio_location audio_location)
439439
{
440-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SNK_LOC)) {
440+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SNK_LOC)) {
441441
if (audio_location == pacs_snk_location) {
442442
return;
443443
}
@@ -544,7 +544,7 @@ static void src_loc_cfg_changed(const struct bt_gatt_attr *attr, uint16_t value)
544544

545545
static void set_src_location(enum bt_audio_location audio_location)
546546
{
547-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SRC_LOC)) {
547+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SRC_LOC)) {
548548
if (audio_location == pacs_src_location) {
549549
return;
550550
}
@@ -597,14 +597,14 @@ static sys_slist_t *pacs_get_pac(enum bt_audio_dir dir)
597597
switch (dir) {
598598
#if defined(CONFIG_BT_PAC_SNK)
599599
case BT_AUDIO_DIR_SINK:
600-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SNK_PAC)) {
600+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SNK_PAC)) {
601601
return &snk_pac_list;
602602
}
603603
return NULL;
604604
#endif /* CONFIG_BT_PAC_SNK */
605605
#if defined(CONFIG_BT_PAC_SRC)
606606
case BT_AUDIO_DIR_SOURCE:
607-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SRC_PAC)) {
607+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SRC_PAC)) {
608608
return &src_pac_list;
609609
}
610610
return NULL;
@@ -786,24 +786,24 @@ int bt_pacs_register(const struct bt_bap_pacs_register_param *param)
786786
{
787787
int err = 0;
788788

789-
if (atomic_test_and_set_bit(&pacs.flags, PACS_FLAG_REGISTERED)) {
789+
if (atomic_test_and_set_bit(pacs.flags, PACS_FLAG_REGISTERED)) {
790790
LOG_DBG("PACS already registered");
791791

792792
return -EALREADY;
793793
}
794794

795795
/* Save registration param so we can guard functions accordingly */
796796
#if defined(CONFIG_BT_PAC_SNK)
797-
atomic_set_bit_to(&pacs.flags, PACS_FLAG_SNK_PAC, param->snk_pac);
797+
atomic_set_bit_to(pacs.flags, PACS_FLAG_SNK_PAC, param->snk_pac);
798798
#endif /* CONFIG_BT_PAC_SNK */
799799
#if defined(CONFIG_BT_PAC_SNK_LOC)
800-
atomic_set_bit_to(&pacs.flags, PACS_FLAG_SNK_LOC, param->snk_loc);
800+
atomic_set_bit_to(pacs.flags, PACS_FLAG_SNK_LOC, param->snk_loc);
801801
#endif /* CONFIG_BT_PAC_SNK_LOC */
802802
#if defined(CONFIG_BT_PAC_SRC)
803-
atomic_set_bit_to(&pacs.flags, PACS_FLAG_SRC_PAC, param->src_pac);
803+
atomic_set_bit_to(pacs.flags, PACS_FLAG_SRC_PAC, param->src_pac);
804804
#endif /* CONFIG_BT_PAC_SRC */
805805
#if defined(CONFIG_BT_PAC_SRC_LOC)
806-
atomic_set_bit_to(&pacs.flags, PACS_FLAG_SRC_LOC, param->src_loc);
806+
atomic_set_bit_to(pacs.flags, PACS_FLAG_SRC_LOC, param->src_loc);
807807
#endif /* CONFIG_BT_PAC_SRC_LOC */
808808

809809
/* Remove characteristics if necessary */
@@ -812,7 +812,7 @@ int bt_pacs_register(const struct bt_bap_pacs_register_param *param)
812812
err = bt_gatt_service_register(&pacs_svc);
813813
if (err != 0) {
814814
LOG_DBG("Failed to register ASCS in gatt DB");
815-
atomic_clear_bit(&pacs.flags, PACS_FLAG_REGISTERED);
815+
atomic_clear_bit(pacs.flags, PACS_FLAG_REGISTERED);
816816

817817
return err;
818818
}
@@ -825,15 +825,15 @@ int bt_pacs_unregister(void)
825825
int err;
826826
struct bt_gatt_attr _pacs_attrs[] = BT_PACS_SERVICE_DEFINITION();
827827

828-
if (!atomic_test_bit(&pacs.flags, PACS_FLAG_REGISTERED)) {
828+
if (!atomic_test_bit(pacs.flags, PACS_FLAG_REGISTERED)) {
829829
LOG_DBG("No pacs instance registered");
830830

831831
return -EALREADY;
832832
}
833833

834-
if (atomic_test_and_set_bit(&pacs.flags, PACS_FLAG_SVC_CHANGING)) {
834+
if (atomic_test_and_set_bit(pacs.flags, PACS_FLAG_SVC_CHANGING)) {
835835
LOG_DBG("Service change already in progress");
836-
atomic_clear_bit(&pacs.flags, PACS_FLAG_SVC_CHANGING);
836+
atomic_clear_bit(pacs.flags, PACS_FLAG_SVC_CHANGING);
837837

838838
return -EBUSY;
839839
}
@@ -845,16 +845,16 @@ int bt_pacs_unregister(void)
845845
*/
846846
if (err != 0) {
847847
LOG_DBG("Failed to unregister PACS");
848-
atomic_clear_bit(&pacs.flags, PACS_FLAG_SVC_CHANGING);
848+
atomic_clear_bit(pacs.flags, PACS_FLAG_SVC_CHANGING);
849849

850850
return err;
851851
}
852852

853853
memcpy(pacs_svc.attrs, &_pacs_attrs, sizeof(struct bt_gatt_attr));
854854
pacs_svc.attr_count = ARRAY_SIZE(pacs_attrs);
855855

856-
atomic_clear_bit(&pacs.flags, PACS_FLAG_REGISTERED);
857-
atomic_clear_bit(&pacs.flags, PACS_FLAG_SVC_CHANGING);
856+
atomic_clear_bit(pacs.flags, PACS_FLAG_REGISTERED);
857+
atomic_clear_bit(pacs.flags, PACS_FLAG_SVC_CHANGING);
858858

859859
return err;
860860
}
@@ -983,7 +983,7 @@ static int supported_contexts_notify(struct bt_conn *conn)
983983
void pacs_gatt_notify_complete_cb(struct bt_conn *conn, void *user_data)
984984
{
985985
/* Notification done, clear bit and reschedule work */
986-
atomic_clear_bit(&pacs.flags, PACS_FLAG_NOTIFY_RDY);
986+
atomic_clear_bit(pacs.flags, PACS_FLAG_NOTIFY_RDY);
987987
k_work_submit(&deferred_nfy_work);
988988
}
989989

@@ -1004,16 +1004,16 @@ static int pacs_gatt_notify(struct bt_conn *conn,
10041004
params.func = pacs_gatt_notify_complete_cb;
10051005

10061006
/* Mark notification in progress */
1007-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SVC_CHANGING) ||
1008-
!atomic_test_bit(&pacs.flags, PACS_FLAG_REGISTERED)) {
1007+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SVC_CHANGING) ||
1008+
!atomic_test_bit(pacs.flags, PACS_FLAG_REGISTERED)) {
10091009
return 0;
10101010
}
10111011

1012-
atomic_set_bit(&pacs.flags, PACS_FLAG_NOTIFY_RDY);
1012+
atomic_set_bit(pacs.flags, PACS_FLAG_NOTIFY_RDY);
10131013

10141014
err = bt_gatt_notify_cb(conn, &params);
10151015
if (err != 0) {
1016-
atomic_clear_bit(&pacs.flags, PACS_FLAG_NOTIFY_RDY);
1016+
atomic_clear_bit(pacs.flags, PACS_FLAG_NOTIFY_RDY);
10171017
}
10181018

10191019
if (err && err != -ENOTCONN) {
@@ -1048,7 +1048,7 @@ static void notify_cb(struct bt_conn *conn, void *data)
10481048
}
10491049

10501050
/* Check if we have unverified notifications in progress */
1051-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_NOTIFY_RDY)) {
1051+
if (atomic_test_bit(pacs.flags, PACS_FLAG_NOTIFY_RDY)) {
10521052
return;
10531053
}
10541054

@@ -1199,7 +1199,7 @@ static void pacs_disconnected(struct bt_conn *conn, uint8_t reason)
11991199
}
12001200

12011201
#if defined(CONFIG_BT_PAC_SNK)
1202-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SNK_PAC) &&
1202+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SNK_PAC) &&
12031203
client->snk_available_contexts != NULL) {
12041204
uint16_t old = POINTER_TO_UINT(client->snk_available_contexts);
12051205
uint16_t new;
@@ -1212,7 +1212,7 @@ static void pacs_disconnected(struct bt_conn *conn, uint8_t reason)
12121212
#endif /* CONFIG_BT_PAC_SNK */
12131213

12141214
#if defined(CONFIG_BT_PAC_SRC)
1215-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SRC_PAC) &&
1215+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SRC_PAC) &&
12161216
client->src_available_contexts != NULL) {
12171217
uint16_t old = POINTER_TO_UINT(client->src_available_contexts);
12181218
uint16_t new;
@@ -1372,18 +1372,18 @@ int bt_pacs_set_location(enum bt_audio_dir dir, enum bt_audio_location location)
13721372

13731373
int bt_pacs_set_available_contexts(enum bt_audio_dir dir, enum bt_audio_context contexts)
13741374
{
1375-
if (!atomic_test_bit(&pacs.flags, PACS_FLAG_REGISTERED)) {
1375+
if (!atomic_test_bit(pacs.flags, PACS_FLAG_REGISTERED)) {
13761376
return -EINVAL;
13771377
}
13781378
switch (dir) {
13791379
case BT_AUDIO_DIR_SINK:
1380-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SNK_PAC)) {
1380+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SNK_PAC)) {
13811381
return set_available_contexts(contexts, &snk_available_contexts,
13821382
supported_context_get(dir));
13831383
}
13841384
return -EINVAL;
13851385
case BT_AUDIO_DIR_SOURCE:
1386-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SRC_PAC)) {
1386+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SRC_PAC)) {
13871387
return set_available_contexts(contexts, &src_available_contexts,
13881388
supported_context_get(dir));
13891389
}
@@ -1415,7 +1415,7 @@ int bt_pacs_conn_set_available_contexts_for_conn(struct bt_conn *conn, enum bt_a
14151415
switch (dir) {
14161416
#if defined(CONFIG_BT_PAC_SNK)
14171417
case BT_AUDIO_DIR_SINK:
1418-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SNK_PAC)) {
1418+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SNK_PAC)) {
14191419
if (contexts != NULL) {
14201420
client->snk_available_contexts = UINT_TO_POINTER(*contexts);
14211421
} else {
@@ -1428,7 +1428,7 @@ int bt_pacs_conn_set_available_contexts_for_conn(struct bt_conn *conn, enum bt_a
14281428
#endif /* CONFIG_BT_PAC_SNK */
14291429
#if defined(CONFIG_BT_PAC_SRC)
14301430
case BT_AUDIO_DIR_SOURCE:
1431-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SRC_PAC)) {
1431+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SRC_PAC)) {
14321432
if (contexts != NULL) {
14331433
client->src_available_contexts = UINT_TO_POINTER(*contexts);
14341434
} else {
@@ -1466,7 +1466,7 @@ int bt_pacs_set_supported_contexts(enum bt_audio_dir dir, enum bt_audio_context
14661466
switch (dir) {
14671467
case BT_AUDIO_DIR_SINK:
14681468
#if defined(CONFIG_BT_PAC_SNK)
1469-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SNK_PAC)) {
1469+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SNK_PAC)) {
14701470
supported_contexts = &snk_supported_contexts;
14711471
available_contexts = &snk_available_contexts;
14721472
break;
@@ -1476,7 +1476,7 @@ int bt_pacs_set_supported_contexts(enum bt_audio_dir dir, enum bt_audio_context
14761476
return -ENOTSUP;
14771477
case BT_AUDIO_DIR_SOURCE:
14781478
#if defined(CONFIG_BT_PAC_SRC)
1479-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SRC_PAC)) {
1479+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SRC_PAC)) {
14801480
supported_contexts = &src_supported_contexts;
14811481
available_contexts = &src_available_contexts;
14821482
break;
@@ -1499,12 +1499,12 @@ enum bt_audio_context bt_pacs_get_available_contexts(enum bt_audio_dir dir)
14991499
{
15001500
switch (dir) {
15011501
case BT_AUDIO_DIR_SINK:
1502-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SNK_PAC)) {
1502+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SNK_PAC)) {
15031503
return snk_available_contexts;
15041504
}
15051505
return -EINVAL;
15061506
case BT_AUDIO_DIR_SOURCE:
1507-
if (atomic_test_bit(&pacs.flags, PACS_FLAG_SRC_PAC)) {
1507+
if (atomic_test_bit(pacs.flags, PACS_FLAG_SRC_PAC)) {
15081508
return src_available_contexts;
15091509
}
15101510
return -EINVAL;

0 commit comments

Comments
 (0)