faft: Make the recovery mode switching in one method

To reflect the new change of recovery mode switching, i.e. pressing Power +
Esc + Refresh. Make it in one method to prevent calling wrong underlying
methods.

BUG=chrome-os-partner:11694
TEST=Run firmware_RecoveryButton on Snow passed.

Change-Id: I1a34fcb9b20562c2d6a107376f34902d01e2bd52
Reviewed-on: https://gerrit.chromium.org/gerrit/28901
Reviewed-by: Vic Yang <victoryang@chromium.org>
Commit-Ready: Tom Wai-Hong Tam <waihong@chromium.org>
Reviewed-by: Tom Wai-Hong Tam <waihong@chromium.org>
Tested-by: Tom Wai-Hong Tam <waihong@chromium.org>
diff --git a/server/cros/faftsequence.py b/server/cros/faftsequence.py
index 9b85c68..7a6042e 100644
--- a/server/cros/faftsequence.py
+++ b/server/cros/faftsequence.py
@@ -737,6 +737,19 @@
                 self.run_faft_step({})
 
 
+    def enable_rec_mode_and_reboot(self):
+        """Switch to rec mode and reboot.
+
+        This method emulates the behavior of the old physical recovery switch,
+        i.e. switch ON + reboot + switch OFF, and the new keyboard controlled
+        recovery mode, i.e. just press Power + Esc + Refresh.
+        """
+        self.servo.enable_recovery_mode()
+        self.cold_reboot()
+        time.sleep(self.EC_REBOOT_DELAY)
+        self.servo.disable_recovery_mode()
+
+
     def enable_dev_mode_and_reboot(self):
         """Switch to developer mode and reboot."""
         if self.client_attr.keyboard_dev:
@@ -777,10 +790,8 @@
         # Plug out USB disk for preventing recovery boot without warning
         self.servo.set('usb_mux_sel1', 'servo_sees_usbkey')
         # Rebooting EC with rec mode on. Should power on AP.
-        self.servo.enable_recovery_mode()
-        self.cold_reboot()
+        self.enable_rec_mode_and_reboot()
         self.wait_fw_screen_and_switch_keyboard_dev_mode(dev=True)
-        self.servo.disable_recovery_mode()
 
 
     def disable_keyboard_dev_mode(self):
diff --git a/server/site_tests/firmware_RecoveryButton/firmware_RecoveryButton.py b/server/site_tests/firmware_RecoveryButton/firmware_RecoveryButton.py
index 34fc0c5..2f250d9 100644
--- a/server/site_tests/firmware_RecoveryButton/firmware_RecoveryButton.py
+++ b/server/site_tests/firmware_RecoveryButton/firmware_RecoveryButton.py
@@ -47,13 +47,13 @@
         remove_usb = (self.faft_client.get_platform_name() in
                       ('Mario', 'Alex', 'ZGB', 'Aebl', 'Kaen'))
         self.register_faft_sequence((
-            {   # Step 1, press recovery button and reboot
+            {   # Step 1, switch to recovery mode and reboot
                 'state_checker': (self.crossystem_checker, {
                     'mainfw_type': 'developer' if dev_mode else 'normal',
                     'recoverysw_boot': '0',
                 }),
-                'userspace_action': self.servo.enable_recovery_mode,
-                'reboot_action': self.sync_and_cold_reboot,
+                'userspace_action': self.enable_rec_mode_and_reboot,
+                'reboot_action': None,
                 # When dev_mode ON, directly boot to USB stick if presented.
                 # When dev_mode OFF,
                 #     the old models need users to remove and insert the USB;
@@ -62,13 +62,12 @@
                                    self.wait_fw_screen_and_plug_usb,
                 'install_deps_after_boot': True,
             },
-            {   # Step 2, expected recovery boot and release recovery button
+            {   # Step 2, expected recovery boot and reboot
                 'state_checker': (self.crossystem_checker, {
                     'mainfw_type': 'recovery',
                     'recovery_reason' : self.RECOVERY_REASON['RO_MANUAL'],
                     'recoverysw_boot': '1',
                 }),
-                'userspace_action': self.servo.disable_recovery_mode,
             },
             {   # Step 3, expected normal boot
                 'state_checker': (self.crossystem_checker, {