Got my teensy yesterday and now the keyboard is alive. Thanks guys! but the missing scancode for the right alt really is a big loss for me, as I use it very frequently.Unfortunately no HHKB layout model F until the controller project is done.
But it is definitely a good interim solution until the complete replacement controllers are here.
bcg, I don't know much about IBM keyboard models, though, I guess it uses diffrent protocol than 4704. It doesn't seem it is part of 4704 banking system.
prdlm2009, README didn't help you? You won't be able to find more detailed instructions in tmk repository. Maybe you need Googling of AVR and gcc toolchain, I guess.
EDIT: Note that tmk_firmware has also README file in root directory in addition to in each project directories. You need to read both README files.
https://github.com/tmk/tmk_keyboard
https://github.com/tmk/tmk_keyboard/tree/master/converter/ibm4704_usb
bcg, I don't know much about IBM keyboard models, though, I guess it uses diffrent protocol than 4704. It doesn't seem it is part of 4704 banking system.
6019284 62-key:
,-----------------------------------------------------------.
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|???|BS |
|-----------------------------------------------------------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| ¢| \| PD2|
|-----------------------------------------------------------|
|Ctrl | A| S| D| F| G| H| J| K| L| ;| '| {}| PD3|
|-----------------------------------------------------------|
|Shif| <>| Z| X| C| V| B| N| M| ,| ,| /|???|Shift |
|-----------------------------------------------------------|
|Reset|blk|Alt | Space |Alt |blk|Enter|
`-----------------------------------------------------------'
+----------+---------------------+----------+----------+
|` 00|PD1 04|Caps 20|LShift 30|Reset 31|
|1 18|q 05|a 21|<> 3E|Rblank 41|
|2 19|w 06|s 22|z 32|Alt 3F|
|3 1A|e 13|d 23|x 33|Space 40|
|4 10|r 14|f 24|c 34|Alt 3F|
|5 11|t 15|g 25|v 35|Lblank 42|
|6 12|y 16|h 26|b 36|Enter 2F|
|7 08|u 17|j 27|n 37| |
|8 09|i 01|k 28|m 38| |
|9 0A|o 02|l 29|, 39| |
|0 0F|p 03|; 2A|. 3A| |
|- 1F|¢ 1B|' 2B|/ 3B| |
|= 0D|\ 1C|{} 2C|??? 3C| |
|??? 0C|PD2 1D|PD3 2D|RShift 3D| |
|BS 0E| | | | |
+----------+---------------------+----------+----------+
Bit7 is 'press flag' which set 1 on press and 0 on release when break code is enabled.
s00:rFD
The Chinese/Japanese IBMs with vintage Alps use the same protocol, and the same command sequence (FC, 80 .. F6, FF) enables release codes for all keys. Scan codes output are different to the KS for most keys. On powering up, both the 6113442 and the 6112884 send A6 as an ident code.
diff --git a/converter/ibm4704_usb/matrix.c b/converter/ibm4704_usb/matrix.c
index 155df9c..5b91d49 100644
--- a/converter/ibm4704_usb/matrix.c
+++ b/converter/ibm4704_usb/matrix.c
@@ -68,8 +68,9 @@ uint8_t matrix_cols(void)
static void enable_break(void)
{
print("Enable break: ");
+ while (ibm4704_send(0xFC)) { _delay_ms(10); }
// valid scancode: 00-79h
- for (uint8_t code = 0; code < 0x7A; code++) {
+ for (uint8_t code = 0; code < 0x7F; code++) {
while (ibm4704_send(0x80|code)) _delay_ms(10);
_delay_ms(5); // wait for response
// No response(FF) when ok, FD when out of bound
#define KEYMAP( \
K00, K0F, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K44, K45, K46, K43, K41, K42, K4A, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K54, K55, K56, K50, K51, K52, K5A, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K64, K65, K66, K60, K61, K62, K6B, \
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K74, K75, K76, K70, K71, K72, K7B, \
K31, K47, KBF, K40, K4F, K48, K2F, K77, K67, K57, K73, K63, K53, K4E \
) { \
{ KC_##K00, KC_##K0F, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K44, KC_##K45, KC_##K46, KC_##K43, KC_##K41, KC_##K42, KC_##K4A }, \
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K54, KC_##K55, KC_##K56, KC_##K50, KC_##K51, KC_##K52, KC_##K5A }, \
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K64, KC_##K65, KC_##K66, KC_##K60, KC_##K61, KC_##K62, KC_##K6B }, \
{ KC_##K30, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K74, KC_##K75, KC_##K76, KC_##K70, KC_##K71, KC_##K72, KC_##K7B }, \
{ KC_##K31, KC_##K47, KC_##KBF, KC_##K40, KC_##K4F, KC_##K48, KC_##K2F, KC_##K77, KC_##K67, KC_##K57, KC_##K73, KC_##K63, KC_##K53, KC_##K4E } \
/* 107-key */
#define KEYMAP( \
K46,K64, K00,K18,K19,K1A,K10,K11,K12,K08,K09,K0A,K0F,K1F,K0D,K0C,K0E, K6A,K6B,K6C, K47,K48,K49,K4A, \
K56,K66, K04,K05,K06,K13,K14,K15,K16,K17,K01,K02,K03,K1B,K1C,K1D, K6D,K6E,K6F, K4B,K4C,K4D,K4E, \
K71,K77, K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K2A,K2B,K2C,K2D, K70,K65,K72, K50,K51,K52,K53, \
K44,K45, K30,K3E,K32,K33,K34,K35,K36,K37,K38,K39,K3A,K3B,K3C,K3D, K74,K75,K76, K5E,K58,K59,K5A, \
K54,K55, K31,K41,K3F, K40, K42,K2F, K78,K67,K79, K5B,K5C,K5D,K57 \
) { \
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_NO }, \
{ KC_##K08, KC_##K09, KC_##K0A, KC_NO, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
{ KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_NO, KC_##K1F }, \
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_NO, KC_##K2F }, \
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
{ KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
{ KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
{ KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_NO }, \
{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
{ KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_NO }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
{ KC_NO, KC_NO, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F }, \
{ KC_##K70, KC_##K71, KC_##K72, KC_NO, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
{ KC_##K78, KC_##K79, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
}
#define KEYMAP( \
K00, K0F, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K44, K45, K46, K43, K41, K42, K4A, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K54, K55, K56, K50, K51, K52, K5A, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K64, K65, K66, K60, K61, K62, K6B, \
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K74, K75, K76, K70, K71, K72, K7B, \
K31, K47, K3F, K40, K4F, K48, K2F, K77, K67, K57, K73, K63, K53, K4E \
) { \
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07 }, \
{ KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F }, \
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17 }, \
{ KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_NO, }, \
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27 }, \
{ KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F }, \
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37 }, \
{ KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F }, \
{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47 }, \
{ KC_##K48, KC_NO, KC_##K4A, KC_NO, KC_NO, KC_NO, KC_##K4E, KC_##K4F }, \
{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57 }, \
{ KC_NO, KC_NO, KC_##K5A, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67 }, \
{ KC_NO, KC_NO, KC_NO, KC_##K6B, KC_NO, KC_NO, KC_NO, KC_NO, }, \
{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77 }, \
{ KC_NO, KC_NO, KC_NO, KC_##K7B, KC_NO, KC_NO, KC_NO, KC_NO, } \
}
Quick thread necromancy... anyone modified the code to send the correct (0xFD?) code to the keyboard controller to make the buzzer / bleeper inside buzz/bleep after every keypress?
Do you recall which keyboard / converter you compiled with?Quick thread necromancy... anyone modified the code to send the correct (0xFD?) code to the keyboard controller to make the buzzer / bleeper inside buzz/bleep after every keypress?
On my 6112884 Japanese 102-key the buzzer worked perfectly
Quick thread necromancy... anyone modified the code to send the correct (0xFD?) code to the keyboard controller to make the buzzer / bleeper inside buzz/bleep after every keypress?
I guess I'm looking for the correct location to insert the send function call.Quick thread necromancy... anyone modified the code to send the correct (0xFD?) code to the keyboard controller to make the buzzer / bleeper inside buzz/bleep after every keypress?
I think Soarer did that and confirmed FD command works on his capacitive model keyboard.
https://geekhack.org/index.php?topic=54706.msg1228052#msg1228052
Vintage Alps models works differently, they emit beep themselves without FD command from converter.
$ cd tmk_keyboard/converter/ibm4704_usb
$ make -f Makefile.tmk_rev2 clean
$ make -f Makefile.tmk_rev2
#include "keymap_common.h"
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0:
* ,---------------------------------------------------------------. ,-----------. ,---------------.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|BS |BS |DEL| |PSC|SLK|PAU| |F1 |F2 |F3 |F4 |
* |---------------------------------------------------------------| |-----------| |---------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|INS| |KP7|KP8|KP9| |F5 |F6 |F7 |F8 |
* |---------------------------------------------------------------| |-----------| |---------------|
* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Ret|Ret |CTL| |KP4|KP5|KP6| |F9 |F10|F11|F12|
* |---------------------------------------------------------------| |-----------| |---------------|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shf|Shift |CAP| |KP1|KP2|KP3| |HOM|UP |END|PUP|
* |---------------------------------------------------------------| |-----------| |---------------|
* |Fn0 |Gui|Alt | Space |Alt* |Gui|KPENTER | |KP0|000|KP.| |LFT|DWN|RGH|PDN|
* `---------------------------------------------------------------' `-----------' `---------------'
*/
KEYMAP_ALPS102(
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL,
BSPC,BSPC,KC_DELETE, PSCR,SLCK,PAUS, F1, F2, F3, F4, \
TAB, Q, W, E, R, T, Y,
U, I, O, P, LBRC,RBRC,BSLS, INS, KC_P7, KC_P8,KC_P9, F5, F6, F7, F8, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,GRV, ENT, KC_RCTL, KC_P4, KC_P5,
KC_P6, F9, F10, F11, F12, \
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH,RSFT,RSFT,
KC_CAPS, KC_P1, KC_P2, KC_P3, KC_HOME, KC_UP, KC_END, KC_PGUP, \
FN0, LGUI,LALT,
SPC, RALT,RGUI, KC_PENT, KC_P0,MACRO( (T)KC_P0, (T)KC_P0,
(T)KC_P0, END),KC_PDOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN \
),
/* Layer 1:
*
,---------------------------------------------------------------. ,-----------. ,---------------.
*
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|BS |BS |F21| |VoD|VoU|Mut| |F1 |F2 |F3 |F4 |
*
|---------------------------------------------------------------| |-----------| |---------------|
*
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|F22| |Ins|Hom|PgU| |F5 |F6 |F7 |F8 |
*
|---------------------------------------------------------------| |-----------| |---------------|
*
|Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Ret|Ret |F23| |Del|End|PgD| |F9 |F10|F11|F12|
*
|---------------------------------------------------------------| |-----------| |---------------|
*
|Shift | Z| X| C| V| B| N| M| ,| ,| /|Shf|Shift |F24| | |PgU| | |F13|F14|F15|F16|
*
|---------------------------------------------------------------| |-----------| |---------------|
*
|Fn0 |Gui|Alt | Space |Alt* |Gui|Fn0 | |Hom|PgD|End| |F17|F18|F19|F20|
*
`---------------------------------------------------------------' `-----------' `---------------'
*/
KEYMAP_ALPS102(
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, VOLD,VOLU,MUTE,
TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS, TRNS,
TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS \
),
};
const uint16_t
PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_MOMENTARY(1),
};
Yes, you need to push a button just once before programming, pressing the button turns MCU into programming mode. No, you don't need to push the button to return normal mode, it usually works as a keyboard after programming but if not just replug.
'MACRO' doesn't work as you defined, except for it it looks good to me.
Unfortunately no document of 'MACRO' action is located around, you have to learn someone's keymaps or from trial and error.
This is my macro definition in my keymap, for example.
https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hhkb/keymap_hasu.c#L233
You cannot break your hardware with programming mess up keymap, try it at ease!
EDIT:
If you mess up your converter program with this firmware with default keymap to recover it.
(Attachment Link)
You cannot break your hardware with programming mess up keymap, try it at ease!
tmk_keyboard-master/
├── converter
│ ├── adb_usb
│ ├── ascii_usb
│ ├── ibm4704_usb
│ ├── m0110_usb
│ ├── news_usb
│ ├── next_usb
│ ├── pc98_usb
│ ├── ps2_usb
│ ├── serialmouse_usb
│ ├── sun_usb
│ ├── terminal_bluefruit
│ ├── terminal_usb
│ ├── usb_usb
│ └── x68k_usb
├── keyboard
│ ├── alps64
│ ├── gh60
│ ├── ghost_squid
│ ├── hbkb
... snip ...
│ ├── stm32_f072_onekey
│ ├── stm32_f103_onekey
│ └── teensy_lc_onekey
├── README.md
└── tmk_core
├── common
├── common.mk
├── doc
├── ldscript_keymap_avr35.x
├── ldscript_keymap_avr5.x
├── protocol
├── protocol.mk
├── README.md
├── ring_buffer.h
├── rules.mk
└── tool
42 directories, 8 files
hmm,
It seems you don't have files under tmk_core/ directory for some reason.
Did you download TMK source code from this link?
https://github.com/tmk/tmk_keyboard/archive/master.zip
You shoud have directories like this at least. In paticular do you have tmk_core directory?Code: [Select]tmk_keyboard-master/
├── converter
│ ├── adb_usb
│ ├── ascii_usb
│ ├── ibm4704_usb
│ ├── m0110_usb
│ ├── news_usb
│ ├── next_usb
│ ├── pc98_usb
│ ├── ps2_usb
│ ├── serialmouse_usb
│ ├── sun_usb
│ ├── terminal_bluefruit
│ ├── terminal_usb
│ ├── usb_usb
│ └── x68k_usb
├── keyboard
│ ├── alps64
│ ├── gh60
│ ├── ghost_squid
│ ├── hbkb
... snip ...
│ ├── stm32_f072_onekey
│ ├── stm32_f103_onekey
│ └── teensy_lc_onekey
├── README.md
└── tmk_core
├── common
├── common.mk
├── doc
├── ldscript_keymap_avr35.x
├── ldscript_keymap_avr5.x
├── protocol
├── protocol.mk
├── README.md
├── ring_buffer.h
├── rules.mk
└── tool
42 directories, 8 files
PATH=$PATH:/cygdrive/c/avr8-gnu-toolchain/bin
sh: dfu-programmer: command not found
sh: dfu-programmer: command not found
You need to add toolchain location to PATH. In my case location of toolchain is '/cygdrive/c/avr8-gnu-toolchain/bin', so added this line in .bashrc file. YOu will have to open new terminal to get this PATH effective.Code: [Select]PATH=$PATH:/cygdrive/c/avr8-gnu-toolchain/bin
YOu can ignore this warn or just install dfu-programmer and add its path too.Quotesh: dfu-programmer: command not found
sh: dfu-programmer: command not found
PATH=$PATH:/cygdrive/c/avr8-gnu-toolchain/bin
to the end of the .bashrc file (and which one should I be editing?) or does it have to be in a certain place or preceded by a special character of some kind; opening the file with notepad doesn't seem to display it exactly right and I can't tell what is commented out and what is not.
cd
echo 'PATH=$PATH:/cygdrive/c/avr8-gnu-toolchain/bin' >> .bashrc
$ make -f Makefile.tmk_rev2 KEYMAP=alps102key clean
$ make -f Makefile.tmk_rev2 KEYMAP=alps102key
Hmm, I think you are compiling wrong keymap file. I assume your keyboard is 102-key Alps, so you have to use and edit keymap_alps102key.c. To compile with the keymap file use following commands.Code: [Select]$ make -f Makefile.tmk_rev2 KEYMAP=alps102key clean
$ make -f Makefile.tmk_rev2 KEYMAP=alps102key
What's your os? how to handle numlock state depends on OS implementation, I think.
Just posting quickly to say that it's working perfectly now. I've got the programming of the keymap all squared away and I can upload it successfully to the microcontroller. My next task is to make some legends for the relengendable keys.
I updated for the "F16" key try the latest repo. scan code of the key was not handled in matrix.c.
https://github.com/tmk/tmk_keyboard/commit/75ca495c010621699866a042e6a85061280177a7
I think this fixes "F16" key but not sure other problems. You can see some debug info with hid_listen, it may help you.
https://www.pjrc.com/teensy/hid_listen.html
Femal socket connector
2x7 2x5
|xRxWKYx| |RxWKY|
|xxxxxxx| |xxxxx|
x = no connectionI'm officially lost and confused, my brain doesn't work the way it did when I was 18 I guess. My converter arrived today and I used Bash on Ubuntu Windows to make the firmware, now I tried to go in to Flip and load the hexfile for the keymap, and I get the .dll error when trying to set the connection to USB. Okay no big deal I just install the .dll manually, except for one problem, my device doesn't show up in the device manager as ATmega32U2. It doesn't show up at all. What am I forgetting? The keyboard is plugged in. I tried pressing the button on the converter, clearly I have forgotten something. I ran make for the rev2 make file and that all seemed to work fine.
After reading through your documentation, I'm still confused on how create custom a custom Unimap. I have the 6341739 model. I am mostly confused about making a custom layout, figuring out layers, and macros.
NOTE
Audible Clicker
The converter doesn't control the clicker/speaker.
- With Alps models the converter cannot control clicker at all but you can change sound volume with dial on bottom.
- With capacitive models the converter can control/use the clicker theoretically but doesn't support. You will hear beep while startup after plugin but no clicker at all when typing.
make -f Makefile.rev1
and I wired the data line to PD2 and made a corresponding change in config.h.The buzzer on my 6113442 works perfectly fine after the initialisation stage
The only issue is that it does not have NKRO? Is that a controller limitation? Does it exist on your adb controller too?
Just some questions I would like to ask :)
Are you sure? It looks to me like it has diodes.
Hasu, any idea how I could test if my F107 OG controller is working?
I actually have two controllers, but I had no luck with getting either one to work with my self-made converters (first pro micro one, then teensy one, both with pull-up resistors).
I'm at my wits ends, so I guess I'll just need to get a pingmaster so I could test that at least converters are working.
Thank you, Soarer. I'll fix my document later.
And...
For those who are interested, my converter has some limitations:
1. Keyboard(6019284) has only *3-byte* key buffer.
2. Keyboard has same scancode on both Alt key. You can't use different scancodes on those.
3. My converter is naively *polling* at not so fast speed.
Due to 1. and 3. you probably will see missing keys and transposing keys at very fast typing.(my wpm is less than 60 and I don't have a problem) To solve or mitigate this problem we can use *interrupt* method instead of polling.
Replacing controller board doesn't have these limitations. It is still very intriguig option to squeeze every last drop of its power out of this keyboard.
ah you are right. other post has pic of to side of PCB which displays diodes.
Alps models can support Nkro.
ah you are right. other post has pic of to side of PCB which displays diodes.
Alps models can support Nkro.
I read about how the alps 4704 boards can support NKRO, but I only get 2-key rollover with my keyboard connected to the Hasu controller. Is that a result of buffer limitation on my particular 4704? The model number for my board is 5954339
In other words, should I expect the magic key function to enable NKRO to work on this converter like it does on the HHKB alternate controller?
Hey so I bought your converter and I'm using it on the 6112883 Japanese 102-key. However, I'm a total noob and I don't know what to do :confused:
How do I get the keyboard to be able to type? I plug it in and it beeps but I can't type on it. Thanks.
I think the converter should work with it out of the box. It is programmed with default firmware when shipped.
DId you try other port or computer? What are your OS?
Use hid_listen to see debug info and could you post it here?
https://github.com/tmk/tmk_keyboard/wiki#debug
I think the converter should work with it out of the box. It is programmed with default firmware when shipped.
DId you try other port or computer? What are your OS?
Use hid_listen to see debug info and could you post it here?
https://github.com/tmk/tmk_keyboard/wiki#debug
So turns out it was because I was using a crappy micro usb cable. Plugged in a different one and now it works. However, some keys aren't typing letters, such as: d s q w z x c. hid_listen is picking them up though. How do I get those to work? I don't understand how to use the tmk editor... I tried both "alps 102 key" editors, but I don't get what I'm supposed to be doing. OS is windows 10 btw.
Am I doing this right? Open page, download "Firmware Hex File Download," select file under "Base Firmware File:" select the downloaded hex, then press "Load Keymap from firmware"?
Didn't fix it. Now, some of the keys that were working aren't. :confused:
Am I doing this right? Open page, download "Firmware Hex File Download," select file under "Base Firmware File:" select the downloaded hex, then press "Load Keymap from firmware"?
Didn't fix it. Now, some of the keys that were working aren't. :confused:
Open the link and just click 'Download' button without touching anything to download default firmware.
Waiting for device:
Listening:
Keyboard ID: FF
Enable break: S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48 S:48
etc.I thought it might be the cable, so I tried multiple USB cables and tried unplugging and plugging everything in again earlier, all with the same results.
Unfortunately, I don't have any log lines from before this. I don't have any from when it was working and this is the first thing that happens when I plug it in.
Is there any way if I could test whether it's the keyboard itself?
I had been using this converter on the IBM 6113442 for many months with a slightly edited version of the default Alps 102 key firmware until recently, when the keyboard suddenly stopped working. No key presses register and the beeper doesn't work.
diff --git a/converter/ibm4704_usb/matrix.c b/converter/ibm4704_usb/matrix.c
index acba17dc..648c1ff4 100644
--- a/converter/ibm4704_usb/matrix.c
+++ b/converter/ibm4704_usb/matrix.c
@@ -102,6 +102,7 @@ uint8_t matrix_scan(void)
} else if (code&0x80) {
dprintf("%02X\n", code);
matrix_make(code);
+ ibm4704_send(0xFD);
} else {
dprintf("%02X\n", code);
matrix_break(code);
diff --git a/tmk_core/protocol/ibm4704.c b/tmk_core/protocol/ibm4704.c
index 6a03cd44..75e7db12 100644
--- a/tmk_core/protocol/ibm4704.c
+++ b/tmk_core/protocol/ibm4704.c
@@ -39,7 +39,7 @@ Data ____|__/ X____X____X____X____X____X____X____X____X____X \___
| Start 0 1 2 3 4 5 6 7 P Stop
Request by host
-Start bit: can be long as 300-350us.
+Start bit: can be long as 300-350us during start up and upto 2500us while key scanning
Request: Host pulls Clock line down to request to send a command.
Timing: After Request keyboard pull up Data and down Clock line to low for start bit.
After request host release Clock line once Data line becomes hi.
@@ -58,7 +58,7 @@ uint8_t ibm4704_send(uint8_t data)
clock_lo();
/* wait for Start bit(Clock:lo/Data:hi) */
- WAIT(data_hi, 300, 0x30);
+ WAIT(data_hi, 5000, 0x30);
/* Data bit */
for (uint8_t i = 0; i < 8; i++) {
@@ -89,7 +89,7 @@ uint8_t ibm4704_send(uint8_t data)
return 0;
ERROR:
idle();
- if (ibm4704_error > 0x30) {
+ if (ibm4704_error >= 0x30) {
xprintf("S:%02X ", ibm4704_error);
}
IBM4704_INT_ON();
diff --git a/converter/ibm4704_usb/matrix.c b/converter/ibm4704_usb/matrix.c
index acba17dc..648c1ff4 100644
--- a/converter/ibm4704_usb/matrix.c
+++ b/converter/ibm4704_usb/matrix.c
@@ -102,6 +102,7 @@ uint8_t matrix_scan(void)
} else if (code&0x80) {
dprintf("%02X\n", code);
matrix_make(code);
+ ibm4704_send(0xFD);
} else {
dprintf("%02X\n", code);
matrix_break(code);
Hey, I picked up a chinese pingmaster with your 4704 converter yesterday but it's not quite working right. About half the time you stop using it for a while and plug it back in the converter stops functioning until you reflash the firmware. I'm using your default firmware for the correct version of the device, so I don't see how that could be a problem. In QMK Toolbox it shows inputs, but nothing else happens.
Hey, I picked up a chinese pingmaster with your 4704 converter yesterday but it's not quite working right. About half the time you stop using it for a while and plug it back in the converter stops functioning until you reflash the firmware. I'm using your default firmware for the correct version of the device, so I don't see how that could be a problem. In QMK Toolbox it shows inputs, but nothing else happens.
With "your 4704 converter" you mean you bought this Preassembled TMK Converter for IBM4704 from me?
https://geekhack.org/index.php?topic=72052.0
If not post pic of your converter.
You can't hot plug keyobard into converter, you have to plug-in keyboard before connecting the converter to usb port.