summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYu-Ping Wu <yupingso@chromium.org>2020-03-10 15:00:16 +0800
committerCommit Bot <commit-bot@chromium.org>2020-03-21 09:38:52 +0000
commit0b7596910e056841dd0c9c885a1075b3fb7f8956 (patch)
treed5aafc0d37daaa2ca16ec4d5efbf19f7f448c5b2
parent4d032c74e0a77860875faa4bbab2974c71da4f13 (diff)
downloadchrome-ec-stabilize-12997.B-master.tar.gz
servo_updater: Do not raise ServoUpdaterException on module importstabilize-12997.B-master
External tools such as platform/dev/contrib/dut-console may import servo_updater as a module. On import time, this module will check the existence of FIRMWARE_PATH and potentially raise ServoUpdaterException, which is unnecessary if the function the importing program calls does not have reference to the global variable FIRMWARE_PATH (for example, find_available_version()). In addition, there is only one function, findfiles(), that is currently using FIRMWARE_PATH and other similar global variables. Therefore, move the check for path existence inside findfiles(), so that ServoUpdaterException will not be raised on module import time. Also add servo board name constants to servo_updater to reduce duplicate string literals. BRANCH=none BUG=chromium:1061354 TEST=Run 'sudo servod -b kukui -m jacuzzi' and make sure findfiles() is called without exceptions Cq-Depend: chromium:2102179 Change-Id: I0179c44ba2a3947cb26035d97cd1ebeb453ef67a Signed-off-by: Yu-Ping Wu <yupingso@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2102247 Reviewed-by: Wai-Hong Tam <waihong@google.com>
-rwxr-xr-xextra/usb_updater/servo_updater.py58
1 files changed, 33 insertions, 25 deletions
diff --git a/extra/usb_updater/servo_updater.py b/extra/usb_updater/servo_updater.py
index 7ef16658fd..415c38ea3d 100755
--- a/extra/usb_updater/servo_updater.py
+++ b/extra/usb_updater/servo_updater.py
@@ -21,6 +21,11 @@ import ecusb.tiny_servo_common as c
class ServoUpdaterException(Exception):
"""Raised on exceptions generated by servo_updater."""
+BOARD_C2D2 = "c2d2"
+BOARD_SERVO_MICRO = "servo_micro"
+BOARD_SERVO_V4 = "servo_v4"
+BOARD_SWEETBERRY = "sweetberry"
+SERVO_BOARDS = (BOARD_C2D2, BOARD_SERVO_MICRO, BOARD_SERVO_V4, BOARD_SWEETBERRY)
DEFAULT_BASE_PATH = '/usr/'
TEST_IMAGE_BASE_PATH = '/usr/local/'
@@ -30,20 +35,6 @@ COMMON_PATH = 'share/servo_updater'
FIRMWARE_DIR = "firmware/"
CONFIGS_DIR = "configs/"
-if os.path.exists(os.path.join(DEFAULT_BASE_PATH, COMMON_PATH)):
- BASE_PATH = DEFAULT_BASE_PATH
-elif os.path.exists(os.path.join(TEST_IMAGE_BASE_PATH, COMMON_PATH)):
- BASE_PATH = TEST_IMAGE_BASE_PATH
-else:
- raise ServoUpdaterException('servo_updater/ dir not found in known spots.')
-
-FIRMWARE_PATH = os.path.join(BASE_PATH, COMMON_PATH, FIRMWARE_DIR)
-CONFIGS_PATH = os.path.join(BASE_PATH, COMMON_PATH, CONFIGS_DIR)
-
-for p in [FIRMWARE_PATH, CONFIGS_PATH]:
- if not os.path.exists(p):
- raise ServoUpdaterException('Could not find required path %r' % p)
-
def flash(brdfile, serialno, binfile):
"""Call fw_update to upload to updater USB endpoint."""
p = fw_update.Supdate()
@@ -186,9 +177,23 @@ def findfiles(cname, fname):
Returns:
cname, fname: validated filenames selected from the path.
"""
+ for p in (DEFAULT_BASE_PATH, TEST_IMAGE_BASE_PATH):
+ updater_path = os.path.join(p, COMMON_PATH)
+ if os.path.exists(updater_path):
+ break
+ else:
+ raise ServoUpdaterException('servo_updater/ dir not found in known spots.')
+
+ firmware_path = os.path.join(updater_path, FIRMWARE_DIR)
+ configs_path = os.path.join(updater_path, CONFIGS_DIR)
+
+ for p in (firmware_path, configs_path):
+ if not os.path.exists(p):
+ raise ServoUpdaterException('Could not find required path %r' % p)
+
if not os.path.isfile(cname):
# If not an existing file, try checking on the default path.
- newname = CONFIGS_PATH + cname
+ newname = os.path.join(configs_path, cname)
if os.path.isfile(newname):
cname = newname
elif os.path.isfile(newname + ".json"):
@@ -198,17 +203,20 @@ def findfiles(cname, fname):
raise ServoUpdaterException("Can't find file: %s." % cname)
if not fname:
- # If None, try defaults.
- dev = None
- for default_f in ['c2d2', 'servo_micro', 'servo_v4', 'sweetberry']:
- if default_f in cname:
- dev = default_f
- if os.path.isfile(FIRMWARE_PATH + dev + ".bin"):
- fname = FIRMWARE_PATH + dev + ".bin"
+ # If None, try to infer board name from config.
+ for board in SERVO_BOARDS:
+ if board in cname:
+ newname = os.path.join(firmware_path, board + ".bin")
+ if os.path.isfile(newname):
+ fname = newname
+ break
+ else:
+ raise ServoUpdaterException("Can't find firmware binary file")
elif not os.path.isfile(fname):
# If a name is specified but not found, try the default path.
- if os.path.isfile(FIRMWARE_PATH + fname):
- fname = FIRMWARE_PATH + fname
+ newname = os.path.join(firmware_path, fname)
+ if os.path.isfile(newname):
+ fname = newname
else:
raise ServoUpdaterException("Can't find file: %s." % fname)
@@ -239,7 +247,7 @@ def main():
parser.add_argument('-s', '--serialno', type=str,
help="serial number to program", default=None)
parser.add_argument('-b', '--board', type=str,
- help="Board configuration json file", default="servo_v4")
+ help="Board configuration json file", default=BOARD_SERVO_V4)
parser.add_argument('-f', '--file', type=str,
help="Complete ec.bin file", default=None)
parser.add_argument('--force', action="store_true",