diff options
Diffstat (limited to 'ui/daemon')
| -rw-r--r-- | ui/daemon/ui.c | 57 | ||||
| -rw-r--r-- | ui/daemon/vars.py | 3 |
2 files changed, 60 insertions, 0 deletions
diff --git a/ui/daemon/ui.c b/ui/daemon/ui.c new file mode 100644 index 0000000..2417788 --- /dev/null +++ b/ui/daemon/ui.c @@ -0,0 +1,57 @@ +#include <signal.h> + +bool g_running; +uint64_t g_step_block; + +void sig_handler(int signo) { + (void)signo; + + if (g_running) { + log_warn("Signal received, will stop simulator soon..."); + g_running = false; + } +} + +void step_block(void) { + clock_t beg = clock(); + salis_step(g_step_block - (g_steps % g_step_block)); + clock_t end = clock(); + + if ((end - beg) < (CLOCKS_PER_SEC * 4)) { + g_step_block <<= 1; + } + + if ((end - beg) >= (CLOCKS_PER_SEC * 2) && g_step_block != 1) { + g_step_block >>= 1; + } + + float secs = (float)(end - beg) / (float)CLOCKS_PER_SEC; + float steps_per_sec = (float)g_step_block / secs; + + log_info("Simulator running on step %#lx @%#lxf steps/s", g_steps, (int)steps_per_sec); +} + +int main(void) { + g_running = true; + g_step_block = 1; + + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); + +#if defined(COMMAND_NEW) + salis_init(); +#elif defined(COMMAND_LOAD) + salis_load(); +#endif + + while (g_running) { + step_block(); + } + + log_info("Saving simulation..."); + salis_save(SIM_PATH); + salis_free(); + + log_info("Exiting salis..."); + return 0; +} diff --git a/ui/daemon/vars.py b/ui/daemon/vars.py new file mode 100644 index 0000000..9c2a9f3 --- /dev/null +++ b/ui/daemon/vars.py @@ -0,0 +1,3 @@ +flags = set() +defines = set() +links = set() |
