aboutsummaryrefslogtreecommitdiffstats
path: root/os
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-11-15 08:52:17 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-11-15 08:52:17 +0000
commit84cf9ce9ffa3d538b367f74c8206b8ef894d466f (patch)
treeb3931fee4361ec810cae4492fd4cca42bae6b037 /os
parent55252f65b2a444692ff1b2673b32ec1cf2b205c0 (diff)
downloadChibiOS-84cf9ce9ffa3d538b367f74c8206b8ef894d466f.tar.gz
ChibiOS-84cf9ce9ffa3d538b367f74c8206b8ef894d466f.tar.bz2
ChibiOS-84cf9ce9ffa3d538b367f74c8206b8ef894d466f.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1299 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os')
-rw-r--r--os/various/syscalls.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/os/various/syscalls.c b/os/various/syscalls.c
index 258d9c9d6..e635b1388 100644
--- a/os/various/syscalls.c
+++ b/os/various/syscalls.c
@@ -63,18 +63,31 @@
#include <sys/types.h>
#include <ch.h>
+#if defined(STDOUT_SD) || defined(STDIN_SD)
+#include <serial.h>
+#endif
/***************************************************************************/
int _read_r(struct _reent *r, int file, char * ptr, int len)
{
(void)r;
+#if defined(STDIN_SD)
+ if (!len || (file != 0)) {
+ errno = EINVAL;
+ return -1;
+ }
+ *ptr++ = chIOGet(&STDOUT_SD);
+ if (--len > 0)
+ len = chIORead(&STDOUT_SD, (uint8_t *)ptr, (size_t)len);
+ return len;
+#else
(void)file;
(void)ptr;
(void)len;
-
errno = EINVAL;
return -1;
+#endif
}
/***************************************************************************/
@@ -93,10 +106,20 @@ int _lseek_r(struct _reent *r, int file, int ptr, int dir)
int _write_r(struct _reent *r, int file, char * ptr, int len)
{
+ int n;
+
(void)r;
(void)file;
(void)ptr;
-
+#if defined(STDOUT_SD)
+ if (file != 1) {
+ errno = EINVAL;
+ return -1;
+ }
+ n = len;
+ while (n--)
+ chIOPut(&STDOUT_SD, *ptr++);
+#endif
return len;
}