Clean up constants and fix handling of assertion errors in init.

Added much more logging, a little bit of refactoring and
some clean up in init to make debugging issues easier.

BUG=None
TEST=Ran on an alex.

Change-Id: I67cc2d2840643346d84dee1cafc1874ecd239c96
Reviewed-on: http://gerrit.chromium.org/gerrit/4443
Reviewed-by: Craig Harrison <craigdh@google.com>
Reviewed-by: Chris Sosa <sosa@chromium.org>
Tested-by: Chris Sosa <sosa@chromium.org>
diff --git a/server/cros/servo.py b/server/cros/servo.py
index 3d7cf0a..fed97ce 100755
--- a/server/cros/servo.py
+++ b/server/cros/servo.py
@@ -26,6 +26,18 @@
     _server = None
     _servod = None
 
+    # Power button press delays in seconds.
+    LONG_DELAY = 8
+    SHORT_DELAY = 0.1
+    NORMAL_TRANSITION_DELAY = 1.2
+
+    # Delays to deal with computer transitions.
+    SLEEP_DELAY = 6
+    BOOT_DELAY = 10
+
+    # Servo-specific delays.
+    MAX_SERVO_STARTUP_DELAY = 10
+    SERVO_SEND_SIGNAL_DELAY = 0.5
 
     def __init__(self, servo_port, xml_config='servo.xml', servo_vid=None,
                  servo_pid=None, servo_serial=None, cold_reset=False):
@@ -50,30 +62,35 @@
         # connect to servod
         assert servo_port
 
+        self._do_cold_reset = cold_reset
+
         self._connect_servod(servo_port)
-        if cold_reset:
+
+
+    def initialize_dut(self):
+        """Initializes a dut for testing purposes."""
+        if self._do_cold_reset:
             self._init_seq_cold_reset_devmode()
         else:
             self._init_seq()
 
 
-
     def power_long_press(self):
-        """Simulate a long (8 sec) power button press."""
-        self.power_key(8)
+        """Simulate a long power button press."""
+        self.power_key(Servo.LONG_DELAY)
 
 
     def power_normal_press(self):
-        """Simulate a normal (2 sec) power button press."""
-        self.power_key(2)
+        """Simulate a normal power button press."""
+        self.power_key()
 
 
     def power_short_press(self):
-        """Simulate a short (0.1 sec) power button press."""
-        self.power_key(0.1)
+        """Simulate a short power button press."""
+        self.power_key(Servo.SHORT_DELAY)
 
 
-    def power_key(self, secs=1):
+    def power_key(self, secs=NORMAL_TRANSITION_DELAY):
         """Simulate a power button press.
 
         Args:
@@ -95,57 +112,42 @@
         Waits 6 seconds to ensure the device is fully asleep before returning.
         """
         self.set_nocheck('lid_open', 'no')
-        time.sleep(6)
+        time.sleep(Servo.SLEEP_DELAY)
 
 
-    def ctrl_d(self, secs=0.5):
-        """Simulate Ctrl-d simultaneous button presses.
-
-        Args:
-          secs: Time in seconds to simulate the keypress.
-        """
+    def ctrl_d(self):
+        """Simulate Ctrl-d simultaneous button presses."""
         self.set_nocheck('kbd_en', 'on')
         self.set_nocheck('kbd_m1', 'r2_c2')
         self.set_nocheck('kbd_m2', 'r1_c1')
-        time.sleep(secs)
+        time.sleep(Servo.SERVO_SEND_SIGNAL_DELAY)
         self.set_nocheck('kbd_en', 'off')
 
 
-    def enter_key(self, secs=0.5):
-        """Simulate Enter key button press.
-
-        Args:
-          secs: Time in seconds to simulate the keypress.
-        """
+    def enter_key(self):
+        """Simulate Enter key button press."""
         self.set_nocheck('kbd_en', 'on')
         self.set_nocheck('kbd_m1', 'r3_c2')
-        time.sleep(secs)
+        time.sleep(Servo.SERVO_SEND_SIGNAL_DELAY)
         self.set_nocheck('kbd_en', 'off')
 
 
-    def refresh_key(self, secs=0.5):
-        """Simulate Refresh key (F3) button press.
-
-        Args:
-          secs: Time in seconds to simulate the keypress.
-        """
+    def refresh_key(self):
+        """Simulate Refresh key (F3) button press."""
         self.set_nocheck('kbd_en', 'on')
         self.set_nocheck('kbd_m2', 'r2_c1')
-        time.sleep(secs)
+        time.sleep(Servo.SERVO_SEND_SIGNAL_DELAY)
         self.set_nocheck('kbd_en', 'off')
 
 
-    def imaginary_key(self, secs=0.5):
+    def imaginary_key(self):
         """Simulate imaginary key button press.
 
         Maps to a key that doesn't physically exist.
-
-        Args:
-          secs: Time in seconds to simulate the keypress.
         """
         self.set_nocheck('kbd_en', 'on')
         self.set_nocheck('kbd_m2', 'r3_c1')
-        time.sleep(secs)
+        time.sleep(Servo.SERVO_SEND_SIGNAL_DELAY)
         self.set_nocheck('kbd_en', 'off')
 
 
@@ -171,17 +173,15 @@
 
     def boot_devmode(self):
         """Boot a dev-mode device that is powered off."""
-        self.set('pwr_button', 'release')
-        time.sleep(1)
         self.power_normal_press()
         self.pass_devmode()
 
 
     def pass_devmode(self):
         """Pass through boot screens in dev-mode."""
-        time.sleep(10)
+        time.sleep(Servo.BOOT_DELAY)
         self.ctrl_d()
-        time.sleep(17)
+        time.sleep(Servo.BOOT_DELAY)
 
 
     def cold_reset(self):
@@ -190,7 +190,7 @@
         Has the side effect of shutting off the device.
         """
         self.set('cold_reset', 'on')
-        time.sleep(2)
+        time.sleep(Servo.SERVO_SEND_SIGNAL_DELAY)
         self.set('cold_reset', 'off')
 
 
@@ -200,7 +200,7 @@
         Has the side effect of restarting the device.
         """
         self.set('warm_reset', 'on')
-        time.sleep(2)
+        time.sleep(Servo.SERVO_SEND_SIGNAL_DELAY)
         self.set('warm_reset', 'off')
 
 
@@ -212,14 +212,15 @@
 
     def set(self, gpio_name, gpio_value):
         """Set and check the value of a gpio using Servod."""
-        assert gpio_name and gpio_value
-        self._server.set(gpio_name, gpio_value)
-        assert gpio_value == self.get(gpio_name)
+        self.set_nocheck(gpio_name, gpio_value)
+        assert gpio_value == self.get(gpio_name), \
+            'Servo failed to set %s to %s' % (gpio_name, gpio_value)
 
 
     def set_nocheck(self, gpio_name, gpio_value):
         """Set the value of a gpio using Servod."""
         assert gpio_name and gpio_value
+        logging.info('Setting %s to %s' % (gpio_name, gpio_value))
         self._server.set(gpio_name, gpio_value)
 
 
@@ -268,8 +269,8 @@
         self._servod = subprocess.Popen(cmdlist, 0, None, None, None,
                                         subprocess.PIPE)
         # wait for servod to initialize
-        timeout = 10
-        while ("Listening" not in self._servod.stderr.readline() and
+        timeout = Servo.MAX_SERVO_STARTUP_DELAY
+        while ('Listening' not in self._servod.stderr.readline() and
                self._servod.returncode is None and timeout > 0):
             time.sleep(1)
             timeout -= 1