Merge: doc: fixed some typos and other misc. corrections
[nit.git] / contrib / physical_interface_for_mpd_on_rpi / physical_interface_for_mpd_on_rpi.nit
index c154835..1c73e64 100644 (file)
 # 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
@@ -29,26 +28,29 @@ import mpd
 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 debug_led: RPiPin
+       var but_play: Switch is noinit
+       var but_playlist_a: Switch is noinit
 
-       var but_play: Switch
-       var but_playlist_a: Switch
-
-       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)
 
@@ -67,11 +69,6 @@ class PhysicalInterface
                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)
 
@@ -103,11 +100,15 @@ class PhysicalInterface
 
                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
@@ -197,12 +198,16 @@ class PhysicalInterface
                        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