# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import logging
from autotest_lib.server import test, utils

class platform_InstallFW(test.test):
    """Test to install FW on DUT"""
    version = 1

    def run_once(self, host=None, fw_type=None, fw_path=None, fw_name=None):
        """Run test to install firmware.

        @param host: host to run on
        @param fw_type: must be either "bios" or "ec"
        @param fw_path: path to fw binary or set to "local"
        @param fw_name: (optional) name of binary file
        """

        if fw_path == "local":
            fw_dst = "/usr/sbin/chromeos-firmwareupdate"
            is_shellball = True
        else:
            fw_src = "%s/%s" % (fw_path, fw_name)
            # Determine the firmware file is a shellball or a raw binary.
            is_shellball = (utils.system_output("file %s" % fw_src).find(
                    "shell script") != -1)
            fw_dst = "/tmp/%s" % fw_name
            # Copy binary from server to client.
            host.send_file(fw_src, fw_dst)

        # Install bios/ec on a client.
        if fw_type == "bios":
            if is_shellball:
                host.run("sudo /bin/sh %s --mode recovery --update_main "
                         "--noupdate_ec" % fw_dst)
            else:
                host.run("sudo /usr/sbin/flashrom -p internal:bus=spi -w %s"
                         % fw_dst)
        if fw_type == "ec":
            if is_shellball:
                host.run("sudo /bin/sh %s --mode recovery --update_ec "
                         "--noupdate_main" % fw_dst)
            else:
                host.run("sudo /usr/sbin/flashrom -p internal:bus=lpc -w %s"
                         % fw_dst)
        # Reboot client after installing the binary.
        host.reboot()
        # Get the versions of BIOS and EC binaries.
        bios_info = host.run("crossystem fwid")
        logging.info("BIOS version info:\n %s", bios_info)
        ec_info = host.run("sudo mosys -k ec info")
        logging.info("EC version info:\n %s", ec_info)
