Browse Source

[simulator] 增加RTC配置项(默认开启)

Meco Man 3 years ago
parent
commit
569facb12d

+ 6 - 2
bsp/simulator/.config

@@ -164,7 +164,9 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64
 # CONFIG_RT_USING_MTD_NOR is not set
 # CONFIG_RT_USING_MTD_NAND is not set
 # CONFIG_RT_USING_PM is not set
-# CONFIG_RT_USING_RTC is not set
+CONFIG_RT_USING_RTC=y
+# CONFIG_RT_USING_ALARM is not set
+# CONFIG_RT_USING_SOFT_RTC is not set
 # CONFIG_RT_USING_SDIO is not set
 # CONFIG_RT_USING_SPI is not set
 # CONFIG_RT_USING_WDT is not set
@@ -705,8 +707,10 @@ CONFIG_NETDEV_IPV6=0
 CONFIG_SOC_SIMULATOR=y
 
 #
-# Onboard Peripheral Drivers
+# Peripheral Drivers
 #
 CONFIG_RT_USING_DFS_WINSHAREDIR=y
+CONFIG_BSP_USING_RTC=y
+# CONFIG_BSP_USING_ALARM is not set
 CONFIG_BSP_USING_SOCKET=y
 # CONFIG_BSP_USING_LVGL is not set

+ 12 - 1
bsp/simulator/Kconfig

@@ -24,13 +24,24 @@ config SOC_SIMULATOR
     select RT_USING_USER_MAIN
     default y
 
-menu "Onboard Peripheral Drivers"
+menu "Peripheral Drivers"
 
     config RT_USING_DFS_WINSHAREDIR
         bool "Enable shared file system between Windows"
         select RT_USING_POSIX_FS
         default y
 
+    config BSP_USING_RTC
+        bool "Enable RTC"
+        select RT_USING_RTC
+        default y
+
+    config BSP_USING_ALARM
+        bool "Enable RTC alarm"
+        select RT_USING_ALARM
+        depends on BSP_USING_RTC
+        default n
+
     config BSP_USING_SOCKET
         bool "Enable BSD Socket"
         select RT_USING_POSIX_FS

+ 1 - 1
bsp/simulator/applications/mnt.c

@@ -42,7 +42,7 @@ static int mnt_init(void)
     else
     {
         LOG_W("[sd0] File System on SD ('sd0') initialization failed!");
-        LOG_W("[sd0] Try to format and re-mount again...");
+        LOG_W("[sd0] Try to format and re-mount...");
         if (dfs_mkfs("elm", "sd0") == 0)
         {
             if (dfs_mount("sd0", "/sd", "elm", 0, 0) == 0)

+ 2 - 0
bsp/simulator/drivers/SConscript

@@ -38,6 +38,8 @@ else:
         LIBPATH.append(os.path.abspath(os.path.join(cwd, '../SDL2/lib/x86')))
         CPPPATH.append(os.path.abspath(os.path.join(cwd, '../SDL2/include')))
 
+if GetDepend('BSP_USING_RTC') == False:
+    SrcRemove(src, 'drv_rtc.c')
 if GetDepend('RT_USING_DFS') == False or GetDepend('RT_USING_DFS_ELMFAT') == False:
     SrcRemove(src, 'sd_sim.c')
 if GetDepend('RT_USING_DFS') == False or GetDepend('RT_USING_MTD_NAND') == False:

+ 18 - 34
bsp/simulator/drivers/drv_rtc.c

@@ -6,19 +6,15 @@
  * Change Logs:
  * Date           Author       Notes
  * 2021-04-13     armink       the first version
+ * 2022-05-17     Meco Man     improve and beautify
  */
 
 #include <sys/time.h>
-#include <string.h>
-#include <rtthread.h>
 #include <rtdevice.h>
 
-#ifdef RT_USING_RTC
-
 static struct rt_device rtc_dev;
 
-#ifdef RT_USING_ALARM
-
+#ifdef BSP_USING_ALARM
 static struct rt_rtc_wkalarm wkalarm;
 static struct rt_timer alarm_time;
 
@@ -42,15 +38,15 @@ static void soft_rtc_alarm_update(struct rt_rtc_wkalarm *palarm)
         rt_timer_stop(&alarm_time);
     }
 }
-
-#endif
+#endif /* BSP_USING_ALARM */
 
 static void get_rtc_timeval(struct timeval *tv)
 {
     struct tm newtime = { 0 };
     SYSTEMTIME sys_time;
 
-    GetSystemTime(&sys_time);
+    GetSystemTime(&sys_time); /* get RTC from Windows */
+
     newtime.tm_year = sys_time.wYear - 1900;
     newtime.tm_mon = sys_time.wMonth - 1;
     newtime.tm_mday = sys_time.wDay;
@@ -62,9 +58,8 @@ static void get_rtc_timeval(struct timeval *tv)
     tv->tv_usec = sys_time.wMilliseconds * 1000UL;
 }
 
-static rt_err_t soft_rtc_control(rt_device_t dev, int cmd, void *args)
+static rt_err_t windows_rtc_control(rt_device_t dev, int cmd, void *args)
 {
-    __time32_t *t;
     struct tm newtime;
 
     RT_ASSERT(dev != RT_NULL);
@@ -83,22 +78,24 @@ static rt_err_t soft_rtc_control(rt_device_t dev, int cmd, void *args)
         get_rtc_timeval((struct timeval *) args);
         break;
     }
+#ifdef BSP_USING_ALARM
     case RT_DEVICE_CTRL_RTC_SET_TIME:
     {
-#ifdef RT_USING_ALARM
         soft_rtc_alarm_update(&wkalarm);
-#endif
         break;
     }
-#ifdef RT_USING_ALARM
     case RT_DEVICE_CTRL_RTC_GET_ALARM:
+    {
         *((struct rt_rtc_wkalarm *)args) = wkalarm;
         break;
+    }
     case RT_DEVICE_CTRL_RTC_SET_ALARM:
+    {
         wkalarm = *((struct rt_rtc_wkalarm *)args);
         soft_rtc_alarm_update(&wkalarm);
         break;
-#endif
+    }
+#endif /* BSP_USING_ALARM */
     default:
         return -RT_ERROR;
     }
@@ -114,22 +111,16 @@ const static struct rt_device_ops soft_rtc_ops =
     RT_NULL,
     RT_NULL,
     RT_NULL,
-    soft_rtc_control
+    windows_rtc_control
 };
 #endif
 
-int rt_win_rtc_init(void)
+int rt_windows_rtc_init(void)
 {
-    static rt_bool_t init_ok = RT_FALSE;
-
-    if (init_ok)
-    {
-        return 0;
-    }
     /* make sure only one 'rtc' device */
     RT_ASSERT(!rt_device_find("rtc"));
 
-#ifdef RT_USING_ALARM
+#ifdef BSP_USING_ALARM
     rt_timer_init(&alarm_time,
         "alarm",
         alarm_timeout,
@@ -149,18 +140,11 @@ int rt_win_rtc_init(void)
     rtc_dev.close = RT_NULL;
     rtc_dev.read = RT_NULL;
     rtc_dev.write = RT_NULL;
-    rtc_dev.control = soft_rtc_control;
+    rtc_dev.control = windows_rtc_control;
 #endif
-
-    /* no private */
-    rtc_dev.user_data = RT_NULL;
+    rtc_dev.user_data = RT_NULL; /* no private */
 
     rt_device_register(&rtc_dev, "rtc", RT_DEVICE_FLAG_RDWR);
-
-    init_ok = RT_TRUE;
-
     return 0;
 }
-INIT_BOARD_EXPORT(rt_win_rtc_init);
-
-#endif /* RT_USING_RTC */
+INIT_BOARD_EXPORT(rt_windows_rtc_init);

+ 3 - 1
bsp/simulator/rtconfig.h

@@ -98,6 +98,7 @@
 #define RT_USING_SERIAL_V1
 #define RT_SERIAL_USING_DMA
 #define RT_SERIAL_RB_BUFSZ 64
+#define RT_USING_RTC
 
 /* Using USB */
 
@@ -217,9 +218,10 @@
 
 #define SOC_SIMULATOR
 
-/* Onboard Peripheral Drivers */
+/* Peripheral Drivers */
 
 #define RT_USING_DFS_WINSHAREDIR
+#define BSP_USING_RTC
 #define BSP_USING_SOCKET
 #include "rtconfig_project.h"