mirror of
git://projects.qi-hardware.com/iris.git
synced 2024-10-02 18:35:28 +03:00
72 lines
1.5 KiB
Plaintext
72 lines
1.5 KiB
Plaintext
|
#pypp 0
|
||
|
#include <iris.hh>
|
||
|
#include <ui.hh>
|
||
|
|
||
|
enum Ins:
|
||
|
TOTAL_TIME
|
||
|
START
|
||
|
NUM_INS
|
||
|
|
||
|
enum Outs:
|
||
|
CURRENT_TIME
|
||
|
ALARM
|
||
|
NUM_OUTS
|
||
|
|
||
|
static UI <NUM_INS, NUM_OUTS> ui
|
||
|
static UI <NUM_INS, NUM_OUTS>::in <unsigned> total_time
|
||
|
static UI <NUM_INS, NUM_OUTS>::in_event do_start
|
||
|
static UI <NUM_INS, NUM_OUTS>::out <unsigned> current_time
|
||
|
static UI <NUM_INS, NUM_OUTS>::out_event do_alarm
|
||
|
|
||
|
static bool ticking
|
||
|
|
||
|
static void event (unsigned code):
|
||
|
switch code:
|
||
|
case TOTAL_TIME:
|
||
|
break
|
||
|
case START:
|
||
|
current_time = total_time
|
||
|
if !ticking:
|
||
|
if !current_time:
|
||
|
do_alarm ()
|
||
|
else:
|
||
|
ticking = true
|
||
|
Iris::my_receiver.set_alarm (HZ)
|
||
|
break
|
||
|
default:
|
||
|
Iris::panic (0, "invalid event for alarm clock")
|
||
|
|
||
|
Iris::Num start ():
|
||
|
ticking = false;
|
||
|
Iris::Cap ui_cap = Iris::my_receiver.create_capability (0)
|
||
|
ui.init (ui_cap.copy ());
|
||
|
Iris::free_cap (ui_cap)
|
||
|
total_time.init ()
|
||
|
do_start.init ()
|
||
|
current_time.init ()
|
||
|
do_alarm.init ()
|
||
|
ui.add_in (&total_time, TOTAL_TIME);
|
||
|
ui.add_in (&do_start, START);
|
||
|
ui.add_out (¤t_time, CURRENT_TIME);
|
||
|
ui.add_out (&do_alarm, ALARM);
|
||
|
Iris::my_parent.init_done ()
|
||
|
|
||
|
while true:
|
||
|
Iris::wait ()
|
||
|
switch Iris::recv.protected_data.l:
|
||
|
case ~0:
|
||
|
// alarm.
|
||
|
current_time = current_time - 1
|
||
|
if !current_time:
|
||
|
do_alarm ()
|
||
|
ticking = false
|
||
|
else:
|
||
|
// TODO: use rtc for scheduling an event.
|
||
|
Iris::my_receiver.set_alarm (HZ)
|
||
|
continue
|
||
|
case 0:
|
||
|
// ui event.
|
||
|
if !ui.event (&event):
|
||
|
// Exit request.
|
||
|
return 0
|