| # 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) |