Archived
1
0

move RowBase::process() to Row and Row_DH

This commit is contained in:
wolfv6 2016-06-05 16:16:47 -06:00
parent 55008ec4ec
commit ff5f50db5f
4 changed files with 23 additions and 22 deletions

View File

@ -4,6 +4,23 @@ For return, 1 means debounced changed.
*/ */
#include "Row.h" #include "Row.h"
/*
process() scans the row and calls any newly pressed or released keys.
*/
void Row::process(const bool activeHigh)
{
//these variables are all bitwise, one bit per key
uint8_t rowState; //1 means pressed, 0 means released
uint16_t rowEnd; //1 bit marks positioned after last key of row
uint8_t debouncedChanged; //1 means debounced changed
wait();
scan(activeHigh); //save column-port-pin values to portState
rowState = getRowState(rowEnd, activeHigh);
debouncedChanged = debounce(rowState);
pressRelease(rowEnd, debouncedChanged);
}
uint8_t Row::debounce(const uint8_t rowState) uint8_t Row::debounce(const uint8_t rowState)
{ {
return debouncer.debounce(rowState, debounced); return debouncer.debounce(rowState, debounced);

View File

@ -26,5 +26,6 @@ class Row : public RowBase
{ {
Debouncer_4Samples debouncer; Debouncer_4Samples debouncer;
} }
virtual void process(const bool activeHigh);
}; };
#endif #endif

View File

@ -1,21 +1,4 @@
#include "RowBase.h" #include "RowBase.h"
/*
scans the row and calls any newly pressed or released keys.
*/
void RowBase::process(const bool activeHigh)
{
//these variables are all bitwise, one bit per key
uint8_t rowState; //1 means pressed, 0 means released
uint16_t rowEnd; //1 bit marks positioned after last key of row
uint8_t debouncedChanged; //1 means debounced changed
wait();
scan(activeHigh); //save column-port-pin values to portState
rowState = getRowState(rowEnd, activeHigh);
debouncedChanged = debounce(rowState);
pressRelease(rowEnd, debouncedChanged);
}
/* wait() delay's scan to give switches time to debounce. /* wait() delay's scan to give switches time to debounce.
This version of wait() is very simple. More sophisticated versions can override this one. This version of wait() is very simple. More sophisticated versions can override this one.

View File

@ -20,14 +20,15 @@ class RowBase
ColPort *const *const ptrsColPorts; //array of column ports ColPort *const *const ptrsColPorts; //array of column ports
const uint8_t colPortCount; const uint8_t colPortCount;
virtual void keyWasPressed();
protected:
uint8_t debounced; //bitwise, 1 means pressed, 0 means released
void wait(); void wait();
void scan(const bool activeHigh); void scan(const bool activeHigh);
uint8_t getRowState(uint16_t& rowEnd, const bool activeHigh); uint8_t getRowState(uint16_t& rowEnd, const bool activeHigh);
virtual uint8_t debounce(const uint8_t rowState)=0; virtual uint8_t debounce(const uint8_t rowState)=0;
void pressRelease(const uint16_t rowEnd, const uint8_t debouncedChanged); void pressRelease(const uint16_t rowEnd, const uint8_t debouncedChanged);
virtual void keyWasPressed();
protected:
uint8_t debounced; //bitwise, 1 means pressed, 0 means released
public: public:
RowBase( RowPort &refRowPort, const uint8_t rowPin, RowBase( RowPort &refRowPort, const uint8_t rowPin,
ColPort *const ptrsColPorts[], const uint8_t colPortCount, ColPort *const ptrsColPorts[], const uint8_t colPortCount,
@ -35,7 +36,6 @@ class RowBase
: ptrsKeys(ptrsKeys), refRowPort(refRowPort), rowPin(rowPin), : ptrsKeys(ptrsKeys), refRowPort(refRowPort), rowPin(rowPin),
ptrsColPorts(ptrsColPorts), colPortCount(colPortCount), ptrsColPorts(ptrsColPorts), colPortCount(colPortCount),
debounced(0) { } debounced(0) { }
//Key* getPtrKey(uint8_t col) const; todo delete, no longer needed 5/31/16 virtual void process(const bool activeHigh)=0;
void process(const bool activeHigh);
}; };
#endif #endif