From ce373902ee1ce1d1264154c948c84b995327bf1d Mon Sep 17 00:00:00 2001 From: Alexandre Abadie Date: Thu, 9 Dec 2021 12:27:54 +0100 Subject: [PATCH] sys/can: migrate to ztimer --- sys/Makefile.dep | 6 ++++-- sys/can/conn/isotp.c | 28 ++++++++++++++-------------- sys/can/conn/raw.c | 22 +++++++++++----------- sys/can/device.c | 11 ++++++----- sys/can/isotp/isotp.c | 37 +++++++++++++++++++------------------ sys/include/can/device.h | 4 ++-- sys/include/can/isotp.h | 6 +++--- 7 files changed, 59 insertions(+), 55 deletions(-) diff --git a/sys/Makefile.dep b/sys/Makefile.dep index bd0c4f3a89..ce6c34e14b 100644 --- a/sys/Makefile.dep +++ b/sys/Makefile.dep @@ -399,14 +399,16 @@ ifneq (,$(filter can,$(USEMODULE))) endif ifneq (,$(filter can_isotp,$(USEMODULE))) - USEMODULE += xtimer + USEMODULE += ztimer + USEMODULE += ztimer_usec USEMODULE += gnrc_pktbuf endif ifneq (,$(filter conn_can,$(USEMODULE))) USEMODULE += can USEMODULE += can_mbox - USEMODULE += xtimer + USEMODULE += ztimer + USEMODULE += ztimer_usec endif ifneq (,$(filter entropy_source_%,$(USEMODULE))) diff --git a/sys/can/conn/isotp.c b/sys/can/conn/isotp.c index 6a0acd20dd..215281ed20 100644 --- a/sys/can/conn/isotp.c +++ b/sys/can/conn/isotp.c @@ -32,15 +32,15 @@ #define ENABLE_DEBUG 0 #include "debug.h" -#include "xtimer.h" +#include "ztimer.h" #define _TIMEOUT_TX_MSG_TYPE (0x8000) #define _TIMEOUT_RX_MSG_TYPE (0x8001) #define _CLOSE_CONN_MSG_TYPE (0x8002) #define _TIMEOUT_MSG_VALUE (0xABCDEFAB) -#ifndef CONN_CAN_ISOTP_TIMEOUT_TX_CONF -#define CONN_CAN_ISOTP_TIMEOUT_TX_CONF (10 * US_PER_SEC) +#ifndef CONN_CAN_ISOTP_TIMEOUT_TX_CONF_US +#define CONN_CAN_ISOTP_TIMEOUT_TX_CONF_US (10 * US_PER_SEC) #endif static inline int try_put_msg(conn_can_isotp_t *conn, msg_t *msg) @@ -169,10 +169,10 @@ int conn_can_isotp_send(conn_can_isotp_t *conn, const void *buf, size_t size, in return isotp_send(&conn->isotp, buf, size, flags); } else { - xtimer_t timer; + ztimer_t timer; timer.callback = _tx_conf_timeout; timer.arg = conn; - xtimer_set(&timer, CONN_CAN_ISOTP_TIMEOUT_TX_CONF); + ztimer_set(ZTIMER_USEC, &timer, CONN_CAN_ISOTP_TIMEOUT_TX_CONF_US); ret = isotp_send(&conn->isotp, buf, size, flags); @@ -192,7 +192,7 @@ int conn_can_isotp_send(conn_can_isotp_t *conn, const void *buf, size_t size, in break; } #endif - xtimer_remove(&timer); + ztimer_remove(ZTIMER_USEC, &timer); return ret; case _TIMEOUT_TX_MSG_TYPE: return -ETIMEDOUT; @@ -246,11 +246,11 @@ int conn_can_isotp_recv(conn_can_isotp_t *conn, void *buf, size_t size, uint32_t } #endif - xtimer_t timer; + ztimer_t timer; if (timeout != 0) { timer.callback = _rx_timeout; timer.arg = conn; - xtimer_set(&timer, timeout); + ztimer_set(ZTIMER_USEC, &timer, timeout); } msg_t msg; @@ -270,7 +270,7 @@ int conn_can_isotp_recv(conn_can_isotp_t *conn, void *buf, size_t size, uint32_t } #endif if (timeout != 0) { - xtimer_remove(&timer); + ztimer_remove(ZTIMER_USEC, &timer); } if (snip->size <= size) { memcpy(buf, snip->data, snip->size); @@ -296,7 +296,7 @@ int conn_can_isotp_recv(conn_can_isotp_t *conn, void *buf, size_t size, uint32_t if ((msg.content.ptr == conn) || (msg.content.ptr == conn->master)) { #endif if (timeout != 0) { - xtimer_remove(&timer); + ztimer_remove(ZTIMER_USEC, &timer); } return -ECONNABORTED; #ifdef MODULE_CONN_CAN_ISOTP_MULTI @@ -306,7 +306,7 @@ int conn_can_isotp_recv(conn_can_isotp_t *conn, void *buf, size_t size, uint32_t default: DEBUG("conn_can_isotp_recv: unexpected msg %x\n", msg.type); if (timeout != 0) { - xtimer_remove(&timer); + ztimer_remove(ZTIMER_USEC, &timer); } ret = -EINTR; return ret; @@ -383,11 +383,11 @@ int conn_can_isotp_select(conn_can_isotp_slave_t **conn, conn_can_isotp_t *maste int ret; - xtimer_t timer; + ztimer_t timer; if (timeout != 0) { timer.callback = _rx_timeout; timer.arg = master; - xtimer_set(&timer, timeout); + ztimer_set(ZTIMER_USEC, &timer, timeout); } msg_t msg; @@ -396,7 +396,7 @@ int conn_can_isotp_select(conn_can_isotp_slave_t **conn, conn_can_isotp_t *maste mbox_get(&master->mbox, &msg); if (timeout != 0) { - xtimer_remove(&timer); + ztimer_remove(ZTIMER_USEC, &timer); } switch (msg.type) { case CAN_MSG_RX_INDICATION: diff --git a/sys/can/conn/raw.c b/sys/can/conn/raw.c index 5fae7f6652..0d24f7038f 100644 --- a/sys/can/conn/raw.c +++ b/sys/can/conn/raw.c @@ -28,15 +28,15 @@ #define ENABLE_DEBUG 0 #include "debug.h" -#include "xtimer.h" +#include "ztimer.h" #define _TIMEOUT_TX_MSG_TYPE (0x8000) #define _TIMEOUT_RX_MSG_TYPE (0x8001) #define _CLOSE_CONN_MSG_TYPE (0x8002) #define _TIMEOUT_MSG_VALUE (0xABCDEFAB) -#ifndef CONN_CAN_RAW_TIMEOUT_TX_CONF -#define CONN_CAN_RAW_TIMEOUT_TX_CONF (1 * US_PER_SEC) +#ifndef CONN_CAN_ISOTP_TIMEOUT_TX_CONF_US +#define CONN_CAN_ISOTP_TIMEOUT_TX_CONF_US (1 * US_PER_SEC) #endif int conn_can_raw_create(conn_can_raw_t *conn, struct can_filter *filter, size_t count, @@ -146,14 +146,14 @@ int conn_can_raw_send(conn_can_raw_t *conn, const struct can_frame *frame, int f } } else { - xtimer_t timer; + ztimer_t timer; timer.callback = _tx_conf_timeout; timer.arg = conn; - xtimer_set(&timer, CONN_CAN_RAW_TIMEOUT_TX_CONF); + ztimer_set(ZTIMER_USEC, &timer, CONN_CAN_ISOTP_TIMEOUT_TX_CONF_US); handle = raw_can_send_mbox(conn->ifnum, frame, &conn->mbox); if (handle < 0) { - xtimer_remove(&timer); + ztimer_remove(ZTIMER_USEC, &timer); return handle; } @@ -161,7 +161,7 @@ int conn_can_raw_send(conn_can_raw_t *conn, const struct can_frame *frame, int f int timeout = 5; while (1) { mbox_get(&conn->mbox, &msg); - xtimer_remove(&timer); + ztimer_remove(ZTIMER_USEC, &timer); switch (msg.type) { case CAN_MSG_TX_ERROR: return -EIO; @@ -186,7 +186,7 @@ int conn_can_raw_send(conn_can_raw_t *conn, const struct can_frame *frame, int f if (!timeout--) { return -EINTR; } - xtimer_set(&timer, CONN_CAN_RAW_TIMEOUT_TX_CONF); + ztimer_set(ZTIMER_USEC, &timer, CONN_CAN_ISOTP_TIMEOUT_TX_CONF_US); break; } } @@ -216,12 +216,12 @@ int conn_can_raw_recv(conn_can_raw_t *conn, struct can_frame *frame, uint32_t ti assert(frame != NULL); - xtimer_t timer; + ztimer_t timer; if (timeout != 0) { timer.callback = _rx_timeout; timer.arg = conn; - xtimer_set(&timer, timeout); + ztimer_set(ZTIMER_USEC, &timer, timeout); } int ret; @@ -230,7 +230,7 @@ int conn_can_raw_recv(conn_can_raw_t *conn, struct can_frame *frame, uint32_t ti mbox_get(&conn->mbox, &msg); if (timeout != 0) { - xtimer_remove(&timer); + ztimer_remove(ZTIMER_USEC, &timer); } switch (msg.type) { case CAN_MSG_RX_INDICATION: diff --git a/sys/can/device.c b/sys/can/device.c index 6b516c25e3..55bea3d5bf 100644 --- a/sys/can/device.c +++ b/sys/can/device.c @@ -22,6 +22,7 @@ #include #include "thread.h" +#include "ztimer.h" #include "can/device.h" #include "can/common.h" #include "can/pkt.h" @@ -146,7 +147,7 @@ static int power_down(candev_dev_t *candev_dev) } #ifdef MODULE_CAN_PM - xtimer_remove(&candev_dev->pm_timer); + ztimer_remove(ZTIMER_USEC, &candev_dev->pm_timer); candev_dev->last_pm_update = 0; #endif @@ -171,15 +172,15 @@ static void pm_reset(candev_dev_t *candev_dev, uint32_t value) if (value == 0) { candev_dev->last_pm_value = 0; - xtimer_remove(&candev_dev->pm_timer); + ztimer_remove(ZTIMER_USEC, &candev_dev->pm_timer); return; } if (candev_dev->last_pm_update == 0 || - value > (candev_dev->last_pm_value - (xtimer_now_usec() - candev_dev->last_pm_update))) { + value > (candev_dev->last_pm_value - (ztimer_now(ZTIMER_USEC) - candev_dev->last_pm_update))) { candev_dev->last_pm_value = value; - candev_dev->last_pm_update = xtimer_now_usec(); - xtimer_set(&candev_dev->pm_timer, value); + candev_dev->last_pm_update = ztimer_now(ZTIMER_USEC); + ztimer_set(ZTIMER_USEC, &candev_dev->pm_timer, value); } } #endif diff --git a/sys/can/isotp/isotp.c b/sys/can/isotp/isotp.c index 070b9c21f9..497cad1e51 100644 --- a/sys/can/isotp/isotp.c +++ b/sys/can/isotp/isotp.c @@ -29,6 +29,7 @@ #include "thread.h" #include "mutex.h" #include "timex.h" +#include "ztimer.h" #include "utlist.h" #define ENABLE_DEBUG 0 @@ -196,7 +197,7 @@ static int _isotp_rcv_fc(struct isotp *isotp, struct can_frame *frame, int ae) return 0; } - xtimer_remove(&isotp->tx_timer); + ztimer_remove(ZTIMER_USEC, &isotp->tx_timer); if (frame->can_dlc < ae + FC_CONTENT_SZ) { /* Invalid length */ @@ -230,7 +231,7 @@ static int _isotp_rcv_fc(struct isotp *isotp, struct can_frame *frame, int ae) isotp->tx_wft = 0; isotp->tx.bs = 0; isotp->tx.state = ISOTP_SENDING_NEXT_CF; - xtimer_set(&isotp->tx_timer, isotp->tx_gap); + ztimer_set(ZTIMER_USEC, &isotp->tx_timer, isotp->tx_gap); break; case ISOTP_FC_WT: @@ -240,7 +241,7 @@ static int _isotp_rcv_fc(struct isotp *isotp, struct can_frame *frame, int ae) return 1; } /* BS and STmin shall be ignored */ - xtimer_set(&isotp->tx_timer, CAN_ISOTP_TIMEOUT_N_Bs); + ztimer_set(ZTIMER_USEC, &isotp->tx_timer, CAN_ISOTP_TIMEOUT_N_Bs); break; case ISOTP_FC_OVFLW: @@ -257,7 +258,7 @@ static int _isotp_rcv_fc(struct isotp *isotp, struct can_frame *frame, int ae) static int _isotp_rcv_sf(struct isotp *isotp, struct can_frame *frame, int ae) { - xtimer_remove(&isotp->rx_timer); + ztimer_remove(ZTIMER_USEC, &isotp->rx_timer); isotp->rx.state = ISOTP_IDLE; int len = (frame->data[ae] & 0x0F); @@ -341,7 +342,7 @@ static int _isotp_rcv_cf(struct isotp *isotp, struct can_frame *frame, int ae) return 1; } - xtimer_remove(&isotp->rx_timer); + ztimer_remove(ZTIMER_USEC, &isotp->rx_timer); if ((frame->data[ae] & 0x0F) != isotp->rx.sn) { DEBUG("_isotp_rcv_cf: wrong seq number %d, expected %d\n", frame->data[ae] & 0x0F, isotp->rx.sn); @@ -380,7 +381,7 @@ static int _isotp_rcv_cf(struct isotp *isotp, struct can_frame *frame, int ae) DEBUG("_isotp_rcv_cf: rxfc.bs=%" PRIx8 " rx.bs=%" PRIx8 "\n", isotp->rxfc.bs, isotp->rx.bs); if (!isotp->rxfc.bs || (++isotp->rx.bs < isotp->rxfc.bs)) { - xtimer_set(&isotp->rx_timer, CAN_ISOTP_TIMEOUT_N_Cr); + ztimer_set(ZTIMER_USEC, &isotp->rx_timer, CAN_ISOTP_TIMEOUT_N_Cr); return 0; } @@ -456,7 +457,7 @@ static int _isotp_send_fc(struct isotp *isotp, int ae, uint8_t status) DEBUG("\n"); } - xtimer_set(&isotp->rx_timer, CAN_ISOTP_TIMEOUT_N_Ar); + ztimer_set(ZTIMER_USEC, &isotp->rx_timer, CAN_ISOTP_TIMEOUT_N_Ar); isotp->rx.tx_handle = raw_can_send(isotp->entry.ifnum, &fc, isotp_pid); if (isotp->rx.tx_handle >= 0) { @@ -464,7 +465,7 @@ static int _isotp_send_fc(struct isotp *isotp, int ae, uint8_t status) } else { isotp->rx.state = ISOTP_IDLE; - xtimer_remove(&isotp->rx_timer); + ztimer_remove(ZTIMER_USEC, &isotp->rx_timer); return isotp->rx.tx_handle; } } @@ -555,7 +556,7 @@ static void _isotp_tx_timeout_task(struct isotp *isotp) static void _isotp_tx_tx_conf(struct isotp *isotp) { - xtimer_remove(&isotp->tx_timer); + ztimer_remove(ZTIMER_USEC, &isotp->tx_timer); isotp->tx.tx_handle = 0; DEBUG("_isotp_tx_tx_conf: state=%d\n", isotp->tx.state); @@ -568,7 +569,7 @@ static void _isotp_tx_tx_conf(struct isotp *isotp) case ISOTP_SENDING_FF: isotp->tx.state = ISOTP_WAIT_FC; - xtimer_set(&isotp->tx_timer, CAN_ISOTP_TIMEOUT_N_Bs); + ztimer_set(ZTIMER_USEC, &isotp->tx_timer, CAN_ISOTP_TIMEOUT_N_Bs); break; case ISOTP_SENDING_CF: @@ -582,12 +583,12 @@ static void _isotp_tx_tx_conf(struct isotp *isotp) if (isotp->txfc.bs && (isotp->tx.bs >= isotp->txfc.bs)) { /* wait for FC */ isotp->tx.state = ISOTP_WAIT_FC; - xtimer_set(&isotp->tx_timer, CAN_ISOTP_TIMEOUT_N_Bs); + ztimer_set(ZTIMER_USEC, &isotp->tx_timer, CAN_ISOTP_TIMEOUT_N_Bs); break; } isotp->tx.state = ISOTP_SENDING_NEXT_CF; - xtimer_set(&isotp->tx_timer, isotp->tx_gap); + ztimer_set(ZTIMER_USEC, &isotp->tx_timer, isotp->tx_gap); break; } } @@ -611,7 +612,7 @@ static void _isotp_rx_timeout_task(struct isotp *isotp) static void _isotp_rx_tx_conf(struct isotp *isotp) { - xtimer_remove(&isotp->rx_timer); + ztimer_remove(ZTIMER_USEC, &isotp->rx_timer); isotp->rx.tx_handle = 0; DEBUG("_isotp_rx_tx_conf: state=%d\n", isotp->rx.state); @@ -619,18 +620,18 @@ static void _isotp_rx_tx_conf(struct isotp *isotp) switch (isotp->rx.state) { case ISOTP_SENDING_FC: isotp->rx.state = ISOTP_WAIT_CF; - xtimer_set(&isotp->rx_timer, CAN_ISOTP_TIMEOUT_N_Cr); + ztimer_set(ZTIMER_USEC, &isotp->rx_timer, CAN_ISOTP_TIMEOUT_N_Cr); break; } } static int _isotp_tx_send(struct isotp *isotp, struct can_frame *frame) { - xtimer_set(&isotp->tx_timer, CAN_ISOTP_TIMEOUT_N_As); + ztimer_set(ZTIMER_USEC, &isotp->tx_timer, CAN_ISOTP_TIMEOUT_N_As); isotp->tx.tx_handle = raw_can_send(isotp->entry.ifnum, frame, isotp_pid); DEBUG("isotp_send: FF/SF/CF sent handle=%d\n", isotp->tx.tx_handle); if (isotp->tx.tx_handle < 0) { - xtimer_remove(&isotp->tx_timer); + ztimer_remove(ZTIMER_USEC, &isotp->tx_timer); isotp->tx.state = ISOTP_IDLE; return _isotp_dispatch_tx(isotp, isotp->tx.tx_handle); } @@ -868,7 +869,7 @@ int isotp_release(struct isotp *isotp) .can_mask = 0xFFFFFFFF, }; raw_can_unsubscribe_rx(isotp->entry.ifnum, &filter, isotp_pid, isotp); - xtimer_remove(&isotp->rx_timer); + ztimer_remove(ZTIMER_USEC, &isotp->rx_timer); if (isotp->rx.snip) { DEBUG("isotp_release: freeing rx buf\n"); @@ -878,7 +879,7 @@ int isotp_release(struct isotp *isotp) isotp->rx.state = ISOTP_IDLE; isotp->entry.target.pid = KERNEL_PID_UNDEF; - xtimer_remove(&isotp->tx_timer); + ztimer_remove(ZTIMER_USEC, &isotp->tx_timer); mutex_lock(&lock); LL_DELETE(isotp_list, isotp); diff --git a/sys/include/can/device.h b/sys/include/can/device.h index f0dbaa041e..be3d858f30 100644 --- a/sys/include/can/device.h +++ b/sys/include/can/device.h @@ -28,7 +28,7 @@ extern "C" { #include "sched.h" #ifdef MODULE_CAN_PM -#include "xtimer.h" +#include "ztimer.h" #endif #ifdef MODULE_CAN_TRX #include "can/can_trx.h" @@ -79,7 +79,7 @@ typedef struct candev_dev { uint32_t tx_wakeup_timeout; /**< Min timeout loaded when a frame is sent */ uint32_t last_pm_update; /**< time when the pm was updated */ uint32_t last_pm_value; /**< last pm timer value set */ - xtimer_t pm_timer; /**< timer for power management */ + ztimer_t pm_timer; /**< timer for power management */ #endif } candev_dev_t; diff --git a/sys/include/can/isotp.h b/sys/include/can/isotp.h index 35989c77e5..3e57da181c 100644 --- a/sys/include/can/isotp.h +++ b/sys/include/can/isotp.h @@ -28,7 +28,7 @@ extern "C" { #include "can/can.h" #include "can/common.h" #include "thread.h" -#include "xtimer.h" +#include "ztimer.h" #include "net/gnrc/pktbuf.h" #ifndef CAN_ISOTP_BS @@ -110,8 +110,8 @@ struct isotp { struct isotp_fc_options txfc; /**< tx flow control options (defined remotely) */ struct tpcon tx; /**< transmit state */ struct tpcon rx; /**< receive state */ - xtimer_t tx_timer; /**< timer for tx operations */ - xtimer_t rx_timer; /**< timer for rx operations */ + ztimer_t tx_timer; /**< timer for tx operations */ + ztimer_t rx_timer; /**< timer for rx operations */ can_reg_entry_t entry; /**< entry containing ifnum and upper layer msg system */ uint32_t tx_gap; /**< transmit gap from fc (in us) */ uint8_t tx_wft; /**< transmit wait counter */