diff --git a/lib/logitech_receiver/advanced_para_eq.py b/lib/logitech_receiver/advanced_para_eq.py index ba1a61fe..6f98e6b4 100644 --- a/lib/logitech_receiver/advanced_para_eq.py +++ b/lib/logitech_receiver/advanced_para_eq.py @@ -108,7 +108,7 @@ def get_advanced_eq_info(device): } logger.info( "AdvancedParaEQ getEQInfos V2: gain=[%d,%d] steps=%d step_db=%.4f format=%d xy=%s " - "presets_ro=%d presets_custom=%d raw=%s", + "presets_ro=%d presets_custom=%d", gain_min, gain_max, gain_steps, @@ -117,7 +117,6 @@ def get_advanced_eq_info(device): supports_xy, ro_presets, custom_presets, - result.hex(), ) return info @@ -140,14 +139,13 @@ def get_advanced_eq_info(device): "step_db": 1.0, } logger.info( - "AdvancedParaEQ getEQInfos V%d: bands=%d dbRange=%d caps=0x%02X gain=[%d,%d] raw=%s", + "AdvancedParaEQ getEQInfos V%d: bands=%d dbRange=%d caps=0x%02X gain=[%d,%d]", version, band_count, db_range, caps, gain_min, gain_max, - result.hex(), ) return info @@ -161,7 +159,7 @@ def get_advanced_eq_active_slot(device, direction=DIRECTION_PLAYBACK): if len(result) < 1: logger.info("AdvancedParaEQ getActiveEQ(dir=%d): empty response", direction) return None - logger.info("AdvancedParaEQ getActiveEQ(dir=%d): slot=%d raw=%s", direction, result[0], result.hex()) + logger.info("AdvancedParaEQ getActiveEQ(dir=%d): slot=%d", direction, result[0]) return result[0] @@ -224,12 +222,11 @@ def get_advanced_eq_defaults(device, direction=DIRECTION_PLAYBACK, slot=0): ) return None logger.info( - "AdvancedParaEQ getEQDefaults V2 (dir=%d slot=%d): %d band(s) %s raw=%s", + "AdvancedParaEQ getEQDefaults V2 (dir=%d slot=%d): %d band(s) %s", direction, slot, len(bands), [_band_label(t, f) + f" {round(g, 2)}dB" for t, f, g in bands], - result.hex(), ) return bands # V0/V1 legacy 3-byte stride. @@ -243,12 +240,11 @@ def get_advanced_eq_defaults(device, direction=DIRECTION_PLAYBACK, slot=0): bands.append((FILTER_TYPE_PEAKING, freq, float(gain_db))) offset += 3 logger.info( - "AdvancedParaEQ getEQDefaults V%d (dir=%d slot=%d): %d band(s) raw=%s", + "AdvancedParaEQ getEQDefaults V%d (dir=%d slot=%d): %d band(s)", version, direction, slot, len(bands), - result.hex(), ) return bands @@ -346,13 +342,12 @@ def get_advanced_eq_params(device, direction=DIRECTION_PLAYBACK, slot=0): ) return None logger.info( - "AdvancedParaEQ getCustomEQ V2 (dir=%d slot=%d): %d band(s) step_db=%.4f %s raw=%s", + "AdvancedParaEQ getCustomEQ V2 (dir=%d slot=%d): %d band(s) step_db=%.4f %s", direction, slot, len(bands), step_db, [f"{_band_label(t, f)} {round(g, 2)}dB" for t, f, g in bands], - result.hex(), ) return bands @@ -367,12 +362,11 @@ def get_advanced_eq_params(device, direction=DIRECTION_PLAYBACK, slot=0): bands.append((FILTER_TYPE_PEAKING, freq, float(gain_db))) offset += 3 logger.info( - "AdvancedParaEQ getCustomEQ V%d (dir=%d slot=%d): parsed %d band(s) %s raw=%s", + "AdvancedParaEQ getCustomEQ V%d (dir=%d slot=%d): parsed %d band(s) %s", version, direction, slot, len(bands), bands, - result.hex(), ) return bands diff --git a/lib/logitech_receiver/device.py b/lib/logitech_receiver/device.py index 93120b78..82827ea1 100644 --- a/lib/logitech_receiver/device.py +++ b/lib/logitech_receiver/device.py @@ -714,11 +714,8 @@ class Device: timeout = base.DEFAULT_TIMEOUT with base.acquire_timeout(base.handle_lock(handle), handle, timeout): - # Log the outgoing sub-message at INFO so field diagnostics can - # correlate bridge NACKs with the exact payload we sent (e.g. to - # verify mic-gain byte landed in the device's accepted range). - if logger.isEnabledFor(logging.INFO): - logger.info( + if logger.isEnabledFor(logging.DEBUG): + logger.debug( "bridge TX: sub_idx=%d func=0x%02X sw_id=%d payload=%s", sub_feat_idx, sub_function, diff --git a/lib/logitech_receiver/hidpp20.py b/lib/logitech_receiver/hidpp20.py index 71d571e4..0f8051d8 100644 --- a/lib/logitech_receiver/hidpp20.py +++ b/lib/logitech_receiver/hidpp20.py @@ -209,13 +209,14 @@ class FeaturesArray(dict): # use the correct payload format on direct USB Centurion devices too. self.version[feature] = feat_version self.flags[feature] = feat_type - logger.info( - "Centurion parent feature: %s at index %d, version=%d, flags=0x%02X", - feature, - index, - feat_version, - feat_type, - ) + if logger.isEnabledFor(logging.DEBUG): + logger.debug( + "Centurion parent feature: %s at index %d, version=%d, flags=0x%02X", + feature, + index, + feat_version, + feat_type, + ) if feature is CenturionCoreFeature.CENT_PP_BRIDGE: bridge_index = index @@ -253,7 +254,8 @@ class FeaturesArray(dict): logger.warning("Failed to read Centurion sub-device feature count") return total_count = count_resp[0] - logger.info("Centurion sub-device: FeatureSet reports %d features", total_count) + if logger.isEnabledFor(logging.DEBUG): + logger.debug("Centurion sub-device: FeatureSet reports %d features", total_count) # Per-index query: GetFeatureId (function 1 = 0x10). # Response: [remaining, feat_hi, feat_lo, type, version]. @@ -282,19 +284,18 @@ class FeaturesArray(dict): # payload format. get_feature_version(feature) reads self.version[feature]. self.version[feature] = feat_version self.flags[feature] = feat_type - # Log every sub-device feature at INFO so field diagnostics can see - # both the version (V-gated payload formats) and flags (INTERNAL/HIDDEN - # bits silently suppress settings panels in check_feature). - logger.info( - "Centurion sub-device feature: %s at sub-index %d, version=%d, flags=0x%02X", - feature, - sub_feat_idx, - feat_version, - feat_type, - ) + if logger.isEnabledFor(logging.DEBUG): + logger.debug( + "Centurion sub-device feature: %s at sub-index %d, version=%d, flags=0x%02X", + feature, + sub_feat_idx, + feat_version, + feat_type, + ) sub_feat_idx += 1 self._sub_feature_count = sub_feat_idx - logger.info("Centurion sub-device: discovered %d features total", sub_feat_idx) + if logger.isEnabledFor(logging.DEBUG): + logger.debug("Centurion sub-device: discovered %d features total", sub_feat_idx) def get_feature(self, index: int) -> SupportedFeature | None: feature = self.inverse.get(index) diff --git a/lib/logitech_receiver/settings_templates.py b/lib/logitech_receiver/settings_templates.py index 96c45fe5..8f35c37c 100644 --- a/lib/logitech_receiver/settings_templates.py +++ b/lib/logitech_receiver/settings_templates.py @@ -1706,8 +1706,8 @@ class HeadsetMicGain(settings.Setting): info.hex(), ) min_gain, max_gain = cls.min_value, cls.max_value - else: - logger.info( + elif logger.isEnabledFor(logging.DEBUG): + logger.debug( "HeadsetMicGain: device reports gain range [%d, %d]", min_gain, max_gain, @@ -1992,25 +1992,6 @@ class HeadsetRGBHostMode(settings.Setting): rw_options = {"read_fnid": 0x70, "write_fnid": 0x80} validator_class = settings_validator.BooleanValidator - def write(self, value, save=True): - # Diagnostic wrapper: log what GetHostModeState returns immediately - # before AND after the SetHostModeState write, so we can see whether - # (a) the write takes effect on the device or (b) our decoding of the - # response is wrong. solaar show has been reporting this value as - # False even after writes we believed succeeded. - try: - before = self._device.feature_request(self.feature, 0x70) - except Exception as e: - before = f"" - logger.info("HeadsetRGBHostMode.write: before=%s requested=%s", before, value) - result = super().write(value, save=save) - try: - after = self._device.feature_request(self.feature, 0x70) - except Exception as e: - after = f"" - logger.info("HeadsetRGBHostMode.write: after=%s write_returned=%s", after, result) - return result - class HeadsetRGBColor(settings.Setting): """Pick a color from the shared `special_keys.COLORS` palette and apply it @@ -2137,23 +2118,23 @@ class HeadsetRGBColor(settings.Setting): # the device to report sane zone IDs and let the device reject nonsense. tight = list(resp[1 : 1 + zone_count]) if 1 <= zone_count <= len(resp) - 1 else [] if tight and len(tight) == zone_count: - logger.info( - "HeadsetRGBColor: discovered %d zone(s) %s (tight format, raw resp=%s)", - len(tight), - [f"0x{z:02X}" for z in tight], - resp.hex(), - ) + if logger.isEnabledFor(logging.DEBUG): + logger.debug( + "HeadsetRGBColor: discovered %d zone(s) %s (tight format)", + len(tight), + [f"0x{z:02X}" for z in tight], + ) device._headset_rgb_zone_ids = tight return tight # Try the doc's format (with reserved gap) as fallback gap = list(resp[5 : 5 + zone_count]) if len(resp) >= 5 + zone_count else [] if gap and len(gap) == zone_count: - logger.info( - "HeadsetRGBColor: discovered %d zone(s) %s (doc format, raw resp=%s)", - len(gap), - [f"0x{z:02X}" for z in gap], - resp.hex(), - ) + if logger.isEnabledFor(logging.DEBUG): + logger.debug( + "HeadsetRGBColor: discovered %d zone(s) %s (doc format)", + len(gap), + [f"0x{z:02X}" for z in gap], + ) device._headset_rgb_zone_ids = gap return gap # Neither format parsed cleanly; don't cache so next write retries.