summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author[email protected] <[email protected]>2012-10-19 22:44:34 +0000
committer[email protected] <[email protected]>2012-10-19 22:44:34 +0000
commite737514f867a3499ac6fa21493a1fc5b04e5e1b3 (patch)
treed4e574ca28414e3a6b4c6370ae59418a776284ea /src
parent2bbd1496a3da7451b28dada49c122c64cd83b659 (diff)
add device check in register function, which is provided by Rob <[email protected]>.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2355 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'src')
-rw-r--r--src/device.c48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/device.c b/src/device.c
index 10b052cc85..1ba471446e 100644
--- a/src/device.c
+++ b/src/device.c
@@ -11,6 +11,8 @@
* Date Author Notes
* 2007-01-21 Bernard the first version
* 2010-05-04 Bernard add rt_device_init implementation
+ * 2012-10-20 Bernard add device check in register function,
+ * provided by Rob <[email protected]>
*/
#include <rtthread.h>
@@ -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)
return -RT_ERROR;
+ if (rt_device_find(name) != RT_NULL)
+ return -RT_ERROR;
+
rt_object_init(&(dev->parent), RT_Object_Class_Device, name);
dev->flag = flags;
return RT_EOK;
}
-RTM_EXPORT(rt_device_register);
+RTM_EXPORT(rt_device_register);
/**
* This function removes a previously registered device driver
@@ -53,7 +58,7 @@ rt_err_t rt_device_unregister(rt_device_t dev)
return RT_EOK;
}
-RTM_EXPORT(rt_device_unregister);
+RTM_EXPORT(rt_device_unregister);
/**
* This function initializes all registered device driver
@@ -138,7 +143,7 @@ rt_device_t rt_device_find(const char *name)
/* not found */
return RT_NULL;
}
-RTM_EXPORT(rt_device_find);
+RTM_EXPORT(rt_device_find);
/**
* 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)
/* if device is not initialized, initialize it. */
if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED))
{
- result = dev->init(dev);
- if (result != RT_EOK)
+ if (dev->init != RT_NULL )
{
- rt_kprintf("To initialize device:%s failed. The error code is %d\n",
- dev->parent.name, result);
+ result = dev->init(dev);
+ if (result != RT_EOK)
+ {
+ rt_kprintf("To initialize device:%s failed. The error code is %d\n",
+ dev->parent.name, result);
- return result;
- }
- else
- {
- dev->flag |= RT_DEVICE_FLAG_ACTIVATED;
+ return result;
+ }
}
+
+ dev->flag |= RT_DEVICE_FLAG_ACTIVATED;
}
/* 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)
else
{
/* no this interface in device driver */
- result = -RT_ENOSYS;
+ /* result = -RT_ENOSYS; not set errno */
}
/* set open flag */
@@ -234,7 +240,7 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
return result;
}
-RTM_EXPORT(rt_device_open);
+RTM_EXPORT(rt_device_open);
/**
* This function will close a device
@@ -259,7 +265,7 @@ rt_err_t rt_device_close(rt_device_t dev)
else
{
/* no this interface in device driver */
- result = -RT_ENOSYS;
+ /* result = -RT_ENOSYS; not set errno */
}
/* set open flag */
@@ -268,7 +274,7 @@ rt_err_t rt_device_close(rt_device_t dev)
return result;
}
-RTM_EXPORT(rt_device_close);
+RTM_EXPORT(rt_device_close);
/**
* 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
return 0;
}
-RTM_EXPORT(rt_device_read);
+RTM_EXPORT(rt_device_read);
/**
* 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_
return 0;
}
-RTM_EXPORT(rt_device_write);
+RTM_EXPORT(rt_device_write);
/**
* 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)
return -RT_ENOSYS;
}
-RTM_EXPORT(rt_device_control);
+RTM_EXPORT(rt_device_control);
/**
* 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
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
@@ -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;
}
-RTM_EXPORT(rt_device_set_tx_complete);
+RTM_EXPORT(rt_device_set_tx_complete);
#endif