From e65a32b75973efb535bc8e260c37a5ca21cce627 Mon Sep 17 00:00:00 2001
From: Sebastian Krzyszkowiak <dos@dosowisko.net>
Date: Sun, 12 Nov 2023 21:35:16 +0100
Subject: [PATCH] sim: fakes: Fix LED handling

---
 sim/fakes/_sim.py |  2 +-
 sim/fakes/leds.py | 29 +++++++++++------------------
 2 files changed, 12 insertions(+), 19 deletions(-)

diff --git a/sim/fakes/_sim.py b/sim/fakes/_sim.py
index 2ff7d9c1d8..b9ec85d89e 100644
--- a/sim/fakes/_sim.py
+++ b/sim/fakes/_sim.py
@@ -512,7 +512,7 @@ class Simulation:
         self._render_oled(self._oled_surface, fb)
 
     def set_led_rgb(self, ix, r, g, b):
-        self.led_state_buf[ix] = (r, g, b)
+        self.led_state_buf[ix] = (r * 255, g * 255, b * 255)
 
     def leds_update(self):
         for i, s in enumerate(_sim.led_state_buf):
diff --git a/sim/fakes/leds.py b/sim/fakes/leds.py
index 8f5f837ed6..aaf7e710c3 100644
--- a/sim/fakes/leds.py
+++ b/sim/fakes/leds.py
@@ -4,13 +4,16 @@ import pygame
 
 
 def set_rgb(ix, r, g, b):
-    if r > 255:
-        r = 255
-    if g > 255:
-        g = 255
-    if b > 255:
-        b = 255
-    _sim.set_led_rgb(ix, r, g, b)
+    if r > 1:
+        r /= 255
+    if g > 1:
+        g /= 255
+    if b > 1:
+        b /= 255
+    r = min(1.0, max(0.0, r))
+    g = min(1.0, max(0.0, g))
+    b = min(1.0, max(0.0, b))
+    _sim.set_led_rgb(ix, pow(r, 1 / 2.2), pow(g, 1 / 2.2), pow(b, 1 / 2.2))
 
 
 def get_rgb(ix):
@@ -31,17 +34,7 @@ def set_hsv(ix, h, s, v):
     h = int(h)
     h = h % 360
     color.hsva = (h, s * 100, v * 100, 1.0)
-    r, g, b = color.r, color.g, color.b
-    r *= 255
-    if r > 255:
-        r = 255
-    g *= 255
-    if g > 255:
-        g = 255
-    b *= 255
-    if b > 255:
-        b = 255
-    _sim.set_led_rgb(ix, r, g, b)
+    set_rgb(ix, color.r / 255, color.g / 255, color.b / 255)
 
 
 def set_slew_rate(b: int):
-- 
GitLab