diff options
Diffstat (limited to 'extra/usb_updater/servo_updater.py')
-rwxr-xr-x | extra/usb_updater/servo_updater.py | 58 |
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", |