summaryrefslogtreecommitdiff
path: root/src/kernel
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-12-12 15:30:45 -0800
committerKeith Packard <keithp@keithp.com>2017-12-12 15:30:45 -0800
commitdb352bd0723e8d640bb034bc14e5ad193f0afe1d (patch)
tree3f414896a52bfaea41c4c5bfe8b4e3b2473aba57 /src/kernel
parent09ea349f5b37e257e8ca23ead493ba1694395530 (diff)
altos/kernel: Allow ao_cmd to be built without tasking
Useful for single-threaded applications, like lambdakey Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/kernel')
-rw-r--r--src/kernel/ao.h3
-rw-r--r--src/kernel/ao_cmd.c6
-rw-r--r--src/kernel/ao_notask.c15
3 files changed, 23 insertions, 1 deletions
diff --git a/src/kernel/ao.h b/src/kernel/ao.h
index 139050cf..2bd0e367 100644
--- a/src/kernel/ao.h
+++ b/src/kernel/ao.h
@@ -218,6 +218,9 @@ ao_cmd_register(const __code struct ao_cmds *cmds);
void
ao_cmd_init(void);
+void
+ao_cmd(void);
+
#if HAS_CMD_FILTER
/*
* Provided by an external module to filter raw command lines
diff --git a/src/kernel/ao_cmd.c b/src/kernel/ao_cmd.c
index c1e9cef2..405fd126 100644
--- a/src/kernel/ao_cmd.c
+++ b/src/kernel/ao_cmd.c
@@ -423,11 +423,13 @@ ao_loader(void)
}
#endif
+#if HAS_TASK
__xdata struct ao_task ao_cmd_task;
+#endif
__code struct ao_cmds ao_base_cmds[] = {
{ help, "?\0Help" },
-#if HAS_TASK_INFO
+#if HAS_TASK_INFO && HAS_TASK
{ ao_task_info, "T\0Tasks" },
#endif
{ echo, "E <0 off, 1 on>\0Echo" },
@@ -445,5 +447,7 @@ void
ao_cmd_init(void)
{
ao_cmd_register(&ao_base_cmds[0]);
+#if HAS_TASK
ao_add_task(&ao_cmd_task, ao_cmd, "cmd");
+#endif
}
diff --git a/src/kernel/ao_notask.c b/src/kernel/ao_notask.c
index 00fe1ed6..7207353a 100644
--- a/src/kernel/ao_notask.c
+++ b/src/kernel/ao_notask.c
@@ -39,6 +39,21 @@ ao_sleep(__xdata void *wchan)
return 0;
}
+#if HAS_AO_DELAY
+void
+ao_delay(uint16_t ticks)
+{
+ AO_TICK_TYPE target;
+
+ if (!ticks)
+ ticks = 1;
+ target = ao_tick_count + ticks;
+ do {
+ ao_sleep(&ao_time);
+ } while ((int16_t) (target - ao_tick_count) > 0);
+}
+#endif
+
void
ao_wakeup(__xdata void *wchan)
{