changeset 1:0f88e9aad77a

Initial macro line filler design for multiple keyboards matrices.
author Jacob Alexander <triplehaata@gmail.com>
date Mon, 07 Mar 2011 10:42:32 -0800
parents 43dfb6e4e697
children c3b2eaa4a89d
files main.c
diffstat 1 files changed, 83 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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 <blank>
+#define DRIVE_reg_11 <blank>
+#define DRIVE_reg_12 <blank>
+
+#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 <blank>
+#define DRIVE_pin_11 <blank>
+#define DRIVE_pin_12 <blank>
+
+#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 <blank>
+#define DETECT_group_11 <blank>
+#define DETECT_group_12 <blank>
+
+// 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;
 }