altos: Add bit-bang i2c driver
[fw/altos] / src / kernel / ao_notask.c
index 00fe1ed61fc78d150dcf4e22102415e999d9d948..8c5743fdecd0a0a1f7ae62c528e32d27c98a138b 100644 (file)
@@ -21,7 +21,7 @@
 static volatile void *ao_wchan;
 
 uint8_t
-ao_sleep(__xdata void *wchan)
+ao_sleep(void *wchan)
 {
 #if 1
        ao_wchan = wchan;
@@ -39,8 +39,26 @@ ao_sleep(__xdata void *wchan)
        return 0;
 }
 
+#if HAS_AO_DELAY
 void
-ao_wakeup(__xdata void *wchan)
+ao_delay_until(AO_TICK_TYPE target)
+{
+       ao_arch_block_interrupts();
+       while ((int16_t) (target - ao_tick_count) > 0)
+               ao_sleep((void *) &ao_tick_count);
+       ao_arch_release_interrupts();
+}
+
+void
+ao_delay(AO_TICK_TYPE ticks)
+{
+       ao_delay_until(ao_time() + ticks);
+}
+
+#endif
+
+void
+ao_wakeup(void *wchan)
 {
        (void) wchan;
        ao_wchan = 0;