Skip to content

Commit acd2ee2

Browse files
committed
simplify
1 parent f16fac9 commit acd2ee2

File tree

2 files changed

+31
-40
lines changed

2 files changed

+31
-40
lines changed

keyboard/model/is32fl3733.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ def __init__(self, address=0x50):
99
self.address = address
1010
self._page = None
1111
self._buffer = bytearray(12 * 16 + 1)
12+
self._buffer[0] = 0
1213
self.pixels = memoryview(self._buffer)[1:]
14+
self.mode_mask = 0
1315

1416
self.power = digitalio.DigitalInOut(microcontroller.pin.P1_04)
1517
self.power.direction = digitalio.Direction.OUTPUT
@@ -24,6 +26,8 @@ def __init__(self, address=0x50):
2426
# print(self.open_pixels())
2527
# print(self.short_pixels())
2628

29+
self.power.value = 0
30+
2731
def page(self, n):
2832
if self._page is n:
2933
return
@@ -37,6 +41,7 @@ def reset(self):
3741
self.read(0x11)
3842

3943
def setup(self):
44+
# configure 3 breathing modes
4045
self.page(3)
4146
self.write(2, (2 << 5) | (0 << 1))
4247
self.write(3, (2 << 5) | (3 << 1))
@@ -54,11 +59,11 @@ def setup(self):
5459
self.write(0, 3)
5560
self.write(0xE, 0)
5661

62+
self.set_brightness(128)
63+
5764
self.page(0)
5865
self.write(0, [255] * 0x18)
5966

60-
self.set_brightness(255)
61-
6267
def set_brightness(self, n):
6368
n &= 0xFF
6469
self._brightness = n
@@ -105,13 +110,16 @@ def update_pixel(self, i, r, g, b):
105110
self.write(row * 48 + 32 + col, b)
106111

107112
def update(self):
108-
if not self.power.value:
109-
self.power.value = 1
113+
self.power.value = 1
110114
self.page(1)
111115
self.i2c.writeto(self.address, self._buffer)
116+
if not self.any():
117+
self.power.value = 0
112118

113119
def any(self):
114120
"""Check if any pixel is not zero"""
121+
if self.mode_mask > 0:
122+
return True
115123
for pixel in self.pixels:
116124
if pixel > 0:
117125
return True
@@ -131,15 +139,20 @@ def read(self, register):
131139
self.i2c.writeto_then_readfrom(self.address, bytearray((register,)), buffer)
132140
return buffer[0]
133141

134-
def breathing_pixel(self, i, mode=2):
135-
if not self.power.value:
136-
self.power.value = 1
142+
def set_mode(self, i, mode=2):
143+
self.power.value = 1
137144
self.page(2)
138145
row = i >> 4 # i // 16
139146
col = i & 15 # i % 16
140147
self.write(row * 48 + 32 + col, mode) # blue
141148
# self.write(row * 48 + col, mode) # green
142149
# self.write(row * 48 + 16 + col, mode) # red
150+
if mode:
151+
self.mode_mask |= 1 << i
152+
else:
153+
self.mode_mask &= ~(1 << i)
154+
if not self.any():
155+
self.power.value = 0
143156

144157
def open_pixels(self):
145158
# 18h ~ 2Fh LED Open Register

keyboard/model/m60.py

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -295,66 +295,44 @@ def elapse(self):
295295
t = self.keys[i]
296296
self.pixel(i, *wheel2(255 - t, t))
297297
t -= 1
298-
if t < 0:
298+
if t <= 0:
299299
self.keys.pop(i)
300300
else:
301301
self.keys[i] = t
302302
self.update()
303303
return True
304304

305305
def set_hid_leds(self, v):
306-
self._hid_leds = v
307-
if self._hid_leds & 2:
308-
# capslock
309-
self.dev.update_pixel(28, 0, 0x80, 0)
310-
else:
311-
self.dev.update_pixel(28, 0, 0, 0)
306+
if self._hid_leds != v:
307+
self._hid_leds = v
308+
g = 128 if (self._hid_leds & 2) else 0
309+
self.dev.update_pixel(28, 0, g, 0)
312310
self.mode_function()
313311

314312
def set_bt_led(self, v):
315-
if self._bt_led is not None:
316-
self.dev.breathing_pixel(self._bt_led, 0)
317313
if v == 0:
318314
v = 10
319-
self._bt_led = v
320315
if v is not None:
321-
self.dev.breathing_pixel(v, 2)
322-
elif (self._hid_leds & 2) == 0 and not self.dev.any():
323-
self.dev.power.value = 0
316+
self.dev.set_mode(v, 2)
317+
if self._bt_led is not None:
318+
self.dev.set_mode(self._bt_led, 0)
319+
self._bt_led = v
324320

325321
def update(self):
326-
in_use = False
327322
if self._hid_leds & 2:
328323
self.pixel(28, 0, 0x80, 0)
329-
in_use = True
330-
if self._bt_led:
331-
self.pixel(self._bt_led, 0, 0, 0)
332-
in_use = True
333-
self.pixel(63, 0, 0, 0)
334324
self.dev.update()
335-
if not in_use and not self.dev.any():
336-
self.dev.power.value = 0
337325

338326
def check(self):
339327
if self.enabled and self.dynamic:
340328
return self.mode_function()
341329
return False
342330

343331
def next(self):
344-
self.dev.clear()
345-
self.mode += 1
346-
if self.mode >= len(self.modes):
347-
self.mode = 0
348-
self.mode_function = self.modes[self.mode]
349-
if self.mode == 6:
350-
self.keys.clear()
351-
if self.mode >= 3:
352-
self.dynamic = True
353-
else:
354-
self.dynamic = False
355-
self.mode_function()
332+
self.set_mode(self.mode + 1)
356333

357334
def set_mode(self, mode):
335+
self.dev.clear()
358336
self.mode = mode if mode < len(self.modes) else 0
359337
self.mode_function = self.modes[self.mode]
360338
if self.mode == 6:

0 commit comments

Comments
 (0)