source: rtems/bsps/no_cpu/no_bsp/console/console.c @ 1efa1c8

5
Last change on this file since 1efa1c8 was d7d66d7, checked in by Sebastian Huber <sebastian.huber@…>, on 04/19/18 at 04:28:01

bsps: Move console drivers to bsps

This patch is a part of the BSP source reorganization.

Update #3285.

  • Property mode set to 100644
File size: 3.8 KB
Line 
1/*
2 *  This file contains the template for a console IO package.
3 *
4 *  COPYRIGHT (c) 1989-1999.
5 *  On-Line Applications Research Corporation (OAR).
6 *
7 *  The license and distribution terms for this file may be
8 *  found in the file LICENSE in this distribution or at
9 *  http://www.rtems.org/license/LICENSE.
10 */
11
12#define NO_BSP_INIT
13
14#include <bsp.h>
15#include <rtems/libio.h>
16
17/*  console_initialize
18 *
19 *  This routine initializes the console IO driver.
20 *
21 *  Input parameters: NONE
22 *
23 *  Output parameters:  NONE
24 *
25 *  Return values:
26 */
27
28rtems_device_driver console_initialize(
29  rtems_device_major_number  major,
30  rtems_device_minor_number  minor,
31  void                      *arg
32)
33{
34  rtems_status_code status;
35
36  status = rtems_io_register_name(
37    "/dev/console",
38    major,
39    (rtems_device_minor_number) 0
40  );
41
42  if (status != RTEMS_SUCCESSFUL)
43    rtems_fatal_error_occurred(status);
44
45  return RTEMS_SUCCESSFUL;
46}
47
48/*  is_character_ready
49 *
50 *  This routine returns TRUE if a character is available.
51 *
52 *  Input parameters: NONE
53 *
54 *  Output parameters:  NONE
55 *
56 *  Return values:
57 */
58
59bool is_character_ready(
60  char *ch
61)
62{
63  *ch = '\0';   /* return NULL for no particular reason */
64  return true;
65}
66
67/*  inbyte
68 *
69 *  This routine reads a character from the SOURCE.
70 *
71 *  Input parameters: NONE
72 *
73 *  Output parameters:  NONE
74 *
75 *  Return values:
76 *    character read from SOURCE
77 */
78
79char inbyte( void )
80{
81  /*
82   *  If polling, wait until a character is available.
83   */
84
85  return '\0';
86}
87
88/*  outbyte
89 *
90 *  This routine transmits a character out the SOURCE.  It may support
91 *  XON/XOFF flow control.
92 *
93 *  Input parameters:
94 *    ch  - character to be transmitted
95 *
96 *  Output parameters:  NONE
97 */
98
99void outbyte(
100  char ch
101)
102{
103  /*
104   *  If polling, wait for the transmitter to be ready.
105   *  Check for flow control requests and process.
106   *  Then output the character.
107   */
108
109  /*
110   *  Carriage Return/New line translation.
111   */
112
113  if ( ch == '\n' )
114    outbyte( '\r' );
115}
116
117/*
118 *  Open entry point
119 */
120
121rtems_device_driver console_open(
122  rtems_device_major_number major,
123  rtems_device_minor_number minor,
124  void                    * arg
125)
126{
127  return RTEMS_SUCCESSFUL;
128}
129
130/*
131 *  Close entry point
132 */
133
134rtems_device_driver console_close(
135  rtems_device_major_number major,
136  rtems_device_minor_number minor,
137  void                    * arg
138)
139{
140  return RTEMS_SUCCESSFUL;
141}
142
143/*
144 * read bytes from the serial port. We only have stdin.
145 */
146
147rtems_device_driver console_read(
148  rtems_device_major_number major,
149  rtems_device_minor_number minor,
150  void                    * arg
151)
152{
153  rtems_libio_rw_args_t *rw_args;
154  char *buffer;
155  int maximum;
156  int count = 0;
157
158  rw_args = (rtems_libio_rw_args_t *) arg;
159
160  buffer = rw_args->buffer;
161  maximum = rw_args->count;
162
163  for (count = 0; count < maximum; count++) {
164    buffer[ count ] = inbyte();
165    if (buffer[ count ] == '\n' || buffer[ count ] == '\r') {
166      buffer[ count++ ]  = '\n';
167      break;
168    }
169  }
170
171  rw_args->bytes_moved = count;
172  return (count >= 0) ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED;
173}
174
175/*
176 * write bytes to the serial port. Stdout and stderr are the same.
177 */
178
179rtems_device_driver console_write(
180  rtems_device_major_number major,
181  rtems_device_minor_number minor,
182  void                    * arg
183)
184{
185  int count;
186  int maximum;
187  rtems_libio_rw_args_t *rw_args;
188  char *buffer;
189
190  rw_args = (rtems_libio_rw_args_t *) arg;
191
192  buffer = rw_args->buffer;
193  maximum = rw_args->count;
194
195  for (count = 0; count < maximum; count++) {
196    if ( buffer[ count ] == '\n') {
197      outbyte('\r');
198    }
199    outbyte( buffer[ count ] );
200  }
201
202  rw_args->bytes_moved = maximum;
203  return 0;
204}
205
206/*
207 *  IO Control entry point
208 */
209
210rtems_device_driver console_control(
211  rtems_device_major_number major,
212  rtems_device_minor_number minor,
213  void                    * arg
214)
215{
216  return RTEMS_SUCCESSFUL;
217}
Note: See TracBrowser for help on using the repository browser.