mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-22 19:44:24 +08:00
[Kernel] Add device ops feature.
This commit is contained in:
+33
-15
@@ -32,12 +32,28 @@
|
||||
|
||||
#ifdef RT_USING_DEVICE
|
||||
|
||||
#ifdef RT_USING_DEVICE_OPS
|
||||
#define device_init (dev->ops->init)
|
||||
#define device_open (dev->ops->open)
|
||||
#define device_close (dev->ops->close)
|
||||
#define device_read (dev->ops->read)
|
||||
#define device_write (dev->ops->write)
|
||||
#define device_control (dev->ops->control)
|
||||
#else
|
||||
#define device_init (dev->init)
|
||||
#define device_open (dev->open)
|
||||
#define device_close (dev->close)
|
||||
#define device_read (dev->read)
|
||||
#define device_write (dev->write)
|
||||
#define device_control (dev->control)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* This function registers a device driver with specified name.
|
||||
*
|
||||
* @param dev the pointer of device driver structure
|
||||
* @param name the device driver's name
|
||||
* @param flags the flag of device
|
||||
* @param flags the capabilities flag of device
|
||||
*
|
||||
* @return the error code, RT_EOK on initialization successfully.
|
||||
*/
|
||||
@@ -154,6 +170,8 @@ rt_device_t rt_device_create(int type, int attach_size)
|
||||
rt_device_t device;
|
||||
|
||||
size = RT_ALIGN(sizeof(struct rt_device), RT_ALIGN_SIZE);
|
||||
attach_size = RT_ALIGN(attach_size, RT_ALIGN_SIZE);
|
||||
/* use the totoal size */
|
||||
size += attach_size;
|
||||
|
||||
device = (rt_device_t)rt_malloc(size);
|
||||
@@ -197,11 +215,11 @@ rt_err_t rt_device_init(rt_device_t dev)
|
||||
RT_ASSERT(dev != RT_NULL);
|
||||
|
||||
/* get device init handler */
|
||||
if (dev->init != RT_NULL)
|
||||
if (device_init != RT_NULL)
|
||||
{
|
||||
if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED))
|
||||
{
|
||||
result = dev->init(dev);
|
||||
result = device_init(dev);
|
||||
if (result != RT_EOK)
|
||||
{
|
||||
rt_kprintf("To initialize device:%s failed. The error code is %d\n",
|
||||
@@ -234,9 +252,9 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
|
||||
/* if device is not initialized, initialize it. */
|
||||
if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED))
|
||||
{
|
||||
if (dev->init != RT_NULL)
|
||||
if (device_init != RT_NULL)
|
||||
{
|
||||
result = dev->init(dev);
|
||||
result = device_init(dev);
|
||||
if (result != RT_EOK)
|
||||
{
|
||||
rt_kprintf("To initialize device:%s failed. The error code is %d\n",
|
||||
@@ -257,9 +275,9 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
|
||||
}
|
||||
|
||||
/* call device open interface */
|
||||
if (dev->open != RT_NULL)
|
||||
if (device_open != RT_NULL)
|
||||
{
|
||||
result = dev->open(dev, oflag);
|
||||
result = device_open(dev, oflag);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -304,9 +322,9 @@ rt_err_t rt_device_close(rt_device_t dev)
|
||||
return RT_EOK;
|
||||
|
||||
/* call device close interface */
|
||||
if (dev->close != RT_NULL)
|
||||
if (device_close != RT_NULL)
|
||||
{
|
||||
result = dev->close(dev);
|
||||
result = device_close(dev);
|
||||
}
|
||||
|
||||
/* set open flag */
|
||||
@@ -343,9 +361,9 @@ rt_size_t rt_device_read(rt_device_t dev,
|
||||
}
|
||||
|
||||
/* call device read interface */
|
||||
if (dev->read != RT_NULL)
|
||||
if (device_read != RT_NULL)
|
||||
{
|
||||
return dev->read(dev, pos, buffer, size);
|
||||
return device_read(dev, pos, buffer, size);
|
||||
}
|
||||
|
||||
/* set error code */
|
||||
@@ -381,9 +399,9 @@ rt_size_t rt_device_write(rt_device_t dev,
|
||||
}
|
||||
|
||||
/* call device write interface */
|
||||
if (dev->write != RT_NULL)
|
||||
if (device_write != RT_NULL)
|
||||
{
|
||||
return dev->write(dev, pos, buffer, size);
|
||||
return device_write(dev, pos, buffer, size);
|
||||
}
|
||||
|
||||
/* set error code */
|
||||
@@ -407,9 +425,9 @@ rt_err_t rt_device_control(rt_device_t dev, int cmd, void *arg)
|
||||
RT_ASSERT(dev != RT_NULL);
|
||||
|
||||
/* call device write interface */
|
||||
if (dev->control != RT_NULL)
|
||||
if (device_control != RT_NULL)
|
||||
{
|
||||
return dev->control(dev, cmd, arg);
|
||||
return device_control(dev, cmd, arg);
|
||||
}
|
||||
|
||||
return -RT_ENOSYS;
|
||||
|
||||
Reference in New Issue
Block a user