Implement ser_setstatus and ser_getstatus as functions to avoid race conditions.
authorbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 17 Nov 2006 17:03:58 +0000 (17:03 +0000)
committerbatt <batt@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 17 Nov 2006 17:03:58 +0000 (17:03 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@728 38d2e660-2303-0410-9eaa-f027e97ec537

drv/ser.c
drv/ser.h

index d73a29348e8b8093979d0d82d017179f3aac2111..0d5d7ec258c67a060be9b85a81e7c4fc4ec767d7 100755 (executable)
--- 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
index f0226791cb9fcb07f663ea5643c7d15e6e95dac7..ae8e0b2ae5f86b0d031f344700fbe09c22def7fa 100755 (executable)
--- 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 */