aboutsummaryrefslogtreecommitdiffstats
path: root/src/chserial.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-05-02 17:18:56 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-05-02 17:18:56 +0000
commitae4f143cf638046e3e17c20b69a8551e3ce96de4 (patch)
treea057d3296cc6e9e7202b433b91a5537821bf223c /src/chserial.c
parent81507dcbe7336d523b42afeeb422bd9c983dbf6f (diff)
downloadChibiOS-ae4f143cf638046e3e17c20b69a8551e3ce96de4.tar.gz
ChibiOS-ae4f143cf638046e3e17c20b69a8551e3ce96de4.tar.bz2
ChibiOS-ae4f143cf638046e3e17c20b69a8551e3ce96de4.zip
More madness.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@937 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'src/chserial.c')
-rw-r--r--src/chserial.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/chserial.c b/src/chserial.c
index b93a9973a..49046ee0a 100644
--- a/src/chserial.c
+++ b/src/chserial.c
@@ -27,6 +27,34 @@
#include <ch.h>
#if CH_USE_SERIAL_FULLDUPLEX
+
+static msg_t put(void *instance, uint8_t b, systime_t timeout) {
+
+ return chOQPutTimeout(&((FullDuplexDriver *)instance)->d3.oqueue, b, timeout);
+}
+
+static msg_t get(void *instance, systime_t timeout) {
+
+ return chIQGetTimeout(&((FullDuplexDriver *)instance)->d3.iqueue, timeout);
+}
+
+static size_t write(void *instance, uint8_t *buffer, size_t n) {
+
+ return chOQWrite(&((FullDuplexDriver *)instance)->d3.oqueue, buffer, n);
+}
+
+static size_t read(void *instance, uint8_t *buffer, size_t n) {
+
+ return chIQRead(&((FullDuplexDriver *)instance)->d3.iqueue, buffer, n);
+}
+
+static const struct FullDuplexDriverVMT vmt = {
+ {put, get},
+ {write, read},
+ {},
+ {}
+};
+
/**
* @brief Initializes a generic full duplex driver.
* @details The HW dependent part of the initialization has to be performed
@@ -51,6 +79,7 @@ void chFDDInit(FullDuplexDriver *sd,
chDbgCheck((sd != NULL) && (ib != NULL) && (ob != NULL) &&
(isize > 0) && (osize > 0), "chFDDInit");
+ sd->vmt = &vmt;
chEvtInit(&sd->d1.ievent);
chEvtInit(&sd->d1.oevent);
chEvtInit(&sd->d2.sevent);