From 8cb9c665380dba34c7fdce344bc2002ca1b211c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C4=B1l=20Akp=C4=B1nar?= <4ni1ak@gmail.com> Date: Thu, 17 Sep 2026 07:06:51 +0300 Subject: [PATCH 1/2] feat(hid): recognise Nano receiver 046d:c534 (MK270, MK295) The receiver-identity registry had no entry for USB product ID 0xc534, the Nano receiver bundled with budget wireless combos such as the MK270 and MK295, so OpenLogi never enumerated it or the paired keyboard/mouse. Cross-checked against Solaar's NANO_RECEIVER_C534 as the established reference implementation, alongside the neighboring 0xc537 Nano receiver already registered here. Fixes #866 --- crates/openlogi-device-registry/src/receiver.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/openlogi-device-registry/src/receiver.rs b/crates/openlogi-device-registry/src/receiver.rs index 05d09fdd6..9a9b0ce49 100644 --- a/crates/openlogi-device-registry/src/receiver.rs +++ b/crates/openlogi-device-registry/src/receiver.rs @@ -57,6 +57,10 @@ impl ReceiverDescriptor { pub const RECEIVERS: &[ReceiverDescriptor] = &[ ReceiverDescriptor::logitech(0xc52b, ReceiverBrand::Unifying, ReceiverProtocol::Unifying), ReceiverDescriptor::logitech(0xc532, ReceiverBrand::Unifying, ReceiverProtocol::Unifying), + // Nano receiver bundled with budget wireless combos (e.g. MK270, MK295), + // limited to 2 paired devices — cross-checked against Solaar's + // NANO_RECEIVER_C534. + ReceiverDescriptor::logitech(0xc534, ReceiverBrand::Nano, ReceiverProtocol::Unifying), // Nano receiver bundled with the G602. ReceiverDescriptor::logitech(0xc537, ReceiverBrand::Nano, ReceiverProtocol::Unifying), // Lightspeed gaming receiver used by the G502, G Pro Wireless, G604, and From dee43d08952031f3f84064612aefa0c6be8a7cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C4=B1l=20Akp=C4=B1nar?= <4ni1ak@gmail.com> Date: Thu, 17 Sep 2026 08:27:08 +0300 Subject: [PATCH 2/2] test(hid): pin the new c534 receiver's exact identity mapping receiver_identities_are_unique only proves no duplicate identity was introduced; it says nothing about whether 0xc534 resolves to the right brand and protocol. Adds a focused regression test alongside the existing one for the c54d receiver. --- crates/openlogi-device-registry/src/receiver.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/openlogi-device-registry/src/receiver.rs b/crates/openlogi-device-registry/src/receiver.rs index 9a9b0ce49..70bb9ffbd 100644 --- a/crates/openlogi-device-registry/src/receiver.rs +++ b/crates/openlogi-device-registry/src/receiver.rs @@ -126,6 +126,14 @@ mod tests { assert_eq!(receiver.protocol, ReceiverProtocol::Unifying); } + #[test] + fn mk270_mk295_nano_receiver_is_nano_over_unifying_protocol() { + let receiver = find_receiver(LOGITECH_VENDOR_ID, 0xc534).expect("c534 receiver"); + + assert_eq!(receiver.brand, ReceiverBrand::Nano); + assert_eq!(receiver.protocol, ReceiverProtocol::Unifying); + } + #[test] fn lookup_requires_the_matching_vendor() { assert!(find_receiver(0xffff, 0xc54d).is_none());