blob: da6c3a0cfcc632a54e6791b6cd10a05512b4ed81 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2020 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.
"""Servo-related functionality."""
from __future__ import print_function
SERVO_C2D2 = 'c2d2'
SERVO_CCD_CR50 = 'ccd_cr50'
SERVO_MICRO = 'servo_micro'
SERVO_V2 = 'servo_v2'
SERVO_V4_CCD = 'servo_v4_with_ccd_cr50'
SERVO_V4_MICRO = 'servo_v4_with_servo_micro'
VALID_SERVOS = (
SERVO_C2D2,
SERVO_CCD_CR50,
SERVO_MICRO,
SERVO_V2,
SERVO_V4_CCD,
SERVO_V4_MICRO,
)
CCD_SERVOS = (SERVO_CCD_CR50, SERVO_V4_CCD)
MICRO_SERVOS = (SERVO_MICRO, SERVO_V4_MICRO)
V2_SERVOS = (SERVO_V2,)
V4_SERVOS = (SERVO_V4_CCD, SERVO_V4_MICRO)
_SERIAL_NUMBER_OPTION = 'serialname'
_SERIAL_NUMBER_OPTION_OVERRIDE = {
SERVO_V4_CCD: 'ccd_serialname',
SERVO_V4_MICRO: 'servo_micro_serialname',
}
class Error(Exception):
"""Base error class for the module."""
class InvalidServoVersion(Error):
"""Invalid servo version error."""
def get(dut_ctl):
"""Get the Servo instance the given dut_control command is using.
Args:
dut_ctl (flash_ap.DutControl): The dut_control command wrapper instance.
"""
version = dut_ctl.get_value('servo_type')
if version not in VALID_SERVOS:
raise InvalidServoVersion('Unrecognized servo version: %s' % version)
option = _SERIAL_NUMBER_OPTION_OVERRIDE.get(version, _SERIAL_NUMBER_OPTION)
serial = dut_ctl.get_value(option)
return Servo(version, serial)
class Servo(object):
"""Data class for servos."""
def __init__(self, version, serial):
assert version in VALID_SERVOS
self.version = version
self.serial = serial
@property
def is_ccd(self):
return self.version in CCD_SERVOS
@property
def is_c2d2(self):
return self.version == SERVO_C2D2
@property
def is_micro(self):
return self.version in MICRO_SERVOS
@property
def is_v2(self):
return self.version in V2_SERVOS
@property
def is_v4(self):
return self.version in V4_SERVOS