X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Fser.c;h=c9c3b0f7611e13bcb97632eb3c40bdc04ac9bb7f;hb=15810459b8f5fb09b12cef6f8e4d4e64d167087b;hp=60b1b749e33712d0a6d0edd3a7d15ba1b9104d76;hpb=daa94997a9030b315892e2f2a36317398bc7b047;p=bertos.git diff --git a/bertos/drv/ser.c b/bertos/drv/ser.c index 60b1b749..c9c3b0f7 100644 --- a/bertos/drv/ser.c +++ b/bertos/drv/ser.c @@ -46,7 +46,6 @@ * \li \c CONFIG_SER_TXTIMEOUT - Enable software serial transmission timeouts * * - * \version $Id$ * \author Bernie Innocenti */ @@ -56,7 +55,7 @@ #include "ser_p.h" #include "cfg/cfg_ser.h" -#include "cfg/cfg_kern.h" +#include "cfg/cfg_proc.h" #include #include @@ -69,7 +68,7 @@ * Sanity check for config parameters required by this module. */ #if !defined(CONFIG_KERN) || ((CONFIG_KERN != 0) && CONFIG_KERN != 1) - #error CONFIG_KERNEL must be set to either 0 or 1 in cfg_kern.h + #error CONFIG_KERN must be set to either 0 or 1 in cfg_kern.h #endif #if !defined(CONFIG_SER_RXTIMEOUT) #error CONFIG_SER_TXTIMEOUT missing in cfg_ser.h @@ -241,45 +240,33 @@ static size_t ser_write(struct KFile *fd, const void *_buf, size_t size) #if CONFIG_SER_RXTIMEOUT != -1 || CONFIG_SER_TXTIMEOUT != -1 void ser_settimeouts(struct Serial *fd, mtime_t rxtimeout, mtime_t txtimeout) { - fd->rxtimeout = ms_to_ticks(rxtimeout); - fd->txtimeout = ms_to_ticks(txtimeout); + #if CONFIG_SER_RXTIMEOUT != -1 + fd->rxtimeout = ms_to_ticks(rxtimeout); + #else + (void)rxtimeout; + #endif + + #if CONFIG_SER_TXTIMEOUT != -1 + fd->txtimeout = ms_to_ticks(txtimeout); + #else + (void)txtimeout; + #endif } #endif /* CONFIG_SER_RXTIMEOUT || CONFIG_SER_TXTIMEOUT */ -#if CONFIG_SER_RXTIMEOUT != -1 + /** - * Discard input to resynchronize with remote end. - * - * Discard incoming data until the port stops receiving - * characters for at least \a delay milliseconds. - * - * \note Serial errors are reset before and after executing the purge. + * Set the baudrate for the serial port */ -void ser_resync(struct Serial *fd, mtime_t delay) -{ - mtime_t old_rxtimeout = ticks_to_ms(fd->rxtimeout); - - ser_settimeouts(fd, delay, ticks_to_ms(fd->txtimeout)); - do - { - ser_setstatus(fd, 0); - ser_getchar(fd); - } - while (!(ser_getstatus(fd) & SERRF_RXTIMEOUT)); - - /* Restore port to an usable status */ - ser_setstatus(fd, 0); - ser_settimeouts(fd, old_rxtimeout, ticks_to_ms(fd->txtimeout)); -} -#endif /* CONFIG_SER_RXTIMEOUT */ - - void ser_setbaudrate(struct Serial *fd, unsigned long rate) { fd->hw->table->setBaudrate(fd->hw, rate); } +/** + * Set the parity for the \a fd serial port + */ void ser_setparity(struct Serial *fd, int parity) { fd->hw->table->setParity(fd->hw, parity); @@ -428,6 +415,8 @@ static struct KFile *ser_reopen(struct KFile *fd) /** * Init serial driver for \a unit. + * + * Use values SER_UARTn as values for \a unit. */ void ser_init(struct Serial *fds, unsigned int unit) { @@ -494,6 +483,8 @@ static size_t spimaster_write(struct KFile *fd, const void *buf, size_t size) /** * Init SPI serial driver \a unit in master mode. * + * Use SER_SPIn for \a unit parameter. + * * This interface implements the SPI master protocol over a serial SPI * driver. This is needed because normal serial driver send/receive data * at the same time. SPI slaves like memories and other peripherals