Parse out valid servo v2 boards from servod config files.
BUG=chromium:371661
TEST=manually on my DUT
Change-Id: I56bc5c747bb3ab3bf3e035e94e6658f2147a1b54
Reviewed-on: https://chromium-review.googlesource.com/200001
Commit-Queue: Ricky Liang <jcliang@chromium.org>
Tested-by: Ricky Liang <jcliang@chromium.org>
Reviewed-by: Vic Yang <victoryang@chromium.org>
diff --git a/server/cros/servo/firmware_programmer.py b/server/cros/servo/firmware_programmer.py
index 457e3a5..d3b734e 100644
--- a/server/cros/servo/firmware_programmer.py
+++ b/server/cros/servo/firmware_programmer.py
@@ -11,8 +11,10 @@
Servo state is preserved across the programming process.
"""
+import glob
import logging
import os
+import re
from autotest_lib.client.common_lib import error
from autotest_lib.server.cros.faft.config.config import Config as FAFTConfig
@@ -192,10 +194,36 @@
def __init__(self, servo):
self._servo = servo
+ self._valid_boards = self._get_valid_v2_boards()
self._bios_programmer = self._factory_bios(self._servo)
self._ec_programmer = self._factory_ec(self._servo)
+ @staticmethod
+ def _get_valid_v2_boards():
+ """Greps servod config files to look for valid v2 boards.
+
+ @return A list of valid board names.
+ """
+ SERVOD_CONFIG_DATA_DIR = os.path.join(
+ os.path.dirname(__file__), os.pardir, os.pardir, os.pardir,
+ 'site-packages', 'servo', 'data')
+ SERVOFLEX_V2_R0_P50_CONFIG = 'servoflex_v2_r0_p50.xml'
+ SERVO_CONFIG_REGEXP = 'servo_(?P<board>.+)_overlay.xml'
+
+ result = []
+ config_glob = glob.glob(os.path.join(SERVOD_CONFIG_DATA_DIR,
+ SERVO_CONFIG_REGEXP.replace(
+ '(?P<board>.+)', '*')))
+ for config in config_glob:
+ with open(config) as f:
+ if SERVOFLEX_V2_R0_P50_CONFIG in f.read():
+ result.append(
+ re.search(SERVO_CONFIG_REGEXP,
+ config).group('board'))
+ return result
+
+
def _factory_bios(self, servo):
"""Instantiates and returns (bios, ec) programmers for the board.
@@ -215,11 +243,7 @@
]
logging.debug('Setting up BIOS programmer for board: %s', _board)
- if _board in ('daisy_spring', 'rambi', 'pit', 'spring',
- 'snow', 'daisy', 'monroe', 'panther', 'beltino',
- 'bolt', 'slippy', 'falco', 'link', 'stumpy',
- 'lumpy', 'parrot', 'stout', 'butterfly', 'alex',
- 'zgb', 'mario', 'squawks'):
+ if _board in self._valid_boards:
_bios_prog = FlashromProgrammer(servo)
else:
logging.warning('No BIOS programmer found for board: %s', _board)
@@ -239,10 +263,7 @@
_board = servo.get_board()
logging.debug('Setting up EC programmer for board: %s', _board)
- if _board in ('daisy', 'kirby', 'pit', 'puppy', 'snow',
- 'spring', 'discovery', 'nyan', 'bolt', 'samus',
- 'falco', 'peppy', 'rambi', 'slippy', 'link',
- 'squawks'):
+ if _board in self._valid_boards:
_ec_prog = FlashECProgrammer(servo)
else:
logging.warning('No EC programmer found for board: %s', _board)