From 2cc9c98ae7ca0070e9d8161dc06070245f8a46ca Mon Sep 17 00:00:00 2001
From: patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>
Date: Sun, 30 Nov 2008 18:51:40 +0000
Subject: [PATCH] Add CONFIG_SIM_WALLTIME option

git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1360 42af7a65-404d-4744-a932-0658087f49c3
---
 arch/sim/src/up_hostusleep.c | 66 ++++++++++++++++++++++++++++++++++++
 arch/sim/src/up_idle.c       | 31 +++++++++++++++++
 2 files changed, 97 insertions(+)
 create mode 100644 arch/sim/src/up_hostusleep.c

diff --git a/arch/sim/src/up_hostusleep.c b/arch/sim/src/up_hostusleep.c
new file mode 100644
index 0000000000..67eb3e2214
--- /dev/null
+++ b/arch/sim/src/up_hostusleep.c
@@ -0,0 +1,66 @@
+/****************************************************************************
+ * arch/sim/src/up_hostusleep.c
+ *
+ *   Copyright (C) 2008 Gregory Nutt. All rights reserved.
+ *   Author: Gregory Nutt <spudmonkey@racsa.co.cr>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ *    used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <unistd.h>
+
+/****************************************************************************
+ * Private Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: up_hostusleep
+ ****************************************************************************/
+
+int up_hostusleep(unsigned int usec)
+{
+  return usleep(usec);
+}
+
diff --git a/arch/sim/src/up_idle.c b/arch/sim/src/up_idle.c
index 84177f106f..e830687134 100644
--- a/arch/sim/src/up_idle.c
+++ b/arch/sim/src/up_idle.c
@@ -39,6 +39,7 @@
 
 #include <nuttx/config.h>
 #include <sys/types.h>
+#include <time.h>
 #include <nuttx/arch.h>
 #include "up_internal.h"
 
@@ -50,6 +51,21 @@
  * Private Data
  ****************************************************************************/
 
+#ifdef CONFIG_SIM_X11FB
+static int g_x11refresh = 0;
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+#if defined(CONFIG_SIM_WALLTIME) || defined(CONFIG_SIM_X11FB)
+extern int up_hostusleep(unsigned int usec);
+#ifdef CONFIG_SIM_X11FB
+extern void up_x11update(void);
+#endif
+#endif
+
 /****************************************************************************
  * Private Functions
  ****************************************************************************/
@@ -85,6 +101,21 @@ void up_idle(void)
 
 #if defined(CONFIG_NET) && defined(linux)
   uipdriver_loop();
+#endif
+
+  /* Wait a bit so that the sched_process_timer() is called close to the
+   * correct rate.
+   */
+
+#if defined(CONFIG_SIM_WALLTIME) || defined(CONFIG_SIM_X11FB)
+  (void)up_hostusleep(1000000 / CLK_TCK);
+#ifdef CONFIG_SIM_X11FB
+  g_x11refresh += 1000000 / CLK_TCK;
+  if (g_x11refresh > 500000)
+    {
+      up_x11update();
+    }
+#endif
 #endif
 }
 
-- 
GitLab