Locally Made Pebbles:Alarm Clock

This alarm clock was created using a Python script plus a low-level device driver in C.

It provides the normal functions of keeping the time and sounding an alarm. However, all functions are accessible remotely over the XRM RPC interface.

The following XML WSDL description is used: WSDL.

Alarm Clock Pushlogic Bundle

def bundle PushClock()
{
  pragma elab = false;
  inout Timer#Timenow#hour : {0..23}, Timer#Timenow#minute : {0..59};
  output Display#leds#Hour : {0..23}, Display#leds#Minute : {0..59};
  input buttons#now : {0 : stop hour alarm time minute alarm_hour alarm_minute alarm_stop};
  local Times#Alarm#Hour  : {0..23}, Times#Alarm#Minute  : {0..59};
  output audio#buzzer : {0 : 1};
  if (buttons#now == alarm)
    {
      Display#leds#Hour := Times#Alarm#Hour;
      Display#leds#Minute := Times#Alarm#Minute;
    }
  else if (buttons#now == alarm_hour)
    {
      Display#leds#Hour := Times#Alarm#Hour;
      Display#leds#Minute := Times#Alarm#Minute;
      Times#Alarm#Hour := (Times#Alarm#Hour == 23) ? 0 : Times#Alarm#Hour + 1;  
    }
  else if (buttons#now == alarm_minute)
    {
      Display#leds#Hour := Times#Alarm#Hour;
      Display#leds#Minute := Times#Alarm#Minute;
      Times#Alarm#Minute := (Times#Alarm#Minute == 59) ? 0 : Times#Alarm#Minute + 1;
    }
  else if (buttons#now == alarm_stop)
    {
      Display#leds#Hour := Times#Alarm#Hour;
      Display#leds#Minute := Times#Alarm#Minute;
      Times#Alarm#Minute := 0;
      Times#Alarm#Hour := 0;
    }
  else if (buttons#now == stop)
    audio#buzzer := 0;
  else if ((Timer#Timenow#hour == Times#Alarm#Hour) &&
           (Timer#Timenow#minute == Times#Alarm#Minute))
    audio#buzzer := 1;
  else
    {
      Display#leds#Hour := Timer#Timenow#hour;
      Display#leds#Minute := Timer#Timenow#minute;
    }
}
Up.