From 335c6bc516f2e456e95f6abbd4b247627f0ebd92 Mon Sep 17 00:00:00 2001 From: Juan Carrano Date: Thu, 1 Nov 2018 18:02:39 +0100 Subject: [PATCH] sys/stdio_uart: do not cast function pointer. There was a function pointer cast in stdio_uart. The warning was being explicitly supressed in the module's makefile. This commit removes the suppression and fixes the warning by providing a wrapper function. The wrapper was already defined in the AT driver, as part of a fix for a similar bug there, so the definition was moved to the isrpipe module, the logic being that using isrpipe in conjunction with a periph uart is a common enough use-case. --- drivers/at/at.c | 7 +------ sys/include/isrpipe.h | 7 +++++++ sys/isrpipe/isrpipe.c | 6 ++++++ sys/stdio_uart/Makefile | 3 --- sys/stdio_uart/stdio_uart.c | 2 +- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/drivers/at/at.c b/drivers/at/at.c index d02a095cbae1..a7b753aa221a 100644 --- a/drivers/at/at.c +++ b/drivers/at/at.c @@ -22,17 +22,12 @@ #define AT_PRINT_INCOMING (0) #endif -static void _isrpipe_write_one_wrapper(void *_isrpipe, uint8_t data) -{ - isrpipe_write_one(_isrpipe, (char)data); -} - int at_dev_init(at_dev_t *dev, uart_t uart, uint32_t baudrate, char *buf, size_t bufsize) { dev->uart = uart; isrpipe_init(&dev->isrpipe, buf, bufsize); - return uart_init(uart, baudrate, _isrpipe_write_one_wrapper, + return uart_init(uart, baudrate, isrpipe_write_uartcb, &dev->isrpipe); } diff --git a/sys/include/isrpipe.h b/sys/include/isrpipe.h index 356eef82cc91..88d783c23e76 100644 --- a/sys/include/isrpipe.h +++ b/sys/include/isrpipe.h @@ -64,6 +64,13 @@ void isrpipe_init(isrpipe_t *isrpipe, char *buf, size_t bufsize); */ int isrpipe_write_one(isrpipe_t *isrpipe, char c); +/** + * @brief Wrapper around isrpipe_write_one() to make it compatible with uart_rx_cb_t. + * + * The parameters are the same as isrpipe_write_one(). + */ +void isrpipe_write_uartcb(void *_isrpipe, uint8_t data); + /** * @brief Read data from isrpipe (blocking) * diff --git a/sys/isrpipe/isrpipe.c b/sys/isrpipe/isrpipe.c index 2a9cf9e2f355..df1272101be4 100644 --- a/sys/isrpipe/isrpipe.c +++ b/sys/isrpipe/isrpipe.c @@ -17,6 +17,7 @@ * @} */ +#include #include "isrpipe.h" void isrpipe_init(isrpipe_t *isrpipe, char *buf, size_t bufsize) @@ -37,6 +38,11 @@ int isrpipe_write_one(isrpipe_t *isrpipe, char c) return res; } +void isrpipe_write_uartcb(void *_isrpipe, uint8_t data) +{ + isrpipe_write_one(_isrpipe, (char)data); +} + int isrpipe_read(isrpipe_t *isrpipe, char *buffer, size_t count) { int res; diff --git a/sys/stdio_uart/Makefile b/sys/stdio_uart/Makefile index 7f3b72f4a69c..48422e909a47 100644 --- a/sys/stdio_uart/Makefile +++ b/sys/stdio_uart/Makefile @@ -1,4 +1 @@ -ifeq (gnu, $(TOOLCHAIN)) - CFLAGS += -Wno-cast-function-type -endif include $(RIOTBASE)/Makefile.base diff --git a/sys/stdio_uart/stdio_uart.c b/sys/stdio_uart/stdio_uart.c index 91c9ff91c61d..9caab960a6bc 100644 --- a/sys/stdio_uart/stdio_uart.c +++ b/sys/stdio_uart/stdio_uart.c @@ -58,7 +58,7 @@ void stdio_init(void) void *arg; #ifdef MODULE_STDIO_UART_RX - cb = (uart_rx_cb_t) isrpipe_write_one; + cb = isrpipe_write_uartcb; arg = &stdio_uart_isrpipe; #else #ifdef USE_ETHOS_FOR_STDIO