The Belkin Nostromo n52 Speedpad has 14 typewriter-style keys that chord (meaning they can all be read individually), LEDs, a dial, and a game controller with firing button. That's easily enough to make a chording keyboard. You can use the game controller as four shift keys (your thumb rests upon it).
To make the job easier, here's C code to read the device on Linux. To finish the job, you'll also have to push key events back into the Linux console or X Windows. Code to do that is already available on the net, it's been written for use with other USB devices. struct chord_context { static const char keyboard_device[] = "/dev/input/event0"; void void int fd = open(keyboard_device, O_RDWR, 0); if ( fd < 0 ) { memset(&context, 0, sizeof(context)); while ( (size = read(fd, &event, sizeof(event)))
/* Copyright 2003 Bruce Perens.
You may use this software under
the BSD license without the
advertising clause. */
#include
#include
#include
#include
#include
#include
unsigned int pressed;
unsigned int first_release;
};
unsigned int key_base = 304;
character(unsigned int code)
{
printf("%xn", code);
fflush(stdout);
}
key(int code, int pressed, struct chord_context * context)
{
if ( pressed ) {
context->first_release = 1;
context->pressed |= 1 < < (code - key_base);
}
else {
if ( context->first_release ) {
context->first_release = 0;
character(context->pressed);
fflush(stdout);
}
context->pressed &= ~(1 << (code - key_base));
}
}
main()
{
struct input_event event;
struct chord_context context;
int fd;
int size;
perror(keyboard_device);
exit(1);
}
== sizeof(event) ) {
if ( event.type == EV_KEY )
key(event.code, event.value, &context);
}
return 0;