def perform_dfu_fwreboot(self, update_animation): fwreboot(self.dev) WAIT_TIME_MAX = 60 CHECK_PERIOD = 0.5 start_time = time.time() # Wait until device turns off while self.dev.initialized(): self.dev.close_device() self.dev = NrfHidDevice(self.type, get_device_vid(self.type), get_device_pid(self.type), get_device_pid('dongle')) time.sleep(CHECK_PERIOD) while not self.dev.initialized(): update_animation() self.dev = NrfHidDevice(self.type, get_device_vid(self.type), get_device_pid(self.type), get_device_pid('dongle')) if time.time() - start_time > WAIT_TIME_MAX: break time.sleep(CHECK_PERIOD) if self.dev.initialized(): print('DFU completed') else: print('Cannot connect to device after reboot') return self.dev.initialized()
def perform_dfu_fwreboot(self, update_animation): fwreboot(self.dev, self.pid) self.dev.close() WAIT_TIME_MAX = 60 CHECK_PERIOD = 0.5 start_time = time.time() # Wait until device turns off while self.dev is not None: self.dev.close() self.dev = open_device(self.type) time.sleep(CHECK_PERIOD) while self.dev is None: update_animation() self.dev = open_device(self.type) if time.time() - start_time > WAIT_TIME_MAX: break time.sleep(CHECK_PERIOD) if self.dev is not None: print('DFU completed') else: print('Cannot connect to device after reboot') return self.dev is not None
def perform_fwreboot(dev, args): success, rebooted = fwreboot(dev) if success and rebooted: print('Firmware rebooted') else: print('FW reboot request failed')
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')
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')
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')