summaryrefslogtreecommitdiff
path: root/src/device.c
diff options
context:
space:
mode:
authorbernard <[email protected]>2017-10-15 22:31:53 +0800
committerbernard <[email protected]>2017-10-15 22:31:53 +0800
commitb27c7e482648535760e012cd6f1afef1d800e2d2 (patch)
treead040fd4e7579e67ba6ee2edae468b63f2099a0e /src/device.c
parentcd215b25455bf06dfeb8885fe4d8f5b30174a8c3 (diff)
[Kernel] Add signal implementation.
1. Add signal implementation; 2. Change the 'rt_uint8_t' of cmd to 'int';
Diffstat (limited to 'src/device.c')
-rw-r--r--src/device.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/device.c b/src/device.c
index 1175a340c9..ac4f5b0ffd 100644
--- a/src/device.c
+++ b/src/device.c
@@ -56,6 +56,11 @@ rt_err_t rt_device_register(rt_device_t dev,
dev->ref_count = 0;
dev->open_flag = 0;
+#if defined(RT_USING_DFS) && defined(RT_USING_DFS_DEVFS)
+ dev->fops = RT_NULL;
+ rt_list_init(&(dev->wait_queue));
+#endif
+
return RT_EOK;
}
RTM_EXPORT(rt_device_register);
@@ -213,11 +218,16 @@ rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag)
{
result = dev->open(dev, oflag);
}
+ else
+ {
+ /* set open flag */
+ dev->open_flag = (oflag & RT_DEVICE_OFLAG_MASK);
+ }
/* set open flag */
if (result == RT_EOK || result == -RT_ENOSYS)
{
- dev->open_flag = oflag | RT_DEVICE_OFLAG_OPEN;
+ dev->open_flag |= RT_DEVICE_OFLAG_OPEN;
dev->ref_count++;
/* don't let bad things happen silently. If you are bitten by this assert,
@@ -349,7 +359,7 @@ RTM_EXPORT(rt_device_write);
*
* @return the result
*/
-rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void *arg)
+rt_err_t rt_device_control(rt_device_t dev, int cmd, void *arg)
{
RT_ASSERT(dev != RT_NULL);
@@ -359,7 +369,7 @@ rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void *arg)
return dev->control(dev, cmd, arg);
}
- return RT_EOK;
+ return -RT_ENOSYS;
}
RTM_EXPORT(rt_device_control);