diff --git a/components/drivers/Kconfig b/components/drivers/Kconfig index bfbe5d42f6fab92d54726d5846c6e3aed61a90a3..a558b3821fb8fbc9b4c0bd666e71d3482c4fa149 100755 --- a/components/drivers/Kconfig +++ b/components/drivers/Kconfig @@ -123,6 +123,10 @@ config RT_USING_NULL bool "Using NULL device drivers" default n +config RT_USING_ZERO + bool "Using ZERO device drivers" + default n + config RT_USING_RANDOM bool "Using RANDOM device drivers" default n diff --git a/components/drivers/misc/SConscript b/components/drivers/misc/SConscript index 76bfaf8946624e6853e07aa21bc493f1eaa43598..927e662b19a7b9bbf5b4410df7f1806976087cf9 100644 --- a/components/drivers/misc/SConscript +++ b/components/drivers/misc/SConscript @@ -26,6 +26,9 @@ if GetDepend(['RT_USING_INPUT_CAPTURE']): if GetDepend(['RT_USING_NULL']): src = src + ['rt_null.c'] +if GetDepend(['RT_USING_ZERO']): + src = src + ['rt_zero.c'] + if GetDepend(['RT_USING_RANDOM']): src = src + ['rt_random.c'] diff --git a/components/drivers/misc/rt_null.c b/components/drivers/misc/rt_null.c index b895c47da4e579a3cd7da7e91bc5c75224e36c3d..3e4cf6f3da6594956160928cca50d7412758cd7c 100644 --- a/components/drivers/misc/rt_null.c +++ b/components/drivers/misc/rt_null.c @@ -14,8 +14,7 @@ static struct rt_device null_dev; static rt_size_t null_read (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size) { - rt_memset(buffer, 0, size); - return size; + return 0; } static rt_size_t null_write (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size) diff --git a/components/drivers/misc/rt_zero.c b/components/drivers/misc/rt_zero.c new file mode 100644 index 0000000000000000000000000000000000000000..f2657a2360b43842bedfc7836e016566a07714a6 --- /dev/null +++ b/components/drivers/misc/rt_zero.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2011-2020, Shanghai Real-Thread Electronic Technology Co.,Ltd + * + * Change Logs: + * Date Author Notes + * 2020-12-03 quanzhao the first version + */ + +#include +#include +#include + +static struct rt_device zero_dev; + +static rt_size_t zero_read (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size) +{ + rt_memset(buffer, 0, size); + return size; +} + +static rt_size_t zero_write (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size) +{ + return size; +} + +static rt_err_t zero_control (rt_device_t dev, int cmd, void *args) +{ + return RT_EOK; +} + +#ifdef RT_USING_DEVICE_OPS +const static struct rt_device_ops zero_ops = +{ + RT_NULL, + RT_NULL, + RT_NULL, + zero_read, + zero_write, + zero_control +}; +#endif + +int zero_device_init(void) +{ + static rt_bool_t init_ok = RT_FALSE; + + if (init_ok) + { + return 0; + } + RT_ASSERT(!rt_device_find("zero")); + zero_dev.type = RT_Device_Class_Miscellaneous; + +#ifdef RT_USING_DEVICE_OPS + zero_dev.ops = &zero_ops; +#else + zero_dev.init = RT_NULL; + zero_dev.open = RT_NULL; + zero_dev.close = RT_NULL; + zero_dev.read = zero_read; + zero_dev.write = zero_write; + zero_dev.control = zero_control; +#endif + + /* no private */ + zero_dev.user_data = RT_NULL; + + rt_device_register(&zero_dev, "zero", RT_DEVICE_FLAG_RDWR); + + init_ok = RT_TRUE; + + return 0; +} +INIT_DEVICE_EXPORT(zero_device_init); +