1 /*
2  * Copyright (c) 2011-2023, Shanghai Real-Thread Electronic Technology Co.,Ltd
3  *
4  * Change Logs:
5  * Date           Author       Notes
6  * 2020-12-03     quanzhao     the first version
7  */
8 
9 #include <time.h>
10 #include <string.h>
11 #include <rtthread.h>
12 
13 static struct rt_device null_dev;
14 
null_read(rt_device_t dev,rt_off_t pos,void * buffer,rt_size_t size)15 static rt_ssize_t null_read    (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
16 {
17     return 0;
18 }
19 
null_write(rt_device_t dev,rt_off_t pos,const void * buffer,rt_size_t size)20 static rt_ssize_t null_write   (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size)
21 {
22     return size;
23 }
24 
null_control(rt_device_t dev,int cmd,void * args)25 static rt_err_t  null_control (rt_device_t dev, int cmd, void *args)
26 {
27     return RT_EOK;
28 }
29 
30 #ifdef RT_USING_DEVICE_OPS
31 const static struct rt_device_ops null_ops =
32 {
33     RT_NULL,
34     RT_NULL,
35     RT_NULL,
36     null_read,
37     null_write,
38     null_control
39 };
40 #endif
41 
null_device_init(void)42 int null_device_init(void)
43 {
44     static rt_bool_t init_ok = RT_FALSE;
45 
46     if (init_ok)
47     {
48         return 0;
49     }
50     RT_ASSERT(!rt_device_find("null"));
51     null_dev.type    = RT_Device_Class_Miscellaneous;
52 
53 #ifdef RT_USING_DEVICE_OPS
54     null_dev.ops     = &null_ops;
55 #else
56     null_dev.init    = RT_NULL;
57     null_dev.open    = RT_NULL;
58     null_dev.close   = RT_NULL;
59     null_dev.read    = null_read;
60     null_dev.write   = null_write;
61     null_dev.control = null_control;
62 #endif
63 
64     /* no private */
65     null_dev.user_data = RT_NULL;
66 
67     rt_device_register(&null_dev, "null", RT_DEVICE_FLAG_RDWR);
68 
69     init_ok = RT_TRUE;
70 
71     return 0;
72 }
73 INIT_DEVICE_EXPORT(null_device_init);
74 
75