Fix all SonarQube code quality issues

This commit is contained in:
Augustin ROUX 2025-10-23 23:02:19 +02:00
parent 134d39b747
commit 40eab0e992

View File

@ -56,7 +56,7 @@ class VolumeButtonMapper:
def setup(self): def setup(self):
"""Initialize the virtual device and GPIO""" """Initialize the virtual device and GPIO"""
print(f"Initializing volume button mapper...") print("Initializing volume button mapper...")
# Create a virtual input device # Create a virtual input device
cap = { cap = {
@ -81,107 +81,70 @@ class VolumeButtonMapper:
} }
) )
print(f"GPIO configured:") print("GPIO configured:")
print(f" - Volume Down: GPIO {VOLUME_DOWN_PIN}") print(f" - Volume Down: GPIO {VOLUME_DOWN_PIN}")
print(f" - Volume Up: GPIO {VOLUME_UP_PIN}") print(f" - Volume Up: GPIO {VOLUME_UP_PIN}")
print(f"Press volume buttons to test...") print("Press volume buttons to test...")
def send_volume_event(self, key_code, button_name): def send_volume_event(self, key_code):
"""Send a volume event (complete press)""" """Send a volume event (complete press)"""
self.ui.write(e.EV_KEY, key_code, 1) # Pressed self.ui.write(e.EV_KEY, key_code, 1) # Pressed
self.ui.syn() self.ui.syn()
self.ui.write(e.EV_KEY, key_code, 0) # Released self.ui.write(e.EV_KEY, key_code, 0) # Released
self.ui.syn() self.ui.syn()
def _handle_button_state(self, gpio_value, button_state, press_time, last_repeat,
current_time, key_code, button_name, action_verb):
"""Handle button state transitions and repetition for a single button
Returns: (new_state, new_press_time, new_last_repeat)
"""
# ODL (Open Drain Low): INACTIVE = button pressed, ACTIVE = button released
button_pressed = (gpio_value == gpiod.line.Value.INACTIVE)
# Transition: released -> pressed
if button_pressed and button_state == 1:
print(f"{button_name} pressed")
self.send_volume_event(key_code)
print(f" -> Volume {action_verb}")
return (0, current_time, None)
# Transition: pressed -> released
elif not button_pressed and button_state == 0:
print(f"{button_name} released")
return (1, None, None)
# Button still pressed - check for repetition
elif button_pressed and button_state == 0:
time_held = current_time - press_time
if time_held >= self.HOLD_DELAY:
if last_repeat is None or (current_time - last_repeat) >= self.REPEAT_INTERVAL:
self.send_volume_event(key_code)
print(f" -> Volume {action_verb} (repeat)")
return (button_state, press_time, current_time)
# No state change
return (button_state, press_time, last_repeat)
def check_buttons(self): def check_buttons(self):
"""Check button states and handle automatic repetition""" """Check button states and handle automatic repetition"""
try: try:
# Read both GPIOs # Read both GPIOs
values = self.request.get_values([VOLUME_DOWN_PIN, VOLUME_UP_PIN]) values = self.request.get_values([VOLUME_DOWN_PIN, VOLUME_UP_PIN])
voldown_gpio = values[0]
volup_gpio = values[1]
current_time = time.time() current_time = time.time()
# === VOLUME DOWN MANAGEMENT === # Handle volume down button
# ODL (Open Drain Low): INACTIVE = button pressed, ACTIVE = button released self.voldown_state, self.voldown_press_time, self.voldown_last_repeat = self._handle_button_state(
voldown_pressed = (voldown_gpio == gpiod.line.Value.INACTIVE) values[0], self.voldown_state, self.voldown_press_time, self.voldown_last_repeat,
current_time, e.KEY_VOLUMEDOWN, "Volume Down", "decreased"
)
# State change detection # Handle volume up button
if voldown_pressed and self.voldown_state == 1: self.volup_state, self.volup_press_time, self.volup_last_repeat = self._handle_button_state(
# Transition released -> pressed values[1], self.volup_state, self.volup_press_time, self.volup_last_repeat,
print("Volume Down pressed") current_time, e.KEY_VOLUMEUP, "Volume Up", "increased"
self.voldown_state = 0 )
self.voldown_press_time = current_time
self.voldown_last_repeat = None
# Immediate action on first press
self.send_volume_event(e.KEY_VOLUMEDOWN, "Volume Down")
print(" -> Volume decreased")
elif not voldown_pressed and self.voldown_state == 0:
# Transition pressed -> released
print("Volume Down released")
self.voldown_state = 1
self.voldown_press_time = None
self.voldown_last_repeat = None
elif voldown_pressed and self.voldown_state == 0:
# Button still pressed - check if repeat needed
time_held = current_time - self.voldown_press_time
if time_held >= self.HOLD_DELAY:
# Button held long enough
if self.voldown_last_repeat is None:
# First repetition
self.voldown_last_repeat = current_time
self.send_volume_event(e.KEY_VOLUMEDOWN, "Volume Down")
print(" -> Volume decreased (repeat)")
elif (current_time - self.voldown_last_repeat) >= self.REPEAT_INTERVAL:
# Next repetitions
self.voldown_last_repeat = current_time
self.send_volume_event(e.KEY_VOLUMEDOWN, "Volume Down")
print(" -> Volume decreased (repeat)")
# === VOLUME UP MANAGEMENT ===
# ODL (Open Drain Low): INACTIVE = button pressed, ACTIVE = button released
volup_pressed = (volup_gpio == gpiod.line.Value.INACTIVE)
# State change detection
if volup_pressed and self.volup_state == 1:
# Transition released -> pressed
print("Volume Up pressed")
self.volup_state = 0
self.volup_press_time = current_time
self.volup_last_repeat = None
# Immediate action on first press
self.send_volume_event(e.KEY_VOLUMEUP, "Volume Up")
print(" -> Volume increased")
elif not volup_pressed and self.volup_state == 0:
# Transition pressed -> released
print("Volume Up released")
self.volup_state = 1
self.volup_press_time = None
self.volup_last_repeat = None
elif volup_pressed and self.volup_state == 0:
# Button still pressed - check if repeat needed
time_held = current_time - self.volup_press_time
if time_held >= self.HOLD_DELAY:
# Button held long enough
if self.volup_last_repeat is None:
# First repetition
self.volup_last_repeat = current_time
self.send_volume_event(e.KEY_VOLUMEUP, "Volume Up")
print(" -> Volume increased (repeat)")
elif (current_time - self.volup_last_repeat) >= self.REPEAT_INTERVAL:
# Next repetitions
self.volup_last_repeat = current_time
self.send_volume_event(e.KEY_VOLUMEUP, "Volume Up")
print(" -> Volume increased (repeat)")
except Exception as ex: except Exception as ex:
print(f"Error reading GPIO: {ex}") print(f"Error reading GPIO: {ex}")
@ -223,7 +186,7 @@ class VolumeButtonMapper:
self.ui.close() self.ui.close()
print("Stopped cleanly.") print("Stopped cleanly.")
def signal_handler(self, signum, frame): def signal_handler(self, _signum, _frame):
"""Handle signals for clean shutdown""" """Handle signals for clean shutdown"""
self.running = False self.running = False