# HG changeset patch # User Jacob Alexander # Date 1299523352 28800 # Node ID 0f88e9aad77a5e11a0b11cce6678399ab2ad0cae # Parent 43dfb6e4e6975673784946a244137a473da291e1 Initial macro line filler design for multiple keyboards matrices. diff -r 43dfb6e4e697 -r 0f88e9aad77a main.c --- a/main.c Thu Mar 03 16:38:32 2011 -0800 +++ b/main.c Mon Mar 07 10:42:32 2011 -0800 @@ -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 @@ _delay_ms(1000); // Main Detection Loop - // TODO + DD_LOOP + // usb_keyboard_press(KEY_B, KEY_SHIFT); + return 0; }