bool peer_id_is_allocated(pm_peer_id_t peer_id) { if (peer_id < PM_PEER_ID_N_AVAILABLE_IDS) { return pm_mutex_lock_status_get(m_pi.active_peer_ids, peer_id); } return false; }
void pm_buffer_release(pm_buffer_t * p_buffer, uint8_t id) { if ( BUFFER_IS_VALID(p_buffer) && (id != BUFFER_INVALID_ID) && pm_mutex_lock_status_get(p_buffer->p_mutex, id)) { pm_mutex_unlock(p_buffer->p_mutex, id); } }
uint32_t peer_id_n_ids(void) { uint32_t n_ids = 0; for (pm_peer_id_t i = 0; i < PM_PEER_ID_N_AVAILABLE_IDS; i++) { n_ids += pm_mutex_lock_status_get(m_pi.active_peer_ids, i); } return n_ids; }
pm_peer_id_t next_id_get(pm_peer_id_t prev_peer_id, uint8_t * mutex_group) { pm_peer_id_t i = (prev_peer_id == PM_PEER_ID_INVALID) ? 0 : (prev_peer_id + 1); for (; i < PM_PEER_ID_N_AVAILABLE_IDS; i++) { if (pm_mutex_lock_status_get(mutex_group, i)) { return i; } } return PM_PEER_ID_INVALID; }
uint8_t * pm_buffer_ptr_get(pm_buffer_t * p_buffer, uint8_t id) { if (!BUFFER_IS_VALID(p_buffer)) { return ( NULL ); } if ( (id != BUFFER_INVALID_ID) && pm_mutex_lock_status_get(p_buffer->p_mutex, id) ) { return ( &p_buffer->p_memory[id*p_buffer->block_size] ); } else { return ( NULL ); } }