7
7
8
8
#include <stdint.h>
9
9
#include <string.h>
10
+ #include <limits.h>
11
+ #include <zephyr/sys/atomic.h>
10
12
#include <nrf_error.h>
11
13
#include <bluetooth/peer_manager/peer_manager_types.h>
12
14
#include <modules/peer_id.h>
13
15
16
+ #define BITS_SIZEOF (type ) (sizeof(type) * CHAR_BIT)
17
+ #define ATOMIC_BITMAP (name ) \
18
+ atomic_t name[(PM_PEER_ID_N_AVAILABLE_IDS - 1) / BITS_SIZEOF(atomic_t) + 1] \
19
+
14
20
typedef struct {
15
21
/** Bitmap designating which peer IDs are in use. */
16
- NRF_ATFLAGS_DEF_MEMBER (used_peer_ids , PM_PEER_ID_N_AVAILABLE_IDS );
22
+ ATOMIC_BITMAP (used_peer_ids );
17
23
/** Bitmap designating which peer IDs are marked for deletion. */
18
- NRF_ATFLAGS_DEF_MEMBER (deleted_peer_ids , PM_PEER_ID_N_AVAILABLE_IDS );
24
+ ATOMIC_BITMAP (deleted_peer_ids );
19
25
} pi_t ;
20
26
21
27
static pi_t m_pi = {{0 }, {0 }};
@@ -30,7 +36,7 @@ void peer_id_init(void)
30
36
internal_state_reset (& m_pi );
31
37
}
32
38
33
- static pm_peer_id_t claim (pm_peer_id_t peer_id , nrf_atflags_t * p_peer_id_flags )
39
+ static pm_peer_id_t claim (pm_peer_id_t peer_id , atomic_t * p_peer_id_flags )
34
40
{
35
41
pm_peer_id_t allocated_peer_id = PM_PEER_ID_INVALID ;
36
42
@@ -48,7 +54,7 @@ static pm_peer_id_t claim(pm_peer_id_t peer_id, nrf_atflags_t *p_peer_id_flags)
48
54
return allocated_peer_id ;
49
55
}
50
56
51
- static void release (pm_peer_id_t peer_id , nrf_atflags_t * p_peer_id_flags )
57
+ static void release (pm_peer_id_t peer_id , atomic_t * p_peer_id_flags )
52
58
{
53
59
if (peer_id < PM_PEER_ID_N_AVAILABLE_IDS ) {
54
60
nrf_atflags_clear (p_peer_id_flags , peer_id );
@@ -95,7 +101,7 @@ bool peer_id_is_deleted(pm_peer_id_t peer_id)
95
101
return false;
96
102
}
97
103
98
- pm_peer_id_t next_id_get (pm_peer_id_t prev_peer_id , nrf_atflags_t * p_peer_id_flags )
104
+ pm_peer_id_t next_id_get (pm_peer_id_t prev_peer_id , atomic_t * p_peer_id_flags )
99
105
{
100
106
pm_peer_id_t i = (prev_peer_id == PM_PEER_ID_INVALID ) ? 0 : (prev_peer_id + 1 );
101
107
0 commit comments