Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include <stdlib.h>
00013 #include <reent.h>
00014 #include <sys/stat.h>
00015 #include "uart.h"
00016
00017
00018 _ssize_t _read_r(struct _reent *r, int file, void *ptr, size_t len)
00019 {
00020 char c;
00021 int i;
00022 unsigned char *p;
00023
00024 p = (unsigned char*)ptr;
00025
00026 for (i = 0; i < len; i++)
00027 {
00028 c = UARTReadChar();
00029
00030 *p++ = c;
00031 UARTWriteChar(c);
00032
00033 if (c == 0x0D && i <= (len - 2))
00034 {
00035 *p = 0x0A;
00036 UARTWriteChar(0x0A);
00037 return i + 2;
00038 }
00039 }
00040 return i;
00041 }
00042
00043
00044 #if 0
00045
00046 _ssize_t _read_r(
00047 struct _reent *r,
00048 int file,
00049 void *ptr,
00050 size_t len)
00051 {
00052 char c;
00053 int i;
00054 unsigned char *p;
00055
00056 p = (unsigned char*)ptr;
00057
00058 for (i = 0; i < len; i++) {
00059
00060 c = UARTReadChar();
00061 if (c == 0x0D) {
00062 *p='\0';
00063 break;
00064 }
00065 *p++ = c;
00066 UARTWriteChar(c);
00067 }
00068 return len - i;
00069 }
00070 #endif
00071
00072 _ssize_t _write_r (
00073 struct _reent *r,
00074 int file,
00075 const void *ptr,
00076 size_t len)
00077 {
00078 int i;
00079 const unsigned char *p;
00080
00081 p = (const unsigned char*) ptr;
00082
00083 for (i = 0; i < len; i++) {
00084 if (*p == '\n' ) UARTWriteChar('\r');
00085 UARTWriteChar(*p++);
00086 }
00087
00088 return len;
00089 }
00090
00091 int _close_r(
00092 struct _reent *r,
00093 int file)
00094 {
00095 return 0;
00096 }
00097
00098 _off_t _lseek_r(
00099 struct _reent *r,
00100 int file,
00101 _off_t ptr,
00102 int dir)
00103 {
00104 return (_off_t)0;
00105 }
00106
00107
00108 int _fstat_r(
00109 struct _reent *r,
00110 int file,
00111 struct stat *st)
00112 {
00113
00114 st->st_mode = S_IFCHR;
00115
00116
00117
00118
00119 return 0;
00120 }
00121
00122 int isatty(int file);
00123
00124 int isatty(int file)
00125 {
00126 return 1;
00127 }
00128
00129 #if 0
00130 static void _exit (int n) {
00131 label: goto label;
00132 }
00133 #endif
00134
00135
00136
00137
00138 extern char _end[];
00139
00140
00141
00142 static char *heap_ptr;
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156 void * _sbrk_r(
00157 struct _reent *_s_r,
00158 ptrdiff_t nbytes)
00159 {
00160 char *base;
00161
00162 if (!heap_ptr) {
00163 heap_ptr = _end;
00164 }
00165 base = heap_ptr;
00166 heap_ptr += nbytes;
00167
00168 return base;
00169 }