keybrd library is an open source library for creating custom-keyboard firmware.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
Ce dépôt est archivé. Vous pouvez voir les fichiers et le cloner, mais vous ne pouvez pas pousser ni ouvrir de ticket/demande d'ajout.

RowBase.cpp 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "RowBase.h"
  2. /*
  3. pressRelease() calls key's press() or release() function if it was pressed or released.
  4. Both parameters are bitwise.
  5. */
  6. void RowBase::pressRelease(const uint8_t KEY_COUNT, const read_pins_t debouncedChanged)
  7. {
  8. read_pins_t isFallingEdge; //bitwise, 1 means falling edge
  9. read_pins_t isRisingEdge; //bitwise, 1 means rising edge
  10. read_pins_t rowMask; //bitwise, active col bit is 1
  11. uint8_t col; //index for ptrsKeys[col] array
  12. //bit=1 if last debounced changed from 1 to 0, else bit=0
  13. isFallingEdge = debouncedChanged & ~debounced;
  14. //bit=1 if last debounced changed from 0 to 1, else bit=0
  15. isRisingEdge = debouncedChanged & debounced;
  16. for (rowMask=1, col=0; col < KEY_COUNT; rowMask<<=1, col++) //for each key in row
  17. {
  18. //release before press avoids impossible key sequence
  19. if (rowMask & isFallingEdge) //if key was released
  20. {
  21. ptrsKeys[col]->release();
  22. }
  23. if (rowMask & isRisingEdge) //if key was pressed
  24. {
  25. ptrsKeys[col]->press();
  26. keyWasPressed();
  27. }
  28. }
  29. }
  30. void RowBase::keyWasPressed()
  31. {
  32. //empty in RowBase class. To unstick sticky keys, override keyWasPressed() in derived class.
  33. }