# See the License for the specific language governing permissions and
# limitations under the License.
-# This programs interprets the input of a physical interface thought the
-# GPIO pins of a Raspberry Pi to control an MPD server.
+# Backend to a hardware interface to control an MPD server from a Raspberry Pi
#
-# It suppot two inputs: a play/pause button and a rotary encoder to adjust
+# It supports two inputs: a play/pause button and a rotary encoder to adjust
# the volume.
#
# The each data output of the volume control are connected to the board
import privileges
class PhysicalInterface
- var mpd = new MPDConnection("localhost", 6600, "password")
+ 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 but_play: Switch is noinit
+ var but_playlist_a: Switch is noinit
- var vol: RotaryEncoder
+ var vol: RotaryEncoder is noinit
var vol_step = 2
- var lcd: HD44780
+ var lcd: HD44780 is noinit
- var lcd_backlight: RPiPin
+ var lcd_backlight: RPiPin is noinit
var lcd_backlight_delay = 1000
+ var buzzer: Buzzer is noinit
+
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)
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
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