mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-24 05:53:49 +01:00
drivers/dose: make use of checksum module
This commit is contained in:
parent
e313c56e94
commit
98e18edab3
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 @@ send:
|
||||
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++;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user