From e6de8c181d74357a657ce285d4845b5f045453b9 Mon Sep 17 00:00:00 2001 From: Raz Ben Hemo Date: Sun, 4 Jan 2026 02:59:27 -0500 Subject: [PATCH 1/4] Use HID descriptor regs --- hid-service/src/i2c/device.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/hid-service/src/i2c/device.rs b/hid-service/src/i2c/device.rs index d7efd06b..17dae694 100644 --- a/hid-service/src/i2c/device.rs +++ b/hid-service/src/i2c/device.rs @@ -99,7 +99,9 @@ impl> Device { let buf = &mut buf[0..desc.w_max_input_length as usize]; let mut bus = self.bus.lock().await; - if let Err(e) = bus.read(self.address, buf).await { + //use write read and use the input register + let reg = desc.w_input_register.to_le_bytes(); + if let Err(e) = bus.write_read(self.address, ®, buf).await { error!("Failed to read input report"); return Err(Error::Bus(e)); } @@ -113,15 +115,20 @@ impl> Device { ) -> Result>, Error> { info!("Handling command"); + let (command_reg, data_reg) = match self.get_hid_descriptor().await { + Ok(desc) => (desc.w_command_register, desc.w_data_register), + Err(_) => (self.device.regs.command_reg, self.device.regs.data_reg), + }; + let mut borrow = self.buffer.borrow_mut(); let buf: &mut [u8] = borrow.borrow_mut(); let opcode: Opcode = cmd.into(); let res = cmd.encode_into_slice( buf, - Some(self.device.regs.command_reg), + Some(command_reg), if opcode.has_response() || opcode.requires_host_data() { - Some(self.device.regs.data_reg) + Some(data_reg) } else { None }, From fe360105430900f1a516230d851b1795861edcf1 Mon Sep 17 00:00:00 2001 From: Raz Ben Hemo Date: Sun, 4 Jan 2026 04:03:49 -0500 Subject: [PATCH 2/4] Remove unnecessary comment + add error print in case of failed retrieving hid desc --- hid-service/src/i2c/device.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/hid-service/src/i2c/device.rs b/hid-service/src/i2c/device.rs index 4ca5fa86..9feb8d66 100644 --- a/hid-service/src/i2c/device.rs +++ b/hid-service/src/i2c/device.rs @@ -123,7 +123,6 @@ impl> Device { })))?; let mut bus = self.bus.lock().await; - //use write read and use the input register let reg = desc.w_input_register.to_le_bytes(); if let Err(e) = bus.write_read(self.address, ®, buf).await { error!("Failed to read input report"); @@ -144,7 +143,12 @@ impl> Device { let (command_reg, data_reg) = match self.get_hid_descriptor().await { Ok(desc) => (desc.w_command_register, desc.w_data_register), - Err(_) => (self.device.regs.command_reg, self.device.regs.data_reg), + Err(_) => { + error!( + "Failed to get HID descriptor, falling back to default registers", + ); + (self.device.regs.command_reg, self.device.regs.data_reg) + } }; let mut borrow = self.buffer.borrow_mut().map_err(Error::Buffer)?; From c124c5ff399bf7bcba3a46f37fa9ab04838639ed Mon Sep 17 00:00:00 2001 From: Raz Ben Hemo Date: Sun, 4 Jan 2026 04:14:30 -0500 Subject: [PATCH 3/4] Fix fmt --- hid-service/src/i2c/device.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/hid-service/src/i2c/device.rs b/hid-service/src/i2c/device.rs index 9feb8d66..cb13a9a9 100644 --- a/hid-service/src/i2c/device.rs +++ b/hid-service/src/i2c/device.rs @@ -144,9 +144,7 @@ impl> Device { let (command_reg, data_reg) = match self.get_hid_descriptor().await { Ok(desc) => (desc.w_command_register, desc.w_data_register), Err(_) => { - error!( - "Failed to get HID descriptor, falling back to default registers", - ); + error!("Failed to get HID descriptor, falling back to default registers"); (self.device.regs.command_reg, self.device.regs.data_reg) } }; From 2e2df2347966057eb175af4527d7c6540789e9f7 Mon Sep 17 00:00:00 2001 From: Raz Ben Hemo Date: Wed, 7 Jan 2026 02:38:27 -0500 Subject: [PATCH 4/4] propagate error from get hid desc --- hid-service/src/i2c/device.rs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/hid-service/src/i2c/device.rs b/hid-service/src/i2c/device.rs index cb13a9a9..9a5740db 100644 --- a/hid-service/src/i2c/device.rs +++ b/hid-service/src/i2c/device.rs @@ -141,13 +141,8 @@ impl> Device { ) -> Result>, Error> { info!("Handling command"); - let (command_reg, data_reg) = match self.get_hid_descriptor().await { - Ok(desc) => (desc.w_command_register, desc.w_data_register), - Err(_) => { - error!("Failed to get HID descriptor, falling back to default registers"); - (self.device.regs.command_reg, self.device.regs.data_reg) - } - }; + let desc = self.get_hid_descriptor().await?; + let (command_reg, data_reg) = (desc.w_command_register, desc.w_data_register); let mut borrow = self.buffer.borrow_mut().map_err(Error::Buffer)?; let buf: &mut [u8] = borrow.borrow_mut();