# Copyright (c) 2011 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 datetime, logging, subprocess, time
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import error, smogcheck_ttci, smogcheck_util
class hardware_TPMttci(test.test):
version = 1
def setup(self):
smogcheck_util.enableI2C()
self.ttci_obj = None
def _prepareTtciController(self):
"""Prepare PcaController and InaController instances for use.
Returns:
an operational PcaController instance, ready to use.
an operational InaController instance, ready to use.
Raises:
TestFail: if error creating a new TtciController instance.
"""
try:
self.ttci_obj = smogcheck_ttci.TtciController()
except smogcheck_ttci.TtciError, e:
raise error.TestFail('Error creating a TtciController: %s' % e)
def _getMainPowerStatus(self):
"""Wraps TTCI_Get_Main_Power_Status().
Raises:
TestFail: if error getting main power status.
"""
ret, status = self.ttci_obj.TTCI_Get_Main_Power_Status()
if ret:
raise error.TestFail('TTCI_Get_Main_Power_Status() error: %s' %
self.ttci_obj.err)
logging.info('Main Power status = %r', status)
def _getBackupPowerStatus(self):
"""Wraps TTCI_Get_Backup_Power_Status().
Raises:
TestFail: if error getting backup power status.
"""
ret, status = self.ttci_obj.TTCI_Get_Backup_Power_Status()
if ret:
raise error.TestFail('TTCI_Get_Backup_Power_Status() error: %s' %
self.ttci_obj.err)
logging.info('Backup Power status = %r', status)
def _getTPMPhysicalPresenceStatus(self):
"""Wraps TTCI_Get_PP_Status().
Raises:
TestFail: if error getting Physical Presence status.
"""
ret, status = self.ttci_obj.TTCI_Get_PP_Status()
if ret:
raise error.TestFail('TTCI_Get_PP_Status() error: %s' %
self.ttci_obj.err)
logging.info('PP status = %r', status)
def _getTpmI2cStatus(self):
"""Wraps TTCI_Get_TPM_I2C_Status().
Raises:
TestFail: if error getting TPM I2C status.
"""
ret, status = self.ttci_obj.TTCI_Get_TPM_I2C_Status()
if ret:
raise error.TestFail('TTCI_Get_TPM_I2C_Status() error: %s' %
self.ttci_obj.err)
logging.info('TPM I2C status = %r', status)
def run_once(self):
# Initialize modules on TTCI
self._prepareTtciController()
start_time = datetime.datetime.now()
# Turn on LEDs sequentially
if self.ttci_obj.TTCI_Set_LEDs(0x1, failure=False, warning=False):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0x3, failure=False, warning=False):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0x7, failure=False, warning=False):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=False):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=True):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=True, warning=True):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
# Turn off LEDs sequentially
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=True):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0xf, failure=False, warning=False):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0x7, failure=False, warning=False):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0x3, failure=False, warning=False):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0x1, failure=False, warning=False):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_LEDs(0x0, failure=False, warning=False):
raise error.TestFail('TTCI_Set_LEDs() error: %s' %
self.ttci_obj.err)
# Get bit status
ret, status = self.ttci_obj.TTCI_Get_Switch_Status()
if ret:
raise error.TestFail('TTCI_Get_Switch_Status() error: %s' %
self.ttci_obj.err)
logging.info('Switch status = %r', status)
ret, bit_value, failure, warning = self.ttci_obj.TTCI_Get_LED_Status()
if ret:
raise error.TestFail('TTCI_Get_LED_Status() error: %s' %
self.ttci_obj.err)
logging.info('LED status: bit_value=%r, failure=%r, warning=%r',
bit_value, failure, warning)
# Test Main Power
self._getMainPowerStatus()
if self.ttci_obj.TTCI_Set_Main_Power_Control(turn_on=True):
raise error.TestFail('TTCI_Set_Main_Power_Control() error: %s' %
self.ttci_obj.err)
self._getMainPowerStatus()
if self.ttci_obj.TTCI_Set_Main_Power_Control(turn_on=False):
raise error.TestFail('TTCI_Set_Main_Power_Control() error: %s' %
self.ttci_obj.err)
self._getMainPowerStatus()
# Test Backup Power
self._getBackupPowerStatus()
if self.ttci_obj.TTCI_Set_Backup_Power_Control(turn_on=True):
raise error.TestFail('TTCI_Set_Backup_Power_Control() error: %s' %
self.ttci_obj.err)
self._getBackupPowerStatus()
if self.ttci_obj.TTCI_Set_Backup_Power_Control(turn_on=False):
raise error.TestFail('TTCI_Set_Backup_Power_Control() error: %s' %
self.ttci_obj.err)
self._getBackupPowerStatus()
# Test Physical Presence
self._getTPMPhysicalPresenceStatus()
if self.ttci_obj.TTCI_Set_PP_Control(turn_on=True):
raise error.TestFail('TTCI_Set_PP_Control() error: %s' %
self.ttci_obj.err)
self._getTPMPhysicalPresenceStatus()
if self.ttci_obj.TTCI_Set_PP_Control(turn_on=False):
raise error.TestFail('TTCI_Set_PP_Control() error: %s' %
self.ttci_obj.err)
self._getTPMPhysicalPresenceStatus()
# Test TPM I2C bit
self._getTpmI2cStatus()
if self.ttci_obj.TTCI_Set_TPM_I2C_Control(turn_on=True):
raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' %
self.ttci_obj.err)
self._getTpmI2cStatus()
if self.ttci_obj.TTCI_Set_TPM_I2C_Control(turn_on=False):
raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' %
self.ttci_obj.err)
self._getTpmI2cStatus()
# Test Reset
if self.ttci_obj.TTCI_Set_Reset_Control(turn_on=True):
raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' %
self.ttci_obj.err)
if self.ttci_obj.TTCI_Set_Reset_Control(turn_on=False):
raise error.TestFail('TTCI_Set_TPM_I2C_Control() error: %s' %
self.ttci_obj.err)
end_time = datetime.datetime.now()
smogcheck_util.computeTimeElapsed(end_time, start_time)