aboutsummaryrefslogtreecommitdiff
path: root/converter/ibm4704_usb/matrix.c
diff options
context:
space:
mode:
Diffstat (limited to 'converter/ibm4704_usb/matrix.c')
-rw-r--r--converter/ibm4704_usb/matrix.c41
1 files changed, 18 insertions, 23 deletions
diff --git a/converter/ibm4704_usb/matrix.c b/converter/ibm4704_usb/matrix.c
index 0bfda2b15..857dea0f9 100644
--- a/converter/ibm4704_usb/matrix.c
+++ b/converter/ibm4704_usb/matrix.c
@@ -69,41 +69,34 @@ static void enable_break(void)
69{ 69{
70 uint8_t ret; 70 uint8_t ret;
71 print("Enable break: "); 71 print("Enable break: ");
72 // valid scancode: 00-77h 72 // valid scancode: 00-79h
73 for (uint8_t code = 0; code < 0x78; code++) { 73 for (uint8_t code = 0; code < 0x7A; code++) {
74 while (ibm4704_send(0x80|code) != 0) { 74 while (ibm4704_send(0x80|code)) _delay_ms(1);
75 print("z"); 75 // get none when ok, get FD when out of bound
76 _delay_us(500); 76 _delay_ms(5);
77 } 77 if ((ret = ibm4704_recv()) != 0xff) {
78 _delay_us(2000);
79 ret = ibm4704_recv();
80 if (ret != 0xff) {
81 xprintf("c%02X:r%02X ", code, ret); 78 xprintf("c%02X:r%02X ", code, ret);
82 } 79 }
83 _delay_us(1000); 80 _delay_ms(1);
84 } 81 }
85 _delay_us(1000); 82 _delay_us(1000);
86 while (ibm4704_send(0xFF) != 0) { _delay_us(500); } // End 83 while (ibm4704_send(0xFF)) { _delay_ms(1); } // End
87 print("End\n"); 84 print("End\n");
88} 85}
89 86
90void matrix_init(void) 87void matrix_init(void)
91{ 88{
92 uint8_t ret; 89 debug_enable = false;
93 debug_enable = true;
94 90
95 ibm4704_init(); 91 ibm4704_init();
96 matrix_clear(); 92 matrix_clear();
97 93
98 // read keyboard id 94 _delay_ms(2000); // wait for starting up debug console
99 while ((ret = ibm4704_recv()) == 0xFF) {
100 ibm4704_send(0xFE);
101 _delay_us(100);
102 }
103 95
104 _delay_ms(2000); // wait for starting up debug console
105 print("IBM 4704 converter\n"); 96 print("IBM 4704 converter\n");
106 xprintf("Keyboard ID: %02X\n", ret); 97 while (ibm4704_send(0xFE)) _delay_ms(1); // resend
98 _delay_ms(5);
99 xprintf("Keyboard ID: %02X\n", ibm4704_recv());
107 enable_break(); 100 enable_break();
108} 101}
109 102
@@ -116,14 +109,16 @@ uint8_t matrix_scan(void)
116 if (code==0xFF) { 109 if (code==0xFF) {
117 // Not receivd 110 // Not receivd
118 return 0; 111 return 0;
119 } else if ((code&0x78)==0x78) { 112 } else if ((code&0x7F) >= 0x7A) {
120 // 0xFF-F8 and 0x7F-78 is not scancode 113 // 0xFF-FA and 0x7F-7A is not scancode
121 xprintf("Error: %0X\n", code); 114 xprintf("Error: %02X\n", code);
122 matrix_clear(); 115 matrix_clear();
123 return 0; 116 return 0;
124 } else if (code&0x80) { 117 } else if (code&0x80) {
118 dprintf("%02X\n", code);
125 matrix_make(code); 119 matrix_make(code);
126 } else { 120 } else {
121 dprintf("%02X\n", code);
127 matrix_break(code); 122 matrix_break(code);
128 } 123 }
129 return 1; 124 return 1;