2010-10-22 18:15:50 +08:00
|
|
|
/*
|
|
|
|
* RT-Thread Console Device File
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
#include <rtthread.h>
|
|
|
|
|
|
|
|
struct console_device
|
|
|
|
{
|
|
|
|
struct rt_device parent;
|
|
|
|
|
|
|
|
rt_device_t device; /* the actual device */
|
|
|
|
};
|
|
|
|
struct console_device _console;
|
|
|
|
|
|
|
|
/* common device interface */
|
|
|
|
static rt_err_t console_init(rt_device_t dev)
|
|
|
|
{
|
|
|
|
return RT_EOK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static rt_err_t console_open(rt_device_t dev, rt_uint16_t oflag)
|
|
|
|
{
|
|
|
|
return RT_EOK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static rt_err_t console_close(rt_device_t dev)
|
|
|
|
{
|
|
|
|
return RT_EOK;
|
|
|
|
}
|
|
|
|
|
|
|
|
static rt_size_t console_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
|
|
|
|
{
|
|
|
|
struct console_device* device;
|
|
|
|
|
|
|
|
device = (struct console_device*)dev;
|
|
|
|
RT_ASSERT(device != RT_NULL);
|
|
|
|
|
|
|
|
return rt_device_read(device->device, pos, buffer, size);
|
|
|
|
}
|
|
|
|
|
|
|
|
static rt_size_t console_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)
|
|
|
|
{
|
|
|
|
struct console_device* device;
|
|
|
|
|
|
|
|
device = (struct console_device*)dev;
|
|
|
|
RT_ASSERT(device != RT_NULL);
|
|
|
|
|
|
|
|
return rt_device_write(device->device, pos, buffer, size);
|
|
|
|
}
|
|
|
|
|
|
|
|
static rt_err_t console_control(rt_device_t dev, rt_uint8_t cmd, void *args)
|
|
|
|
{
|
|
|
|
return rt_device_control(_console.device, cmd, args);
|
|
|
|
}
|
|
|
|
|
|
|
|
void rt_console_init(const char* device_name)
|
|
|
|
{
|
|
|
|
rt_device_t device;
|
|
|
|
/* register to device framework */
|
|
|
|
|
|
|
|
device = rt_device_find(device_name);
|
|
|
|
if (device != RT_NULL)
|
|
|
|
{
|
|
|
|
struct console_device* console;
|
|
|
|
/* get console device */
|
|
|
|
console = &_console;
|
|
|
|
rt_memset(console, 0, sizeof(_console));
|
|
|
|
|
|
|
|
/* device initialization */
|
|
|
|
console->parent.type = RT_Device_Class_Char;
|
|
|
|
/* set device interface */
|
|
|
|
console->parent.init = console_init;
|
|
|
|
console->parent.open = console_open;
|
|
|
|
console->parent.close = console_close;
|
|
|
|
console->parent.read = console_read;
|
|
|
|
console->parent.write = console_write;
|
|
|
|
console->parent.control = RT_NULL;
|
2010-11-29 15:48:17 +08:00
|
|
|
console->parent.user_data = RT_NULL;
|
2010-10-22 18:15:50 +08:00
|
|
|
|
|
|
|
console->device = device;
|
|
|
|
|
|
|
|
rt_device_register(&console->parent, "console", RT_DEVICE_FLAG_RDWR);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|