From 15c3d4c508afdf0de8097f8c0a3a7c129c5f585e Mon Sep 17 00:00:00 2001 From: Enrico Zini Date: Sun, 28 Mar 2010 13:35:18 +0100 Subject: [PATCH] Move vibrator together with aux --- src/app_notify.vala | 29 ++++++-- src/audio.vala | 120 ++------------------------------ src/{app_aux.vala => leds.vala} | 116 ++++++++++++++++++++++++++++-- src/zavai.vala | 2 +- 4 files changed, 142 insertions(+), 125 deletions(-) rename src/{app_aux.vala => leds.vala} (55%) diff --git a/src/app_notify.vala b/src/app_notify.vala index 8759bb3..d6c086a 100644 --- a/src/app_notify.vala +++ b/src/app_notify.vala @@ -28,16 +28,35 @@ public abstract class Notifier : Gtk.Dialog { public string name { get; construct; } + protected virtual bool push_aux_state() + { + return false; + } + + protected virtual bool push_vibrator_state() + { + return false; + } + + protected virtual bool push_ringtone_state() + { + return false; + } + public int run() { ui.power.backlight.request(name); - // TODO: Save aux state - // TODO: Save vibrator state - // TODO: Save ringtone state - // TODO: set our state + + // Setup our attention seeking strategy + bool has_aux = push_aux_state(); + bool has_vibrator = zavai.led.vibrator != null && push_vibrator_state(); + bool has_ringtone = zavai.audio.soundplayer != null && push_ringtone_state(); + + // Run dialog int res = base.run(); + // TODO: Restore ringtone state - // TODO: Restore vibrator state + if (has_vibrator) zavai.led.vibrator.pop_state(name); // TODO: Restore aux state ui.power.backlight.release(name); return res; diff --git a/src/audio.vala b/src/audio.vala index 7639bcb..0a3967c 100644 --- a/src/audio.vala +++ b/src/audio.vala @@ -23,108 +23,6 @@ using GLib; namespace zavai { namespace audio { -public class VibratorState -{ - public string name; - public int brightness; - public string trigger; - public int delay_on; - public int delay_off; - - public VibratorState(string name) - { - this.name = name; - set_constant(0); - } - - public void set_constant(int power) - { - brightness = power; - trigger = "none"; - delay_on = 0; - delay_off = 0; - } - - public void set_blink(int power, int delay_on=200, int delay_off=300) - { - brightness = power; - trigger = "timer"; - this.delay_on = delay_on; - this.delay_off = delay_off; - } - - public void to_omhacks(ref Omhacks.Led led) - { - led.brightness = brightness; - Memory.copy(led.trigger, trigger, trigger.size()); - led.delay_on = 200; - led.delay_off = 300; - } -} - -public class Vibrator : zavai.Resource, Object -{ - protected Omhacks.Led vibrator; - - protected List states; - - public Vibrator() throws FileError - { - if (vibrator.init("neo1973:vibrator") != 0) - throw new FileError.NOENT("vibrator not found"); - - states = new List(); - } - - public void turn_off() - { - vibrator.brightness = 0; - Memory.copy(vibrator.trigger, "none", 5); - vibrator.set(); - } - - public void push_state(VibratorState state) - { - states.prepend(state); - state.to_omhacks(ref vibrator); - vibrator.set(); - } - - public void pop_state(string name) - { - // Handle empty list - if (states == null) return; - - // Track if the list head changed - weak List old_top = states; - - // Remove state "name" from the stack - for (weak List i = states; i != null; i = i.next) - if (i.data.name == name) - { - states.delete_link(i); - break; - } - - // If the list head changed, put into action the new top state - if (states != old_top) - if (states == null) - turn_off(); - else { - // Activate the new top - states.data.to_omhacks(ref vibrator); - vibrator.set(); - } - } - - public void shutdown() - { - while (states != null) - states.delete_link(states); - turn_off(); - } -} - public class Audio: zavai.Service { /* @@ -154,11 +52,11 @@ public class Audio: zavai.Service public void on_alarm_trigger(clock.AlarmTriggerInfo info) { zavai.log.debug("Make noise for alarm"); - if (vibrator != null) + if (zavai.led.vibrator != null) { - var state = new VibratorState("alarm"); + var state = new zavai.led.LedState("alarm"); state.set_blink(255); - vibrator.push_state(state); + zavai.led.vibrator.push_state(state); } soundplayer.play(config.ringtone_alarm, true); } @@ -166,8 +64,8 @@ public class Audio: zavai.Service public void on_alarm_done(clock.AlarmTriggerInfo info) { zavai.log.debug("Stop noise for alarm"); - if (vibrator != null) - vibrator.pop_state("alarm"); + if (zavai.led.vibrator != null) + zavai.led.vibrator.pop_state("alarm"); soundplayer.stop(); } } @@ -271,20 +169,12 @@ stderr.printf("Playing %s\n", uri); } } -public Vibrator vibrator = null; public Audio audio = null; public Player musicplayer = null; public Player soundplayer = null; public void init() { - try { - vibrator = new Vibrator(); - zavai.registry.register(vibrator); - } catch (Error e) { - zavai.log.info("No vibrator found"); - vibrator = null; - } audio = new Audio(); musicplayer = new Player(); soundplayer = new Player(); diff --git a/src/app_aux.vala b/src/leds.vala similarity index 55% rename from src/app_aux.vala rename to src/leds.vala index db05e99..a089ef6 100644 --- a/src/app_aux.vala +++ b/src/leds.vala @@ -1,5 +1,5 @@ /* - * app_aux - AUX button interaction + * leds - Leds/buttons support * * Copyright (C) 2010 Enrico Zini * @@ -21,8 +21,109 @@ using GLib; namespace zavai { -namespace ui { -namespace aux { +namespace led { + +public class LedState +{ + public string name; + public int brightness; + public string trigger; + public int delay_on; + public int delay_off; + + public LedState(string name) + { + this.name = name; + set_constant(0); + } + + public void set_constant(int power) + { + brightness = power; + trigger = "none"; + delay_on = 0; + delay_off = 0; + } + + public void set_blink(int power, int delay_on=200, int delay_off=300) + { + brightness = power; + trigger = "timer"; + this.delay_on = delay_on; + this.delay_off = delay_off; + } + + public void to_omhacks(ref Omhacks.Led led) + { + led.brightness = brightness; + Memory.copy(led.trigger, trigger, trigger.size()); + led.delay_on = 200; + led.delay_off = 300; + } +} + +public class Vibrator : zavai.Resource, Object +{ + protected Omhacks.Led vibrator; + + protected List states; + + public Vibrator() throws FileError + { + if (vibrator.init("neo1973:vibrator") != 0) + throw new FileError.NOENT("vibrator not found"); + + states = new List(); + } + + public void turn_off() + { + vibrator.brightness = 0; + Memory.copy(vibrator.trigger, "none", 5); + vibrator.set(); + } + + public void push_state(LedState state) + { + states.prepend(state); + state.to_omhacks(ref vibrator); + vibrator.set(); + } + + public void pop_state(string name) + { + // Handle empty list + if (states == null) return; + + // Track if the list head changed + weak List old_top = states; + + // Remove state "name" from the stack + for (weak List i = states; i != null; i = i.next) + if (i.data.name == name) + { + states.delete_link(i); + break; + } + + // If the list head changed, put into action the new top state + if (states != old_top) + if (states == null) + turn_off(); + else { + // Activate the new top + states.data.to_omhacks(ref vibrator); + vibrator.set(); + } + } + + public void shutdown() + { + while (states != null) + states.delete_link(states); + turn_off(); + } +} public class AUX: zavai.Service { @@ -107,12 +208,19 @@ public class AUX: zavai.Service } public AUX aux = null; +public Vibrator vibrator = null; public void init() { aux = new AUX(); + try { + vibrator = new Vibrator(); + zavai.registry.register(vibrator); + } catch (Error e) { + zavai.log.info("No vibrator found"); + vibrator = null; + } } } } -} diff --git a/src/zavai.vala b/src/zavai.vala index b99d551..7e6f9fa 100644 --- a/src/zavai.vala +++ b/src/zavai.vala @@ -205,6 +205,7 @@ static int main (string[] args) { zavai.clock.init(); zavai.audio.init(); zavai.log.init(); + zavai.led.init(); zavai.wifi.init(); zavai.bluetooth.init(); @@ -223,7 +224,6 @@ static int main (string[] args) { zavai.ui.gsm.init(); zavai.config.find_and_run_script("display", "init"); zavai.ui.power.init(); - zavai.ui.aux.init(); zavai.ui.kbd.init(); zavai.ui.wm.init(); zavai.ui.calendar.init(); -- 2.39.5