File indexing completed on 2025-05-11 08:23:59
0001 #include <rtems.h>
0002 #include <rtems/libio.h>
0003 #include <rtems/bspIo.h>
0004 #include <rtems/console.h>
0005
0006 #include <string.h>
0007
0008 ssize_t app_memory_write(int minor, const char* buf, size_t len)
0009 __attribute__(( weak, alias("__bsp_memory_write") ));
0010
0011 ssize_t __bsp_memory_write(int minor, const char* buf, size_t len);
0012 rtems_device_driver console_initialize(rtems_device_major_number major,
0013 rtems_device_minor_number minor,
0014 void* arg);
0015
0016 ssize_t __bsp_memory_write(int minor, const char* buf, size_t len)
0017 {
0018 const char* const last = buf+len;
0019 while (buf < last)
0020 {
0021 rtems_putc(*buf++);
0022 }
0023 return len;
0024 }
0025
0026 static rtems_termios_callbacks gMemCallbacks = {
0027 0,
0028 0,
0029 0,
0030 app_memory_write,
0031 0,
0032 0,
0033 0,
0034 TERMIOS_POLLED
0035 };
0036
0037 rtems_device_driver console_initialize(rtems_device_major_number major,
0038 rtems_device_minor_number minor,
0039 void* arg)
0040 {
0041 rtems_status_code status;
0042
0043 rtems_termios_initialize();
0044
0045 status = rtems_io_register_name("/dev/console", major, 0);
0046
0047 if (status != RTEMS_SUCCESSFUL) rtems_fatal_error_occurred (status);
0048 return RTEMS_SUCCESSFUL;
0049 }
0050
0051 rtems_device_driver console_open(rtems_device_major_number major,
0052 rtems_device_minor_number minor,
0053 void* arg)
0054 {
0055 rtems_status_code sc;
0056
0057 sc = rtems_termios_open (major, minor, arg, &gMemCallbacks);
0058
0059 return sc;
0060 }
0061
0062 rtems_device_driver console_close(rtems_device_major_number major,
0063 rtems_device_minor_number minor,
0064 void* arg)
0065 {
0066 return rtems_termios_close(arg);
0067 }
0068
0069 rtems_device_driver console_read(rtems_device_major_number major,
0070 rtems_device_minor_number minor,
0071 void* arg)
0072 {
0073 return rtems_termios_read(arg);
0074 }
0075
0076 rtems_device_driver console_write(rtems_device_major_number major,
0077 rtems_device_minor_number minor,
0078 void* arg)
0079 {
0080 return rtems_termios_write(arg);
0081 }
0082
0083 rtems_device_driver console_control(rtems_device_major_number major,
0084 rtems_device_minor_number minor,
0085 void* arg)
0086 {
0087 return rtems_termios_ioctl(arg);
0088 }