How do the two sides of a Model100 communicate with each other?

How do the two sides communicate with each other? I’ve been looking in the Kaleidoscope source for clues, but haven’t found any so far.

What I want to do is to add a pedalboard, for modifiers and cursor keys, which feeds into the keyboard. If I were just using it on my Linux system, I would make it as a separate USB device, but I also need to use it with a MacBook for work, and that seems not to apply modifiers from one (USB) keyboard to another (the built-in keyboard), so I’m looking at ways of feeding the pedal signals into the Model100.

At first I thought of using the expansion connector, but felt reluctant about modifying the hardware. Then I thought I could make a separate device (probably Arduino-based) with two RJ45 ports, and connect it between the two sides of the Model100. It would pass data on between the two sides (with the minimum delay that I can get it to do) but also be able to inject keystrokes so that the left side will treat them as though they came from the right side. Is this likely to work? And what type of communication is used between the sides? A serial line? I2C? SPI?

It would be helpful to have a starting point in the source code to learn about this area, but I haven’t managed to find it so far, and there’s enough code there that I’d rather ask than try to read the whole lot.


I’ve now found the schematics (on github) and realized that I had misunderstood how it works (hence not finding what I was looking for; I was looking for the wrong thing) — I had thought that each side had an arduino-like CPU running kaleidoscope. In fact, only the left side does, and the right side has no user-programmable CPU and contains only components driven through an extended I2C bus.

So now I need to work out how to add another “target” (slave) device; from what I can see so far, the design uses only a small part of the I2C address space. I may simply be able to duplicate the right-hand keyscanner part of the design with very little modification, so the pedalboard will be effectively a second right-hand side but without the LEDs.

I know this is months old at this point, but in case you haven’t found a solution… I ran into this problem with macOS trying to do key commands with modifier keys and a numpad.

There is an easy software workaround - just use karabiner and set both keyboards to “treat as built-in keyboard.” Then it will treat all keys as if they’re from the same keyboard and will work the same as it does it Windows and Linux.