From 98e18edab34eafb2a2dd4568bb8ffb629a828996 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Thu, 6 Oct 2022 17:48:47 +0200 Subject: [PATCH] drivers/dose: make use of checksum module --- drivers/dose/Kconfig | 1 + drivers/dose/Makefile.dep | 1 + drivers/dose/dose.c | 20 +++----------------- 3 files changed, 5 insertions(+), 17 deletions(-) diff --git a/drivers/dose/Kconfig b/drivers/dose/Kconfig index aab666ba92e2..081cbdb2c32c 100644 --- a/drivers/dose/Kconfig +++ b/drivers/dose/Kconfig @@ -28,6 +28,7 @@ menuconfig MODULE_DOSE depends on HAS_PERIPH_GPIO depends on HAS_PERIPH_GPIO_IRQ depends on HAS_PERIPH_UART + select MODULE_CHECKSUM select MODULE_CHUNKED_RINGBUFFER select MODULE_EUI_PROVIDER select MODULE_IOLIST diff --git a/drivers/dose/Makefile.dep b/drivers/dose/Makefile.dep index 9de44766c6b4..3805ddfd3949 100644 --- a/drivers/dose/Makefile.dep +++ b/drivers/dose/Makefile.dep @@ -7,6 +7,7 @@ ifneq (,$(filter dose_watchdog,$(USEMODULE))) FEATURES_REQUIRED += periph_timer_periodic endif +USEMODULE += checksum USEMODULE += chunked_ringbuffer USEMODULE += eui_provider USEMODULE += iolist diff --git a/drivers/dose/dose.c b/drivers/dose/dose.c index 2c1e8effef92..c641f0ad5d1d 100644 --- a/drivers/dose/dose.c +++ b/drivers/dose/dose.c @@ -27,6 +27,7 @@ #include "irq.h" #include "periph/timer.h" +#include "checksum/crc16_ccitt.h" #include "net/eui_provider.h" #include "net/netdev/eth.h" #include "timex.h" @@ -38,7 +39,6 @@ #error "DOSE_TIMER_DEV needs to be set by the board" #endif -static uint16_t crc16_update(uint16_t crc, uint8_t octet); static dose_signal_t state_transit_blocked(dose_t *ctx, dose_signal_t signal); static dose_signal_t state_transit_idle(dose_t *ctx, dose_signal_t signal); static dose_signal_t state_transit_recv(dose_t *ctx, dose_signal_t signal); @@ -59,22 +59,10 @@ static int _init(netdev_t *dev); static void _poweron(dose_t *dev); static void _poweroff(dose_t *dev, dose_state_t sleep_state); -static uint16_t crc16_update(uint16_t crc, uint8_t octet) -{ - crc = (uint8_t)(crc >> 8) | (crc << 8); - crc ^= octet; - crc ^= (uint8_t)(crc & 0xff) >> 4; - crc ^= (crc << 8) << 4; - crc ^= ((crc & 0xff) << 4) << 1; - return crc; -} - static void _crc_cb(void *ctx, uint8_t *data, size_t len) { uint16_t *crc = ctx; - for (uint8_t *end = data + len; data != end; ++data) { - *crc = crc16_update(*crc, *data); - } + *crc = crc16_ccitt_false_update(*crc, data, len); } static void _init_standby(dose_t *ctx, const dose_params_t *params) @@ -571,15 +559,13 @@ static int _send(netdev_t *dev, const iolist_t *iolist) size_t n = iol->iol_len; pktlen += n; uint8_t *ptr = iol->iol_base; + crc = crc16_ccitt_false_update(crc, ptr, n); while (n--) { /* Send data octet */ if (send_data_octet(ctx, *ptr)) { goto collision; } - /* Update CRC */ - crc = crc16_update(crc, *ptr); - ptr++; } }