aboutsummaryrefslogtreecommitdiff
path: root/converter
diff options
context:
space:
mode:
authortmk <hasu@tmk-kbd.com>2015-05-19 00:32:58 +0900
committertmk <hasu@tmk-kbd.com>2015-05-19 00:39:44 +0900
commit80fd3b0b240a8840fbca1cc3cc70e76f5b52b888 (patch)
tree92cbbfe97ca83ab5646c8cd48758207cdeceb615 /converter
parent6b588eb7f7893500e18686e673dbf12b511dc975 (diff)
downloadqmk_firmware-80fd3b0b240a8840fbca1cc3cc70e76f5b52b888.tar.gz
qmk_firmware-80fd3b0b240a8840fbca1cc3cc70e76f5b52b888.zip
ibm4704_usb: Fix protocol handling
Diffstat (limited to 'converter')
-rw-r--r--converter/ibm4704_usb/README.md1
-rw-r--r--converter/ibm4704_usb/config.h2
-rw-r--r--converter/ibm4704_usb/ibm4704.txt5
-rw-r--r--converter/ibm4704_usb/matrix.c30
4 files changed, 18 insertions, 20 deletions
diff --git a/converter/ibm4704_usb/README.md b/converter/ibm4704_usb/README.md
index 25b72ba67..15c826ab8 100644
--- a/converter/ibm4704_usb/README.md
+++ b/converter/ibm4704_usb/README.md
@@ -8,6 +8,7 @@ Keyboard initialization process takes a few seconds at start up. During that you
8Update 8Update
9------ 9------
102015/05/05 Added keymaps for 107-key, 77-key and 50-key. Thanks, orihalcon @ geekhack! 102015/05/05 Added keymaps for 107-key, 77-key and 50-key. Thanks, orihalcon @ geekhack!
112015/05/19 Fixed a protocol handling bug.
11 12
12 13
13 14
diff --git a/converter/ibm4704_usb/config.h b/converter/ibm4704_usb/config.h
index d9d8d39bc..2fee10fd6 100644
--- a/converter/ibm4704_usb/config.h
+++ b/converter/ibm4704_usb/config.h
@@ -53,7 +53,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
53 53
54/* Pin interrupt on rising edge of clock */ 54/* Pin interrupt on rising edge of clock */
55#define IBM4704_INT_INIT() do { EICRA |= ((1<<ISC11)|(1<<ISC10)); } while (0) 55#define IBM4704_INT_INIT() do { EICRA |= ((1<<ISC11)|(1<<ISC10)); } while (0)
56#define IBM4704_INT_ON() do { EIMSK |= (1<<INT1); } while (0) 56#define IBM4704_INT_ON() do { EIFR |= (1<<INTF1); EIMSK |= (1<<INT1); } while (0)
57#define IBM4704_INT_OFF() do { EIMSK &= ~(1<<INT1); } while (0) 57#define IBM4704_INT_OFF() do { EIMSK &= ~(1<<INT1); } while (0)
58#define IBM4704_INT_VECT INT1_vect 58#define IBM4704_INT_VECT INT1_vect
59 59
diff --git a/converter/ibm4704_usb/ibm4704.txt b/converter/ibm4704_usb/ibm4704.txt
index 50d8c98b0..e2d42f08f 100644
--- a/converter/ibm4704_usb/ibm4704.txt
+++ b/converter/ibm4704_usb/ibm4704.txt
@@ -166,13 +166,14 @@ Data sent from host:
166 | `-----`--- scan code 166 | `-----`--- scan code
167 `------------- enable bit(0: enable repeat, 1: enable break) 167 `------------- enable bit(0: enable repeat, 1: enable break)
168 168
169 00-77 Enable repeat(78-7F: invalid scancode) 169 00-79 Enable repeat
170 80-F7 Enable break(F8-FF: invalid scancode) 170 80-F9 Enable break(FA-FF are used as other commands, see above.)
171 FE Resend(011ah) no need to use 171 FE Resend(011ah) no need to use
172 FF End(0114h) exits FC command mode. 172 FF End(0114h) exits FC command mode.
173 173
174Response from keyboard: 174Response from keyboard:
175 FD Out of bound - Invalid scancode 175 FD Out of bound - Invalid scancode
176 -- OK - No response means that command is accepted.
176 177
177Examples: 178Examples:
178 To enable break code of all keys. 179 To enable break code of all keys.
diff --git a/converter/ibm4704_usb/matrix.c b/converter/ibm4704_usb/matrix.c
index 5f928d716..155df9c38 100644
--- a/converter/ibm4704_usb/matrix.c
+++ b/converter/ibm4704_usb/matrix.c
@@ -67,35 +67,31 @@ uint8_t matrix_cols(void)
67 67
68static void enable_break(void) 68static void enable_break(void)
69{ 69{
70 uint8_t ret;
71 print("Enable break: "); 70 print("Enable break: ");
72 // valid scancode: 00-79h 71 // valid scancode: 00-79h
73 for (uint8_t code = 0; code < 0x7A; code++) { 72 for (uint8_t code = 0; code < 0x7A; code++) {
74 while (ibm4704_send(0x80|code)) _delay_ms(1); 73 while (ibm4704_send(0x80|code)) _delay_ms(10);
75 // get none when ok, get FD when out of bound 74 _delay_ms(5); // wait for response
76 _delay_ms(5); 75 // No response(FF) when ok, FD when out of bound
77 if ((ret = ibm4704_recv()) != 0xff) { 76 xprintf("s%02X:r%02X ", code, ibm4704_recv());
78 xprintf("c%02X:r%02X ", code, ret);
79 }
80 _delay_ms(1);
81 } 77 }
82 _delay_us(1000); 78 while (ibm4704_send(0xFF)) { _delay_ms(10); } // End
83 while (ibm4704_send(0xFF)) { _delay_ms(1); } // End
84 print("End\n"); 79 print("End\n");
85} 80}
86 81
87void matrix_init(void)
88{
89 debug_enable = true;
90 82
83void matrix_setup(void)
84{
91 ibm4704_init(); 85 ibm4704_init();
92 matrix_clear(); 86}
93 87
94 _delay_ms(2000); // wait for starting up debug console 88void matrix_init(void)
89{
90 debug_enable = true;
95 91
96 print("IBM 4704 converter\n"); 92 print("IBM 4704 converter\n");
97 while (ibm4704_send(0xFE)) _delay_ms(1); // resend 93 matrix_clear();
98 _delay_ms(5); 94 _delay_ms(2000); // wait for keyboard starting up
99 xprintf("Keyboard ID: %02X\n", ibm4704_recv()); 95 xprintf("Keyboard ID: %02X\n", ibm4704_recv());
100 enable_break(); 96 enable_break();
101} 97}