public class Audio: zavai.Service
{
- protected Omhacks.Led vibrator;
- protected bool has_vibrator;
-
/*
protected dynamic DBus.Object audiodev;
protected dynamic DBus.Object vibdev;
{
Object(name: "audio");
- has_vibrator = (vibrator.init("neo1973:vibrator") == 0);
-
/*
audiodev = zavai.registry.sbus.get_object(
"org.freesmartphone.odeviced",
"/org/freesmartphone/Device/LED/neo1973_vibrator",
"org.freesmartphone.Device.LED");
*/
- if (has_vibrator)
- {
- zavai.log.warning("audio: can notify alarm triggers");
- clock.alarm_trigger_queue.triggered += on_alarm_trigger;
- clock.alarm_trigger_queue.acked += on_alarm_done;
- clock.alarm_trigger_queue.canceled += on_alarm_done;
- } else {
- zavai.log.warning("audio: no way to notify alarm triggers");
- }
+ clock.alarm_trigger_queue.triggered += on_alarm_trigger;
+ clock.alarm_trigger_queue.acked += on_alarm_done;
+ clock.alarm_trigger_queue.canceled += on_alarm_done;
}
public void on_alarm_trigger(clock.AlarmTriggerInfo info)
{
- zavai.log.debug("Start vibrator");
- vibrator.brightness = 256;
- // FIXME: is there a better way? I hope there is a better way. Please
- // tell me there is a better way.
- var trig = "timer";
- for (int i = 0; ; ++i)
+ zavai.log.debug("Make noise for alarm");
+ if (zavai.led.vibrator != null)
{
- vibrator.trigger[i] = (char)trig[i];
- if (trig[i] == 0) break;
+ var state = new zavai.led.LedState("alarm");
+ state.set_blink(255);
+ zavai.led.vibrator.push_state(state);
}
- vibrator.delay_on = 200;
- vibrator.delay_off = 300;
- vibrator.set();
+ soundplayer.play(config.ringtone_alarm, true);
}
public void on_alarm_done(clock.AlarmTriggerInfo info)
{
- zavai.log.debug("Stop vibrator");
- var trig = "none";
- for (int i = 0; ; ++i)
- {
- vibrator.trigger[i] = (char)trig[i];
- if (trig[i] == 0) break;
- }
- vibrator.brightness = 0;
- vibrator.set();
+ zavai.log.debug("Stop noise for alarm");
+ if (zavai.led.vibrator != null)
+ zavai.led.vibrator.pop_state("alarm");
+ soundplayer.stop();
}
-
-/*
- public void notify_alarm(zavai.clock.Alarm a)
- {
- // Wiggle screen to turn on backlight
- zavai.ui.power.backlight.wiggle();
- try {
- // Method does not exist in this frameworkd
- vibdev.BlinkSeconds(5, 500, 200);
- } catch (Error e) {
- zavai.log.error("Cannot blink vibrator: " + e.message);
- }
- // TODO: play music?
- }
-*/
}
public class Player: zavai.Resource, Object
protected Player master;
protected bool loop;
protected string uri;
+ public signal void state_changed(Gst.State new_state);
public Player()
{
public void play(string uri, bool loop = false)
{
+stderr.printf("Playing %s\n", uri);
this.uri = uri;
if (slave != null && slave.playing)
this.loop = loop;
}
+ public Gst.State get_state()
+ {
+ Gst.State state;
+ Gst.State pending;
+
+ player.get_state(out state, out pending, (Gst.ClockType)Gst.CLOCK_TIME_NONE);
+
+ return state;
+ }
+
public void pause()
{
player.set_state(Gst.State.PAUSED);
+ state_changed(Gst.State.PAUSED);
}
public void resume()
{
player.set_state(Gst.State.PLAYING);
+ state_changed(Gst.State.PLAYING);
}
public void restart()
{
player.seek_simple(Gst.Format.TIME, Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT, 0);
player.set_state(Gst.State.PLAYING);
+ state_changed(Gst.State.PLAYING);
}
public void stop()
{
playing = false;
player.set_state(Gst.State.NULL);
+ state_changed(Gst.State.NULL);
// Resume slave after we are done
if (slave != null && slave.playing)