Procházet zdrojové kódy

Fix underflow in v2 conversion

Christopher Mullins před 6 roky
rodič
revize
3235b9e527
1 změnil soubory, kde provedl 10 přidání a 1 odebrání
  1. 10 1
      lib/MiLight/V2PacketFormatter.cpp

+ 10 - 1
lib/MiLight/V2PacketFormatter.cpp

@@ -113,10 +113,19 @@ uint8_t V2PacketFormatter::tov2scale(uint8_t value, uint8_t endValue, uint8_t in
 }
 
 uint8_t V2PacketFormatter::fromv2scale(uint8_t value, uint8_t endValue, uint8_t interval, bool reverse, uint8_t buffer) {
-  value = (((value + (0x100 - endValue))%0x100) / interval);
+  value -= endValue;
+
+  // Deal with underflow
+  if (value >= (0xFF - buffer)) {
+    value = 0;
+  }
+
+  value /= interval;
+
   if (reverse) {
     value = 100 - value;
   }
+
   if (value > 100) {
     // overflow
     if (value <= (100 + buffer)) {