diff options
Diffstat (limited to 'converter')
-rw-r--r-- | converter/ibm4704_usb/config.h | 2 | ||||
-rw-r--r-- | converter/ibm4704_usb/matrix.c | 41 |
2 files changed, 18 insertions, 25 deletions
diff --git a/converter/ibm4704_usb/config.h b/converter/ibm4704_usb/config.h index 4f82f49ad..812d95c67 100644 --- a/converter/ibm4704_usb/config.h +++ b/converter/ibm4704_usb/config.h | |||
@@ -56,7 +56,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
56 | /* | 56 | /* |
57 | * Pin interrupt | 57 | * Pin interrupt |
58 | */ | 58 | */ |
59 | #ifdef IBM4704_USE_INT | ||
60 | #define IBM4704_INT_INIT() do { \ | 59 | #define IBM4704_INT_INIT() do { \ |
61 | EICRA |= ((1<<ISC11) | \ | 60 | EICRA |= ((1<<ISC11) | \ |
62 | (0<<ISC10)); \ | 61 | (0<<ISC10)); \ |
@@ -68,7 +67,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
68 | EIMSK &= ~(1<<INT1); \ | 67 | EIMSK &= ~(1<<INT1); \ |
69 | } while (0) | 68 | } while (0) |
70 | #define IBM4704_INT_VECT INT1_vect | 69 | #define IBM4704_INT_VECT INT1_vect |
71 | #endif | ||
72 | 70 | ||
73 | 71 | ||
74 | #endif | 72 | #endif |
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; |