def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) # Always ensure the device is in fastboot mode before trying to boot. # Check if the device has a power command such as HiKey, Dragonboard, # etc. against device that doesn't like Nexus, etc. if self.job.device.get('fastboot_via_uboot', False): self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(UBootEnterFastbootAction()) elif self.job.device.hard_reset_command: self.force_prompt = True self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(ResetDevice()) else: self.internal_pipeline.add_action(EnterFastbootAction()) # Based on the boot sequence defined in the device configuration, add # the required pipeline actions. sequences = self.job.device['actions']['boot']['methods'].get( 'fastboot', []) for sequence in sequences: mapped = _fastboot_sequence_map(sequence) if mapped[1]: self.internal_pipeline.add_action( mapped[0](device_actions=mapped[1])) elif mapped[0]: self.internal_pipeline.add_action(mapped[0]()) if self.has_prompts(parameters): self.internal_pipeline.add_action(AutoLoginAction()) if self.test_has_shell(parameters): self.internal_pipeline.add_action(ExpectShellSession()) if 'transfer_overlay' in parameters: self.internal_pipeline.add_action(OverlayUnpack()) self.internal_pipeline.add_action(ExportDeviceEnvironment())
def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) # Check if the device has a power command such as HiKey, Dragonboard, # etc. against device that doesn't like Nexus, etc. # This is required in order to power on the device so that when the # test job writer wants to perform some operation using a # lava-test-shell action that follows, this becomes mandatory. Think of # issuing any fastboot commands on the powered on device. # # NOTE: Add more power on strategies, if required for specific devices. if self.job.device.get('fastboot_via_uboot', False): self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(UBootEnterFastbootAction()) elif self.job.device.hard_reset_command: self.force_prompt = True self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(ResetDevice()) else: self.internal_pipeline.add_action(EnterFastbootAction()) self.download_dir = self.mkdtemp() image_keys = sorted(parameters['images'].keys()) for image in image_keys: if image != 'yaml_line': self.internal_pipeline.add_action( DownloaderAction(image, self.download_dir)) if self.test_needs_overlay(parameters): self.internal_pipeline.add_action(OverlayAction()) self.internal_pipeline.add_action(CopyToLxcAction())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) method_params = self.job.device["actions"]["boot"]["methods"]["pyocd"][ "parameters" ] if self.job.device.hard_reset_command: self.pipeline.add_action(ResetDevice()) self.pipeline.add_action(WaitDeviceBoardID(self.job.device.get("board_id"))) if method_params.get("connect_before_flash", False): self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action(FlashPyOCDAction()) if not method_params.get("connect_before_flash", False): self.pipeline.add_action(ConnectDevice())
def populate(self, parameters): self.parameters = parameters self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) if parameters.get("commands"): self.pipeline.add_action(BootFastbootCommands()) board_id = self.job.device["fastboot_serial_number"] # Always ensure the device is in fastboot mode before trying to boot. # Check if the device has a power command such as HiKey, Dragonboard, # etc. against device that doesn't like Nexus, etc. if self.job.device.get("fastboot_via_uboot", False): self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action(UBootEnterFastbootAction()) elif self.job.device.hard_reset_command: self.force_prompt = True self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action(ResetDevice()) else: self.pipeline.add_action(WaitDeviceBoardID(board_id)) self.pipeline.add_action(EnterFastbootAction()) # Based on the boot sequence defined in the device configuration, add # the required pipeline actions. sequences = self.job.device["actions"]["boot"]["methods"].get( "fastboot", []) for sequence in sequences: mapped = _fastboot_sequence_map(sequence) self.pipeline.add_action(WaitDeviceBoardID(board_id)) if mapped[1]: self.pipeline.add_action(mapped[0](device_actions=mapped[1])) elif mapped[0]: self.pipeline.add_action(mapped[0]()) if self.job.device.hard_reset_command: if not self.is_container(): self.pipeline.add_action(PreOs()) if self.has_prompts(parameters): self.pipeline.add_action(AutoLoginAction()) if self.test_has_shell(parameters): self.pipeline.add_action(ExpectShellSession()) if "transfer_overlay" in parameters: self.pipeline.add_action(OverlayUnpack()) self.pipeline.add_action(ExportDeviceEnvironment()) else: if not self.is_container(): self.pipeline.add_action(ConnectAdb()) self.pipeline.add_action(AdbOverlayUnpack())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) # customize the device configuration for this job self.pipeline.add_action(UBootSecondaryMedia()) self.pipeline.add_action(BootloaderCommandOverlay()) self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action(UBootRetry())
def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) if self.job.device.hard_reset_command: self.internal_pipeline.add_action(ResetDevice()) self.internal_pipeline.add_action(WaitDeviceBoardID(self.job.device.get('board_id', None))) self.internal_pipeline.add_action(FlashPyOCDAction()) self.internal_pipeline.add_action(ConnectDevice())
def populate(self, parameters): self.expect_shell = parameters.get('expect_shell', True) self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.internal_pipeline.add_action(BootloaderSecondaryMedia()) self.internal_pipeline.add_action(BootloaderCommandOverlay()) self.internal_pipeline.add_action(ConnectDevice()) # FIXME: reset_device is a hikey hack due to fastboot/OTG issues # remove as part of LAVA-940 - convert to use fastboot-sequence reset_device = self.job.device['actions']['boot']['methods'].get( 'grub-efi', {}).get('reset_device', True) if parameters['method'] == 'grub-efi' and reset_device: # added unless the device specifies not to reset the device in grub. self.internal_pipeline.add_action(ResetDevice()) elif parameters['method'] == 'grub': self.internal_pipeline.add_action(ResetDevice()) if parameters['method'] == 'grub-efi': self.internal_pipeline.add_action(UEFIMenuInterrupt()) self.internal_pipeline.add_action(GrubMenuSelector()) self.internal_pipeline.add_action(BootloaderInterruptAction()) self.internal_pipeline.add_action(BootloaderCommandsAction()) if self.has_prompts(parameters): self.internal_pipeline.add_action(AutoLoginAction()) if self.test_has_shell(parameters): self.internal_pipeline.add_action(ExpectShellSession()) if 'transfer_overlay' in parameters: self.internal_pipeline.add_action(OverlayUnpack()) self.internal_pipeline.add_action(ExportDeviceEnvironment()) else: if self.has_boot_finished(parameters): self.logger.debug("Doing a boot without a shell (installer)") self.internal_pipeline.add_action(InstallerWait()) self.internal_pipeline.add_action(PowerOff())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) if self.job.device.hard_reset_command: self.pipeline.add_action(ResetDevice()) self.pipeline.add_action(WaitDeviceBoardID(self.job.device.get("board_id"))) self.pipeline.add_action(FlashOpenOCDAction()) self.pipeline.add_action(ConnectDevice())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.pipeline.add_action(DepthchargeCommandOverlay()) self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action(DepthchargeRetry())
def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(ResetDevice()) self.internal_pipeline.add_action(WaitDFUDeviceAction()) self.internal_pipeline.add_action(FlashDFUAction())
def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action( BootloaderCommandOverlay(method=parameters["bootloader"])) self.internal_pipeline.add_action(BootBootloaderRetry())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) if self.job.device.hard_reset_command: self.pipeline.add_action(ResetDevice()) self.pipeline.add_action(WaitUSBSerialDeviceAction()) self.pipeline.add_action(ConnectDevice())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.pipeline.add_action(ResetDevice()) self.pipeline.add_action(CheckSerialDownloadMode()) self.pipeline.add_action(BootBootloaderCorruptBootMediaAction()) self.pipeline.add_action(ResetDevice()) self.pipeline.add_action(UUUBootAction(), parameters=parameters) self.pipeline.add_action(ConnectDevice())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) if self.test_needs_overlay(parameters): self.pipeline.add_action(OverlayAction()) # Check if the device has a power command such as HiKey, Dragonboard, # etc. against device that doesn't like Nexus, etc. if self.job.device.get("fastboot_via_uboot", False): self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action(UBootEnterFastbootAction()) elif self.job.device.hard_reset_command: self.force_prompt = True self.pipeline.add_action(ConnectDevice()) if not is_lxc_requested(self.job): self.pipeline.add_action(PrePower()) self.pipeline.add_action(ResetDevice()) else: self.pipeline.add_action(EnterFastbootAction()) fastboot_dir = self.mkdtemp() for image in sorted(parameters["images"].keys()): self.pipeline.add_action( DownloaderAction( image, fastboot_dir, params=parameters["images"][image] ) ) if parameters["images"][image].get("apply-overlay", False): if self.test_needs_overlay(parameters): if parameters["images"][image].get("sparse", True): self.pipeline.add_action(ApplyOverlaySparseImage(image)) else: use_root_part = parameters["images"][image].get( "root_partition", False ) self.pipeline.add_action( ApplyOverlayImage(image, use_root_partition=use_root_part) ) if self.test_needs_overlay(parameters) and self.test_needs_deployment( parameters ): self.pipeline.add_action(DeployDeviceEnvironment()) self.pipeline.add_action(FastbootFlashOrderAction())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action(ResetDevice()) self.pipeline.add_action( BootloaderInterruptAction(method=parameters["bootloader"])) self.pipeline.add_action( BootloaderCommandsAction(expect_final=False, method=parameters["bootloader"]))
def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.internal_pipeline.add_action(ConnectDevice()) # self.internal_pipeline.add_action(ResetDevice()) if self.has_prompts(parameters): # self.internal_pipeline.add_action(AutoLoginAction()) if self.test_has_shell(parameters): self.internal_pipeline.add_action(ExpectShellSession()) if 'transfer_overlay' in parameters: self.internal_pipeline.add_action(OverlayUnpack()) self.internal_pipeline.add_action(ExportDeviceEnvironment())
def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) method_params = self.job.device['actions']['boot']['methods']['cmsis-dap']['parameters'] usb_mass_device = method_params.get('usb_mass_device') resets_after_flash = method_params.get('resets_after_flash', True) if self.job.device.hard_reset_command: self.internal_pipeline.add_action(ResetDevice()) self.internal_pipeline.add_action(WaitDevicePathAction(usb_mass_device)) self.internal_pipeline.add_action(FlashCMSISAction()) if resets_after_flash: self.internal_pipeline.add_action(WaitUSBSerialDeviceAction()) self.internal_pipeline.add_action(ConnectDevice())
def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) if self.test_needs_overlay(parameters): self.internal_pipeline.add_action(OverlayAction()) # Check if the device has a power command such as HiKey, Dragonboard, # etc. against device that doesn't like Nexus, etc. if self.job.device.get('fastboot_via_uboot', False): self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(UBootEnterFastbootAction()) elif self.job.device.hard_reset_command: self.force_prompt = True self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(ResetDevice()) else: self.internal_pipeline.add_action(EnterFastbootAction()) fastboot_dir = self.mkdtemp() image_keys = sorted(parameters['images'].keys()) for image in image_keys: if image != 'yaml_line': self.internal_pipeline.add_action( DownloaderAction(image, fastboot_dir)) if parameters['images'][image].get('apply-overlay', False): if self.test_needs_overlay(parameters): if parameters['images'][image].get('sparse', True): self.internal_pipeline.add_action( ApplyOverlaySparseImage(image)) else: self.internal_pipeline.add_action( ApplyOverlayImage(image, use_root_partition=False)) if self.test_needs_overlay(parameters) and \ self.test_needs_deployment(parameters): self.internal_pipeline.add_action( DeployDeviceEnvironment()) self.internal_pipeline.add_action(FastbootFlashOrderAction())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) method_params = self.job.device["actions"]["boot"]["methods"]["cmsis-dap"][ "parameters" ] usb_mass_device = method_params.get("usb_mass_device") resets_after_flash = method_params.get("resets_after_flash", True) if self.job.device.hard_reset_command: self.pipeline.add_action(ResetDevice()) self.pipeline.add_action(WaitDevicePathAction(usb_mass_device)) self.pipeline.add_action(FlashCMSISAction()) if resets_after_flash: self.pipeline.add_action(WaitUSBSerialDeviceAction()) self.pipeline.add_action(ConnectDevice())
def populate(self, parameters): dfu = self.job.device["actions"]["boot"]["methods"]["dfu"] parameters = dfu["parameters"] self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action(ResetDevice()) if dfu.get("implementation") == "u-boot": self.pipeline.add_action( BootloaderInterruptAction(method="u-boot")) self.pipeline.add_action(EnterDFU()) self.pipeline.add_action(WaitDFUDeviceAction()) self.pipeline.add_action(FlashDFUAction())
def populate(self, parameters): download_dir = self.mkdtemp() self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) if 'recovery_image' in parameters: self.internal_pipeline.add_action(DownloaderAction('recovery_image', path=download_dir)) self.internal_pipeline.add_action(LxcCreateUdevRuleAction()) self.force_prompt = True self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(ResetDevice()) self.internal_pipeline.add_action(ExtractVExpressRecoveryImage()) self.internal_pipeline.add_action(EnterVExpressMCC()) self.internal_pipeline.add_action(EnableVExpressMassStorage()) self.internal_pipeline.add_action(WaitUSBMassStorageDeviceAction()) self.internal_pipeline.add_action(MountVExpressMassStorageDevice()) self.internal_pipeline.add_action(DeployVExpressRecoveryImage()) self.internal_pipeline.add_action(UnmountVExpressMassStorageDevice()) self.internal_pipeline.add_action(VExpressFlashErase())
def populate(self, parameters): self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.pipeline.add_action(ConnectDevice()) if parameters.get("pre_power_command", False): self.pipeline.add_action(PrePower()) if parameters.get("pre_os_command", False): self.pipeline.add_action(PreOs()) if parameters.get("reset", True): self.pipeline.add_action(ResetDevice()) if self.has_prompts(parameters): self.pipeline.add_action(AutoLoginAction()) if self.test_has_shell(parameters): self.pipeline.add_action(ExpectShellSession()) if "transfer_overlay" in parameters: self.pipeline.add_action(OverlayUnpack()) self.pipeline.add_action(ExportDeviceEnvironment())
def populate(self, parameters): download_dir = self.mkdtemp() self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(ResetDevice()) self.internal_pipeline.add_action(WaitUSBMassStorageDeviceAction()) for image in parameters['images'].keys(): if image != 'yaml_line': self.internal_pipeline.add_action( DownloaderAction(image, path=download_dir)) self.internal_pipeline.add_action(MountVExpressMassStorageDevice()) if 'recovery_image' in parameters['images'].keys(): self.internal_pipeline.add_action(ExtractVExpressRecoveryImage()) self.internal_pipeline.add_action(DeployVExpressRecoveryImage()) if 'test_binary' in parameters['images'].keys(): self.internal_pipeline.add_action(DeployMPSTestBinary()) self.internal_pipeline.add_action(UnmountVExpressMassStorageDevice())
def populate(self, parameters): super().populate(parameters) self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) recovery = self.job.device["actions"]["deploy"]["methods"]["recovery"] recovery_dir = self.mkdtemp() image_keys = sorted(parameters["images"].keys()) for image in image_keys: self.internal_pipeline.add_action( DownloaderAction(image, recovery_dir)) self.internal_pipeline.add_action(CopyToLxcAction()) tags = [] if "tags" in recovery: tags = recovery["tags"] if "serial" in tags: # might not be a usable shell here, just power on. # FIXME: if used, FastbootAction must not try to reconnect self.internal_pipeline.add_action(ConnectDevice())
def populate(self, parameters): SD_ERASE_CMDS = self.job.device["actions"]["boot"]["methods"]["uuu"][ "options"]["corrupt_boot_media_command"] if isinstance(SD_ERASE_CMDS, str): SD_ERASE_CMDS = [SD_ERASE_CMDS] u_boot_params = { "method": "bootloader", "bootloader": "u-boot", "commands": SD_ERASE_CMDS, "prompts": ["=>"], } self.pipeline = Pipeline(parent=self, job=self.job, parameters=u_boot_params) self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action( BootloaderCommandOverlay(method=u_boot_params["bootloader"], commands=u_boot_params["commands"])) self.pipeline.add_action(BootBootloaderRetry()) self.pipeline.add_action(DisconnectDevice())
def populate(self, parameters): super().populate(parameters) self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) recovery = self.job.device['actions']['deploy']['methods']['recovery'] recovery_dir = self.mkdtemp() image_keys = sorted(parameters['images'].keys()) for image in image_keys: if image != 'yaml_line': self.internal_pipeline.add_action( DownloaderAction(image, recovery_dir)) self.internal_pipeline.add_action(CopyToLxcAction()) tags = [] if 'tags' in recovery: tags = recovery['tags'] if 'serial' in tags: # might not be a usable shell here, just power on. # FIXME: if used, FastbootAction must not try to reconnect self.internal_pipeline.add_action(ConnectDevice())
def populate(self, parameters): download_dir = self.mkdtemp() self.pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) self.pipeline.add_action( DownloaderAction("recovery_image", path=download_dir, params=parameters["recovery_image"])) self.pipeline.add_action(LxcCreateUdevRuleAction()) self.force_prompt = True self.pipeline.add_action(ConnectDevice()) self.pipeline.add_action(ResetDevice()) self.pipeline.add_action(ExtractVExpressRecoveryImage()) self.pipeline.add_action(EnterVExpressMCC()) self.pipeline.add_action(EnableVExpressMassStorage()) self.pipeline.add_action(WaitUSBMassStorageDeviceAction()) self.pipeline.add_action(MountVExpressMassStorageDevice()) self.pipeline.add_action(DeployVExpressRecoveryImage()) self.pipeline.add_action(UnmountVExpressMassStorageDevice()) if self.job.device["actions"]["deploy"]["methods"]["vemsd"][ "parameters"].get("flash_prompt", False): self.pipeline.add_action(VExpressFlashErase())
def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) image_keys = list(parameters['images'].keys()) if self.test_needs_overlay(parameters): self.logger.debug("[SEOJI] add OverlayAction") self.internal_pipeline.add_action(OverlayAction()) # Check if the device has a power command such as HiKey, Dragonboard, # etc. against device that doesn't like Nexus, etc. if self.job.device.get('fastboot_via_uboot', False): self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(UBootEnterFastbootAction()) elif self.job.device.hard_reset_command: self.force_prompt = True self.internal_pipeline.add_action(ConnectDevice()) if not is_lxc_requested(self.job): self.internal_pipeline.add_action(PrePower()) self.internal_pipeline.add_action(ResetDevice()) elif 'nexell_ext' in image_keys: # Nexell extension #self.internal_pipeline.add_action(OverlayAction()) # download build result if 'url' in parameters['images']['nexell_ext']: self.logger.debug( "[SEOJI] url:" + str(parameters['images']['nexell_ext']['url'])) self.path = '/opt/share' self.internal_pipeline.add_action( DownloaderAction('nexell_ext', self.path)) #if 'compression' in parameters['images']['nexell_ext]: #self.logger.debug("[SEOJI] yes compression param exist") self.logger.debug("SUKER: parameters in deploy/fastboot.py : " + str(parameters)) self.internal_pipeline.add_action( EnterNexellFastbootAction(parameters, 'deploy_script', 'deploy_command1', 'dir_name')) self.internal_pipeline.add_action( ApplyNexellDeployAction(parameters, 'deploy_script', 'deploy_command2', 'dir_name')) else: self.internal_pipeline.add_action(EnterFastbootAction()) fastboot_dir = self.mkdtemp() image_keys = sorted(parameters['images'].keys()) # Nexell extension if 'nexell_ext' in image_keys: self.logger.debug("[SEOJI] pass adding DownloaderAction") #self.internal_pipeline.add_action(DeployDeviceEnvironment()) else: for image in image_keys: if image != 'yaml_line': self.internal_pipeline.add_action( DownloaderAction(image, fastboot_dir)) if parameters['images'][image].get('apply-overlay', False): if self.test_needs_overlay(parameters): if parameters['images'][image].get('sparse', True): self.internal_pipeline.add_action( ApplyOverlaySparseImage(image)) else: self.internal_pipeline.add_action( ApplyOverlayImage( image, use_root_partition=False)) if self.test_needs_overlay(parameters) and \ self.test_needs_deployment(parameters): self.internal_pipeline.add_action( DeployDeviceEnvironment()) self.internal_pipeline.add_action(FastbootFlashOrderAction()) '''
def populate(self, parameters): self.internal_pipeline = Pipeline(parent=self, job=self.job, parameters=parameters) # Nexell Extension if 'nexell_ext' in parameters: self.logger.debug("[SEOJI] ****** parameters: %s", parameters) self.internal_pipeline.add_action( NexellFastbootBootAction(parameters)) self.internal_pipeline.add_action(ConnectDevice()) if self.has_prompts(parameters): if 'auto_login' in parameters: self.internal_pipeline.add_action(AutoLoginAction()) self.internal_pipeline.add_action( WaitForAdbDeviceForNexell(parameters)) self.internal_pipeline.add_action(ApplyNexellOverlay()) self.internal_pipeline.add_action(ExpectShellSession()) else: if parameters.get("commands"): self.logger.debug("[SEOJI] boot - add BootFastbootCommands()") self.internal_pipeline.add_action(BootFastbootCommands()) # Always ensure the device is in fastboot mode before trying to boot. # Check if the device has a power command such as HiKey, Dragonboard, # etc. against device that doesn't like Nexus, etc. if self.job.device.get('fastboot_via_uboot', False): self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(UBootEnterFastbootAction()) elif self.job.device.hard_reset_command: self.force_prompt = True self.internal_pipeline.add_action(ConnectDevice()) self.internal_pipeline.add_action(ResetDevice()) else: self.logger.debug("[SEOJI] boot - add EnterFastbootAction") self.internal_pipeline.add_action(EnterFastbootAction()) # Based on the boot sequence defined in the device configuration, add # the required pipeline actions. self.logger.debug("[SEOJI] get sequences") sequences = self.job.device['actions']['boot']['methods'].get( 'fastboot', []) self.logger.debug("[SEOJI] sequences" + str(sequences)) for sequence in sequences: mapped = _fastboot_sequence_map(sequence) if mapped[1]: self.internal_pipeline.add_action( mapped[0](device_actions=mapped[1])) elif mapped[0]: self.internal_pipeline.add_action(mapped[0]()) if self.job.device.hard_reset_command: if not is_lxc_requested(self.job): self.internal_pipeline.add_action(PreOs()) if self.has_prompts(parameters): self.internal_pipeline.add_action(AutoLoginAction()) if self.test_has_shell(parameters): self.internal_pipeline.add_action(ExpectShellSession()) if 'transfer_overlay' in parameters: self.internal_pipeline.add_action(OverlayUnpack()) self.internal_pipeline.add_action( ExportDeviceEnvironment()) else: if not is_lxc_requested(self.job): self.internal_pipeline.add_action(ConnectAdb()) self.internal_pipeline.add_action(AdbOverlayUnpack())