/** * @file console.c * * This file contains the GBA console I/O package. */ /* * RTEMS GBA BSP * * Copyright (c) 2004 Markku Puro * * The license and distribution terms for this file may be * found in found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. * * $Id$ */ #include #include #include #include #include #include #include #include #include #include #include #include #undef __assert void __assert (const char *file, int line, const char *msg); extern void rtemsReboot(void); /** * @brief gba_pollRead function read char * * @param minor unused * @return character code */ static int gba_pollRead(int minor) { return(gba_getch()); } /** * @brief gba_write function writes chars * * Input parameters: minor code, buffer pointer and lenght * @param minor unused * @param *buf buffer pointer * @param len lenght of buffer * @return character code * */ static int gba_write(int minor, const char *buf, int len) { int i; for (i=0;i gba_textmode(CO60); */ /* Register the device */ status = rtems_io_register_name ("/dev/console", major, 0); if (status != RTEMS_SUCCESSFUL) { printk("Error registering console device!\n"); rtems_fatal_error_occurred (status); } printk("Initialized GBA console\n\n"); return RTEMS_SUCCESSFUL; } /** * @brief console_first_open function is empty * * @param major diver major number * @param minor driver minor mumber * @param *arg pointer to parameters * @return status code */ static int console_first_open(int major, int minor, void *arg) { return 0; } /** * @brief console_last_close function is empty * * @param major diver major number * @param minor driver minor mumber * @param *arg pointer to parameters * @return status code */ static int console_last_close(int major, int minor, void *arg) { return 0; } /** * @brief Console device driver OPEN entry point * * @param major diver major number * @param minor driver minor mumber * @param *arg pointer to parameters * @return status code */ rtems_device_driver console_open(rtems_device_major_number major, rtems_device_minor_number minor, void *arg) { rtems_status_code status; static rtems_termios_callbacks cb = { console_first_open, /* firstOpen */ console_last_close, /* lastClose */ gba_pollRead, /* pollRead */ gba_write, /* write */ gba_setAttributes, /* setAttributes */ NULL, /* stopRemoteTx */ NULL, /* startRemoteTx */ TERMIOS_POLLED /* 1 = outputUsesInterrupts */ }; status = rtems_termios_open (major, minor, arg, &cb); if (status != RTEMS_SUCCESSFUL) { printk("Error openning console device\n"); return status; } return RTEMS_SUCCESSFUL; } /** * @brief Console device driver CLOSE entry point * * @param major diver major number * @param minor driver minor mumber * @param *arg pointer to parameters * @return status code */ rtems_device_driver console_close(rtems_device_major_number major, rtems_device_minor_number minor, void *arg) { rtems_device_driver res = RTEMS_SUCCESSFUL; res = rtems_termios_close (arg); return res; } /** * @brief Console device driver READ entry point. * * Read characters from the I/O console. * * @param major diver major number * @param minor driver minor mumber * @param *arg pointer to parameters * @return status code */ rtems_device_driver console_read(rtems_device_major_number major, rtems_device_minor_number minor, void *arg) { return rtems_termios_read (arg); } /** * @brief Console device driver WRITE entry point. * * Write characters to the I/O console. * * @param major diver major number * @param minor driver minor mumber * @param *arg pointer to parameters * @return status code */ rtems_device_driver console_write(rtems_device_major_number major, rtems_device_minor_number minor, void *arg) { return rtems_termios_write (arg); } /** * @brief Handle ioctl request. * * @param major diver major number * @param minor driver minor mumber * @param *arg pointer to parameters * @return status code */ rtems_device_driver console_control(rtems_device_major_number major, rtems_device_minor_number minor, void *arg ) { return rtems_termios_ioctl (arg); }