altos: Make TeleMini v2.0 fit
[fw/altos] / src / core / ao_task.h
index 4319d63253e218ef69f1930c5cd2f081c29c882b..e3a311ed1c187f2eb8defda23998375d3661ead6 100644 (file)
 
 #ifndef _AO_TASK_H_
 #define _AO_TASK_H_
+#if HAS_TASK_QUEUE
+#include <ao_list.h>
+#endif
+
+#ifndef HAS_TASK_INFO
+#define HAS_TASK_INFO 1
+#endif
 
 /* An AltOS task */
 struct ao_task {
@@ -25,6 +32,10 @@ struct ao_task {
        ao_arch_task_members            /* any architecture-specific fields */
        uint8_t task_id;                /* unique id */
        __code char *name;              /* task name */
+#if HAS_TASK_QUEUE
+       struct ao_list  queue;
+       struct ao_list  alarm_queue;
+#endif
        uint8_t stack[AO_STACK_SIZE];   /* saved stack */
 #if HAS_SAMPLE_PROFILE
        uint32_t ticks;
@@ -34,13 +45,16 @@ struct ao_task {
 #endif
 };
 
+#ifndef AO_NUM_TASKS
 #define AO_NUM_TASKS           16      /* maximum number of tasks */
+#endif
+
 #define AO_NO_TASK             0       /* no task id */
 
 extern __xdata struct ao_task * __xdata ao_tasks[AO_NUM_TASKS];
 extern __data uint8_t ao_num_tasks;
-extern __data uint8_t ao_cur_task_index;
 extern __xdata struct ao_task *__data ao_cur_task;
+extern __data uint8_t ao_task_minimize_latency;        /* Reduce IRQ latency */
 
 /*
  ao_task.c
@@ -74,6 +88,13 @@ ao_yield(void) ao_arch_naked_declare;
 void
 ao_add_task(__xdata struct ao_task * task, void (*start)(void), __code char *name) __reentrant;
 
+#if HAS_TASK_QUEUE
+/* Called on timer interrupt to check alarms */
+extern uint16_t        ao_task_alarm_tick;
+void
+ao_task_check_alarm(uint16_t tick);
+#endif
+
 /* Terminate the current task */
 void
 ao_exit(void);
@@ -86,4 +107,11 @@ ao_task_info(void);
 void
 ao_start_scheduler(void);
 
+#if HAS_TASK_QUEUE
+void
+ao_task_init(void);
+#else
+#define ao_task_init()
+#endif
+
 #endif