@@ -80,6 +80,8 @@ static void micp_mic_ctlr_discover_complete(struct bt_micp_mic_ctlr *mic_ctlr, i
80
80
{
81
81
struct bt_micp_mic_ctlr_cb * listener , * next ;
82
82
83
+ atomic_clear_bit (mic_ctlr -> flags , BT_MICP_MIC_CTLR_FLAG_BUSY );
84
+
83
85
SYS_SLIST_FOR_EACH_CONTAINER_SAFE (& micp_mic_ctlr_cbs , listener , next , _node ) {
84
86
if (listener -> discover ) {
85
87
uint8_t aics_cnt = 0U ;
@@ -128,7 +130,7 @@ static uint8_t micp_mic_ctlr_read_mute_cb(struct bt_conn *conn, uint8_t err,
128
130
uint8_t cb_err = err ;
129
131
uint8_t mute_val = 0 ;
130
132
131
- mic_ctlr -> busy = false ;
133
+ atomic_clear_bit ( mic_ctlr -> flags , BT_MICP_MIC_CTLR_FLAG_BUSY ) ;
132
134
133
135
if (err > 0 ) {
134
136
LOG_DBG ("err: 0x%02X" , err );
@@ -155,7 +157,7 @@ static void micp_mic_ctlr_write_mics_mute_cb(struct bt_conn *conn, uint8_t err,
155
157
156
158
LOG_DBG ("Write %s (0x%02X)" , err ? "failed" : "successful" , err );
157
159
158
- mic_ctlr -> busy = false ;
160
+ atomic_clear_bit ( mic_ctlr -> flags , BT_MICP_MIC_CTLR_FLAG_BUSY ) ;
159
161
160
162
micp_mic_ctlr_mute_written (mic_ctlr , err , mute_val );
161
163
}
@@ -540,6 +542,11 @@ int bt_micp_mic_ctlr_discover(struct bt_conn *conn, struct bt_micp_mic_ctlr **mi
540
542
}
541
543
542
544
mic_ctlr = mic_ctlr_get_by_conn (conn );
545
+ if (atomic_test_and_set_bit (mic_ctlr -> flags , BT_MICP_MIC_CTLR_FLAG_BUSY )) {
546
+ LOG_DBG ("Instance is busy" );
547
+
548
+ return - EBUSY ;
549
+ }
543
550
544
551
(void )memset (& mic_ctlr -> discover_params , 0 ,
545
552
sizeof (mic_ctlr -> discover_params ));
@@ -589,6 +596,8 @@ int bt_micp_mic_ctlr_discover(struct bt_conn *conn, struct bt_micp_mic_ctlr **mi
589
596
err = bt_gatt_discover (conn , & mic_ctlr -> discover_params );
590
597
if (err == 0 ) {
591
598
* mic_ctlr_out = mic_ctlr ;
599
+ } else {
600
+ atomic_clear_bit (mic_ctlr -> flags , BT_MICP_MIC_CTLR_FLAG_BUSY );
592
601
}
593
602
594
603
return err ;
@@ -682,7 +691,9 @@ int bt_micp_mic_ctlr_mute_get(struct bt_micp_mic_ctlr *mic_ctlr)
682
691
if (mic_ctlr -> mute_handle == 0 ) {
683
692
LOG_DBG ("Handle not set" );
684
693
return - EINVAL ;
685
- } else if (mic_ctlr -> busy ) {
694
+ } else if (atomic_test_and_set_bit (mic_ctlr -> flags , BT_MICP_MIC_CTLR_FLAG_BUSY )) {
695
+ LOG_DBG ("Instance is busy" );
696
+
686
697
return - EBUSY ;
687
698
}
688
699
@@ -692,14 +703,14 @@ int bt_micp_mic_ctlr_mute_get(struct bt_micp_mic_ctlr *mic_ctlr)
692
703
mic_ctlr -> read_params .single .offset = 0U ;
693
704
694
705
err = bt_gatt_read (mic_ctlr -> conn , & mic_ctlr -> read_params );
695
- if (err = = 0 ) {
696
- mic_ctlr -> busy = true ;
706
+ if (err ! = 0 ) {
707
+ atomic_clear_bit ( mic_ctlr -> flags , BT_MICP_MIC_CTLR_FLAG_BUSY ) ;
697
708
}
698
709
699
710
return err ;
700
711
}
701
712
702
- int bt_micp_mic_ctlr_write_mute (struct bt_micp_mic_ctlr * mic_ctlr , bool mute )
713
+ static int bt_micp_mic_ctlr_write_mute (struct bt_micp_mic_ctlr * mic_ctlr , bool mute )
703
714
{
704
715
int err ;
705
716
@@ -711,7 +722,9 @@ int bt_micp_mic_ctlr_write_mute(struct bt_micp_mic_ctlr *mic_ctlr, bool mute)
711
722
if (mic_ctlr -> mute_handle == 0 ) {
712
723
LOG_DBG ("Handle not set" );
713
724
return - EINVAL ;
714
- } else if (mic_ctlr -> busy ) {
725
+ } else if (atomic_test_and_set_bit (mic_ctlr -> flags , BT_MICP_MIC_CTLR_FLAG_BUSY )) {
726
+ LOG_DBG ("Instance is busy" );
727
+
715
728
return - EBUSY ;
716
729
}
717
730
@@ -723,8 +736,8 @@ int bt_micp_mic_ctlr_write_mute(struct bt_micp_mic_ctlr *mic_ctlr, bool mute)
723
736
mic_ctlr -> write_params .func = micp_mic_ctlr_write_mics_mute_cb ;
724
737
725
738
err = bt_gatt_write (mic_ctlr -> conn , & mic_ctlr -> write_params );
726
- if (err = = 0 ) {
727
- mic_ctlr -> busy = true ;
739
+ if (err ! = 0 ) {
740
+ atomic_clear_bit ( mic_ctlr -> flags , BT_MICP_MIC_CTLR_FLAG_BUSY ) ;
728
741
}
729
742
730
743
return err ;
0 commit comments