📄 console.c
字号:
/* * This file contains the IDT 4650 console IO package. * * Author: Craig Lebakken <craigl@transition.com> * * COPYRIGHT (c) 1996 by Transition Networks Inc. * * To anyone who acknowledges that this file is provided "AS IS" * without any express or implied warranty: * permission to use, copy, modify, and distribute this file * for any purpose is hereby granted without fee, provided that * the above copyright notice and this notice appears in all * copies, and that the name of Transition Networks not be used in * advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * Transition Networks makes no representations about the suitability * of this software for any purpose. * * Derived from c/src/lib/libbsp/no_cpu/no_bsp/console/console.c: * * COPYRIGHT (c) 1989-1999. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. * * $Id: console.c,v 1.10.4.1 2003/09/04 18:44:52 joel Exp $ *//* * Rather than deleting this, it is commented out to (hopefully) help * the submitter send updates. * * static char _sccsid[] = "@(#)console.c 08/20/96 1.6\n"; */#include <bsp.h>#include <rtems/libio.h>#include <ctype.h>char idtsim_getchar( void );void idtsim_putchar( char c );void mips_leddisplay( char a, char b, char c, char d );/* console_initialize * * This routine initializes the console IO driver. * * Input parameters: NONE * * Output parameters: NONE * * Return values: */rtems_device_driver console_initialize( rtems_device_major_number major, rtems_device_minor_number minor, void *arg){ rtems_status_code status; status = rtems_io_register_name( "/dev/console", major, (rtems_device_minor_number) 0 ); if (status != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred(status); return RTEMS_SUCCESSFUL;}/* is_character_ready * * This routine returns TRUE if a character is available. * * Input parameters: NONE * * Output parameters: NONE * * Return values: */rtems_boolean is_character_ready( char *ch){ *ch = '\0'; /* return NULL for no particular reason */ return(TRUE);}/* inbyte * * This routine reads a character from the SOURCE. * * Input parameters: NONE * * Output parameters: NONE * * Return values: * character read from SOURCE */char inbyte( void ){ /* * If polling, wait until a character is available. */ return idtsim_getchar();}/* outbyte * * This routine transmits a character out the SOURCE. It may support * XON/XOFF flow control. * * Input parameters: * ch - character to be transmitted * * Output parameters: NONE */void outbyte( char ch){#define NUM_LEDS 4 static unsigned int cur_led = 0; static unsigned char led_chars[NUM_LEDS]; /* * If polling, wait for the transmitter to be ready. * Check for flow control requests and process. * Then output the character. */ idtsim_putchar( ch ); /* print out first four alpha numeric characters in a line */ if ( ch == '\n' ) { mips_leddisplay( led_chars[0], led_chars[1], led_chars[2], led_chars[3] ); cur_led = 0; } else if ( isalnum( (unsigned char) ch ) && cur_led < NUM_LEDS ) { led_chars[cur_led++] = ch; }}#if 0static int console_fd = -1;#endif/* * Open entry point */rtems_device_driver console_open( rtems_device_major_number major, rtems_device_minor_number minor, void * arg){#if 0 int console_fd = open("tty0", 2); /* open for read/write */#endif return RTEMS_SUCCESSFUL;} /* * Close entry point */rtems_device_driver console_close( rtems_device_major_number major, rtems_device_minor_number minor, void * arg){#if 0 if ( console_fd ) close( console_fd );#endif return RTEMS_SUCCESSFUL;}/* * read bytes from the serial port. We only have stdin. */rtems_device_driver console_read( rtems_device_major_number major, rtems_device_minor_number minor, void * arg){ rtems_libio_rw_args_t *rw_args; char *buffer; int maximum; int count = 0; rw_args = (rtems_libio_rw_args_t *) arg; buffer = rw_args->buffer; maximum = rw_args->count; for (count = 0; count < maximum; count++) { buffer[ count ] = inbyte(); if (buffer[ count ] == '\n' || buffer[ count ] == '\r') { buffer[ count++ ] = '\n'; break; } } rw_args->bytes_moved = count; return (count >= 0) ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED;}/* * write bytes to the serial port. Stdout and stderr are the same. */rtems_device_driver console_write( rtems_device_major_number major, rtems_device_minor_number minor, void * arg){ int count; int maximum; rtems_libio_rw_args_t *rw_args; char *buffer; rw_args = (rtems_libio_rw_args_t *) arg; buffer = rw_args->buffer; maximum = rw_args->count; for (count = 0; count < maximum; count++) { if ( buffer[ count ] == '\n') { outbyte('\r'); } outbyte( buffer[ count ] ); } rw_args->bytes_moved = maximum; return 0;}/* * IO Control entry point */rtems_device_driver console_control( rtems_device_major_number major, rtems_device_minor_number minor, void * arg){ return RTEMS_SUCCESSFUL;}#include <rtems/bspIo.h>void P4000_output_char(char c) { outbyte( c ); }BSP_output_char_function_type BSP_output_char = P4000_output_char;BSP_polling_getchar_function_type BSP_poll_char = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -