Author Topic: "Open Source" Generic keyboard controller.  (Read 106844 times)

0 Members and 1 Guest are viewing this topic.

Offline Mnemonix

  • Posts: 163
"Open Source" Generic keyboard controller.
« Reply #150 on: Wed, 16 December 2009, 17:53:04 »
Quote from: lowpoly;143105
Some do not want the external programming software. Just a text editor to edit the layout, write it to SD and re-insert it into the controller. Also, if you use on-keyboard programming you can remove the SD to backup or edit your layout. So I think the main reason for SD is software-less data exchange.


Hm. I think would be easier to communicate with the keyboard controller directly using some tool, without the SD card detour. It is possible over USB, but would it also work over PS/2?

Using SD cards also means that (V)FAT(32) needs to be supported (because it is supported by any major OS). Microsoft has some stupid patent pending for supporting long file names, which is the reason why LFN support can be disabled in recent Linux kernels... I would hate those patent trolls doing the same to the GeeKey firmware.

Offline msiegel

  • Posts: 1230
"Open Source" Generic keyboard controller.
« Reply #151 on: Wed, 16 December 2009, 17:53:44 »
Quote from: Mnemonix;143110
The USB AVR series would be great, but they are not available in DIL packages (or are they?). But if there were cheap devboards for these...


i'm using the $20 Teensy dev board, with ATMEGA32U4 :)

Filco Zero (Fukka) AEKII sliders and keycaps * Filco Tenkeyless MX brown * IBM F/AT parts: modding
Model F Mod Log * Open Source Generic keyboard controller

Offline inornate

  • Posts: 25
"Open Source" Generic keyboard controller.
« Reply #152 on: Thu, 17 December 2009, 03:27:02 »
Quote from: lowpoly;143080
Good work, inornate. Is this your own project you mentioned on page 8?

Exactly. anyway AVR-based projects are really hard to support 19*9 matrix without additional hardware supports - because of its number of available pins :( The best available is 19*8. I think.

Maybe we can use MUX to increase its ability to handle more matrix but I'm not sure that additional hardware only for one extra column, is a good solution.

Offline cb951303

  • Posts: 72
"Open Source" Generic keyboard controller.
« Reply #153 on: Thu, 17 December 2009, 04:12:47 »
Quote from: inornate;143175
Exactly. anyway AVR-based projects are really hard to support 19*9 matrix without additional hardware supports - because of its number of available pins :( The best available is 19*8. I think.

Maybe we can use MUX to increase its ability to handle more matrix but I'm not sure that additional hardware only for one extra column, is a good solution.


XMega and AVR USB can support even much bigger matrices but the problem is they are not in DIL packages. Is there a 34+ pins DIL package in any other brand?
Filco Zero FKBN87Z/EB
Kensington Orbit K72337US

Offline Mnemonix

  • Posts: 163
"Open Source" Generic keyboard controller.
« Reply #154 on: Thu, 17 December 2009, 04:28:58 »
Quote from: msiegel;143115
i'm using the $20 Teensy dev board, with ATMEGA32U4 :)

Oh yes, the Teensy and Teensy++ come with USB AVRs. Completely forgot about this. :loco:

Quote from: inornate;143175
Exactly. anyway AVR-based projects are really hard to support 19*9 matrix without additional hardware supports - because of its number of available pins :( The best available is 19*8. I think.

The IBM M4-1 has a 19x9 matrix, hence the requirement. I'd love to see it fully supported, including its trackpoint if possible.

Quote from: inornate;143175
Maybe we can use MUX to increase its ability to handle more matrix but I'm not sure that additional hardware only for one extra column, is a good solution.

Yes, a MUX was the first thing I was thinking of, too. Then I realized that we don't need to multiplex arbitrary signal patterns, but only need to generate very specific patterns. You are probing rows one by one, so only a single row is activated at any given time:

Row 1: 10000...   (first row pin is activated, the others are not (e.g., tri-stated))
Row 2: 01000...   (only second pin is activated)
Row 3: 00100...
...

That is, we are shifting the "1" from the first to the last pin in order to probe the corresponding rows. This is easily done using a shift register, which only has two input pins to be driven by the MCU: Data and Clock. You trade 8 I/O pins on the AVR with 2 I/O pins at the price of an additional component. It is also possible to cascade multiple shift registers so that instead of 16 or 24 I/O pins you are using 2 or 3 additional components while still only using 2 I/O pins.

In the end it's a matter of additional cost and PCB space. Alternatively, we could just use a bigger MCU with more I/O pins.

Offline cb951303

  • Posts: 72
"Open Source" Generic keyboard controller.
« Reply #155 on: Thu, 17 December 2009, 04:41:58 »
BTW if we need to keep the PCB small we may have to design it modular like arduino and its shields.

With bluetooth, SD(or eeprom), a BIG mcu and all other requested stuff it would probably fail to fit in any of the current keyboard cases :)
Filco Zero FKBN87Z/EB
Kensington Orbit K72337US

Offline inornate

  • Posts: 25
"Open Source" Generic keyboard controller.
« Reply #156 on: Thu, 17 December 2009, 04:50:11 »
Quote from: Mnemonix;143180
In the end it's a matter of additional cost and PCB space. Alternatively, we could just use a bigger MCU with more I/O pins.

Yes it's matter of cost (money and space); I agree that shift register is very good choice.

In my case I needed to build hundreds of units so cost was the most critical issue for me => therefore I chose minimal hardware parts in my project.

Offline Mnemonix

  • Posts: 163
"Open Source" Generic keyboard controller.
« Reply #157 on: Thu, 17 December 2009, 04:51:42 »
Quote from: cb951303;143183
BTW if we need to keep the PCB small we may have to design it modular like arduino and its shields.

With bluetooth, SD(or eeprom), a BIG mcu and all other requested stuff it would probably fail to fit in any of the current keyboard cases :)


A 1391401 has plenty of space, probably enough to stow a whole mini computer, but the Space Saving version is not so roomy. :)

But yeah, modular design would be good, albeit a bit more expensive.

Offline lowpoly

  • Posts: 1749
"Open Source" Generic keyboard controller.
« Reply #158 on: Sat, 02 January 2010, 04:54:41 »
Quote from: lowpoly;143101
Any suggestions for a collaborative spreadsheet? Has Google something here?


bump

Miniguru thread at GH // The Apple M0110 Today

Offline lowpoly

  • Posts: 1749
"Open Source" Generic keyboard controller.
« Reply #159 on: Sat, 02 January 2010, 08:23:28 »
I started a google docs spreadsheet here:

http://spreadsheets.google.com/ccc?key=0AkMZsZqYsU0kdDdQZ2V3ZEJ6RENuUm5TTDRUS2FTUmc&hl=en

As of now, anyone can edit.

Miniguru thread at GH // The Apple M0110 Today

Offline lowpoly

  • Posts: 1749
"Open Source" Generic keyboard controller.
« Reply #160 on: Sat, 02 January 2010, 09:05:13 »
Quote from: lowpoly;147271
As of now, anyone can edit.
Didn't realize this would start immediately. :-) Sorry for deleting that word I couldn't remember having written.

Miniguru thread at GH // The Apple M0110 Today

Offline Specter_57

  • Posts: 143
For those thinking of using shift registers ...
« Reply #161 on: Sun, 03 January 2010, 12:52:46 »
Hello all.

For those thinking of using shift registers in order to keep with the p-DIP type of devices, there is a rather detailed explanation on the use of shift registers with code examples on this Arduino-related page.

See here:

Serial to Parallel Shifting-Out with a 74HC595
http://arduino.cc/en/Tutorial/ShiftOut

and

Using shift registers to extend the microcontroller I/O
http://homepages.which.net/~paul.hills/Software/ShiftRegister/ShiftRegister.html


Just started reading about this Arduino device (mentioned from time to time here...)...which uses some of the same controllers suggested in this thread...looks interesting, at least for me it is...still at the bottom end of the learning curve when it comes to microcontrollers.

Anyway, hope this link I provided is useful to some readers here.

Spec57
« Last Edit: Fri, 08 January 2010, 12:13:15 by Specter_57 »

Offline dmw

  • Posts: 84
    • http://humblehacker.com
HumbleHacker keyboard firmware
« Reply #162 on: Sun, 30 May 2010, 09:30:38 »
Hey all,

After a long hiatus, i'm finally back working on my keyboard project.  I've almost completely rewritten and open-sourced my firmware.  You can find it on github.

It has many features, such as:

  • Multiple layers, invoked through either momentary or toggle keys
  • key maps specified in a simple text file format
  • multi-key macros
  • a special "matrix discovery" mode to help you figure out your keyboard's matrix
  • a key can be mapped to modifiers + key (to be able to produce shifted keys without hitting shift, for example)
  • a single key can have different bindings depending on what modifier keys are pressed (allowing you to completely divorce a key from its shifted state)


Those last two work, but are still in development to iron out issues when keys overlap. The HID keyboard protocol does not make this easy, since keys and their shifted states are tied up in a single code (e.g. 'Keyboard 1  and !').

The code has only been tested on the AT90USB1287, but should run on any chip in the AT90USB series.  It's currently running on my HumbleHack'd TypeMatrix 2030.

I've started using github's issue tracker.  You can take a look there to see what I've got planned, or add your own feature requests.  I could also use some help in figuring out the best way to solve the key overlap problem alluded to above.
« Last Edit: Sun, 30 May 2010, 10:58:55 by dmw »

Offline dmw

  • Posts: 84
    • http://humblehacker.com
"Open Source" Generic keyboard controller.
« Reply #163 on: Sun, 30 May 2010, 09:57:02 »
Exactly.  That's what I did with the 2030.  It's nice to see that the price on the USBKEY has come down so much.  I paid $75 each for mine a few years ago.



I thought I'd post some examples of the keyboard definition files.  First, here's the keyboard matrix for the 2030.  Each cell in the table is filled with a 'location code', which is arbirtrary, but must also be used in the keymaps.

Code: [Select]
Matrix:2030-USB rev:197
/*            0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17 */
/* 0 */ Row: 7L, --, 7J, 7M, --, --, --, --, 7K, 1N, 5L, 6C, --, 5H, 5F, --, --, --
/* 1 */ Row: 1O, --, --, --, --, 6N, --, --, --, 4G, --, 5K, 5J, 5I, 5E, 5D, 5C, 5B
/* 2 */ Row: 6E, --, 7C, --, --, --, --, --, 6L, 1M, 4M, --, 1H, 4H, 4F, 1E, --, 1A
/* 3 */ Row: 1G, --, --, 3O, --, 6A, --, 6O, 6K, 1K, 2M, 1J, 2N, 2H, 2F, 1C, 1B, 2A
/* 4 */ Row: --, --, --, --, 6J, --, 4N, --, 5O, 5M, 4L, 4K, 4J, 4I, 4E, 4D, 4C, 4B
/* 5 */ Row: --, --, --, --, 7A, 1F, --, 7O, 6M, 1L, 2L, 2K, 2J, 2I, 2E, 2D, 2C, 2B
/* 6 */ Row: --, 7B, --, --, 6D, --, 4A, --, 2O, 2G, 3M, 1I, 3N, 3H, 3F, 1D, 4O, 3A
/* 7 */ Row: --, --, --, --, --, --, --, --, 6B, --, 3L, 3K, 3J, 3I, 3E, 3D, 3C, 3B

This is the US layout.  The 'tl:' and 'bl:' are key labels that are currently not used, but may be in the future (to generate keyboard images, for example).  They at least serve as a measure of documentation on what the key is expected to produce.
 
The 'base:' keyword shows that keymaps can be based on other keymaps.

the 'default' keyword says that this is the default keymap, i.e. the one that will be set when the keyboard is plugged in.

Code: [Select]
KeyMap:US base:Common default rev:205

  /* Row 3 */
  Key:2A Map:`_and_~           tl:"~"    bl:"`"
  Key:2B Map:1_and_!           tl:"!"    bl:"1"
  Key:2C Map:2_and_@           tl:"@"    bl:"2"
  Key:2D Map:3_and_#           tl:"#"    bl:"3"
  Key:2E Map:4_and_$           tl:"$"    bl:"4"
  Key:2F Map:5_and_%           tl:"%"    bl:"5"
  Key:2H Map:6_and_^           tl:"^"    bl:"6"
  Key:2I Map:7_and_&           tl:"&"    bl:"7"
  Key:2J Map:8_and_*           tl:"*"    bl:"8"
  Key:2K Map:9_and_(           tl:"("    bl:"9"
  Key:2L Map:0_and_)           tl:")"    bl:"0"
  Key:2M Map:-_and_Underscore  tl:"__"   bl:"-"
  Key:2N Map:=_and_+           tl:"+"    bl:":"

  /* Row 3 */
  Key:3B Map:q_and_Q           tl:"Q"
  Key:3C Map:w_and_W           tl:"W"
  Key:3D Map:e_and_E           tl:"E"
  Key:3E Map:r_and_R           tl:"R"
  Key:3F Map:t_and_T           tl:"T"
  Key:3H Map:y_and_Y           tl:"Y"
  Key:3I Map:u_and_U           tl:"U"
  Key:3J Map:i_and_I           tl:"I"
  Key:3K Map:o_and_O           tl:"O"
  Key:3L Map:p_and_P           tl:"P"
  Key:3M Map:[_and_{           tl:"{"    bl:"["
  Key:3N Map:]_and_}           tl:"}"    bl:"]"

  /* Row 4 */
  Key:4B Map:a_and_A           tl:"A"
  Key:4C Map:s_and_S           tl:"S"
  Key:4D Map:d_and_D           tl:"D"
  Key:4E Map:f_and_F           tl:"F"
  Key:4F Map:g_and_G           tl:"G"
  Key:4H Map:h_and_H           tl:"H"
  Key:4I Map:j_and_J           tl:"J"
  Key:4J Map:k_and_K           tl:"K"
  Key:4K Map:l_and_L           tl:"L"
  Key:4L Map:;_and_\:          tl:":"    bl:";"
  Key:4M Map:\'_and_\"         tl:"\""   bl:"'"

  /* Row 5 */
  Key:5B Map:z_and_Z           tl:"Z"
  Key:5C Map:x_and_X           tl:"X"
  Key:5D Map:c_and_C           tl:"C"
  Key:5E Map:v_and_V           tl:"V"
  Key:5F Map:b_and_B           tl:"B"
  Key:5H Map:n_and_N           tl:"N"
  Key:5I Map:m_and_M           tl:"M"
  Key:5J Map:,_and_\<          tl:"<"    bl:","
  Key:5K Map:._and_\>          tl:">"    bl:"."
  Key:5L Map:/_and_?           tl:"?"    bl:"/"
  Key:5M Map:\_and_|           tl:"|"    bl:"\\"

And here is a Programmer Dvorak layout, which illustrates some of the more advanced key bindings possible.  

Basically, modifiers are placed in <>, and separated by | (e.g. ).  Modifiers appearing before the Map: keyword are called pre-modifiers.  They change what the key will do when combined with the given modifier.  

Modifiers appearing after the Map: keyword are just called modifiers.  They affect what modifier keys are sent to the computer along with the given key binding.

So given this, and looking at key 2A, hitting the key by itself will produce '$', while hitting the key with will produce '~'.

Code: [Select]
KeyMap:pDV base:US rev:57

  /* Row 2 */
  Key:2A         Map:4_and_$              bl:"$"
          Map:`_and_~      tl:"~"
  Key:2B         Map:7_and_&              bl:"&"
          Map:5_and_%      tl:"%"
  Key:2C         Map:[_and_{                     bl:"["
          Map:7_and_&             tl:"7"
  Key:2D         Map:[_and_{              bl:"{"
          Map:5_and_%             tl:"5"
  Key:2E         Map:]_and_}              bl:"}"
          Map:3_and_#             tl:"3"
  Key:2F         Map:9_and_(              bl:"("
          Map:1_and_!             tl:"1"
  Key:2H         Map:=_and_+                     bl:"=
          Map:9_and_(             tl:"9"
  Key:2I         Map:8_and_*              bl:"*"
          Map:0_and_)             tl:"0"
  Key:2J         Map:0_and_)              bl:")"
          Map:2_and_@             tl:"2"
  Key:2K         Map:=_and_+              bl:"+"
          Map:4_and_$             tl:"4"
  Key:2L         Map:]_and_}                     bl:]"
          Map:6_and_^             tl:"6"
  Key:2M         Map:1_and_!              bl:"!"
          Map:8_and_*             tl:"8"
  Key:2N         Map:3_and_#              bl:"#"
          Map:`_and_~             tl:"'"

  /* Row 3 */
  Key:3B          Map:;_and_\:           tl:":"  bl:";"
  Key:3C          Map:,_and_\<           tl:"<"  bl:","
  Key:3D          Map:._and_\>           tl:">"  bl:"."
  Key:3E          Map:p_and_P            tl:"P"
  Key:3F          Map:y_and_Y            tl:"Y"
  Key:3H          Map:f_and_F            tl:"F"
  Key:3I          Map:g_and_G            tl:"G"
  Key:3J          Map:c_and_C            tl:"C"
  Key:3K          Map:r_and_R            tl:"R"
  Key:3L          Map:l_and_L            tl:"L"
  Key:3M          Map:/_and_?            tl:"?"  bl:"/"
  Key:3N          Map:2_and_@    tl:"@"
          Map:6_and_^    bl:"^"

  /* Row 4 */
  Key:4C  Map:o_and_O                    tl:"O"
  Key:4D  Map:e_and_E                    tl:"E"
  Key:4E  Map:u_and_U                    tl:"U"
  Key:4F  Map:i_and_I                    tl:"I"
  Key:4H  Map:d_and_D                    tl:"D"
  Key:4I  Map:h_and_H                    tl:"H"
  Key:4J  Map:t_and_T                    tl:"T"
  Key:4K  Map:n_and_N                    tl:"N"
  Key:4L  Map:s_and_S                    tl:"S"
  Key:4M  Map:-_and_Underscore           tl:"__" bl:"-"

  /* Row 5 */
  Key:5B  Map:\'_and_\"                  tl:"\"" bl:"\'"
  Key:5C  Map:q_and_Q                    tl:"Q"
  Key:5D  Map:j_and_J                    tl:"J"
  Key:5E  Map:k_and_K                    tl:"K"
  Key:5F  Map:x_and_X                    tl:"X"
  Key:5H  Map:b_and_B                    tl:"B"
  Key:5J  Map:w_and_W                    tl:"W"
  Key:5K  Map:v_and_V                    tl:"V"
  Key:5L  Map:z_and_Z                    tl:"Z"
« Last Edit: Sun, 30 May 2010, 10:36:28 by dmw »

Offline dmw

  • Posts: 84
    • http://humblehacker.com
"Open Source" Generic keyboard controller.
« Reply #164 on: Sun, 30 May 2010, 19:10:55 »
Ok, I just finished reading through all the posts in this thread.  Maybe should have done that _before_ I posted. ;)

I know I'm late to the game, but I have to say... Mnemonix, awesome job with your controller board and firmware!  If I had access to this a while ago, I probably would have never decided to try to do it myself.  I'm also very excited about the Teensy++.  With that, I see no need to build my own controller board.

Mnemonix, there's a lot of overlap between our projects.  I would like to borrow some of your ideas for my firmware, if you don't have any objections.  For example, I have been planning to add some method of programming the keyboard without re-flashing the firmware, but I wasn't sure how to go about it.  Looks like you have that feature already.  It seems from reading your posts that you have a lot of experience with this kind of development.  I'd like to pick your brain on a few things, as this is my first foray into MCU development.  I have a lot of ideas - would you consider collaborating?  Or have you moved on from this project?

Offline ricercar

  • * Elevated Elder
  • Posts: 1697
  • Location: Silicon Valley
  • mostly abides
"Open Source" Generic keyboard controller.
« Reply #165 on: Sun, 30 May 2010, 19:33:39 »
You didn't to start with dog-dares this time? :laugh:

I trolled Geekhack and all I got was an eponymous SPOS.

Offline sethstorm

  • Posts: 257
"Open Source" Generic keyboard controller.
« Reply #166 on: Mon, 31 May 2010, 00:32:32 »
Quote from: ripster;188209
Thanks.

OK, who at Geekhack is gonna go 2nd?   I'd volunteer but I'm in the 25% of the Geekhack population that isn't in IT.  I don't even have a beard.

Show Image


On using the controller?  Would this be adaptable for the card-edge connector that model M membranes present?  Count me in.

It would seem to be quite usable to use this, the firmware, and attach it to my Wheelwriter 5.  It has a nice, small 13x8 matrix.
Current:
IBM: Model M: 1391401, 1386887 Terminal 122 Key 
IBM: Model F: 6110668 Terminal 122 key with Trackpoint and M13 blacks
IBM: Specialty: Wheelwriter 5, Boltmodded.  AT F layout, M technology. 
Lexmark/IBM: M13 Black Trackpoint
NCR:HO150-STD1-01-17 Decision Mate V - The other Gray NCR linear.


Offline timofonic

  • Posts: 59
"Open Source" Generic keyboard controller.
« Reply #167 on: Wed, 02 June 2010, 21:22:06 »
Interesting...

Some site or wiki page showing the schematics plus the link to the firmware code? Or update the first page :)

Also...

Aren't most USB adapters sucky? I mean about unable to push several keys at once.

Anyway, it IBM keyboards are 2kro. It could be nice to replace the original controller by a N-key rollover capable one.
« Last Edit: Wed, 02 June 2010, 23:04:33 by timofonic »

Offline noctua

  • Posts: 188
"Open Source" Generic keyboard controller.
« Reply #168 on: Thu, 03 June 2010, 04:26:55 »
Quote from: timofonic;189024
Interesting...

Some site or wiki page showing the schematics plus the link to the firmware code? Or update the first page :)

Also...

Aren't most USB adapters sucky? I mean about unable to push several keys at once.

Anyway, it IBM keyboards are 2kro. It could be nice to replace the original controller by a N-key rollover capable one.


You may notice there exist a big difference between a idea and doing so, for
example you have to check the matrix carefully, some needs additional
1N4148 (or similar), some firmware code needs to revise..
Selfmade Keyboard I (done)
DT225 CH Trackball

Selfmade Keyboard II (95% completed)
L-Trac CST2545W-RC Trackball

both use Cherry MX Blue switches, an Teensy++ controller and have an Colemak layout

Offline Mnemonix

  • Posts: 163
"Open Source" Generic keyboard controller.
« Reply #169 on: Thu, 03 June 2010, 15:47:06 »
(Sorry for the late answer, but I'm quite busy at the moment.)

Quote from: dmw;188364
Ok, I just finished reading through all the posts in this thread.  Maybe should have done that _before_ I posted. ;)

I know I'm late to the game, but I have to say... Mnemonix, awesome job with your controller board and firmware!  If I had access to this a while ago, I probably would have never decided to try to do it myself.  I'm also very excited about the Teensy++.  With that, I see no need to build my own controller board.


Thank you! :)

Good you've decided to try it yourself, diversity is good. Also, thanks for sharing your work. As I understand it, your code will only work on USB-enabled AVRs. So when extending my own code for these I can take a look at your code how you've done it.
I've also thought about ordering a Teensy++ to play around with, but that will have to wait for now.

Quote from: dmw;188364
Mnemonix, there's a lot of overlap between our projects.  I would like to borrow some of your ideas for my firmware, if you don't have any objections. For example, I have been planning to add some method of programming the keyboard without re-flashing the firmware, but I wasn't sure how to go about it.  Looks like you have that feature already.


Well, it's all GPL'ed code, so, by definition copying is OK as long as your code is GPL-compatible, too, or if the copied code is trivial. Otherwise, borrowing ideas is always allowed, of course. :)

Concerning the programming of the keyboard, I am using the AVR's internal EEPROM for storing alternative key maps and configuration data. The tricky part was to find a method for communicating with the keyboard so that data other than HID packages could be exchanged. Fortunately, there is libusb which is taking care of the nasty OS-dependent details (detaching the HID driver from the device, re-attaching it later, sending/receiving data).

Quote from: dmw;188364
It seems from reading your posts that you have a lot of experience with this kind of development.  I'd like to pick your brain on a few things, as this is my first foray into MCU development.  I have a lot of ideas - would you consider collaborating?  Or have you moved on from this project?


This was my first microcontroller-based project, too, but I have done some VHDL and other low-level stuff before, plus lots of experience in C and software development in general. I may seem more experienced than I really am. My MCU skills are currently improving, though, since I've got a new job in embedded systems development. Now I am getting paid for having fun. :)

I haven't moved from the project, but I have less time to work on it -- and it is working for me already anyway, so there's not much left to do from my perspective.
Still, if you have questions or would like to discuss ideas, feel free to do so (here in public or PM). I'd love to hear your ideas.

Offline JBert

  • Posts: 764
"Open Source" Generic keyboard controller.
« Reply #170 on: Thu, 03 June 2010, 16:18:52 »
Quote from: timofonic;189024
Anyway, it IBM keyboards are 2kro. It could be nice to replace the original controller by a N-key rollover capable one.
Forget about it. You need to alter the matrix before you can use an NKRO controller, something which isn't possible seeing how the matrix is printed on non-sticky mylar sheets.

The only NKRO IBM keyboards are the model Fs or earlier models.
IBM Model F XT + Soarer's USB Converter || Cherry G80-3000/Clears

The storage list:
IBM Model F AT || Cherry G80-3000/Blues || Compaq MX11800 (Cherry brown, bizarre layout) || IBM KB-8923 (model M-style RD) || G81-3010 Hxx || BTC 5100C || G81-3000 Sxx || Atari keyboard (?)


Currently ignored by: nobody?

Disclaimer: we don\'t help you save money on [strike]keyboards[/strike] hardware, rather we make you feel less bad about your expense.
[/SIZE]

Offline Halo

  • Posts: 1
"Open Source" Generic keyboard controller.
« Reply #171 on: Wed, 09 June 2010, 04:39:03 »
Quote from: Mnemonix;189301

I haven't moved from the project, but I have less time to work on it -- and it is working for me already anyway, so there's not much left to do from my perspective.


Weren't you originally wishing to implement trackpoint/trackball support?
Your IBM M4-1 has one so I hope I didn't just miss mention of support.

Thank you for sharing your kbupgrade by the way. :)

Offline Mnemonix

  • Posts: 163
"Open Source" Generic keyboard controller.
« Reply #172 on: Wed, 09 June 2010, 13:47:43 »
Quote from: Halo;191211
Weren't you originally wishing to implement trackpoint/trackball support?
Your IBM M4-1 has one so I hope I didn't just miss mention of support.

Thank you for sharing your kbupgrade by the way. :)

Yes, trackpoint support is still missing. Didn't think of it when writing my last message. :)
As a matter of fact, trackpoint support is getting more interesting for me right now because my desk is usually full of stuff at work, so throwing away the mouse would definitely help (I'm using the M4-1 at work).

So, for the keyboard part, there's not much left to do; trackpoint is still planned. Concerning the keyboard support, getting the Model F to work I got from Meltie some months ago is on top of my list.

Edit: Oh, welcome to Geekhack!

Offline chimera15

  • Posts: 1441
"Open Source" Generic keyboard controller.
« Reply #173 on: Sat, 19 June 2010, 10:45:41 »
I'm reading through this, is there a ready made program to upload to a teensy++ that can define a matrix or not?

Is DMW's the most complete?  I need to compile it with a c++ compiler?  Is there a walkthrough of what I need to do exactly to get it running on my teensy++.  I've never had a ton of luck compiling programs before.

Is there precompiled, or an exact list of what I need to do?
« Last Edit: Sat, 19 June 2010, 11:01:18 by chimera15 »
Alps boards:
white real complicated: 1x modified siiig minitouch kb1903,  hhkb light2 english steampunk hack, wireless siig minitouch hack
white with rubber damper(cream)+clicky springs: 2x modified siig minitouch kb1903 1x modified siig minitouch kb1948
white fake simplified:   1x white smk-85, 1x Steampunk compact board hack
white real simplified: 1x unitek k-258
low profile: 1x mint m1242 in box
black: ultra mini wrist keyboard hack
blue: Japanese hhk2 lite hack, 1x siig minitouch pcb/doubleshot dc-2014 caps. kb1903, 1x modified kb1948 Siig minitouch
rainbow test boards:  mck-84sx


Offline dmw

  • Posts: 84
    • http://humblehacker.com
"Open Source" Generic keyboard controller.
« Reply #174 on: Sat, 19 June 2010, 12:07:10 »
chimera15,

If you want to try to use my firmware, I'll be happy to help you get it going.  I do have it compiled and running on my Teensy++ 2.0.  What keyboard do you have in mind for it?

You need a C compiler to compile it - avr-gcc to be exact.  There are different packages for each OS.  WinAVR for Windows and  CrossPack for Mac.  You'll have to use your favorite package manager to install avr-gcc on Linux.

You can find my source code at http://github.com/humblehacker/keyboard.  If you're not familiar with git, you can download a tarball or zipfile from http://github.com/humblehacker/keyboard/downloads. Choose the one labeled 'teensy-test.'
« Last Edit: Sat, 19 June 2010, 12:42:16 by dmw »

Offline noctua

  • Posts: 188
"Open Source" Generic keyboard controller.
« Reply #175 on: Sat, 19 June 2010, 12:17:16 »
To my knowledge there exist no specific adapted version for Teensy++. Some
are based on V-USB other are based on LUFA that i have seen, since the
matrix scan mechanism self is portable to any controller. The bottom line
is therefore the programming of the built-in USB device controller..

We'll see.
Selfmade Keyboard I (done)
DT225 CH Trackball

Selfmade Keyboard II (95% completed)
L-Trac CST2545W-RC Trackball

both use Cherry MX Blue switches, an Teensy++ controller and have an Colemak layout

Offline dfj

  • Posts: 171
  • Location: Canada
  • Visit our irc: #geekhack on libera.chat!
I'll give it a poke too.
« Reply #176 on: Sat, 19 June 2010, 14:41:56 »
Quote from: dmw;194698
chimera15,

You can find my source code at http://github.com/humblehacker/keyboard.  If you're not familiar with git, you can download a tarball or zipfile from http://github.com/humblehacker/keyboard/downloads. Choose the one labeled 'teensy-test.'


I've got a teensy++ and some matrices handy too, I'll give it a shot this weekend, hopefully. Just dl'd yer test...

I've also got a mess of code which is near-release quality, but missing a bunch of mnemonix's features... I want to see which areas you cracked well...
  With a bit of luck, we killed largely different problems. :)
(e.g. I kilt the 6-key/nkro problem in USB for my driver... but I din' bother doing software-remappable keys...)

   I've used atmega168s, the teensy++ and the atmega 32 on this - din' quite manage to get a ps2-usb converter working on an 8-pin tiny yet, though. :)

yup,
dfj
Fave Switch manus: IBM, Topre, Matias, ...

Offline dfj

  • Posts: 171
  • Location: Canada
  • Visit our irc: #geekhack on libera.chat!
An advantage of a pinless Teensy++
« Reply #177 on: Sat, 19 June 2010, 17:20:44 »
- is that one can mount double-height pins in it for prototyping. Once you are happy, you can snip the bottoms, tops or use another one to lay flat inside yer keyboard.


dfj
Fave Switch manus: IBM, Topre, Matias, ...

Offline chimera15

  • Posts: 1441
"Open Source" Generic keyboard controller.
« Reply #178 on: Sat, 19 June 2010, 18:03:31 »
Quote from: dmw;194698
chimera15,

If you want to try to use my firmware, I'll be happy to help you get it going.  I do have it compiled and running on my Teensy++ 2.0.  What keyboard do you have in mind for it?

You need a C compiler to compile it - avr-gcc to be exact.  There are different packages for each OS.  WinAVR for Windows and  CrossPack for Mac.  You'll have to use your favorite package manager to install avr-gcc on Linux.

You can find my source code at http://github.com/humblehacker/keyboard.  If you're not familiar with git, you can download a tarball or zipfile from http://github.com/humblehacker/keyboard/downloads. Choose the one labeled 'teensy-test.'

I'm going to try to build a scratchbuild with it, with this layout:
http://geekhack.org/showwiki.php?title=Island:10454

I'm using Windows...

Is it possible to create the two function keys like I describe with this programming?

I'm installing winavr, is that all I need?

Alright, I've installed winavr, and downloaded the zip file.....now what. lol
« Last Edit: Sat, 19 June 2010, 21:02:35 by chimera15 »
Alps boards:
white real complicated: 1x modified siiig minitouch kb1903,  hhkb light2 english steampunk hack, wireless siig minitouch hack
white with rubber damper(cream)+clicky springs: 2x modified siig minitouch kb1903 1x modified siig minitouch kb1948
white fake simplified:   1x white smk-85, 1x Steampunk compact board hack
white real simplified: 1x unitek k-258
low profile: 1x mint m1242 in box
black: ultra mini wrist keyboard hack
blue: Japanese hhk2 lite hack, 1x siig minitouch pcb/doubleshot dc-2014 caps. kb1903, 1x modified kb1948 Siig minitouch
rainbow test boards:  mck-84sx


Offline dmw

  • Posts: 84
    • http://humblehacker.com
"Open Source" Generic keyboard controller.
« Reply #179 on: Sat, 19 June 2010, 21:39:43 »
Quote from: chimera15;194785
I'm going to try to build a scratchbuild with it, with this layout:
http://geekhack.org/showwiki.php?title=Island:10454

Do you know the keyboard matrix already?  If you don't, my code includes a custom build option that will help you determine the matrix.

Quote
Is it possible to create the two function keys like I describe with this programming?

You can have as many function keys as you like.

Quote
I'm installing winavr, is that all I need?

There is a ruby script code generator that turns the keymap files into code.  If you don't have ruby installed, you'll have trouble building. You can get ruby for Windows here. There are additional dependencies once you've installed ruby.  If you don't want to install ruby, I can build the keymaps for you after you've created your keymap files.  

Quote
Alright, I've installed winavr, and downloaded the zip file.....now what. lol

  • Unzip the zip file
  • Navigate to the directory keyboard/firmware
  • make a copy the directory kb_reference.  Call it whatever you like - kb_chimera, for example.
  • from the command-line, navigate to keyboard/firmware/kb_chimera
  • type 'make'

This will build the reference firmware, which is just a starting point for doing your own keyboard.  There are some files you'll need to modify to actually build a working firmware.  Take a look at keyboard/firmware/kb_chimera/layouts to get an idea.

Once you reach this point, contact me and we'll take it further.  Maybe PM me, so we don't clog up this thread.  You can also reach me on freenode at ##humblehacker, if you do IRC.
« Last Edit: Sat, 19 June 2010, 22:16:51 by dmw »

Offline Specter_57

  • Posts: 143
"Open Source" Generic keyboard controller.
« Reply #180 on: Tue, 29 June 2010, 06:47:05 »
.

Here is something that may be of interest, related to this thread...see my post in the "Making a Cheap Model M USB Controller" thread, post #257 on page 18:

http://geekhack.org/showwiki.php?title=Island:8406&do=comments&page=18

..............
Spec_57

Offline chimera15

  • Posts: 1441
"Open Source" Generic keyboard controller.
« Reply #181 on: Tue, 29 June 2010, 07:24:58 »
DMW wins. lol
Alps boards:
white real complicated: 1x modified siiig minitouch kb1903,  hhkb light2 english steampunk hack, wireless siig minitouch hack
white with rubber damper(cream)+clicky springs: 2x modified siig minitouch kb1903 1x modified siig minitouch kb1948
white fake simplified:   1x white smk-85, 1x Steampunk compact board hack
white real simplified: 1x unitek k-258
low profile: 1x mint m1242 in box
black: ultra mini wrist keyboard hack
blue: Japanese hhk2 lite hack, 1x siig minitouch pcb/doubleshot dc-2014 caps. kb1903, 1x modified kb1948 Siig minitouch
rainbow test boards:  mck-84sx


Offline repeatrate

  • Posts: 5
"Open Source" Generic keyboard controller.
« Reply #182 on: Mon, 24 January 2011, 23:26:58 »
nvm worked great.
« Last Edit: Tue, 25 January 2011, 08:19:37 by repeatrate »

Offline intealls

  • Posts: 63
"Open Source" Generic keyboard controller.
« Reply #183 on: Wed, 26 January 2011, 06:36:57 »
I just wanted to say thanks to dmw, your firmware is absolutely awesome. Finished wiring up one of my AEK II's yesterday, and it works fabulously. Thanks to you, I can bring my dvorak and fn-hax to every computer on the planet. THANK YOU! :D

I think you can all tell where I'm going to chop it off. :) The layout is very MiniGuru-ish at the moment.


Offline Jaga

  • Posts: 2
"Open Source" Generic keyboard controller.
« Reply #184 on: Mon, 23 January 2012, 06:47:13 »
Hello!
I'm interested in building custom keyboard. I don't like stuff for sale.
I need a custom arrangement of keys, some custom keys (like compose, dead keys etc.), custom codes from keys and of course custom keycaps.
I need a custom controller, I think. But I don't know the full technology. Is there a FAQ of making a keyboard from scratch?

Offline alaricljs

  • I be WOT'ing all day...
  • ** Moderator Emeritus
  • Posts: 3715
  • Location: NE US
"Open Source" Generic keyboard controller.
« Reply #185 on: Mon, 23 January 2012, 07:14:15 »
Kinda sorta.

Here
Here
Here
Here

There are likely to be several more, but that should get you pretty well on your way.  There are a number of already developed KB firmwares for the teensy, or you can go with an Aikon, or Chamelon (available on TaoBao), or some other controller.
Filco w/ Imsto thick PBT
Ducky 1087XM PCB+Plate, w/ Matias "Quiet Click" spring-swapped w/ XM Greens

Offline Jaga

  • Posts: 2
"Open Source" Generic keyboard controller.
« Reply #186 on: Mon, 23 January 2012, 07:24:04 »
Thank you. And sorry me not searching properly.

Offline alaricljs

  • I be WOT'ing all day...
  • ** Moderator Emeritus
  • Posts: 3715
  • Location: NE US
"Open Source" Generic keyboard controller.
« Reply #187 on: Mon, 23 January 2012, 07:26:22 »
Unfortunately with GH sometimes that requires already knowing what you're searching for and knowing to use google and site:geekhack.org to do it.  :)
Filco w/ Imsto thick PBT
Ducky 1087XM PCB+Plate, w/ Matias "Quiet Click" spring-swapped w/ XM Greens

Offline Input Nirvana

  • Master of the Calculated Risk
  • Posts: 2316
  • Location: Somewhere in the San Francisco Bay area/Best Coast
  • If I tell ya, I'll hafta kill ya
"Open Source" Generic keyboard controller.
« Reply #188 on: Fri, 27 January 2012, 02:02:53 »
So what is the status of this? Is there current work still being done? Or is it at it's final point?
Kinesis Advantage cut into 2 halves | RollerMouse Free 2 | Apple Magic Trackpad | Colemak
Evil Screaming Flying Door Monkeys From Hell                     Proudly GeekWhacking since 2009
Things change, things stay the same                                        Thanks much, Smallfry  
I AM THE REAPER . . . BECAUSE I KILL IT
~retired from forum activities 2015~

Offline Niy

  • Posts: 1
"Open Source" Generic keyboard controller.
« Reply #189 on: Wed, 18 April 2012, 09:50:43 »
I guess this project is dead -- tho I really hope there are some guys out there working on it.
But I'd be happy to be part of a restart of this project.

Offline uberben

  • Posts: 62
"Open Source" Generic keyboard controller.
« Reply #190 on: Wed, 18 April 2012, 11:09:08 »
Quote from: Niy;577891
I guess this project is dead -- tho I really hope there are some guys out there working on it.
But I'd be happy to be part of a restart of this project.

I'll be starting a custom, generic keyboard controller project shortly that I intend to release as open source. I'm building it for my Kinesis Contoured keyboard, but I intend to make it as generic as possible. It will be a combination USB/bluetooth (though it could easily be made bluetooth optional) keyboard controller and I have plans to integrate a pointing device as well. I've already got many of the parts, I just need to find some time to start playing with it.

My current plan is to kind of make a combination of the HumbleHacker keyboard and the Keyglove. Once I get started, I'll probably start a thread here with details and progress updates. I'm all for working with others to speed up development.

Offline komar007

  • Posts: 712
  • Location: Poland
    • komar's blog
"Open Source" Generic keyboard controller.
« Reply #191 on: Wed, 18 April 2012, 14:06:17 »
Could you tell some more details about the controller, hardware specifically?
I already have a working codebase for AVR with a USB HID nkro stack.
I can release it as open-source if necessary. I don't have much time to end this project, so if it can help, let me know.
GH60 rev. B w/ ali's case|Cherry G80-3000 HFU/05|IBM Model M (51G8572)
Check out the GH60 project! | How to make a keyboard

Offline uberben

  • Posts: 62
"Open Source" Generic keyboard controller.
« Reply #192 on: Wed, 18 April 2012, 14:30:41 »
Quote from: komar007;578130
Could you tell some more details about the controller, hardware specifically?
I already have a working codebase for AVR with a USB HID nkro stack.
I can release it as open-source if necessary. I don't have much time to end this project, so if it can help, let me know.

The dev board I have is the 32u4 breakout from Adafruit. The bluetooth module is the Bluegiga WT-12 (I have this breakout board). Ultimately, I hope to make a custom circuit board for it. If it is going to be a universal controller, I might need some help finding an appropriate set of dimensions for the board to maximize compatibility.

I haven't started on software yet, but I intend to use the LUFA stack for USB HID to maintain maximum open-source code. My goal is ultimately to have nkro, but 6kro compatibility for boot is desired too. I have seen some projects with this, though I haven't dug much into the details of their implementation. The one that caught my eye though was just using the standard 6kro headers for when there are <7 keys pressed, then switching to the extended headers when there are more. Seems simple enough to me, but like I said, I haven't started coding it up yet.

The more code examples I can get my hands on, the better. I would be glad to us your code as an example.

Offline hasu

  • Posts: 3478
  • Location: Tokyo, Japan
  • @tmk
    • tmk keyboard firmware project
"Open Source" Generic keyboard controller.
« Reply #193 on: Wed, 18 April 2012, 19:11:23 »
I used WT12 from Jeff for HID stack of my keyboard and I found firmware 4.0 has some bugs on HID. I think you should get 4.1beta or 5.0beta from Bluegiga support. I'm using 4.1beta but not try 5.0beta yet.
I have some lag on the Bluetooth module to register keys, I don't want to use this keyboard for serious typing work though I'm not sure whether this lag is normal or not on Bluetooth. I have no Bluetooth keyboard excepting this DIY board. I guess I should try 5.0beta or use HCI instead of iWRAP.

FYI: I have a memo about NKRO on USB.
https://github.com/tmk/tmk_keyboard/blob/master/USB_NKRO.txt

Offline uberben

  • Posts: 62
"Open Source" Generic keyboard controller.
« Reply #194 on: Wed, 18 April 2012, 19:36:51 »
Ya, I have heard that the 5.0 software should work a lot better for HID than the 4.0. Is it a simple process to upgrade the module?

Offline hasu

  • Posts: 3478
  • Location: Tokyo, Japan
  • @tmk
    • tmk keyboard firmware project
"Open Source" Generic keyboard controller.
« Reply #195 on: Wed, 18 April 2012, 20:42:14 »
Not a lot of work for upgrade itself.
But to get account from them was a bit hell. They didn't accept my gmail address so I had to setup a new email of a neat domain :)