Basic matrix module for the hall effect keypad now working.

- Includes new "table pinning" setup (much easier to understand)
- Matrix layouts will be split into their own dependent modules later
- Changed the HID Raw view id (too many teensy devices on this
  computer...)
- Moved the macro processing outside of the usb timer signal
  (this will be slower overall, but will result in more consistant
  behaviour)
This commit is contained in:
Jacob Alexander 2011-10-15 20:01:46 -07:00
parent 46916defa5
commit 6557022f20
11 changed files with 259 additions and 139 deletions

View file

@ -21,8 +21,16 @@
// ----- Includes -----
// AVR Includes
#include <avr/interrupt.h>
// Project Includes
#include <led.h>
#include <print.h>
// Local Includes
#include "scan_loop.h"
#include "matrix_scan.h"
@ -40,9 +48,8 @@
// If the number of samples is higher than the sample threshold, flag the high bit, clear otherwise
// This should be resetting VERY quickly, cutting off a potentially valid keypress is not an issue
#define DEBOUNCE_ASSESS(table,size) \
for ( uint8_t key = 1; key < size + 1; key++ ) {\
table[key] = ( table[key] & ~(1 << 7) ) > SAMPLE_THRESHOLD ? (1 << 7) : 0x00; \
} \
for ( uint8_t key = 1; key < size + 1; key++ ) \
table[key] = ( table[key] & ~(1 << 7) ) > SAMPLE_THRESHOLD ? (1 << 7) : 0x00
@ -51,29 +58,39 @@
// Keeps track of the number of scans, so we only do a debounce assess when it would be valid (as it throws away data)
uint8_t scan_count = 0;
// This is where the matrix scan data is held, as well as debouncing is evaluated to, which (depending on the read value) is handled
// by the macro module
uint8_t KeyIndex_Array[KEYBOARD_SIZE + 1];
// ----- Functions -----
// Setup
void scan_setup()
inline void scan_setup()
{
//matrix_pinSetup( matrix_pinout );
matrix_pinSetup( (uint8_t*)matrix_pinout );
}
// Main Detection Loop
void scan_loop()
inline uint8_t scan_loop()
{
//matrix_scan( matrix_pinout, keyboardDetectArray );
// Check count to see if the sample threshold may have been reached, otherwise collect more data
if ( scan_count++ < MAX_SAMPLES )
return;
{
matrix_scan( (uint8_t*)matrix_pinout, KeyIndex_Array );
// Signal Main Detection Loop to continue scanning
return 0;
}
// Reset Sample Counter
scan_count = 0;
// Assess debouncing sample table
//DEBOUNCE_ASSESS(keyDetectArray,KEYBOARD_SIZE)
DEBOUNCE_ASSESS( KeyIndex_Array, KeyIndex_Size );
// Ready to allow for USB send
return 1;
}