Keyboard firmwares for Atmel AVR and Cortex-M
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

13 роки тому
13 роки тому
13 роки тому
11 роки тому
13 роки тому
13 роки тому
11 роки тому
13 роки тому
13 роки тому
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. Copyright 2011 Jun Wako <[email protected]>
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. #include "util.h"
  15. // bit population - return number of on-bit
  16. uint8_t bitpop(uint8_t bits)
  17. {
  18. uint8_t c;
  19. for (c = 0; bits; c++)
  20. bits &= bits - 1;
  21. return c;
  22. /*
  23. const uint8_t bit_count[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 };
  24. return bit_count[bits>>4] + bit_count[bits&0x0F]
  25. */
  26. }
  27. uint8_t bitpop16(uint16_t bits)
  28. {
  29. uint8_t c;
  30. for (c = 0; bits; c++)
  31. bits &= bits - 1;
  32. return c;
  33. }
  34. // most significant on-bit - return highest location of on-bit
  35. uint8_t biton(uint8_t bits)
  36. {
  37. uint8_t n = 0;
  38. if (bits >> 4) { bits >>= 4; n += 4;}
  39. if (bits >> 2) { bits >>= 2; n += 2;}
  40. if (bits >> 1) { bits >>= 1; n += 1;}
  41. return n;
  42. }