def perform_fwinfo(dev, args):
    info = fwinfo(dev)

    if info:
        print(info)
    else:
        print('FW info request failed')
Ejemplo n.º 2
0
def perform_fwinfo(dev, args):
    info = fwinfo(dev)

    if info:
        print(info)
        complete_dfu_module_name = dev.get_complete_module_name('dfu')
        if complete_dfu_module_name is None:
            print('Dfu module not found')
            return
        if complete_dfu_module_name != 'dfu':
            print('  Bootloader variant: ' + complete_dfu_module_name[len('{}/'.format('dfu')):])
    else:
        print('FW info request failed')
Ejemplo n.º 3
0
def perform_dfu(dev, args):
    info = fwinfo(dev)
    if info is None:
        print('Cannot get FW info from device')
        return
    img_ver_dev = info.get_fw_version()

    img_file = DfuImage(args.dfu_image, info, dev.get_board_name())

    img_file_bin = img_file.get_dfu_image_bin_path()
    if img_file_bin is None:
        print('No proper update image in file')
        return

    print('DFU will use file {}'.format(os.path.basename(img_file_bin)))

    img_ver_file = img_file.get_dfu_image_version()
    if img_ver_file is None:
        print('Cannot read image version from file')
        return

    print('Current FW version from device: ' +
          '.'.join([str(i) for i in img_ver_dev]))
    print('Current FW version from file: ' +
          '.'.join([str(i) for i in img_ver_file]))
    print('Perform update? [y/n]')

    if not args.autoconfirm:
        rsp = input().lower()
        if rsp == 'y':
            pass

        elif rsp == 'n':
            print('DFU rejected by user')
            return

        else:
            print('Improper user input. Operation terminated.')
            return

    success = dfu_transfer(dev, img_file_bin, progress_bar)

    if success:
        success = fwreboot(dev)

    if success:
        print('DFU transfer completed')
    else:
        print('DFU transfer failed')
Ejemplo n.º 4
0
    def get_dfu_image_properties(self, filepath):
        info = fwinfo(self.dev)
        if info is None:
            return None, None

        self.img_file = DfuImage(filepath, info, self.dev.get_board_name())

        version = self.img_file.get_dfu_image_version()
        bin_path = self.img_file.get_dfu_image_bin_path()

        if version is not None:
            version_str = '.'.join([str(i) for i in version])
        else:
            version_str = None

        return version_str, bin_path
def perform_dfu(dev, args):
    dfu_image = args.dfu_image

    img_ver_file = get_dfu_image_version(dfu_image)
    if img_ver_file is None:
        print('Cannot read image version from file')
        return

    info = fwinfo(dev)
    if info is None:
        print('Cannot get FW info from device')
        return
    img_ver_dev = info.get_fw_version()

    print('Current FW version from device: ' +
          '.'.join([str(i) for i in img_ver_dev]))
    print('Current FW version from file: ' +
          '.'.join([str(i) for i in img_ver_file]))
    print('Perform update? [y/n]')

    if not args.autoconfirm:
        rsp = input().lower()
        if rsp == 'y':
            pass

        elif rsp == 'n':
            print('DFU rejected by user')
            return

        else:
            print('Improper user input. Operation terminated.')
            return

    success = dfu_transfer(dev, dfu_image, progress_bar)

    if success:
        success = fwreboot(dev)

    if success:
        print('DFU transfer completed')
    else:
        print('DFU transfer failed')
Ejemplo n.º 6
0
 def perform_fwinfo(self):
     return fwinfo(self.dev)
def perform_dfu(dev, args):
    dfu_package = args.dfu_image

    if not zipfile.is_zipfile(dfu_package):
        print('Invalid DFU package format')
        return

    info = fwinfo(dev)
    if info is None:
        print('Cannot get FW info from device')
        return
    img_ver_dev = info.get_fw_version()

    flash_area_id = info.get_flash_area_id()
    if flash_area_id not in (0, 1):
        print('Invalid area id in FW info')
        return
    dfu_slot_id = 1 - flash_area_id

    dfu_image_name = 'signed_by_b0_s{}_image.bin'.format(dfu_slot_id)

    temp_dir = tempfile.TemporaryDirectory(dir='.')
    dfu_path = temp_dir.name

    with ZipFile(dfu_package, 'r') as zip_file:
        zip_file.extract(dfu_image_name, dfu_path)

    dfu_image = os.path.join(dfu_path, dfu_image_name)

    print('DFU will use file {}'.format(dfu_image))

    img_ver_file = get_dfu_image_version(dfu_image)
    if img_ver_file is None:
        print('Cannot read image version from file')
        return

    print('Current FW version from device: ' +
          '.'.join([str(i) for i in img_ver_dev]))
    print('Current FW version from file: ' +
          '.'.join([str(i) for i in img_ver_file]))
    print('Perform update? [y/n]')

    if not args.autoconfirm:
        rsp = input().lower()
        if rsp == 'y':
            pass

        elif rsp == 'n':
            print('DFU rejected by user')
            return

        else:
            print('Improper user input. Operation terminated.')
            return

    success = dfu_transfer(dev, dfu_image, progress_bar)

    if success:
        success = fwreboot(dev)

    temp_dir.cleanup()

    if success:
        print('DFU transfer completed')
    else:
        print('DFU transfer failed')