提交 e737514f 编写于 作者: B bernard.xiong@gmail.com

add device check in register function, which is provided by Rob <rdent@iinet.net.au>.

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2355 bbd45198-f89e-11dd-88c7-29a3b14d5316
上级 2bbd1496
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
* Date Author Notes * Date Author Notes
* 2007-01-21 Bernard the first version * 2007-01-21 Bernard the first version
* 2010-05-04 Bernard add rt_device_init implementation * 2010-05-04 Bernard add rt_device_init implementation
* 2012-10-20 Bernard add device check in register function,
* provided by Rob <rdent@iinet.net.au>
*/ */
#include <rtthread.h> #include <rtthread.h>
...@@ -31,12 +33,15 @@ rt_err_t rt_device_register(rt_device_t dev, const char *name, rt_uint16_t flags ...@@ -31,12 +33,15 @@ rt_err_t rt_device_register(rt_device_t dev, const char *name, rt_uint16_t flags
if (dev == RT_NULL) if (dev == RT_NULL)
return -RT_ERROR; return -RT_ERROR;
if (rt_device_find(name) != RT_NULL)
return -RT_ERROR;
rt_object_init(&(dev->parent), RT_Object_Class_Device, name); rt_object_init(&(dev->parent), RT_Object_Class_Device, name);
dev->flag = flags; dev->flag = flags;
return RT_EOK; return RT_EOK;
} }
RTM_EXPORT(rt_device_register); RTM_EXPORT(rt_device_register);
/** /**
* This function removes a previously registered device driver * This function removes a previously registered device driver
...@@ -53,7 +58,7 @@ rt_err_t rt_device_unregister(rt_device_t dev) ...@@ -53,7 +58,7 @@ rt_err_t rt_device_unregister(rt_device_t dev)
return RT_EOK; return RT_EOK;
} }
RTM_EXPORT(rt_device_unregister); RTM_EXPORT(rt_device_unregister);
/** /**
* This function initializes all registered device driver * This function initializes all registered device driver
...@@ -138,7 +143,7 @@ rt_device_t rt_device_find(const char *name) ...@@ -138,7 +143,7 @@ rt_device_t rt_device_find(const char *name)
/* not found */ /* not found */
return RT_NULL; return RT_NULL;
} }
RTM_EXPORT(rt_device_find); RTM_EXPORT(rt_device_find);
/** /**
* This function will initialize the specified device * This function will initialize the specified device
...@@ -198,18 +203,19 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) ...@@ -198,18 +203,19 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
/* if device is not initialized, initialize it. */ /* if device is not initialized, initialize it. */
if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED)) if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED))
{ {
result = dev->init(dev); if (dev->init != RT_NULL )
if (result != RT_EOK)
{ {
rt_kprintf("To initialize device:%s failed. The error code is %d\n", result = dev->init(dev);
dev->parent.name, result); if (result != RT_EOK)
{
rt_kprintf("To initialize device:%s failed. The error code is %d\n",
dev->parent.name, result);
return result; return result;
} }
else
{
dev->flag |= RT_DEVICE_FLAG_ACTIVATED;
} }
dev->flag |= RT_DEVICE_FLAG_ACTIVATED;
} }
/* device is a stand alone device and opened */ /* device is a stand alone device and opened */
...@@ -225,7 +231,7 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) ...@@ -225,7 +231,7 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
else else
{ {
/* no this interface in device driver */ /* no this interface in device driver */
result = -RT_ENOSYS; /* result = -RT_ENOSYS; not set errno */
} }
/* set open flag */ /* set open flag */
...@@ -234,7 +240,7 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) ...@@ -234,7 +240,7 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
return result; return result;
} }
RTM_EXPORT(rt_device_open); RTM_EXPORT(rt_device_open);
/** /**
* This function will close a device * This function will close a device
...@@ -259,7 +265,7 @@ rt_err_t rt_device_close(rt_device_t dev) ...@@ -259,7 +265,7 @@ rt_err_t rt_device_close(rt_device_t dev)
else else
{ {
/* no this interface in device driver */ /* no this interface in device driver */
result = -RT_ENOSYS; /* result = -RT_ENOSYS; not set errno */
} }
/* set open flag */ /* set open flag */
...@@ -268,7 +274,7 @@ rt_err_t rt_device_close(rt_device_t dev) ...@@ -268,7 +274,7 @@ rt_err_t rt_device_close(rt_device_t dev)
return result; return result;
} }
RTM_EXPORT(rt_device_close); RTM_EXPORT(rt_device_close);
/** /**
* This function will read some data from a device. * This function will read some data from a device.
...@@ -300,7 +306,7 @@ rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t ...@@ -300,7 +306,7 @@ rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t
return 0; return 0;
} }
RTM_EXPORT(rt_device_read); RTM_EXPORT(rt_device_read);
/** /**
* This function will write some data to a device. * This function will write some data to a device.
...@@ -332,7 +338,7 @@ rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_ ...@@ -332,7 +338,7 @@ rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_
return 0; return 0;
} }
RTM_EXPORT(rt_device_write); RTM_EXPORT(rt_device_write);
/** /**
* This function will perform a variety of control functions on devices. * This function will perform a variety of control functions on devices.
...@@ -358,7 +364,7 @@ rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void *arg) ...@@ -358,7 +364,7 @@ rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void *arg)
return -RT_ENOSYS; return -RT_ENOSYS;
} }
RTM_EXPORT(rt_device_control); RTM_EXPORT(rt_device_control);
/** /**
* This function will set the indication callback function when device receives * This function will set the indication callback function when device receives
...@@ -377,7 +383,7 @@ rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device ...@@ -377,7 +383,7 @@ rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device
return RT_EOK; return RT_EOK;
} }
RTM_EXPORT(rt_device_set_rx_indicate); RTM_EXPORT(rt_device_set_rx_indicate);
/** /**
* This function will set the indication callback function when device has written * This function will set the indication callback function when device has written
...@@ -396,6 +402,6 @@ rt_err_t rt_device_set_tx_complete(rt_device_t dev, rt_err_t (*tx_done)(rt_devic ...@@ -396,6 +402,6 @@ rt_err_t rt_device_set_tx_complete(rt_device_t dev, rt_err_t (*tx_done)(rt_devic
return RT_EOK; return RT_EOK;
} }
RTM_EXPORT(rt_device_set_tx_complete); RTM_EXPORT(rt_device_set_tx_complete);
#endif #endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册