Bluetooth: host: Update RFCOMM to new delayable work API Update RFCOMM to use the new delayable work API for the RTX host timer used for disconnecting and idling. Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
diff --git a/include/bluetooth/rfcomm.h b/include/bluetooth/rfcomm.h index e6ec3e4..7919862 100644 --- a/include/bluetooth/rfcomm.h +++ b/include/bluetooth/rfcomm.h
@@ -74,7 +74,7 @@ /** @brief RFCOMM DLC structure. */ struct bt_rfcomm_dlc { /* Response Timeout eXpired (RTX) timer */ - struct k_delayed_work rtx_work; + struct k_work_delayable rtx_work; /* Queue for outgoing data */ struct k_fifo tx_queue;
diff --git a/subsys/bluetooth/host/rfcomm.c b/subsys/bluetooth/host/rfcomm.c index 99ead1a..e16d6d4 100644 --- a/subsys/bluetooth/host/rfcomm.c +++ b/subsys/bluetooth/host/rfcomm.c
@@ -240,7 +240,7 @@ { BT_DBG("dlc %p", dlc); - k_delayed_work_cancel(&dlc->rtx_work); + k_work_cancel_delayable(&dlc->rtx_work); dlc->state = BT_RFCOMM_STATE_IDLE; dlc->session = NULL; @@ -378,7 +378,7 @@ session->state = BT_RFCOMM_STATE_DISCONNECTING; rfcomm_send_disc(session, 0); - k_delayed_work_submit(&session->rtx_work, RFCOMM_DISC_TIMEOUT); + k_work_reschedule(&session->rtx_work, RFCOMM_DISC_TIMEOUT); } static struct net_buf *rfcomm_make_uih_msg(struct bt_rfcomm_session *session, @@ -427,7 +427,7 @@ BT_DBG("Session %p", session); - k_delayed_work_cancel(&session->rtx_work); + k_work_cancel_delayable(&session->rtx_work); rfcomm_session_disconnected(session); session->state = BT_RFCOMM_STATE_IDLE; } @@ -456,10 +456,10 @@ dlc->rx_credit = RFCOMM_DEFAULT_CREDIT; dlc->state = BT_RFCOMM_STATE_INIT; dlc->role = role; - k_delayed_work_init(&dlc->rtx_work, rfcomm_dlc_rtx_timeout); + k_work_init_delayable(&dlc->rtx_work, rfcomm_dlc_rtx_timeout); /* Start a conn timer which includes auth as well */ - k_delayed_work_submit(&dlc->rtx_work, RFCOMM_CONN_TIMEOUT); + k_work_schedule(&dlc->rtx_work, RFCOMM_CONN_TIMEOUT); dlc->_next = session->dlcs; session->dlcs = dlc; @@ -594,7 +594,7 @@ if (dlc->state == BT_RFCOMM_STATE_DISCONNECTING) { rfcomm_send_disc(dlc->session, dlc->dlci); - k_delayed_work_submit(&dlc->rtx_work, RFCOMM_DISC_TIMEOUT); + k_work_reschedule(&dlc->rtx_work, RFCOMM_DISC_TIMEOUT); } else { rfcomm_dlc_destroy(dlc); } @@ -759,7 +759,7 @@ } /* Cancel conn timer */ - k_delayed_work_cancel(&dlc->rtx_work); + k_work_cancel_delayable(&dlc->rtx_work); k_fifo_init(&dlc->tx_queue); k_thread_create(&dlc->tx_thread, dlc->stack, @@ -828,7 +828,7 @@ case BT_RFCOMM_STATE_CONFIG: dlc->state = BT_RFCOMM_STATE_DISCONNECTING; rfcomm_send_disc(dlc->session, dlc->dlci); - k_delayed_work_submit(&dlc->rtx_work, RFCOMM_DISC_TIMEOUT); + k_work_reschedule(&dlc->rtx_work, RFCOMM_DISC_TIMEOUT); break; case BT_RFCOMM_STATE_CONNECTED: dlc->state = BT_RFCOMM_STATE_DISCONNECTING; @@ -895,7 +895,7 @@ } /* Cancel idle timer if any */ - k_delayed_work_cancel(&session->rtx_work); + k_work_cancel_delayable(&session->rtx_work); rfcomm_dlc_connected(dlc); } @@ -1011,7 +1011,7 @@ case BT_RFCOMM_STATE_DISCONNECTING: session->state = BT_RFCOMM_STATE_DISCONNECTED; /* Cancel disc timer */ - k_delayed_work_cancel(&session->rtx_work); + k_work_cancel_delayable(&session->rtx_work); err = bt_l2cap_chan_disconnect(&session->br_chan.chan); if (err < 0) { session->state = BT_RFCOMM_STATE_IDLE; @@ -1206,7 +1206,7 @@ dlc->state = BT_RFCOMM_STATE_CONFIG; rfcomm_send_pn(dlc, BT_RFCOMM_MSG_RESP_CR); /* Cancel idle timer if any */ - k_delayed_work_cancel(&session->rtx_work); + k_work_cancel_delayable(&session->rtx_work); } else { /* If its a command */ if (cr) { @@ -1257,12 +1257,12 @@ if (!session->dlcs) { /* Start a session idle timer */ - k_delayed_work_submit(&dlc->session->rtx_work, - RFCOMM_IDLE_TIMEOUT); + k_work_reschedule(&dlc->session->rtx_work, + RFCOMM_IDLE_TIMEOUT); } } else { /* Cancel idle timer */ - k_delayed_work_cancel(&session->rtx_work); + k_work_cancel_delayable(&session->rtx_work); rfcomm_send_ua(session, 0); rfcomm_session_disconnected(session); } @@ -1597,8 +1597,8 @@ session->state = BT_RFCOMM_STATE_INIT; session->role = role; session->cfc = BT_RFCOMM_CFC_UNKNOWN; - k_delayed_work_init(&session->rtx_work, - rfcomm_session_rtx_timeout); + k_work_init_delayable(&session->rtx_work, + rfcomm_session_rtx_timeout); k_sem_init(&session->fc, 0, 1); return session; @@ -1672,7 +1672,7 @@ goto fail; } /* Cancel idle timer if any */ - k_delayed_work_cancel(&session->rtx_work); + k_work_cancel_delayable(&session->rtx_work); break; default: BT_ERR("Invalid session state %d", session->state); @@ -1707,7 +1707,7 @@ net_buf_put(&dlc->tx_queue, net_buf_alloc(&dummy_pool, K_NO_WAIT)); - k_delayed_work_submit(&dlc->rtx_work, RFCOMM_DISC_TIMEOUT); + k_work_reschedule(&dlc->rtx_work, RFCOMM_DISC_TIMEOUT); return 0; }
diff --git a/subsys/bluetooth/host/rfcomm_internal.h b/subsys/bluetooth/host/rfcomm_internal.h index 0a23824..03c9818 100644 --- a/subsys/bluetooth/host/rfcomm_internal.h +++ b/subsys/bluetooth/host/rfcomm_internal.h
@@ -21,7 +21,7 @@ /* L2CAP channel this context is associated with */ struct bt_l2cap_br_chan br_chan; /* Response Timeout eXpired (RTX) timer */ - struct k_delayed_work rtx_work; + struct k_work_delayable rtx_work; /* Binary sem for aggregate fc */ struct k_sem fc; struct bt_rfcomm_dlc *dlcs;