From d09675dbdca02f33034333c0a476a9981f59f8ab Mon Sep 17 00:00:00 2001 From: TonyWu98 Date: Mon, 16 Oct 2023 02:30:37 -0400 Subject: [PATCH] bug fixes, update fw version --- APP/binaries/firmware.uf2 | Bin 518144 -> 518144 bytes APP/firmware_updater.py | 23 ++++++++++++++++++-- APP/fluxapp.py | 14 +++++++++++- APP/fluxpad_interface.py | 24 ++++++++++++++++++++- FW/fluxpad_rp2040_pio/src/flux_arduino.ino | 2 +- 5 files changed, 58 insertions(+), 5 deletions(-) diff --git a/APP/binaries/firmware.uf2 b/APP/binaries/firmware.uf2 index 188dd007955a19d966259fe756e11dc42ebb8663..30a8b66b1cfc52bbc66ebb3d7780ca60bc5ea245 100644 GIT binary patch delta 39 mcmZp;Am0E)TNrJAFfz5<{$K=R5X}t4EI`b<-S!9D;r9Si0uibJ delta 39 mcmZp;Am0E)TNrJAFfz8={s3VnAZ7+)79eKbZu^7n@OuDJ=Mkv@ diff --git a/APP/firmware_updater.py b/APP/firmware_updater.py index aed072d..f04abfb 100644 --- a/APP/firmware_updater.py +++ b/APP/firmware_updater.py @@ -19,6 +19,8 @@ BUFFER_SIZE = 128 * 1024 +CURR_FW_VERSION = 2 + class SameFileError(OSError): """Raised when source and destination are the same file.""" @@ -245,13 +247,31 @@ def enable_update(self): def set_stop_listener_callback(self, callback): self.stop_listener_callback = callback + def check_version(self, version): + if version < CURR_FW_VERSION: + if messagebox.askokcancel("Firmware Update", f"Current Firmware version is {version}, update to version {CURR_FW_VERSION} (latest)?"): + return True + elif version == CURR_FW_VERSION: + if messagebox.askokcancel("Firmware Update", f"Current Firmware version {version} is already latest, update anyway?"): + return True + else: + if messagebox.askokcancel("Firmware Update", f"Current Firmware version is future version {version} not supported by this version of fluxapp, downgrade to version {CURR_FW_VERSION}?"): + return True + return False + def upload_firmware_callback(self): try: self.stop_listener_callback() assert self.fluxpad is not None + self.fluxpad.open() + version = self.fluxpad.get_version() + self.fluxpad.close() + + if not self.check_version(version): + return + progress = upload_firmware_threaded(self.fluxpad.port, self.fw_bin_path) while progress.update_event.wait(timeout=10): - print("waited") with progress.lock: self.label_progress.configure(text=progress.current_step) self.progressbar_update.configure(value=progress.progress_percent) @@ -259,7 +279,6 @@ def upload_firmware_callback(self): self.progressbar_update.update() self.label_progress.update() if progress.is_done: - print("isdone") break if progress.error_string: raise Exception(progress.error_string) diff --git a/APP/fluxapp.py b/APP/fluxapp.py index de7e515..fb9c2cf 100644 --- a/APP/fluxapp.py +++ b/APP/fluxapp.py @@ -1534,6 +1534,17 @@ def on_save_to_fluxpad(self): else: messagebox.showinfo("Saved settings", "Saved settings to FLUXPAD") + +def is_windows_11(): + version_info = platform.uname() + if version_info.system == 'Windows' and version_info.release == '10': + # Check for Windows 11 specific version number (10.0.22000 and above) + windows_version = version_info.version.split('.') + if len(windows_version) >= 3 and int(windows_version[2]) >= 22000: + return True + return False + + if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG) @@ -1555,7 +1566,8 @@ def on_save_to_fluxpad(self): use_sv_ttk.set_theme("light") WIDTH = 500 - if platform.system() == "Windows" and platform.release() == "11": + if is_windows_11(): + # For some reason windows 11 windows are bigger HEIGHT = 660 else: HEIGHT = 620 diff --git a/APP/fluxpad_interface.py b/APP/fluxpad_interface.py index c84bd9c..63a70ae 100644 --- a/APP/fluxpad_interface.py +++ b/APP/fluxpad_interface.py @@ -24,6 +24,7 @@ def find_fluxpad_port(): class CommandType(enum.Enum): WRITE = "w" READ = "r" + VERSION = "v" class LightingMode(enum.IntEnum): @@ -41,6 +42,7 @@ class RGBMode(enum.IntEnum): class MessageKey: COMMAND = "cmd" + VERSION = "V" TOKEN = "tkn" KEY_ID = "key" KEY_TYPE = "k_t" @@ -534,11 +536,23 @@ def height_mm(self, dummy: int): """Dummy function for read cmd, doesn't actually set height_mm""" self.data[MessageKey.HEIGHT] = 0 +class VersionReadMessage(BaseMessage): + + # VERSION + @property + def version(self): + return self.data[MessageKey.VERSION] + + @version.setter + def version(self, version: int): + self._assert_uint8(version) + self.data[MessageKey.VERSION] = version + # class KeySettingMessage(DigitalSettingsMessage, AnalogSettingsMessage, EncoderSettingsMessage, AnalogCalibrationMessage, AnalogReadMessage): # """Composite class of all settings types""" # pass -AnyMessage = TypeVar("AnyMessage", DigitalSettingsMessage, AnalogSettingsMessage, EncoderSettingsMessage, AnalogCalibrationMessage, AnalogReadMessage, RGBSettingsMessage, Union[DigitalSettingsMessage, AnalogSettingsMessage, EncoderSettingsMessage, AnalogCalibrationMessage, AnalogReadMessage, RGBSettingsMessage]) +AnyMessage = TypeVar("AnyMessage", DigitalSettingsMessage, AnalogSettingsMessage, EncoderSettingsMessage, AnalogCalibrationMessage, AnalogReadMessage, RGBSettingsMessage, VersionReadMessage, Union[DigitalSettingsMessage, AnalogSettingsMessage, EncoderSettingsMessage, AnalogCalibrationMessage, AnalogReadMessage, RGBSettingsMessage]) class Fluxpad: @@ -603,6 +617,11 @@ def send_read_request(self, message: AnyMessage) -> AnyMessage: message.command = CommandType.READ return self._send_request(message) + + def get_version(self) -> int: + message = VersionReadMessage() + message.command = CommandType.VERSION + return self._send_request(message).version class FluxpadListener(): @@ -737,6 +756,9 @@ def _set_key_ids(self): key_settings.key_id = key_id key_id += 1 + def get_version(self, fluxpad: Fluxpad): + return fluxpad.get_version() + def load_from_keypad(self, fluxpad: Fluxpad): """Load all settings from the given connected fluxpad""" diff --git a/FW/fluxpad_rp2040_pio/src/flux_arduino.ino b/FW/fluxpad_rp2040_pio/src/flux_arduino.ino index f754fb6..6629833 100644 --- a/FW/fluxpad_rp2040_pio/src/flux_arduino.ino +++ b/FW/fluxpad_rp2040_pio/src/flux_arduino.ino @@ -19,7 +19,7 @@ #define HZ_TO_PERIOD_US(x) (1000000 / (x)) -#define VERSION 1 +#define VERSION 2 // PIN DEFINITIONS constexpr uint32_t ENC_A_PIN = 23u;