class Gui(App): def add_mouse_settings(self): mouse_options = MouseOptions() self.root.ids.mouse_options = mouse_options self.root.ids.possible_settings_place.add_widget(mouse_options) def add_dfu_buttons(self): dfu_buttons = DfuButtons() self.root.ids.dfu_buttons = dfu_buttons self.root.ids.dfu_buttons_place.add_widget(dfu_buttons) def clear_possible_settings(self): print("Clear possible settings") self.root.ids.possible_settings_place.clear_widgets() self.root.ids.dfu_buttons_place.clear_widgets() self.root.ids.new_firmware_label.text = '' self.root.ids.dfu_label.text = '' def setcpi_callback(self, value): self.device.setcpi(value) def fetchcpi_callback(self): returned = self.device.fetchcpi() if returned: return returned else: return 0 def initialize_dropdown(self): device_list = Device.list_devices() for device in device_list: self.add_dropdown_button(device) def initialize_device(self, device_type): self.device = Device(device_type) print("Initialize {}".format(device_type)) def show_possible_settings(self): label = self.root.ids.settings_label if self.device.type == 'keyboard': label.text = 'there are no available keyboard options for now' self.add_dfu_buttons() elif self.device.type == 'gaming_mouse': label.text = 'mouse options' self.add_mouse_settings() self.add_dfu_buttons() else: label.text = 'Unrecognised device' def add_dropdown_button(self, device_type): dropdown = self.root.ids.dropdown button = DropDownButton() button.text = device_type button.bind(on_release=lambda btn: dropdown.select(btn.text)) button.bind(on_release=lambda btn: self.initialize_device(device_type)) dropdown.add_widget(button) def clear_dropdown(self): dropdown = self.root.ids.dropdown dropdown.clear_widgets() grid_layout = GridLayout() dropdown.add_widget(grid_layout) def update_device_list(self): self.clear_dropdown() self.initialize_dropdown() def show_fwinfo(self): info = self.device.perform_fwinfo() if info: info = info.__str__() else: info = 'FW info request failed' settings_info = self.root.ids.settings_info_label settings_info.text = info dfu_info = self.root.ids.dfu_info_label dfu_info.text = info def show_load_list(self): content = LoadDialog(load=self.load_list, cancel=self.dismiss_popup) self._popup = Popup(title="Load a file list", content=content, size_hint=(0.9, 0.9)) self._popup.open() def load_list(self, files_path): version, self.bin_filepath = self.device.get_dfu_image_properties( files_path[0]) if (version is None) or (self.bin_filepath is None): text = 'Cannot perform firmware update.' text += '\nDevice does not support firmware update or update file is improper.' self.root.ids.new_firmware_label.text = text self.dismiss_popup() return self.root.ids.dfu_buttons.ids.start_uploading_button.disabled = False text = 'File:\n {}\n'.format(os.path.basename(self.bin_filepath)) text += 'New firmware version:\n {}\n'.format(version) self.root.ids.new_firmware_label.text = text self.dismiss_popup() def dismiss_popup(self): self._popup.dismiss() def dfu(self, update_progressbar): self.root.ids.dfu_buttons.ids.choose_file_button.disabled = True dfu_label = self.root.ids.dfu_label dfu_label.text = 'Transfer in progress' success = self.device.perform_dfu(self.bin_filepath, update_progressbar) if success: info = 'DFU transfer completed' message = 'Firmware will be switched on next reboot' self.root.ids.dfu_buttons.ids.reboot_firmware_button.disabled = False else: info = 'DFU transfer failed' message = 'Restart application and try again' dfu_label.text = info notification.notify(app_name='GUI Configurator', app_icon='nordic.ico', title=info, message=message) def dfu_fwreboot(self, update_reboot_animation): dfu_label = self.root.ids.dfu_label dfu_label.text = 'Image swap in progress' success = self.device.perform_dfu_fwreboot(update_reboot_animation) if success: info = 'Device is ready' progression_text = 'Firmware rebooted' message = 'Image swap completed' self.root.ids.dfu_buttons.ids.choose_file_button.disabled = False else: info = 'Image swap failed' progression_text = 'Firmware reboot failed' message = 'Restart application and try again' dfu_label.text = info self.root.ids.dfu_buttons.ids.progression_label.text = progression_text self.show_fwinfo() notification.notify(app_name='GUI Configurator', app_icon='nordic.ico', title=info, message=message)
class Gui(App): def add_mouse_settings(self): mouse_options = MouseOptions() self.root.ids.mouse_options = mouse_options self.root.ids.possible_settings_place.add_widget(mouse_options) def add_dfu_buttons(self): dfu_buttons = DfuButtons() self.root.ids.dfu_buttons = dfu_buttons self.root.ids.dfu_buttons_place.add_widget(dfu_buttons) def clear_possible_settings(self): print("Clear possible settings") self.root.ids.possible_settings_place.clear_widgets() self.root.ids.dfu_buttons_place.clear_widgets() def setcpi_callback(self, value): self.device.setcpi(value) def fetchcpi_callback(self): returned = self.device.fetchcpi() if returned: return returned else: return 0 def initialize_dropdown(self): device_list = Device.list_devices() for device in device_list: self.add_dropdown_button(device) def initialize_device(self, device_type): self.device = Device(device_type) print("Initialize {}".format(device_type)) def show_possible_settings(self): label = self.root.ids.settings_label if self.device.type == 'keyboard': label.text = 'there are no available keyboard options for now' self.add_dfu_buttons() elif self.device.type == 'gaming_mouse': label.text = 'mouse options' self.add_mouse_settings() self.add_dfu_buttons() else: label.text = 'Unrecognised device' def add_dropdown_button(self, device_type): dropdown = self.root.ids.dropdown button = DropDownButton() button.text = device_type button.bind(on_release=lambda btn: dropdown.select(btn.text)) button.bind(on_release=lambda btn: self.initialize_device(device_type)) dropdown.add_widget(button) def clear_dropdown(self): dropdown = self.root.ids.dropdown dropdown.clear_widgets() grid_layout = GridLayout() dropdown.add_widget(grid_layout) def update_device_list(self): self.clear_dropdown() self.initialize_dropdown() def show_fwinfo(self): info = self.device.perform_fwinfo() if info: info = info.__str__() else: info = 'FW info request failed' settings_info = self.root.ids.settings_info_label settings_info.text = info settings_info.halign = 'left' dfu_info = self.root.ids.dfu_info_label dfu_info.text = info dfu_info.halign = 'left' def show_load_list(self): content = LoadDialog(load=self.load_list, cancel=self.dismiss_popup) self._popup = Popup(title="Load a file list", content=content, size_hint=(0.9, 0.9)) self._popup.open() def load_list(self, files_path): print(files_path) self.filepath = files_path[0] self.root.ids.dfu_buttons.ids.choose_file_button.disabled = True self.root.ids.dfu_buttons.ids.start_uploading_button.disabled = False self.dismiss_popup() def dismiss_popup(self): self._popup.dismiss() def dfu(self, update_progressbar): dfu_label = self.root.ids.dfu_label dfu_label.text = 'Transfer in progress' print(self.filepath) success = self.device.perform_dfu(self.filepath, update_progressbar) if success: info = 'DFU transfer completed' message = 'Firmware will be switched on next reboot' self.root.ids.dfu_buttons.ids.reboot_firmware_button.disabled = False else: info = 'DFU transfer failed' message = 'Restart application and try again' print(info) dfu_label.text = info notification.notify(app_name='GUI Configurator', app_icon='nordic.ico', title=info, message=message) def perform_fwreboot(self): print('Performing fwreboot, please wait') self.device.perform_fwreboot()