From 1bee2a6dc966993075ad75d88fd7f7e5baea233c Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Mon, 7 Mar 2011 10:42:32 -0800 Subject: [PATCH] Initial macro line filler design for multiple keyboards matrices. --- main.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/main.c b/main.c index 36e8597..2b54948 100644 --- a/main.c +++ b/main.c @@ -27,12 +27,91 @@ #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) -int main() +#define PRE_DRIVE_SLEEP +#define POST_DRIVE_SLEEP + + +#define DRIVE_reg_1 PORTB +#define DRIVE_reg_2 PORTB +#define DRIVE_reg_3 PORTB +#define DRIVE_reg_4 PORTC +#define DRIVE_reg_5 PORTE +#define DRIVE_reg_6 PORTE +#define DRIVE_reg_7 PORTF +#define DRIVE_reg_8 PORTF +#define DRIVE_reg_9 PORTF +#define DRIVE_reg_10 +#define DRIVE_reg_11 +#define DRIVE_reg_12 + +#define DRIVE_pin_1 0 +#define DRIVE_pin_2 1 +#define DRIVE_pin_3 2 +#define DRIVE_pin_4 7 +#define DRIVE_pin_5 6 +#define DRIVE_pin_6 7 +#define DRIVE_pin_7 0 +#define DRIVE_pin_8 4 +#define DRIVE_pin_9 5 +#define DRIVE_pin_10 +#define DRIVE_pin_11 +#define DRIVE_pin_12 + +#define DETECT_group_1 0 +#define DETECT_group_2 0 +#define DETECT_group_3 0 +#define DETECT_group_4 0 +#define DETECT_group_5 0 +#define DETECT_group_6 0 +#define DETECT_group_7 0 +#define DETECT_group_8 0 +#define DETECT_group_9 0 +#define DETECT_group_10 +#define DETECT_group_11 +#define DETECT_group_12 + +// Change number of ORDs if number of lines differ +#define DD_LOOP \ + for ( int c = 0;; c++ ) { \ + switch ( c ) { \ + DD_CASE_ORD(1) \ + DD_CASE_ORD(2) \ + DD_CASE_ORD(3) \ + DD_CASE_ORD(4) \ + DD_CASE_ORD(5) \ + DD_CASE_ORD(6) \ + DD_CASE_ORD(7) \ + DD_CASE_ORD(8) \ + DD_CASE_END(9,c) \ + } \ + } + +#define DRIVE_DETECT(reg,pin,group) \ + reg |= (1 << pin);\ + detection(group);\ + reg &= (0 << pin); + +#define DD_CASE(number) \ + case number:\ + DRIVE_DETECT(DRIVE_reg##_##number, DRIVE_pin##_##number, DETECT_group##_##number) + +#define DD_CASE_ORD(number) \ + DD_CASE(number) \ + break; + +#define DD_CASE_END(number,var) \ + DD_CASE(number) \ + default: \ + var = -1; \ + break; + +int main(void) { // set for 16 MHz clock CPU_PRESCALE( 0 ); // Configuring Pins + // TODO // Initialize the USB, and then wait for the host to set configuration. @@ -46,7 +125,9 @@ int main() _delay_ms(1000); // Main Detection Loop - // TODO + DD_LOOP + // usb_keyboard_press(KEY_B, KEY_SHIFT); + return 0; }