X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=drv%2Fser.c;h=5b9f2a362a69d365584da002d5f4b38de3f56a73;hb=46ac2c9347e738ee3c23109b83d522023ac4e7c9;hp=d73a29348e8b8093979d0d82d017179f3aac2111;hpb=ffd018661b93d258df699ee4e86d0f2f1cccba4e;p=bertos.git diff --git a/drv/ser.c b/drv/ser.c index d73a2934..5b9f2a36 100755 --- a/drv/ser.c +++ b/drv/ser.c @@ -28,6 +28,21 @@ /*#* *#* $Log$ + *#* Revision 1.36 2007/01/29 11:30:29 batt + *#* Reimplement ser_clearstatus as a macro. + *#* + *#* Revision 1.35 2007/01/27 20:47:12 batt + *#* Add clear status. + *#* + *#* Revision 1.34 2006/11/20 15:07:40 batt + *#* Revert unneeded locked functions. + *#* + *#* Revision 1.33 2006/11/17 18:15:55 batt + *#* Avoid race conditions. + *#* + *#* 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(). *#* @@ -193,7 +208,7 @@ int ser_putchar(int c, struct Serial *port) #if CONFIG_SER_TXTIMEOUT != -1 if (timer_clock() - start_time >= port->txtimeout) { - port->status |= SERRF_TXTIMEOUT; + ATOMIC(port->status |= SERRF_TXTIMEOUT); return EOF; } #endif /* CONFIG_SER_TXTIMEOUT */ @@ -237,19 +252,19 @@ int ser_getchar(struct Serial *port) #if CONFIG_SER_RXTIMEOUT != -1 if (timer_clock() - start_time >= port->rxtimeout) { - port->status |= SERRF_RXTIMEOUT; + ATOMIC(port->status |= SERRF_RXTIMEOUT); return EOF; } #endif /* CONFIG_SER_RXTIMEOUT */ } - while (fifo_isempty_locked(&port->rxfifo) && (port->status & SERRF_RX) == 0); + while (fifo_isempty_locked(&port->rxfifo) && (ser_getstatus(port) & SERRF_RX) == 0); } /* * Get a byte from the FIFO (avoiding sign-extension), * re-enable RTS, then return result. */ - if (port->status & SERRF_RX) + if (ser_getstatus(port) & SERRF_RX) return EOF; return (int)(unsigned char)fifo_pop_locked(&port->rxfifo); }