]> git.donarmstrong.com Git - tmk_firmware.git/blobdiff - common/util.c
Rewrite layer action with layer_switch
[tmk_firmware.git] / common / util.c
index 644301fe89d6a204a17979125944b3ef0f84a177..ff1926d7d14e0c58cb35249ebd5f03b430b7cfbf 100644 (file)
@@ -22,7 +22,7 @@ uint8_t bitpop(uint8_t bits)
 {
     uint8_t c;
     for (c = 0; bits; c++)
-        bits &= bits -1;
+        bits &= bits - 1;
     return c;
 /*
     const uint8_t bit_count[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
@@ -30,7 +30,16 @@ uint8_t bitpop(uint8_t bits)
 */
 }
 
+uint8_t bitpop16(uint16_t bits)
+{
+    uint8_t c;
+    for (c = 0; bits; c++)
+        bits &= bits - 1;
+    return c;
+}
+
 // most significant on-bit - return highest location of on-bit
+// NOTE: return 0 when bit0 is on or all bits are off
 uint8_t biton(uint8_t bits)
 {
     uint8_t n = 0;
@@ -39,3 +48,13 @@ uint8_t biton(uint8_t bits)
     if (bits >> 1) { bits >>= 1; n += 1;}
     return n;
 }
+
+uint8_t biton16(uint16_t bits)
+{
+    uint8_t n = 0;
+    if (bits >> 8) { bits >>= 8; n += 8;}
+    if (bits >> 4) { bits >>= 4; n += 4;}
+    if (bits >> 2) { bits >>= 2; n += 2;}
+    if (bits >> 1) { bits >>= 1; n += 1;}
+    return n;
+}