Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package framework_tool for openSUSE:Factory checked in at 2026-06-09 14:30:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/framework_tool (Old) and /work/SRC/openSUSE:Factory/.framework_tool.new.2375 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "framework_tool" Tue Jun 9 14:30:49 2026 rev:12 rq:1358148 version:0.6.4 Changes: -------- --- /work/SRC/openSUSE:Factory/framework_tool/framework_tool.changes 2026-05-11 17:08:27.068215825 +0200 +++ /work/SRC/openSUSE:Factory/.framework_tool.new.2375/framework_tool.changes 2026-06-09 14:32:42.715414185 +0200 @@ -1,0 +2,12 @@ +Tue Jun 9 08:58:13 UTC 2026 - Nico Krapp <[email protected]> + +- Update to 0.6.4 + * README: Document how to install on Solus by @clintre in #336 + * smbios: Update Laptop 13 Pro naming by @JohnAZoidberg in #338 + * Haptic touchpad updates by @JohnAZoidberg in #337 + * fw16: fix invalid GPU read lengths by @kiram9 in #339 + * README: fix apt install package name by @alextwl in #340 + * Fix a bunch of issues on desktop by @JohnAZoidberg in #343 + * Prepare 064 by @JohnAZoidberg in #344 + +------------------------------------------------------------------- Old: ---- framework_tool-0.6.3.tar.gz New: ---- framework_tool-0.6.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ framework_tool.spec ++++++ --- /var/tmp/diff_new_pack.DUj6bW/_old 2026-06-09 14:32:48.183640826 +0200 +++ /var/tmp/diff_new_pack.DUj6bW/_new 2026-06-09 14:32:48.183640826 +0200 @@ -20,7 +20,7 @@ %define completion_dir_bash %{_datadir}/bash-completion/completions %define completion_dir_zsh %{_datadir}/zsh/functions/Completion Name: framework_tool -Version: 0.6.3 +Version: 0.6.4 Release: 0 Summary: Rust tools to interact with the Framework Computer systems License: BSD-3-Clause ++++++ framework_tool-0.6.3.tar.gz -> framework_tool-0.6.4.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/Cargo.lock new/framework-system-0.6.4/Cargo.lock --- old/framework-system-0.6.3/Cargo.lock 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/Cargo.lock 2026-06-02 18:21:24.000000000 +0200 @@ -380,7 +380,7 @@ [[package]] name = "framework_lib" -version = "0.6.3" +version = "0.6.4" dependencies = [ "built", "clap", @@ -416,7 +416,7 @@ [[package]] name = "framework_tool" -version = "0.6.3" +version = "0.6.4" dependencies = [ "embed-resource", "framework_lib", @@ -427,7 +427,7 @@ [[package]] name = "framework_uefi" -version = "0.6.3" +version = "0.6.4" dependencies = [ "framework_lib", "log", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/EXAMPLES.md new/framework-system-0.6.4/EXAMPLES.md --- old/framework-system-0.6.3/EXAMPLES.md 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/EXAMPLES.md 2026-06-02 18:21:24.000000000 +0200 @@ -439,9 +439,6 @@ - Sensitivity: How hard you have to press to trigger a click - Intensity: How strong the feedback vibration is -Note: Both of these settings are not stored persistently, they are reset when -the touchpad resets (e.g. on system reboot). - ``` # Disable haptic feedback > framework_tool --haptic-intensity 0 @@ -487,7 +484,7 @@ F75303_CPU: 44 C F75303_DDR: 39 C APU: 62 C - Fan Speed: 0 RPM + API Fan: 0 RPM ``` ## Check sensors @@ -520,7 +517,7 @@ F75303_CPU: 41 C F75303_DDR: 37 C APU: 42 C - Fan Speed: 7281 RPM + APU Fan: 7281 RPM # Set a target RPM (all or just fan ID=0) > sudo framework_tool --fansetrpm 3141 @@ -530,7 +527,7 @@ F75303_CPU: 42 C F75303_DDR: 37 C APU: 44 C - Fan Speed: 3171 RPM + APU Fan: 3171 RPM # And back to normal > sudo framework_tool --autofanctrl @@ -539,7 +536,7 @@ F75303_CPU: 40 C F75303_DDR: 38 C APU: 42 C - Fan Speed: 0 RPM + APU Fan: 0 RPM # Or just for a specific fan (e.g. on Framework Desktop) > sudo framework_tool --autofanctrl 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/README.md new/framework-system-0.6.4/README.md --- old/framework-system-0.6.3/README.md 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/README.md 2026-06-02 18:21:24.000000000 +0200 @@ -24,14 +24,16 @@ - Gentoo [](https://repology.org/project/framework-tool/versions) - `emerge framework_tool` - Debian 14 (Forky) and later ([rust-framework-lib](https://tracker.debian.org/pkg/rust-framework-lib), [rust-framework-tool](https://tracker.debian.org/pkg/rust-framework-tool)) - - `apt install rust-framework-tool` + - `apt install framework-tool` - Ubuntu 26.04 (Resolute) and later ([rust-framework-lib](https://launchpad.net/ubuntu/+source/rust-framework-lib), [rust-framework-tool](https://launchpad.net/ubuntu/+source/rust-framework-tool)) - - `apt install rust-framework-tool` + - `apt install framework-tool` - Ubuntu (Any Version - [Snap Package](https://snapcraft.io/framework-tool)) - `snap install --edge framework-tool --classic` - Note that this installs the command called `framework-tool` instead of `framework_tool` - Rhino Linux [](https://repology.org/project/framework-system/versions) - `pacstall -I framework-system-bin` +- Solus [](https://repology.org/project/framework-system/versions) + - `eopkg it framework-system` - [](https://repology.org/project/framework-system/versions) - `sudo xbps-install -S framework-system` - Manjaro diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/contrib/release.md new/framework-system-0.6.4/contrib/release.md --- old/framework-system-0.6.3/contrib/release.md 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/contrib/release.md 2026-06-02 18:21:24.000000000 +0200 @@ -41,8 +41,8 @@ ``` cargo publish -p framework_lib --dry-run cargo publish -p framework_tool --dry-run -cargo package list -p framework_lib -cargo package list -p framework_tool +cargo package --list -p framework_lib +cargo package --list -p framework_tool ``` Publish diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/flake.nix new/framework-system-0.6.4/flake.nix --- old/framework-system-0.6.3/flake.nix 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/flake.nix 2026-06-02 18:21:24.000000000 +0200 @@ -91,7 +91,7 @@ in rustPlatform.buildRustPackage { pname = "framework_tool"; - version = "0.6.3"; + version = "0.6.4"; src = buildSrc; @@ -144,7 +144,7 @@ in rustPlatformWindows.buildRustPackage { pname = "framework_tool"; - version = "0.6.3"; + version = "0.6.4"; src = buildSrc; @@ -194,7 +194,7 @@ in rustPlatform.buildRustPackage { pname = "framework_uefi"; - version = "0.6.3"; + version = "0.6.4"; src = buildSrc; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/framework_lib/Cargo.toml new/framework-system-0.6.4/framework_lib/Cargo.toml --- old/framework-system-0.6.3/framework_lib/Cargo.toml 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/framework_lib/Cargo.toml 2026-06-02 18:21:24.000000000 +0200 @@ -1,11 +1,12 @@ [package] name = "framework_lib" -version = "0.6.3" +version = "0.6.4" description = "Library to control Framework Computer systems" homepage = "https://github.com/FrameworkComputer/framework-system" repository = "https://github.com/FrameworkComputer/framework-system" readme = "../README.md" license = "BSD-3-Clause" +license-file = "../LICENSE.md" edition = "2021" # Minimum Supported Rust Version rust-version = "1.81" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/framework_lib/src/chromium_ec/i2c_passthrough.rs new/framework-system-0.6.4/framework_lib/src/chromium_ec/i2c_passthrough.rs --- old/framework-system-0.6.3/framework_lib/src/chromium_ec/i2c_passthrough.rs 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/framework_lib/src/chromium_ec/i2c_passthrough.rs 2026-06-02 18:21:24.000000000 +0200 @@ -177,8 +177,15 @@ let data = ec.send_command(EcCommands::I2cPassthrough as u16, 0, &buffer)?; let res: _EcI2cPassthruResponse = unsafe { std::ptr::read(data.as_ptr() as *const _) }; - let res_data = &data[size_of::<_EcI2cPassthruResponse>()..]; + let header_len: usize = size_of::<_EcI2cPassthruResponse>(); + /* Note on windows, you can get extra bytes back, so truncate this to the requested size */ + let res_data = &data[header_len..(len as usize + header_len)]; debug_assert!(res.messages as usize == messages.len() || res.messages == 0); + trace!( + " i2c_read_16bit_addr response (len: {}, data: {:#04X?})", + res_data.len(), + res_data.to_vec() + ); Ok(EcI2cPassthruResponse { i2c_status: res.i2c_status, data: res_data.to_vec(), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/framework_lib/src/chromium_ec/mod.rs new/framework-system-0.6.4/framework_lib/src/chromium_ec/mod.rs --- old/framework-system-0.6.3/framework_lib/src/chromium_ec/mod.rs 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/framework_lib/src/chromium_ec/mod.rs 2026-06-02 18:21:24.000000000 +0200 @@ -1551,7 +1551,7 @@ "Invalid descriptor hdr magic".to_string(), )); } - self.read_ec_gpu_chunk(0x00, header.descriptor_length as u16) + self.read_ec_gpu_chunk(0x00, (header.descriptor_length + header.length) as u16) } pub fn read_gpu_desc_header(&self) -> EcResult<GpuCfgDescriptor> { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/framework_lib/src/commandline/mod.rs new/framework-system-0.6.4/framework_lib/src/commandline/mod.rs --- old/framework-system-0.6.3/framework_lib/src/commandline/mod.rs 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/framework_lib/src/commandline/mod.rs 2026-06-02 18:21:24.000000000 +0200 @@ -2063,6 +2063,7 @@ println!("Specify custom platform parameters with --pd-ports --pd-addrs"); return None; }; + let family = smbios::get_platform().and_then(Platform::which_family); println!(" Dump EC memory region"); if let Some(mem) = ec.dump_mem_region() { @@ -2091,10 +2092,12 @@ println!(" - OK"); println!(" Getting AC info from EC"); - // All our laptops have at least 4 PD ports so far - if power::get_pd_info(ec, 4).iter().any(|x| x.is_err()) { - println!(" Failed to get PD Info from EC"); - return None; + if family != Some(PlatformFamily::FrameworkDesktop) { + // All our laptops have at least 4 PD ports so far + if power::get_pd_info(ec, 4).iter().any(|x| x.is_err()) { + println!(" Failed to get PD Info from EC"); + return None; + } } print!("Reading PD Version from EC"); @@ -2112,16 +2115,28 @@ let pd_01 = PdController::new(PdPort::Right01, ec.clone()); let pd_23 = PdController::new(PdPort::Left23, ec.clone()); - print!(" Getting PD01 info through I2C tunnel"); - print_err(pd_01.get_silicon_id())?; - print_err(pd_01.get_device_info())?; - print_err(pd_01.get_fw_versions())?; - println!(" - OK"); - print!(" Getting PD23 info through I2C tunnel"); - print_err(pd_23.get_silicon_id())?; - print_err(pd_23.get_device_info())?; - print_err(pd_23.get_fw_versions())?; - println!(" - OK"); + let pd_back = PdController::new(PdPort::Back, ec.clone()); + if family != Some(PlatformFamily::FrameworkDesktop) { + print!(" Getting PD01 info through I2C tunnel"); + print_err(pd_01.get_silicon_id())?; + print_err(pd_01.get_device_info())?; + print_err(pd_01.get_fw_versions())?; + println!(" - OK"); + print!(" Getting PD23 info through I2C tunnel"); + print_err(pd_23.get_silicon_id())?; + print_err(pd_23.get_device_info())?; + print_err(pd_23.get_fw_versions())?; + println!(" - OK"); + } else if matches!( + family, + Some(PlatformFamily::FrameworkDesktop) | Some(PlatformFamily::Framework16) + ) { + print!(" Getting Back PD info through I2C tunnel"); + print_err(pd_back.get_silicon_id())?; + print_err(pd_back.get_device_info())?; + print_err(pd_back.get_fw_versions())?; + println!(" - OK"); + } Some(()) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/framework_lib/src/power.rs new/framework-system-0.6.4/framework_lib/src/power.rs --- old/framework-system-0.6.3/framework_lib/src/power.rs 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/framework_lib/src/power.rs 2026-06-02 18:21:24.000000000 +0200 @@ -419,7 +419,8 @@ println!(" F75303_DDR: {:>4}", TempSensor::from(temps[1])); println!(" F75303_AMB: {:>4}", TempSensor::from(temps[2])); println!(" APU: {:>4}", TempSensor::from(temps[3])); - 4 + println!(" Virtual: {:>4}", TempSensor::from(temps[4])); + 3 } _ => { @@ -444,13 +445,25 @@ } for i in 0..EC_FAN_SPEED_ENTRIES { + let name = match (i, family) { + (0, Some(PlatformFamily::Framework12)) => "APU Fan".to_string(), + (0, Some(PlatformFamily::Framework13)) => "APU Fan".to_string(), + (0, Some(PlatformFamily::Framework16)) => "Left Fan".to_string(), + (1, Some(PlatformFamily::Framework16)) => "Right Fan".to_string(), + (0, Some(PlatformFamily::FrameworkDesktop)) => "APU Fan".to_string(), + (1, Some(PlatformFamily::FrameworkDesktop)) => "Front Fan".to_string(), + (2, Some(PlatformFamily::FrameworkDesktop)) => "Third Fan".to_string(), + _ => format!("Fan {i}"), + }; + let name = format!("{name}:"); + let fan = u16::from_le_bytes([fans[i * 2], fans[1 + i * 2]]); if fan == EC_FAN_SPEED_STALLED_DEPRECATED { - println!(" Fan Speed: {:>4} RPM (Stalled)", fan); + println!(" {name:<11} {:>4} RPM (Stalled)", fan); } else if fan == EC_FAN_SPEED_NOT_PRESENT { - info!(" Fan Speed: Not present"); + info!(" {name:<11} Not present"); } else { - println!(" Fan Speed: {:>4} RPM", fan); + println!(" {name:<11} {:>4} RPM", fan); } } } @@ -782,110 +795,116 @@ } pub fn get_and_print_cypd_pd_info(ec: &CrosEc) { + // All of our systems have a maximum of 4 PD enabled ports let ports = 4u8; for port in 0..ports { - println!("USB-C Port {}:", port); - let result = EcRequestGetPdPortState { port }.send_command(ec); - match result { - Ok(info) => { - let c_state = CypdTypeCState::from(info.c_state); - let connected = !matches!(c_state, CypdTypeCState::Nothing); - let power_role = CypdPdPowerRole::from(info.power_role); - let data_role = CypdPdDataRole::from(info.data_role); - let voltage = { info.voltage }; - let current = { info.current }; - let watts_mw = voltage as u32 * current as u32 / 1000; - let has_pd_contract = info.pd_state != 0; - println!( - " PD Contract: {}", - if info.pd_state != 0 { "Yes" } else { "No" } - ); - println!(" Power Role: {:?}", power_role); - println!(" Data Role: {:?}", data_role); - if connected { - println!( - " VCONN: {}", - if info.vconn != 0 { "On" } else { "Off" } - ); - println!( - " Negotiated: {}.{:03} V, {} mA, {}.{} W", - voltage / 1000, - voltage % 1000, - current, - watts_mw / 1000, - watts_mw % 1000, - ); - println!( - " CC Polarity: {}", - match info.cc_polarity { - 0 => "CC1", - 1 => "CC2", - 2 => "CC1 (Debug)", - 3 => "CC2 (Debug)", - _ => "Unknown", - } - ); - } - if has_pd_contract { - println!(" Port Partner: {:?}", c_state); - println!( - " EPR: {}{}", - if info.epr_active != 0 { - "Active" - } else { - "Inactive" - }, - if info.epr_support != 0 { - " (Supported)" - } else { - "" - } - ); - if power_role == CypdPdPowerRole::Sink { - println!( - " Sink Active: {}", - if info.active_port != 0 { "Yes" } else { "No" } - ); - } - } - let alt = info.pd_alt_mode_status; - // Bits 0-1 indicate DP alt mode is active (bit 0 = DFP_D/TBT, - // bit 1 = UFP_D). Only show when actually in DP alt mode. - if connected && (alt & 0x03) != 0 { - let mut modes = vec![]; - if alt & 0x01 != 0 { - modes.push("DFP_D Connected"); - } - if alt & 0x02 != 0 { - modes.push("UFP_D Connected"); - } - if alt & 0x04 != 0 { - modes.push("Power Low"); - } - if alt & 0x08 != 0 { - modes.push("Enabled"); - } - if alt & 0x10 != 0 { - modes.push("Multi-Function"); - } - if alt & 0x20 != 0 { - modes.push("USB Config"); - } - if alt & 0x40 != 0 { - modes.push("Exit Request"); - } - if alt & 0x80 != 0 { - modes.push("HPD High"); - } - println!(" DP Alt Mode: {} (0x{:02X})", modes.join(", "), alt); - } + let info = match result { + Ok(info) => info, + Err(EcError::Response(EcResponseStatus::InvalidParameter)) => { + debug!("Port {port} does not exist"); + continue; } Err(e) => { print_err::<()>(Err(e)); + continue; + } + }; + + println!("USB-C Port {}:", port); + let c_state = CypdTypeCState::from(info.c_state); + let connected = !matches!(c_state, CypdTypeCState::Nothing); + let power_role = CypdPdPowerRole::from(info.power_role); + let data_role = CypdPdDataRole::from(info.data_role); + let voltage = { info.voltage }; + let current = { info.current }; + let watts_mw = voltage as u32 * current as u32 / 1000; + let has_pd_contract = info.pd_state != 0; + + println!( + " PD Contract: {}", + if info.pd_state != 0 { "Yes" } else { "No" } + ); + println!(" Power Role: {:?}", power_role); + println!(" Data Role: {:?}", data_role); + if connected { + println!( + " VCONN: {}", + if info.vconn != 0 { "On" } else { "Off" } + ); + println!( + " Negotiated: {}.{:03} V, {} mA, {}.{} W", + voltage / 1000, + voltage % 1000, + current, + watts_mw / 1000, + watts_mw % 1000, + ); + println!( + " CC Polarity: {}", + match info.cc_polarity { + 0 => "CC1", + 1 => "CC2", + 2 => "CC1 (Debug)", + 3 => "CC2 (Debug)", + _ => "Unknown", + } + ); + } + if has_pd_contract { + println!(" Port Partner: {:?}", c_state); + println!( + " EPR: {}{}", + if info.epr_active != 0 { + "Active" + } else { + "Inactive" + }, + if info.epr_support != 0 { + " (Supported)" + } else { + "" + } + ); + if power_role == CypdPdPowerRole::Sink { + println!( + " Sink Active: {}", + if info.active_port != 0 { "Yes" } else { "No" } + ); + } + } + let alt = info.pd_alt_mode_status; + // Bits 0-1 indicate DP alt mode is active (bit 0 = DFP_D/TBT, + // bit 1 = UFP_D). Only show when actually in DP alt mode. + if connected && (alt & 0x03) != 0 { + let mut modes = vec![]; + if alt & 0x01 != 0 { + modes.push("DFP_D Connected"); + } + if alt & 0x02 != 0 { + modes.push("UFP_D Connected"); + } + if alt & 0x04 != 0 { + modes.push("Power Low"); + } + if alt & 0x08 != 0 { + modes.push("Enabled"); + } + if alt & 0x10 != 0 { + modes.push("Multi-Function"); + } + if alt & 0x20 != 0 { + modes.push("USB Config"); + } + if alt & 0x40 != 0 { + modes.push("Exit Request"); + } + if alt & 0x80 != 0 { + modes.push("HPD High"); } + println!(" DP Alt Mode: {} (0x{:02X})", modes.join(", "), alt); } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/framework_lib/src/smbios.rs new/framework-system-0.6.4/framework_lib/src/smbios.rs --- old/framework-system-0.6.3/framework_lib/src/smbios.rs 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/framework_lib/src/smbios.rs 2026-06-02 18:21:24.000000000 +0200 @@ -208,7 +208,7 @@ "Laptop 13 (AMD Ryzen AI 300 Series)" => Some(Platform::Framework13AmdAi300), "Laptop 12 (13th Gen Intel Core)" => Some(Platform::Framework12IntelGen13), "Laptop 13 (Intel Core Ultra Series 1)" => Some(Platform::IntelCoreUltra1), - "Framework Laptop 13 Pro (Intel Core Ultra Series 3)" => Some(Platform::IntelCoreUltra3), + "Laptop 13 Pro (Intel Core Ultra Series 3)" => Some(Platform::IntelCoreUltra3), "Laptop 16 (AMD Ryzen 7040 Series)" => Some(Platform::Framework16Amd7080), "Laptop 16 (AMD Ryzen AI 300 Series)" => Some(Platform::Framework16AmdAi300), "Desktop (AMD Ryzen AI Max 300 Series)" => Some(Platform::FrameworkDesktopAmdAiMax300), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/framework_lib/src/touchpad.rs new/framework-system-0.6.4/framework_lib/src/touchpad.rs --- old/framework-system-0.6.3/framework_lib/src/touchpad.rs 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/framework_lib/src/touchpad.rs 2026-06-02 18:21:24.000000000 +0200 @@ -17,6 +17,7 @@ pub const HAPTIC_INTENSITY_LEVELS: [u8; 5] = [0, 25, 50, 75, 100]; // Button press threshold / click force (HID Digitizer page 0x0D, Usage 0xB0). +// Added in HUTRR11, included in HUT 1.4 // 2-bit field, firmware accepts 1=Low, 2=Medium, 3=High. const CLICK_FORCE_REPORT_ID: u8 = 0x08; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/framework_tool/Cargo.toml new/framework-system-0.6.4/framework_tool/Cargo.toml --- old/framework-system-0.6.3/framework_tool/Cargo.toml 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/framework_tool/Cargo.toml 2026-06-02 18:21:24.000000000 +0200 @@ -1,11 +1,12 @@ [package] name = "framework_tool" -version = "0.6.3" +version = "0.6.4" description = "Tool to control Framework Computer systems" homepage = "https://github.com/FrameworkComputer/framework-system" repository = "https://github.com/FrameworkComputer/framework-system" readme = "../README.md" license = "BSD-3-Clause" +license-file = "../LICENSE.md" edition = "2021" [[bin]] @@ -19,7 +20,7 @@ [dependencies.framework_lib] path = "../framework_lib" -version = "0.6.3" +version = "0.6.4" [build-dependencies] static_vcruntime = "3.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/framework-system-0.6.3/framework_uefi/Cargo.toml new/framework-system-0.6.4/framework_uefi/Cargo.toml --- old/framework-system-0.6.3/framework_uefi/Cargo.toml 2026-05-06 01:41:22.000000000 +0200 +++ new/framework-system-0.6.4/framework_uefi/Cargo.toml 2026-06-02 18:21:24.000000000 +0200 @@ -1,6 +1,6 @@ [package] name = "framework_uefi" -version = "0.6.3" +version = "0.6.4" description = "UEFI Tool to control Framework Computer systems" homepage = "https://github.com/FrameworkComputer/framework-system" repository = "https://github.com/FrameworkComputer/framework-system" @@ -24,6 +24,6 @@ [dependencies.framework_lib] path = "../framework_lib" -version = "0.6.3" +version = "0.6.4" features = ["uefi"] default-features = false ++++++ vendor.tar.zst ++++++ /work/SRC/openSUSE:Factory/framework_tool/vendor.tar.zst /work/SRC/openSUSE:Factory/.framework_tool.new.2375/vendor.tar.zst differ: char 7, line 1
