From 37605d12d76bc62ef2a54dc3905f1b885684129b Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Sun, 28 Oct 2018 09:22:45 +0100 Subject: [PATCH] hardware::Model01: Handle LED index underflow Initially, we were using `uint8_t` as the type for led indexes, which could not go below zero, so we only needed one half of a bounds check. Since we switched to a signed int, we need to check the other half of the boundaries: if the index is below zero. Signed-off-by: Gergely Nagy --- src/kaleidoscope/hardware/Model01.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/kaleidoscope/hardware/Model01.cpp b/src/kaleidoscope/hardware/Model01.cpp index 539f6115..8fd342ff 100644 --- a/src/kaleidoscope/hardware/Model01.cpp +++ b/src/kaleidoscope/hardware/Model01.cpp @@ -86,6 +86,9 @@ void Model01::setup(void) { void Model01::setCrgbAt(int8_t i, cRGB crgb) { + if (i < 0) { + return; + } if (i < 32) { cRGB oldColor = getCrgbAt(i); isLEDChanged |= !(oldColor.r == crgb.r && oldColor.g == crgb.g && oldColor.b == crgb.b); @@ -112,12 +115,13 @@ int8_t Model01::getLedIndex(byte row, byte col) { } cRGB Model01::getCrgbAt(int8_t i) { + if (i < 0 || i > 64) + return {0, 0, 0}; + if (i < 32) { return leftHand.ledData.leds[i]; - } else if (i < 64) { - return rightHand.ledData.leds[i - 32] ; } else { - return {0, 0, 0}; + return rightHand.ledData.leds[i - 32] ; } }