console.c
来自「RTEMS (Real-Time Executive for Multiproc」· C语言 代码 · 共 209 行
C
209 行
/* * This file contains the CVME961 console IO package. * * 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:11 joel Exp $ */#include <bsp.h>#include <rtems/libio.h>/* 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;}/* * NINDY_IO( ... ) * * Interface to NINDY. */#define NINDY_INPUT 0#define NINDY_OUTPUT 1void NINDY_IO();void ___NINDY_IO_WRAPPER( void ) /* never called */{ asm volatile ( " .text" ); asm volatile ( " .align 4" ); asm volatile ( " .globl _NINDY_IO" ); asm volatile ( "_NINDY_IO:" ); asm volatile ( " calls 0 /* call console routines */" ); asm volatile ( " ret" );}/* inbyte * * This routine reads a character from the console using NINDY. * * Input parameters: NONE * * Output parameters: NONE * * Return values: * character read from UART */char inbyte( void ){ char ch; NINDY_IO( NINDY_INPUT, &ch ); return ch;}/* outbyte * * This routine transmits a character out the console using NINDY. * * Input parameters: * ch - character to be transmitted * * Output parameters: NONE */void outbyte( char ch){ NINDY_IO( NINDY_OUTPUT, ch );}/* * Open entry point */ rtems_device_driver console_open( rtems_device_major_number major, rtems_device_minor_number minor, void * arg){ return RTEMS_SUCCESSFUL;} /* * Close entry point */ rtems_device_driver console_close( rtems_device_major_number major, rtems_device_minor_number minor, void * arg){ 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;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?