From: batt Date: Fri, 17 Nov 2006 17:03:58 +0000 (+0000) Subject: Implement ser_setstatus and ser_getstatus as functions to avoid race conditions. X-Git-Tag: 1.0.0~513 X-Git-Url: https://codewiz.org/gitweb?a=commitdiff_plain;h=8e67b786e5aa96e6d4628687cf230a8f64d3791a;p=bertos.git Implement ser_setstatus and ser_getstatus as functions to avoid race conditions. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@728 38d2e660-2303-0410-9eaa-f027e97ec537 --- diff --git a/drv/ser.c b/drv/ser.c index d73a2934..0d5d7ec2 100755 --- a/drv/ser.c +++ b/drv/ser.c @@ -28,6 +28,9 @@ /*#* *#* $Log$ + *#* Revision 1.32 2006/11/17 17:03:58 batt + *#* Implement ser_setstatus and ser_getstatus as functions to avoid race conditions. + *#* *#* Revision 1.31 2006/07/21 10:58:00 batt *#* Use timer_clock() instead of obsolete timer_ticks(). *#* @@ -454,6 +457,26 @@ void ser_purge(struct Serial *port) fifo_flush_locked(&port->txfifo); } +/** + * Get status of port \c port. + */ +serstatus_t ser_getstatus(struct Serial *port) +{ + serstatus_t status; + ATOMIC(status = port->status); + + return status; +} + + +/** + * Set new \c port status. + */ +void ser_setstatus(struct Serial *port, serstatus_t status) +{ + ATOMIC(port->status = status); +} + /** * Wait until all pending output is completely diff --git a/drv/ser.h b/drv/ser.h index f0226791..ae8e0b2a 100755 --- a/drv/ser.h +++ b/drv/ser.h @@ -14,6 +14,9 @@ /*#* *#* $Log$ + *#* Revision 1.33 2006/11/17 17:03:58 batt + *#* Implement ser_setstatus and ser_getstatus as functions to avoid race conditions. + *#* *#* Revision 1.32 2006/11/17 16:01:12 batt *#* Serial status MUST be volatile. *#* @@ -300,13 +303,7 @@ extern void ser_drain(struct Serial *port); extern struct Serial *ser_open(unsigned int unit); extern void ser_close(struct Serial *port); -/** - * \name Additional functions implemented as macros - * - * \{ - */ -#define ser_getstatus(h) ((h)->status) -#define ser_setstatus(h, x) ((h)->status = (x)) -/* \} */ +extern serstatus_t ser_getstatus(struct Serial *port); +extern void ser_setstatus(struct Serial *port, serstatus_t status); #endif /* DRV_SER_H */