diff options
Diffstat (limited to 'converter/ibm4704_usb/matrix.c')
-rw-r--r-- | converter/ibm4704_usb/matrix.c | 41 |
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 | ||
90 | void matrix_init(void) | 87 | void 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; |