DVD Player Example.DVD Player Pebbles:
The selection of output device, over the network, is unfortunately not implemented in this version of the script.
def pebble dvdControl
{
input devices#keypad#now : { Stop : Play Pause Eject Tfwd Trwd};
output works#cmd : {stop : play pause resume eject};
output devices#keypad#playled : {0 : 1};
output devices#keypad#pauseled : {0 : 1};
output devices#keypad#stopled : {0 : 1};
input parts#mech#stat#track : {0..99};
input parts#mech#stat#sec : {0..59};
input parts#mech#stat#min : {0..99};
input parts#mech#stat#idx : {0..99};
output parts#disp#track : {0..99};
output parts#disp#sec : {0..59};
output parts#disp#min : {0..99};
output parts#disp#idx : {0..99};
// Display update
with parts#mech#stat
{
parts#disp#track := #track;
parts#disp#min := #min;
parts#disp#sec := #sec;
parts#disp#idx := #idx;
}
local keypad_old : { Stop : Play Pause Eject Tfwd Trwd };
with (devices#keypad)
{
keypad_old := #now;
if (#now == Stop)
{
#(playled, pauseled, stopled) := (0,0,1);
works#cmd := Stop;
works#cmd == stop;
}
else if (#now == Play)
{
#(playled, pauseled, stopled) := (1,0,0);
works#cmd := play;
}
else if (#now == Pause && keypad_old != Pause)
{
if (works#cmd == play)
{
#(playled, pauseled, stopled) := (1,1,0);
works#cmd := pause;
}
else if (works#cmd == pause)
{
#(playled, pauseled, stopled) := (1,0,0);
works#cmd := resume;
}
}
else if (#now == Eject)
{
#(playled, pauseled, stopled) := (0,0,0);
works#cmd := eject;
}
}
// Trackup and down are more interesting because all scripts need to be idempotent (multi-runnable)
if (^devices#keypad#now)
{
if (devices#keypad#now == Tfwd)
{
parts#mech#stat#track := parts#mech#stat#track + 1;
// If this is end of disk, then a rollback will undo this assign
}
else if (devices#keypad#now == Trwd)
{
parts#mech#stat#track := parts#mech#stat#track - 1;
// If this is end of disk, then a rollback will undo this assign
}
}
}
// EOF
|