fix: Colors of constants GREEN and RED match LEDs of RevPi Connect 4

The LED colors for the A1-A5 objects of the .core class of the connect 4
did not match the values of the constants for GREEN and RED, as on all
other RevPi Devices. In addition, the color BLUE was added.
This commit is contained in:
2024-09-17 13:20:12 +02:00
parent c6ae318a15
commit e8d7860dd2
2 changed files with 41 additions and 25 deletions

View File

@@ -8,6 +8,7 @@ __license__ = "LGPLv2"
OFF = 0 OFF = 0
GREEN = 1 GREEN = 1
RED = 2 RED = 2
BLUE = 4
RISING = 31 RISING = 31
FALLING = 32 FALLING = 32
BOTH = 33 BOTH = 33
@@ -53,6 +54,8 @@ def consttostr(value) -> str:
return "GREEN" return "GREEN"
elif value == 2: elif value == 2:
return "RED" return "RED"
elif value == 4:
return "BLUE"
elif value == 31: elif value == 31:
return "RISING" return "RISING"
elif value == 32: elif value == 32:

View File

@@ -1113,6 +1113,19 @@ class Connect4(ModularBase):
raise AttributeError("direct assignment is not supported - use .value Attribute") raise AttributeError("direct assignment is not supported - use .value Attribute")
super(Connect4, self).__setattr__(key, value) super(Connect4, self).__setattr__(key, value)
def __led_calculator(self, led_value: int) -> int:
"""
Calculate the LED value of Connect 4.
Only the Connect 4 has swapped LED colors red and green. We have to recalculate that
values to match our values for GREEN, RED and BLUE.
"""
led_calculated = led_value & 0b001
led_calculated <<= 1
led_calculated += bool(led_value & 0b010)
led_calculated += led_value & 0b100
return led_calculated
def _devconfigure(self) -> None: def _devconfigure(self) -> None:
"""Connect4-Klasse vorbereiten.""" """Connect4-Klasse vorbereiten."""
super()._devconfigure() super()._devconfigure()
@@ -1308,52 +1321,52 @@ class Connect4(ModularBase):
""" """
Gibt den Zustand der LED A1 vom Connect zurueck. Gibt den Zustand der LED A1 vom Connect zurueck.
:return: 0=aus, 1=rot, 2=gruen, 4=blau :return: 0=aus, 1=gruen, 2=root, 4=blau
""" """
return self._ba_devdata[self._slc_led.start] & 0b00000111 return self.__led_calculator(self._ba_devdata[self._slc_led.start] & 0b00000111)
def _get_leda2(self) -> int: def _get_leda2(self) -> int:
""" """
Gibt den Zustand der LED A2 vom Core zurueck. Gibt den Zustand der LED A2 vom Core zurueck.
:return: 0=aus, 1=rot, 2=gruen, 4=blau :return: 0=aus, 1=gruen, 2=root, 4=blau
""" """
return (self._ba_devdata[self._slc_led.start] & 0b00111000) >> 3 return self.__led_calculator((self._ba_devdata[self._slc_led.start] & 0b00111000) >> 3)
def _get_leda3(self) -> int: def _get_leda3(self) -> int:
""" """
Gibt den Zustand der LED A3 vom Core zurueck. Gibt den Zustand der LED A3 vom Core zurueck.
:return: 0=aus, 1=rot, 2=gruen, 4=blau :return: 0=aus, 1=gruen, 2=root, 4=blau
""" """
word_led = self._ba_devdata[self._slc_led] word_led = self._ba_devdata[self._slc_led]
return (unpack("<H", word_led)[0] & 0b0000000111000000) >> 6 return self.__led_calculator((unpack("<H", word_led)[0] & 0b0000000111000000) >> 6)
def _get_leda4(self) -> int: def _get_leda4(self) -> int:
""" """
Gibt den Zustand der LED A4 vom Core zurueck. Gibt den Zustand der LED A4 vom Core zurueck.
:return: 0=aus, 1=rot, 2=gruen, 4=blau :return: 0=aus, 1=gruen, 2=root, 4=blau
""" """
return (self._ba_devdata[self._slc_led.start + 1] & 0b00001110) >> 1 return self.__led_calculator((self._ba_devdata[self._slc_led.start + 1] & 0b00001110) >> 1)
def _get_leda5(self) -> int: def _get_leda5(self) -> int:
""" """
Gibt den Zustand der LED A5 vom Core zurueck. Gibt den Zustand der LED A5 vom Core zurueck.
:return: 0=aus, 1=rot, 2=gruen, 4=blau :return: 0=aus, 1=gruen, 2=root, 4=blau
""" """
return (self._ba_devdata[self._slc_led.start + 1] & 0b01110000) >> 4 return self.__led_calculator((self._ba_devdata[self._slc_led.start + 1] & 0b01110000) >> 4)
def _set_leda1(self, value: int) -> None: def _set_leda1(self, value: int) -> None:
""" """
Setzt den Zustand der LED A1 vom Connect. Setzt den Zustand der LED A1 vom Connect.
:param: value 0=aus, 1=rot, 2=gruen, 4=blue :param: value 0=aus, 1=gruen, 2=rot, 4=blue
""" """
if 0 <= value <= 7: if 0 <= value <= 7:
self.a1red(bool(value & 1)) self.a1red(bool(value & 2))
self.a1green(bool(value & 2)) self.a1green(bool(value & 1))
self.a1blue(bool(value & 4)) self.a1blue(bool(value & 4))
else: else:
raise ValueError("led status must be between 0 and 7") raise ValueError("led status must be between 0 and 7")
@@ -1362,11 +1375,11 @@ class Connect4(ModularBase):
""" """
Setzt den Zustand der LED A2 vom Connect. Setzt den Zustand der LED A2 vom Connect.
:param: value 0=aus, 1=rot, 2=gruen, 4=blue :param: value 0=aus, 1=gruen, 2=rot, 4=blue
""" """
if 0 <= value <= 7: if 0 <= value <= 7:
self.a2red(bool(value & 1)) self.a2red(bool(value & 2))
self.a2green(bool(value & 2)) self.a2green(bool(value & 1))
self.a2blue(bool(value & 4)) self.a2blue(bool(value & 4))
else: else:
raise ValueError("led status must be between 0 and 7") raise ValueError("led status must be between 0 and 7")
@@ -1375,11 +1388,11 @@ class Connect4(ModularBase):
""" """
Setzt den Zustand der LED A3 vom Connect. Setzt den Zustand der LED A3 vom Connect.
:param: value 0=aus, 1=rot, 2=gruen, 4=blue :param: value 0=aus, 1=gruen, 2=rot, 4=blue
""" """
if 0 <= value <= 7: if 0 <= value <= 7:
self.a3red(bool(value & 1)) self.a3red(bool(value & 2))
self.a3green(bool(value & 2)) self.a3green(bool(value & 1))
self.a3blue(bool(value & 4)) self.a3blue(bool(value & 4))
else: else:
raise ValueError("led status must be between 0 and 7") raise ValueError("led status must be between 0 and 7")
@@ -1388,11 +1401,11 @@ class Connect4(ModularBase):
""" """
Setzt den Zustand der LED A4 vom Connect. Setzt den Zustand der LED A4 vom Connect.
:param: value 0=aus, 1=rot, 2=gruen, 4=blue :param: value 0=aus, 1=gruen, 2=rot, 4=blue
""" """
if 0 <= value <= 7: if 0 <= value <= 7:
self.a4red(bool(value & 1)) self.a4red(bool(value & 2))
self.a4green(bool(value & 2)) self.a4green(bool(value & 1))
self.a4blue(bool(value & 4)) self.a4blue(bool(value & 4))
else: else:
raise ValueError("led status must be between 0 and 7") raise ValueError("led status must be between 0 and 7")
@@ -1401,11 +1414,11 @@ class Connect4(ModularBase):
""" """
Setzt den Zustand der LED A5 vom Connect. Setzt den Zustand der LED A5 vom Connect.
:param: value 0=aus, 1=rot, 2=gruen, 4=blue :param: value 0=aus, 1=gruen, 2=rot, 4=blue
""" """
if 0 <= value <= 7: if 0 <= value <= 7:
self.a5red(bool(value & 1)) self.a5red(bool(value & 2))
self.a5green(bool(value & 2)) self.a5green(bool(value & 1))
self.a5blue(bool(value & 4)) self.a5blue(bool(value & 4))
else: else:
raise ValueError("led status must be between 0 and 7") raise ValueError("led status must be between 0 and 7")