Hi Guys,
First of all thanks for that code, it gives me the change to reuse my old IBM-M Keyboard AND hopefully solve the problem i have with it (with a normal PS2/USB converter).
I am using an keyboard with US-layout, but with the German(Swiss) keyboard-layout on Linux and Windows-7. This works great, because i am able to use it in the "10-finger" system without looking on the keys. So i am not confused when other characters appear then i am hitting on :biggrin:
The problem i have is the fact that i am missing a key on my keyboard. On a European 102-key keyboard, there is a key between the LSHIFT and "Z" with "<", ">" and "\" on it.
So with the SwissGerman-Layout, there is no proper way to produce this three keys.
I've found the way with replacing for example KB_VOLD with KB_NONUS_BSLASH. But i don't like that, because i have to use a lot of fingers to reach "\". FN1 + ALT + X
What i would like to do is catching the following key-sequences and replace them:
KB_RALT + Z -- replace with --> KB_RALT + KB_NONUS_BSLASH --> "\"
KB_RALT + X -- replace with --> KB_NONUS_BSLASH --> "<"
KB_RALT + C -- replace with --> KB_RSHIFT + KB_NONUS_BSLASH --> ">"
I have a partial solution, but i does not work as expected, and i am not sure if i used the right place in the code to make my modifications.
keyboard.h:
#include <stdbool.h>
bool ralt_rec;
keyboard.c
if (code == KB_RALT) {
ralt_rec = true;
}
if (code == KB_NO) {
// do nothing
} else if (IS_MOD(code)) {
host_add_mod_bit(MOD_BIT(code));
} else if (IS_FN(code)) {
fn_bits |= FN_BIT(code);
}
// Ugly hack to simulate the missing 102-european-key on IBM-M Keyboard
// ">" on key "C"
else if (( code == KB_C) && ( ralt_rec == true )) {
host_add_key(KB_RSHIFT);
host_add_key(KB_NONUS_BSLASH);
_delay_ms(200);
ralt_rec = false;
// "<" on key "X"
} else if (( code == KB_X) && ( ralt_rec == true )) {
host_add_key(KB_NONUS_BSLASH);
_delay_ms(200);
ralt_rec = false;
// "\" on key "Z"
} else if (( code == KB_Z) && ( ralt_rec == true )) {
host_add_key(KB_RALT);
host_add_key(KB_NONUS_BSLASH);
_delay_ms(200);
ralt_rec = false;
}
else if (IS_KEY(code)) {
host_add_key(code);
}
#ifdef MOUSEKEY_ENABLE
else if (IS_MOUSEKEY(code)) {
mousekey_decode(code);
}
It works, but only when i release the RightAlt key before i press one of the other keys. Together with RALT it always gives me "\".
I think, i didn't choose the proper way to do that, but i am a little bit lost in the code and don't know how to solve it.
I am using a original Teensy++
Thanks for any help.
Daniel