import privileges
class PhysicalInterface
- var mpd = new MPDConnection("localhost", 6600, "password")
-
- var debug_led: RPiPin
+ var mpd = new MPDConnection(server, port, password)
+ protected fun password: String do return "password"
+ fun server: String do return "localhost"
+ fun port: Int do return 6600
var but_play: Switch
var but_playlist_a: Switch
var lcd: HD44780
+ var lcd_backlight: RPiPin
+ var lcd_backlight_delay = 1000
+
+ var buzzer: Buzzer
+
init
do
# commandline options for privileges drop
var opts = new OptionContext
- var opt_ug = new OptionDropPrivileges
+ var opt_ug = new OptionUserAndGroup.for_dropping_privileges
#opt_ug.mandatory = true
opts.add_option(opt_ug)
var user_group = opt_ug.value
if user_group != null then user_group.drop_privileges
- # Debug LED
- debug_led = new RPiPin.p1_11
- debug_led.fsel = new FunctionSelect.outp
- debug_led.write(false)
-
# Play button
but_play = new Switch(new RPiPin.p1_13, new PUDControl.down)
lcd = new HD44780(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7)
lcd.setup
lcd.clear
+
+ lcd_backlight = new RPiPin.p1_18
+ lcd_backlight.fsel = new FunctionSelect.outp
+
+ # Buzzer
+ var buzzer_pin = new RPiPin.p1_11
+ buzzer_pin.fsel = new FunctionSelect.outp
+ buzzer = new Buzzer(buzzer_pin)
end
fun run
do
- var led_on = false
var tick = 0
+ var last_event = 0
loop
var force_lcd_update = false
lcd.text = "No song playing"
else
if status.playing then
+ last_event = tick
status_char = ">"
else status_char = "#"
end
end
+ # manage backlight
+ if force_lcd_update then last_event = tick
+
+ var diff_with_last_event = tick - last_event
+ if diff_with_last_event == 0 then
+ lcd_backlight.write(true)
+ else if diff_with_last_event == lcd_backlight_delay then
+ lcd_backlight.write(false)
+ end
+
10.bcm2835_delay
tick += 1
end
print "stopped -> play"
mpd.play
end
+
+ bell
end
fun play_playlist_a
do
mpd.load_playlist("alexis")
end
+
+ fun bell do buzzer.buzz(1.5, 20)
end
var phy = new PhysicalInterface