+#if CONFIG_KERN
+ static void NORETURN thermo_poll(void)
+ {
+ for (;;)
+ {
+ poll();
+ timer_delay(CONFIG_THERMO_INTERVAL_MS);
+ }
+ }
+#else
+ /**
+ * Thermo soft interrupt.
+ */
+ static void thermo_softint(void)
+ {
+ poll();
+ timer_add(&thermo_timer);
+ }
+#endif
+
+/**
+ * Starts a thermo-regulation for channel \a dev, and turn off timer
+ * when \a on_time was elapsed.
+ */
+void thermo_timer(ThermoDev dev, mtime_t on_time)
+{
+ ASSERT(dev < THERMO_CNT);
+ devs[dev].on_time = timer_clock() + ms_to_ticks(on_time);
+ devs[dev].status |= THERMO_TIMER;
+ thermo_start(dev);