From 94a9332915fe971277ed6aa86f544c8dd3f459ea Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Fri, 30 Jul 2021 02:42:57 +0800 Subject: [PATCH] =?UTF-8?q?[rtc]=20=E7=A7=BB=E9=99=A4rtc=5Fcore.c/.h=20?= =?UTF-8?q?=E5=B0=86=E5=86=85=E5=AE=B9=E8=BD=AC=E7=A7=BB=E5=88=B0rtc.c/.h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/efm32/drv_rtc.c | 56 ++------ components/drivers/include/drivers/rtc.h | 33 ++++- components/drivers/include/drivers/rtc_core.h | 45 ------- components/drivers/rtc/SConscript | 2 +- components/drivers/rtc/rtc.c | 112 ++++++++++++++++ components/drivers/rtc/rtc_core.c | 123 ------------------ 6 files changed, 156 insertions(+), 215 deletions(-) delete mode 100644 components/drivers/include/drivers/rtc_core.h delete mode 100644 components/drivers/rtc/rtc_core.c diff --git a/bsp/efm32/drv_rtc.c b/bsp/efm32/drv_rtc.c index 9972d3c631..3e842a8e4c 100644 --- a/bsp/efm32/drv_rtc.c +++ b/bsp/efm32/drv_rtc.c @@ -128,49 +128,6 @@ void rt_hw_rtc_isr(rt_device_t device) RTC->IFC = _RTC_IFC_MASK; } -/***************************************************************************//** - * @brief - * Register RTC device - * - * @details - * - * @note - * - * @param[in] device - * Pointer to device descriptor - * - * @param[in] name - * Device name - * - * @param[in] flag - * Configuration flags - * - * @return - * Error code - ******************************************************************************/ -rt_err_t rt_hw_rtc_register( - rt_device_t device, - const char *name, - rt_uint32_t flag) -{ - RT_ASSERT(device != RT_NULL); - - device->type = RT_Device_Class_RTC; - device->rx_indicate = RT_NULL; - device->tx_complete = RT_NULL; - device->init = RT_NULL; - device->open = rt_rtc_open; - device->close = RT_NULL; - device->read = rt_rtc_read; - device->write = RT_NULL; - device->control = rt_rtc_control; - device->user_data = RT_NULL; /* no private */ - - /* register a character device */ - return rt_device_register(device, name, RT_DEVICE_FLAG_RDWR | flag); -} - - /***************************************************************************//** * @brief * Initialize all RTC module related hardware and register RTC device to kernel @@ -224,7 +181,18 @@ void rt_hw_rtc_init(void) } /* register rtc device */ - rt_hw_rtc_register(&rtc, RT_RTC_NAME, EFM32_NO_DATA); + rtc.type = RT_Device_Class_RTC; + rtc.rx_indicate = RT_NULL; + rtc.tx_complete = RT_NULL; + rtc.init = RT_NULL; + rtc.open = rt_rtc_open; + rtc.close = RT_NULL; + rtc.read = rt_rtc_read; + rtc.write = RT_NULL; + rtc.control = rt_rtc_control; + rtc.user_data = RT_NULL; /* no private */ + + rt_device_register(&rtc, RT_RTC_NAME, RT_DEVICE_FLAG_RDWR | EFM32_NO_DATA); } #endif diff --git a/components/drivers/include/drivers/rtc.h b/components/drivers/include/drivers/rtc.h index 9eddf801b7..ab64dd8ec9 100644 --- a/components/drivers/include/drivers/rtc.h +++ b/components/drivers/include/drivers/rtc.h @@ -6,13 +6,42 @@ * Change Logs: * Date Author Notes * 2012-10-10 aozima first version. + * 2021-06-11 iysheng implement RTC v2.0 */ #ifndef __RTC_H__ #define __RTC_H__ -#include -#include +#include + +#define RT_DEVICE_CTRL_RTC_GET_TIME 0x10 /**< get second time */ +#define RT_DEVICE_CTRL_RTC_SET_TIME 0x11 /**< set second time */ +#define RT_DEVICE_CTRL_RTC_GET_TIME_US 0x12 /**< get microsecond time */ +#define RT_DEVICE_CTRL_RTC_SET_TIME_US 0x13 /**< set microsecond time */ +#define RT_DEVICE_CTRL_RTC_GET_ALARM 0x14 /**< get alarm */ +#define RT_DEVICE_CTRL_RTC_SET_ALARM 0x15 /**< set alarm */ + +struct rt_rtc_ops +{ + rt_err_t (*init)(void); + rt_err_t (*get_secs)(void *arg); + rt_err_t (*set_secs)(void *arg); + rt_err_t (*get_alarm)(void *arg); + rt_err_t (*set_alarm)(void *arg); + rt_err_t (*get_usecs)(void *arg); + rt_err_t (*set_usecs)(void *arg); +}; + +typedef struct rt_rtc_device +{ + struct rt_device parent; + const struct rt_rtc_ops *ops; +} rt_rtc_dev_t; + +rt_err_t rt_hw_rtc_register(rt_rtc_dev_t *rtc, + const char *name, + rt_uint32_t flag, + void *data); rt_err_t set_date(rt_uint32_t year, rt_uint32_t month, rt_uint32_t day); rt_err_t set_time(rt_uint32_t hour, rt_uint32_t minute, rt_uint32_t second); diff --git a/components/drivers/include/drivers/rtc_core.h b/components/drivers/include/drivers/rtc_core.h deleted file mode 100644 index e858e9ee28..0000000000 --- a/components/drivers/include/drivers/rtc_core.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2006-2021, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2021-06-11 iysheng first version. - */ - -#ifndef __RTC_CORE_H__ -#define __RTC_CORE_H__ - -#include - -#define RT_DEVICE_CTRL_RTC_GET_TIME 0x10 /**< get second time */ -#define RT_DEVICE_CTRL_RTC_SET_TIME 0x11 /**< set second time */ -#define RT_DEVICE_CTRL_RTC_GET_TIME_US 0x12 /**< get microsecond time */ -#define RT_DEVICE_CTRL_RTC_SET_TIME_US 0x13 /**< set microsecond time */ -#define RT_DEVICE_CTRL_RTC_GET_ALARM 0x14 /**< get alarm */ -#define RT_DEVICE_CTRL_RTC_SET_ALARM 0x15 /**< set alarm */ - -struct rt_rtc_ops -{ - rt_err_t (*init)(void); - rt_err_t (*get_secs)(void *arg); - rt_err_t (*set_secs)(void *arg); - rt_err_t (*get_alarm)(void *arg); - rt_err_t (*set_alarm)(void *arg); - rt_err_t (*get_usecs)(void *arg); - rt_err_t (*set_usecs)(void *arg); -}; - -typedef struct rt_rtc_device -{ - struct rt_device parent; - const struct rt_rtc_ops *ops; -} rt_rtc_dev_t; - -rt_err_t rt_hw_rtc_register(rt_rtc_dev_t *rtc, - const char *name, - rt_uint32_t flag, - void *data); - -#endif /* __RTC_CORE_H__ */ diff --git a/components/drivers/rtc/SConscript b/components/drivers/rtc/SConscript index c3252fe7f9..6ec8bcb3c5 100644 --- a/components/drivers/rtc/SConscript +++ b/components/drivers/rtc/SConscript @@ -7,7 +7,7 @@ CPPPATH = [cwd + '/../include'] group = [] if GetDepend(['RT_USING_RTC']): - src = src + ['rtc.c', 'rtc_core.c'] + src = src + ['rtc.c'] if GetDepend(['RT_USING_ALARM']): src = src + ['alarm.c'] if GetDepend(['RT_USING_SOFT_RTC']): diff --git a/components/drivers/rtc/rtc.c b/components/drivers/rtc/rtc.c index 9e1305cdd7..8d61129bf8 100644 --- a/components/drivers/rtc/rtc.c +++ b/components/drivers/rtc/rtc.c @@ -10,6 +10,7 @@ * 2012-04-16 aozima add scheduler lock for set_date and set_time. * 2018-02-16 armink add auto sync time by NTP * 2021-05-09 Meco Man remove NTP + * 2021-06-11 iysheng implement RTC v2.0 */ #include @@ -20,6 +21,117 @@ #ifdef RT_USING_RTC +#define TRY_DO_RTC_FUNC(rt_rtc_dev, func_name, args) \ + rt_rtc_dev->ops->func_name ? rt_rtc_dev->ops->func_name(args) : -RT_EINVAL; + +/* + * This function initializes rtc_core + */ +static rt_err_t rt_rtc_core_init(struct rt_device *dev) +{ + rt_rtc_dev_t *rtc_core; + + RT_ASSERT(dev != RT_NULL); + rtc_core = (rt_rtc_dev_t *)dev; + if (rtc_core->ops->init) + { + return (rtc_core->ops->init()); + } + + return (-RT_ENOSYS); +} + +static rt_err_t rt_rtc_core_open(struct rt_device *dev, rt_uint16_t oflag) +{ + return (RT_EOK); +} + +static rt_err_t rt_rtc_core_close(struct rt_device *dev) +{ + /* Add close member function in rt_rtc_ops when need, + * then call that function here. + * */ + return (RT_EOK); +} + +static rt_err_t rt_rtc_core_control(struct rt_device *dev, + int cmd, + void *args) +{ + rt_rtc_dev_t *rtc_core; + rt_err_t ret = -RT_EINVAL; + + RT_ASSERT(dev != RT_NULL); + rtc_core = (rt_rtc_dev_t *)dev; + + switch (cmd) + { + case RT_DEVICE_CTRL_RTC_GET_TIME: + ret = TRY_DO_RTC_FUNC(rtc_core, get_secs, args); + break; + case RT_DEVICE_CTRL_RTC_SET_TIME: + ret = TRY_DO_RTC_FUNC(rtc_core, set_secs, args); + break; + case RT_DEVICE_CTRL_RTC_GET_TIME_US: + ret = TRY_DO_RTC_FUNC(rtc_core, get_usecs, args); + break; + case RT_DEVICE_CTRL_RTC_SET_TIME_US: + ret = TRY_DO_RTC_FUNC(rtc_core, set_usecs, args); + break; + case RT_DEVICE_CTRL_RTC_GET_ALARM: + ret = TRY_DO_RTC_FUNC(rtc_core, get_alarm, args); + break; + case RT_DEVICE_CTRL_RTC_SET_ALARM: + ret = TRY_DO_RTC_FUNC(rtc_core, set_alarm, args); + break; + default: + break; + } + + return ret; +} +#ifdef RT_USING_DEVICE_OPS +const static struct rt_device_ops rtc_core_ops = +{ + rt_rtc_core_init, + rt_rtc_core_open, + rt_rtc_core_close, + RT_NULL, + RT_NULL, + rt_rtc_core_control, +}; +#endif + +rt_err_t rt_hw_rtc_register(rt_rtc_dev_t *rtc, + const char *name, + rt_uint32_t flag, + void *data) +{ + struct rt_device *device; + RT_ASSERT(rtc != RT_NULL); + + device = &(rtc->parent); + + device->type = RT_Device_Class_RTC; + device->rx_indicate = RT_NULL; + device->tx_complete = RT_NULL; + +#ifdef RT_USING_DEVICE_OPS + device->ops = &rtc_core_ops; +#else + device->init = rt_rtc_core_init; + device->open = rt_rtc_core_open; + device->close = rt_rtc_core_close; + device->read = RT_NULL; + device->write = RT_NULL; + device->control = rt_rtc_core_control; +#endif + device->user_data = data; + + /* register a character device */ + return rt_device_register(device, name, flag); +} + /** * Set system date(time not modify, local timezone). * diff --git a/components/drivers/rtc/rtc_core.c b/components/drivers/rtc/rtc_core.c deleted file mode 100644 index 8edec43095..0000000000 --- a/components/drivers/rtc/rtc_core.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * COPYRIGHT (C) 2011-2021, Real-Thread Information Technology Ltd - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2021-06-11 iysheng first version. - */ - -#include - -#define TRY_DO_RTC_FUNC(rt_rtc_dev, func_name, args) \ - rt_rtc_dev->ops->func_name ? rt_rtc_dev->ops->func_name(args) : -RT_EINVAL; - -/* - * This function initializes rtc_core - */ -static rt_err_t rt_rtc_core_init(struct rt_device *dev) -{ - rt_rtc_dev_t *rtc_core; - - RT_ASSERT(dev != RT_NULL); - rtc_core = (rt_rtc_dev_t *)dev; - if (rtc_core->ops->init) - { - return (rtc_core->ops->init()); - } - - return (-RT_ENOSYS); -} - -static rt_err_t rt_rtc_core_open(struct rt_device *dev, rt_uint16_t oflag) -{ - return (RT_EOK); -} - -static rt_err_t rt_rtc_core_close(struct rt_device *dev) -{ - /* Add close member function in rt_rtc_ops when need, - * then call that function here. - * */ - return (RT_EOK); -} - -static rt_err_t rt_rtc_core_control(struct rt_device *dev, - int cmd, - void *args) -{ - rt_rtc_dev_t *rtc_core; - rt_err_t ret = -RT_EINVAL; - - RT_ASSERT(dev != RT_NULL); - rtc_core = (rt_rtc_dev_t *)dev; - - switch (cmd) - { - case RT_DEVICE_CTRL_RTC_GET_TIME: - ret = TRY_DO_RTC_FUNC(rtc_core, get_secs, args); - break; - case RT_DEVICE_CTRL_RTC_SET_TIME: - ret = TRY_DO_RTC_FUNC(rtc_core, set_secs, args); - break; - case RT_DEVICE_CTRL_RTC_GET_TIME_US: - ret = TRY_DO_RTC_FUNC(rtc_core, get_usecs, args); - break; - case RT_DEVICE_CTRL_RTC_SET_TIME_US: - ret = TRY_DO_RTC_FUNC(rtc_core, set_usecs, args); - break; - case RT_DEVICE_CTRL_RTC_GET_ALARM: - ret = TRY_DO_RTC_FUNC(rtc_core, get_alarm, args); - break; - case RT_DEVICE_CTRL_RTC_SET_ALARM: - ret = TRY_DO_RTC_FUNC(rtc_core, set_alarm, args); - break; - default: - break; - } - - return ret; -} -#ifdef RT_USING_DEVICE_OPS -const static struct rt_device_ops rtc_core_ops = -{ - rt_rtc_core_init, - rt_rtc_core_open, - rt_rtc_core_close, - RT_NULL, - RT_NULL, - rt_rtc_core_control, -}; -#endif - -rt_err_t rt_hw_rtc_register(rt_rtc_dev_t *rtc, - const char *name, - rt_uint32_t flag, - void *data) -{ - struct rt_device *device; - RT_ASSERT(rtc != RT_NULL); - - device = &(rtc->parent); - - device->type = RT_Device_Class_RTC; - device->rx_indicate = RT_NULL; - device->tx_complete = RT_NULL; - -#ifdef RT_USING_DEVICE_OPS - device->ops = &rtc_core_ops; -#else - device->init = rt_rtc_core_init; - device->open = rt_rtc_core_open; - device->close = rt_rtc_core_close; - device->read = RT_NULL; - device->write = RT_NULL; - device->control = rt_rtc_core_control; -#endif - device->user_data = data; - - /* register a character device */ - return rt_device_register(device, name, flag); -} - -- GitLab