aboutsummaryrefslogtreecommitdiffstats
path: root/src/chserial.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-05-03 09:51:01 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-05-03 09:51:01 +0000
commit62a6638eb544f2c3d9022bcb34cae181aa8f7aae (patch)
tree2824331e6e59e511963608603d65010d70ebf140 /src/chserial.c
parenta8df5dfb84dc37224222520ead47d4cef40ebd9f (diff)
downloadChibiOS-62a6638eb544f2c3d9022bcb34cae181aa8f7aae.tar.gz
ChibiOS-62a6638eb544f2c3d9022bcb34cae181aa8f7aae.tar.bz2
ChibiOS-62a6638eb544f2c3d9022bcb34cae181aa8f7aae.zip
Added I/O queue checks to the channels, added notes in the readme, improved the FullDuplexDriver.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@940 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'src/chserial.c')
-rw-r--r--src/chserial.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/chserial.c b/src/chserial.c
index 4dac892f8..65179689d 100644
--- a/src/chserial.c
+++ b/src/chserial.c
@@ -28,6 +28,20 @@
#if CH_USE_SERIAL_FULLDUPLEX
+/*
+ * Interface implementation, the following functions just invoke the equivalent
+ * queue-level function or macro.
+ */
+static bool_t putwouldblock(void *instance) {
+
+ return chOQIsFull(&((FullDuplexDriver *)instance)->d2.oqueue);
+}
+
+static bool_t getwouldblock(void *instance) {
+
+ return chIQIsEmpty(&((FullDuplexDriver *)instance)->d2.iqueue);
+}
+
static msg_t put(void *instance, uint8_t b, systime_t timeout) {
return chOQPutTimeout(&((FullDuplexDriver *)instance)->d2.oqueue, b, timeout);
@@ -49,7 +63,7 @@ static size_t read(void *instance, uint8_t *buffer, size_t n) {
}
static const struct FullDuplexDriverVMT vmt = {
- {put, get},
+ {putwouldblock, getwouldblock, put, get},
{write, read},
{}
};