void ble_hs_lock(void) { int rc; BLE_HS_DBG_ASSERT(!ble_hs_locked_by_cur_task()); rc = os_mutex_pend(&ble_hs_mutex, 0xffffffff); BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED); }
void ble_hs_lock(void) { int rc; BLE_HS_DBG_ASSERT(!ble_hs_locked_by_cur_task()); #if BLE_HS_DEBUG if (!os_started()) { ble_hs_dbg_mutex_locked = 1; return; } #endif rc = os_mutex_pend(&ble_hs_mutex, 0xffffffff); BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED); }
static int ble_sm_tx(uint16_t conn_handle, struct os_mbuf *txom) { struct ble_l2cap_chan *chan; struct ble_hs_conn *conn; int rc; BLE_HS_DBG_ASSERT(ble_hs_locked_by_cur_task()); STATS_INC(ble_l2cap_stats, sm_tx); ble_hs_misc_conn_chan_find_reqd(conn_handle, BLE_L2CAP_CID_SM, &conn, &chan); rc = ble_l2cap_tx(conn, chan, txom); if (rc != BLE_HS_ENONE) { return rc; } return BLE_HS_ENONE; }
/** * Retrieves one of the device's identity addresses. The device can have two * identity addresses: one public and one random. The id_addr_type argument * specifies which of these two addresses to retrieve. * * @param id_addr_type The type of identity address to retrieve. * Valid values are: * o BLE_ADDR_TYPE_PUBLIC * o BLE_ADDR_TYPE_RANDOM * @param out_id_addr On success, this is reseated to point to the * retrieved 6-byte identity address. * @param out_is_nrpa On success, the pointed-to value indicates * whether the retrieved address is a * non-resolvable private address. * * @return 0 on success; * BLE_HS_EINVAL if an invalid address type was * specified; * BLE_HS_ENOADDR if the device does not have an * identity address of the requested type; * Other BLE host core code on error. */ int ble_hs_id_addr(uint8_t id_addr_type, const uint8_t **out_id_addr, int *out_is_nrpa) { const uint8_t *id_addr; int nrpa; BLE_HS_DBG_ASSERT(ble_hs_locked_by_cur_task()); switch (id_addr_type) { case BLE_ADDR_TYPE_PUBLIC: id_addr = ble_hs_id_pub; nrpa = 0; break; case BLE_ADDR_TYPE_RANDOM: id_addr = ble_hs_id_rnd; nrpa = (ble_hs_id_rnd[5] & 0xc0) == 0; break; default: return BLE_HS_EINVAL; } if (memcmp(id_addr, ble_hs_misc_null_addr, 6) == 0) { return BLE_HS_ENOADDR; } if (out_id_addr != NULL) { *out_id_addr = id_addr; } if (out_is_nrpa != NULL) { *out_is_nrpa = nrpa; } return 0; }
int ble_hs_thread_safe(void) { return !os_started() || ble_hs_locked_by_cur_task(); }