int ble_uuid_extract(struct os_mbuf *om, int off, void *uuid128) { uint16_t uuid16; int remlen; int rc; remlen = OS_MBUF_PKTHDR(om)->omp_len - off; switch (remlen) { case 2: rc = os_mbuf_copydata(om, off, 2, &uuid16); BLE_HS_DBG_ASSERT_EVAL(rc == 0); uuid16 = le16toh(&uuid16); rc = ble_uuid_16_to_128(uuid16, uuid128); if (rc != 0) { return rc; } return 0; case 16: rc = os_mbuf_copydata(om, off, 16, uuid128); BLE_HS_DBG_ASSERT_EVAL(rc == 0); return 0; default: return BLE_HS_EMSGSIZE; } }
void ble_hs_unlock(void) { int rc; rc = os_mutex_release(&ble_hs_mutex); BLE_HS_DBG_ASSERT_EVAL(rc == 0 || rc == OS_NOT_STARTED); }
static void ble_hs_heartbeat_timer_reset(uint32_t ticks) { int rc; rc = os_callout_reset(&ble_hs_heartbeat_timer.cf_c, ticks); BLE_HS_DBG_ASSERT_EVAL(rc == 0); }
static void ble_hs_heartbeat_timer_reset(void) { int rc; rc = os_callout_reset(&ble_hs_heartbeat_timer.cf_c, BLE_HS_HEARTBEAT_OS_TICKS); BLE_HS_DBG_ASSERT_EVAL(rc == 0); }
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_unlock(void) { int rc; #if BLE_HS_DEBUG if (!os_started()) { BLE_HS_DBG_ASSERT(ble_hs_dbg_mutex_locked); ble_hs_dbg_mutex_locked = 0; return; } #endif rc = os_mutex_release(&ble_hs_mutex); 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_att_clt_tx_req_flags(uint16_t conn_handle, struct os_mbuf *txom, ble_hs_conn_flags_t flags_on_success) { struct ble_l2cap_chan *chan; struct ble_hs_conn *conn; uint16_t total_len; uint16_t mtu; int extra_len; int rc; BLE_HS_DBG_ASSERT_EVAL(txom->om_len >= 1); ble_att_inc_tx_stat(txom->om_data[0]); ble_hs_lock(); rc = ble_att_conn_chan_find(conn_handle, &conn, &chan); if (rc == 0) { /* Reduce the size of the transmission to fit the connection's ATT * MTU. */ total_len = OS_MBUF_PKTLEN(txom); mtu = ble_l2cap_chan_mtu(chan); extra_len = total_len - mtu; if (extra_len > 0) { os_mbuf_adj(txom, -extra_len); } rc = ble_l2cap_tx(conn, chan, txom); txom = NULL; if (rc == 0) { conn->bhc_flags |= flags_on_success; } } ble_hs_unlock(); os_mbuf_free_chain(txom); return rc; }