Lines Matching +full:0 +full:- +full:dev
2 * Copyright (c) 2006-2018, RT-Thread Development Team
4 * SPDX-License-Identifier: Apache-2.0
8 * 2007-01-21 Bernard the first version
9 * 2010-05-04 Bernard add rt_device_init implementation
10 * 2012-10-20 Bernard add device check in register function,
12 * 2012-12-25 Bernard return RT_EOK if the device interface not exist.
13 * 2013-07-09 Grissiom add ref_count support
14 * 2016-04-02 Bernard fix the open_flag initialization issue.
25 #define device_init (dev->ops->init)
26 #define device_open (dev->ops->open)
27 #define device_close (dev->ops->close)
28 #define device_read (dev->ops->read)
29 #define device_write (dev->ops->write)
30 #define device_control (dev->ops->control)
32 #define device_init (dev->init)
33 #define device_open (dev->open)
34 #define device_close (dev->close)
35 #define device_read (dev->read)
36 #define device_write (dev->write)
37 #define device_control (dev->control)
43 * @param dev the pointer of device driver structure
49 rt_err_t rt_device_register(rt_device_t dev, in rt_device_register() argument
53 if (dev == RT_NULL) in rt_device_register()
54 return -RT_ERROR; in rt_device_register()
57 return -RT_ERROR; in rt_device_register()
59 rt_object_init(&(dev->parent), RT_Object_Class_Device, name); in rt_device_register()
60 dev->flag = flags; in rt_device_register()
61 dev->ref_count = 0; in rt_device_register()
62 dev->open_flag = 0; in rt_device_register()
65 dev->fops = RT_NULL; in rt_device_register()
66 rt_wqueue_init(&(dev->wait_queue)); in rt_device_register()
76 * @param dev the pointer of device driver structure
80 rt_err_t rt_device_unregister(rt_device_t dev) in rt_device_unregister() argument
82 RT_ASSERT(dev != RT_NULL); in rt_device_unregister()
83 RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device); in rt_device_unregister()
84 RT_ASSERT(rt_object_is_systemobject(&dev->parent)); in rt_device_unregister()
86 rt_object_detach(&(dev->parent)); in rt_device_unregister()
125 for (node = information->object_list.next; in rt_device_find()
126 node != &(information->object_list); in rt_device_find()
127 node = node->next) in rt_device_find()
130 if (rt_strncmp(object->name, name, RT_NAME_MAX) == 0) in rt_device_find()
171 rt_memset(device, 0x0, sizeof(struct rt_device)); in rt_device_create()
172 device->type = (enum rt_device_class_type)type; in rt_device_create()
182 * @param dev, the specific device object.
184 void rt_device_destroy(rt_device_t dev) in rt_device_destroy() argument
186 RT_ASSERT(dev != RT_NULL); in rt_device_destroy()
187 RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device); in rt_device_destroy()
188 RT_ASSERT(rt_object_is_systemobject(&dev->parent) == RT_FALSE); in rt_device_destroy()
190 rt_object_detach(&(dev->parent)); in rt_device_destroy()
193 rt_free(dev); in rt_device_destroy()
201 * @param dev the pointer of device driver structure
205 rt_err_t rt_device_init(rt_device_t dev) in rt_device_init() argument
209 RT_ASSERT(dev != RT_NULL); in rt_device_init()
214 if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED)) in rt_device_init()
216 result = device_init(dev); in rt_device_init()
220 dev->parent.name, result); in rt_device_init()
224 dev->flag |= RT_DEVICE_FLAG_ACTIVATED; in rt_device_init()
235 * @param dev the pointer of device driver structure
240 rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflag) in rt_device_open() argument
244 RT_ASSERT(dev != RT_NULL); in rt_device_open()
245 RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device); in rt_device_open()
248 if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED)) in rt_device_open()
252 result = device_init(dev); in rt_device_open()
256 dev->parent.name, result); in rt_device_open()
262 dev->flag |= RT_DEVICE_FLAG_ACTIVATED; in rt_device_open()
266 if ((dev->flag & RT_DEVICE_FLAG_STANDALONE) && in rt_device_open()
267 (dev->open_flag & RT_DEVICE_OFLAG_OPEN)) in rt_device_open()
269 return -RT_EBUSY; in rt_device_open()
275 result = device_open(dev, oflag); in rt_device_open()
280 dev->open_flag = (oflag & RT_DEVICE_OFLAG_MASK); in rt_device_open()
284 if (result == RT_EOK || result == -RT_ENOSYS) in rt_device_open()
286 dev->open_flag |= RT_DEVICE_OFLAG_OPEN; in rt_device_open()
288 dev->ref_count++; in rt_device_open()
291 RT_ASSERT(dev->ref_count != 0); in rt_device_open()
301 * @param dev the pointer of device driver structure
305 rt_err_t rt_device_close(rt_device_t dev) in rt_device_close() argument
309 RT_ASSERT(dev != RT_NULL); in rt_device_close()
310 RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device); in rt_device_close()
312 if (dev->ref_count == 0) in rt_device_close()
313 return -RT_ERROR; in rt_device_close()
315 dev->ref_count--; in rt_device_close()
317 if (dev->ref_count != 0) in rt_device_close()
323 result = device_close(dev); in rt_device_close()
327 if (result == RT_EOK || result == -RT_ENOSYS) in rt_device_close()
328 dev->open_flag = RT_DEVICE_OFLAG_CLOSE; in rt_device_close()
337 * @param dev the pointer of device driver structure
344 * @note since 0.4.0, the unit of size/pos is a block for block device.
346 rt_size_t rt_device_read(rt_device_t dev, in rt_device_read() argument
351 RT_ASSERT(dev != RT_NULL); in rt_device_read()
352 RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device); in rt_device_read()
354 if (dev->ref_count == 0) in rt_device_read()
356 rt_set_errno(-RT_ERROR); in rt_device_read()
357 return 0; in rt_device_read()
363 return device_read(dev, pos, buffer, size); in rt_device_read()
367 rt_set_errno(-RT_ENOSYS); in rt_device_read()
369 return 0; in rt_device_read()
376 * @param dev the pointer of device driver structure
383 * @note since 0.4.0, the unit of size/pos is a block for block device.
385 rt_size_t rt_device_write(rt_device_t dev, in rt_device_write() argument
390 RT_ASSERT(dev != RT_NULL); in rt_device_write()
391 RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device); in rt_device_write()
393 if (dev->ref_count == 0) in rt_device_write()
395 rt_set_errno(-RT_ERROR); in rt_device_write()
396 return 0; in rt_device_write()
402 return device_write(dev, pos, buffer, size); in rt_device_write()
406 rt_set_errno(-RT_ENOSYS); in rt_device_write()
408 return 0; in rt_device_write()
415 * @param dev the pointer of device driver structure
421 rt_err_t rt_device_control(rt_device_t dev, int cmd, void *arg) in rt_device_control() argument
423 RT_ASSERT(dev != RT_NULL); in rt_device_control()
424 RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device); in rt_device_control()
429 return device_control(dev, cmd, arg); in rt_device_control()
432 return -RT_ENOSYS; in rt_device_control()
440 * @param dev the pointer of device driver structure
446 rt_device_set_rx_indicate(rt_device_t dev, in rt_device_set_rx_indicate() argument
447 rt_err_t (*rx_ind)(rt_device_t dev, rt_size_t size)) in rt_device_set_rx_indicate() argument
449 RT_ASSERT(dev != RT_NULL); in rt_device_set_rx_indicate()
450 RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device); in rt_device_set_rx_indicate()
452 dev->rx_indicate = rx_ind; in rt_device_set_rx_indicate()
462 * @param dev the pointer of device driver structure
468 rt_device_set_tx_complete(rt_device_t dev, in rt_device_set_tx_complete() argument
469 rt_err_t (*tx_done)(rt_device_t dev, void *buffer)) in rt_device_set_tx_complete() argument
471 RT_ASSERT(dev != RT_NULL); in rt_device_set_tx_complete()
472 RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device); in rt_device_set_tx_complete()
474 dev->tx_complete = tx_done; in rt_device_set_tx_complete()