]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/cygmon/v2_0/misc/bsp/common/console-io.c
Initial revision
[karo-tx-redboot.git] / packages / cygmon / v2_0 / misc / bsp / common / console-io.c
1 //==========================================================================
2 //
3 //      console-io.c
4 //
5 //      BSP Console Channel Interfaces.
6 //
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
12 //
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
16 //
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20 // for more details.
21 //
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25 //
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
32 //
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
35 //
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37 // at http://sources.redhat.com/ecos/ecos-license/
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //==========================================================================
41 //#####DESCRIPTIONBEGIN####
42 //
43 // Author(s):    
44 // Contributors: gthomas
45 // Date:         1999-10-20
46 // Purpose:      BSP Console Channel Interfaces.
47 // Description:  
48 //               
49 //
50 //####DESCRIPTIONEND####
51 //
52 //=========================================================================
53
54
55 #include <stdlib.h>
56 #include <bsp/bsp.h>
57 #include "bsp_if.h"
58
59 static unsigned char __console_ungetc;
60
61 void
62 bsp_console_write(const char *p, int len)
63 {
64     struct bsp_comm_procs *com;
65
66     if ((com = bsp_shared_data->__console_procs) != NULL)
67         com->__write(com->ch_data, p, len);
68     else
69         bsp_debug_write(p, len);
70 }
71
72
73 int
74 bsp_console_read(char *p, int len)
75 {
76     struct bsp_comm_procs *com;
77
78     if (len <= 0)
79         return 0;
80
81     if ((com = bsp_shared_data->__console_procs) != NULL) {
82         if (__console_ungetc) {
83             *p = __console_ungetc;
84             __console_ungetc = 0;
85             return 1;
86         }
87         return com->__read(com->ch_data, p, len);
88     } else
89         return bsp_debug_read(p, len);
90 }
91
92 /*#define PRINTABLE_ONLY*/
93 #ifdef PRINTABLE_ONLY
94 #include <ctype.h>
95 #endif /* PRINTABLE_ONLY */
96
97 void
98 bsp_console_putc(char ch)
99 {
100     struct bsp_comm_procs *com;
101
102 #ifdef PRINTABLE_ONLY
103     if ((!isprint(ch)) && (!isspace(ch)))
104         ch = '.';
105 #endif /* PRINTABLE_ONLY */
106
107     if ((com = bsp_shared_data->__console_procs) != NULL)
108         com->__putc(com->ch_data, ch);
109     else
110         bsp_debug_putc(ch);
111 }
112
113 int
114 bsp_console_getc(void)
115 {
116     struct bsp_comm_procs *com;
117     int    ch;
118
119     if ((com = bsp_shared_data->__console_procs) != NULL) {
120         if (__console_ungetc) {
121             ch = __console_ungetc;
122             __console_ungetc = 0;
123             return ch;
124         }
125         return com->__getc(com->ch_data);
126     } else
127         return bsp_debug_getc();
128 }
129
130
131 void
132 bsp_console_ungetc(char ch)
133 {
134     if (bsp_shared_data->__console_procs != NULL)
135         __console_ungetc = (unsigned char)ch;
136     else
137         bsp_debug_ungetc(ch);
138 }
139
140