diff --git a/src/main.rs b/src/main.rs
index 7f7e146..0b5c877 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,3 +1,7 @@
+use std::fs::File;
+use std::io::Write;
+use std::time::{Duration, Instant};
+use std::thread::sleep;
 use evdev_rs::Device;
 use evdev_rs::InputEvent;
 use evdev_rs::ReadFlag;
@@ -20,25 +24,66 @@ struct Controller {
     button_right: bool,
 }
 
+#[derive(PartialEq)]
+enum ControllerModel {
+    NONE,
+    DGOC44U,
+    TYPE2,
+}
+
 fn main() {
     let d1 = Device::new_from_path("/dev/input/event1").unwrap();
     let d2 = Device::new_from_path("/dev/input/event2").unwrap();
 
     let mut controller: Controller = Default::default();
+    let mut controller_model: ControllerModel = ControllerModel::NONE;
+
+    // Save current time and 5 seconds in the future to check for pressed buttons later
+    let start_time = Instant::now();
+    let init_time = start_time + Duration::from_secs(5);
+
+    // Turn on door light to indicate selection mode 
+    set_door(true);
+    println!("Hold a button to select the controller model...");
 
     loop {
+        // Process events from both input devices
         for device in [&d1, &d2] {
             let ev = device.next_event(ReadFlag::NORMAL).map(|val| val.1);
-            
             match ev {
                 Ok(ev) => read_input(ev, &mut controller),
                 Err(_e) => (),
             }
         }
+
+        // If init time has passed, try to select model or quit
+        if controller_model == ControllerModel::NONE && Instant::now() >= init_time {
+            if controller.button_right {
+                controller_model = ControllerModel::DGOC44U;
+                println!("Selected controller DGOC44-U, starting gadget...");
+            }
+            else if controller.button_left {
+                controller_model = ControllerModel::TYPE2;
+                println!("Selected controller TCPP-20009, starting gadget...");
+            }
+            else
+            {
+                // Turn off door light and quit
+                set_door(false);
+                println!("No controller selected, exiting...");
+                break;
+            }
+            // Turn off door light and vibrate to end selection mode
+            set_door(false);
+            set_rumble(true);
+            sleep(Duration::from_millis(500));
+            set_rumble(false);
+        }
     }
 }
 
 fn read_input(event: InputEvent, controller: &mut Controller) {
+    // Save input status to object for easier processing
     match event.event_code{
         EventCode::EV_KEY(EV_KEY::KEY_0)=>if event.value == 1 {controller.power = 0},
         EventCode::EV_KEY(EV_KEY::KEY_1)=>if event.value == 1 {controller.power = 1},
@@ -68,4 +113,16 @@ fn read_input(event: InputEvent, controller: &mut Controller) {
         EventCode::EV_KEY(EV_KEY::KEY_RIGHT)=>controller.button_right = event.value != 0,        
         _=>(),
     }
-}
\ No newline at end of file
+}
+
+fn set_door(status: bool) -> std::io::Result<()> {
+    let mut out = File::create("/sys/class/leds/led2/brightness")?;
+    out.write(if status {b"1"} else {b"0"})?;
+    Ok(())
+}
+
+fn set_rumble(status: bool) -> std::io::Result<()> {
+    let mut out = File::create("/sys/class/leds/led1/brightness")?;
+    out.write(if status {b"1"} else {b"0"})?;
+    Ok(())
+}