Hootswitch, a (work-in-progress) Apple Desktop Bus switch

saybur

Well-known member
Not as much time for projects recently (life/work/etc) but I was able to get preliminary support added for controlling a Hootswitch over USB from a modern computer. I did something like this ages ago with a clunky Java client. This new approach uses Chrome and the Web Serial API. Remote control page is here, you'll need a Hootswitch with the latest firmware to make it work.

flybywire.png
 

Jockelill

Well-known member
Really neat project! Very impressive work indeed!!!

Bluetooth support for a wireless mouse would be really nifty :). And, maybe this is very weird request, but if you would have a 5th channel with USB output it would also be very nice. That way you could have 1 modern computer and 4 retro computers using same keyboard and mouse :). I'm currently using a very old style KVM (mechanical switch) that lets me switch between my modern computer and a Q650. But I always switch it turned out not to mess up the ADB.
 

saybur

Well-known member
Really neat project! Very impressive work indeed!!!
Thanks!

Bluetooth support for a wireless mouse would be really nifty :)
I've been slowly digging at it as I get time. Quite annoyingly, licensing is the current problem: the Bluetooth SDK library, btstack, doesn't appear to be compatible with the GPL, so I can't use the example code as a base and even linking to the library may also be a problem. I'm trying to figure out the best approach, either some license exception or switching to something else (MPL2?) that would allow incorporation, but still ensure remixes/derivatives stay open source.

I'm no license expert, if anyone has insights I'd like to hear them.

you would have a 5th channel with USB output it would also be very nice
That's an interesting idea I hadn't considered. Let me give that some thought.
 

Reasons.

Well-known member
ZMK (https://zmk.dev/) ran into a similar problem and ended up adopting MIT. That doesn't keep derivatives from going closed-source, but if there's any conversations about their decision-making it might be useful reading.
 

CircuitBored

Well-known member
It just occurred to me that @ThisDoesNotCompute recently did a video about the Penlite, Apple's cancelled touchscreen PowerBook thing. This device surely has absolute cursor positioning (unless the developers went about it in an extremely odd way). Perhaps the drivers used in this machine could be utilised for developing a driver for use with a KVM?
 

Byte Knight

Well-known member
Sort of related… I take it this is an example of the old “passive” deign of ADB KVM:


Also on a related note, I just found this ADB switcher and will try it in reverse by hooking up the wired end to the keyboard.

 

superjer2000

Well-known member
Haha yes, it is much easier by comparison! This time around I chose parts stocked by JLCPCB and included the CPL needed to have them do the annoying SMD work for you. I think I put mine together in about 15 minutes or so, everything is through-hole including the Pico unless you want to use the castellations on those.

For hardware, if you want to be really adventurous I have a version 2024b prototype up on Github (https://github.com/saybur/hootswitch/tree/hw-2024b) but I have not manufactured it yet. Most of the changes are minor but I'm reluctant to recommend anyone try something totally untested, more just FYI that it's there and aims to correct the errata for 2024a in the main branch. I'll hopefully have 2024b shipped back here in the next week or so and can make sure it works.
Has anybody tried the 2024b yet? I'm looking to get my order in and not sure if I should stick with the "A" version or try the "B".

Thanks!
 

saybur

Well-known member
It should be fine, most of the changes were quite minor. Definitely post any troubles and I'd be happy to help. I'm still a bit buried with work but am hoping to have more time for this stuff over the holiday breaks coming up.
 

superjer2000

Well-known member
It should be fine, most of the changes were quite minor. Definitely post any troubles and I'd be happy to help. I'm still a bit buried with work but am hoping to have more time for this stuff over the holiday breaks coming up.
Hi @saybur -

My PCBs showed up a while ago and I'm not just finally ordering the other parts that weren't placed by JLCPCB... I see there is an extra ADB port noted at J1 which is optional. Can you confirm what that is for?

Also, looking to confirm what the TWI connectors are used for.

Thanks!
 
Last edited:

saybur

Well-known member
The extra ADB can be used to attach more peripherals if needed. It is mainly there for devices without a passthrough plug. Can be left out to shave a buck or two off the assembly cost.

The TWI connection is for future add-ons, like a monitor switcher board, external buttons, etc. No software support exists for those pins so I'd suggest just leaving them off for now.
 

superjer2000

Well-known member
Awesome - Thanks! I ordered enough components to fill up the 5 pcbs I have. One of those PCB/part sets is spoken for - for the other four I'm now envisioning connecting them in together to drive 13 Macs off of one keyboard and mouse (1 Hootswitch driving three other Hootswitches plus the remaining port on the parent Hootswitch)... I'm not sure what would work but maybe I should try in the interest of science!
 

saybur

Well-known member
Definitely be interested to hear if it works, it technically should but it isn't anything I've tested. If it does function it might be a future use case for the I2C connector, something to allow devices to coordinate switching between themselves.
 

Torbar

Well-known member
Been working on a front/back panel for the case thats in the parts list(Hammond RM2015S)

Just finishing up some last minute tweaks and I'll post the STL here(and feel free to put it on the github if you want)

1737147034779.png
1737147055554.png
1737147071303.png
 

LaPorta

Well-known member
Been working on a front/back panel for the case thats in the parts list(Hammond RM2015S)

Just finishing up some last minute tweaks and I'll post the STL here(and feel free to put it on the github if you want)
That looks great! How much are "production" units, assembled?
 

superjer2000

Well-known member
Haha yes, it is much easier by comparison! This time around I chose parts stocked by JLCPCB and included the CPL needed to have them do the annoying SMD work for you. I think I put mine together in about 15 minutes or so, everything is through-hole including the Pico unless you want to use the castellations on those.

For hardware, if you want to be really adventurous I have a version 2024b prototype up on Github (https://github.com/saybur/hootswitch/tree/hw-2024b) but I have not manufactured it yet. Most of the changes are minor but I'm reluctant to recommend anyone try something totally untested, more just FYI that it's there and aims to correct the errata for 2024a in the main branch. I'll hopefully have 2024b shipped back here in the next week or so and can make sure it works.
I assemlneed my first 2024b board and built and loaded the current firmware (I used the firmware from the main branch - not sure in hindsight if it's the same firmware as the b branch or not so will need to check that out)

The device powers up and switches when the button is pressed (I get the beep and the led cycles). When plugged into computers though I get activity on the computer side bus led but nothing on the first led which I am assuming is the adb peripheral activity light.

i want to go and buzz out the connections from the peripheral side adb connectors until they get to the 2040 and I'll check if the firmware on the 2024b branch is different.

For anyone that has built a 2024b, any tips on where to focus first?

Also is there an explanation of how Jumper j10 is to be used? I am assuming I need to jump
It to use external 12v power. Is that jumping both sets of pins?
Thanks!
 
Last edited:

superjer2000

Well-known member
I haven't had any success as of yet. I'm not exactly sure of theory of operation here but it seems the soldering is fine as I seem to have good connectivity from all of the ADB pins (except Power On, I can't see where that's going) and then it seems like I have connectivity from the digital isolator to the 2040. Of course, I'm just randomly buzzing out lines as I haven't gone to check out the schematic yet. I did compile and install the firmware from the hw-2024b branch without any change. I don't have any activity light on D1 (which I'm assuming is ADB input activity).

I am also not having any luck powering the device from a non-USB source. It seems that there is no connection from the DC input's ground pin to anywhere on the Hootswitch. I am tempted to run a jumper wire from the ground to the ground on the voltage regulator, but I would like to better understand how J10 is supposed to be configured.
 

saybur

Well-known member
I am also not having any luck powering the device from a non-USB source. It seems that there is no connection from the DC input's ground pin to anywhere on the Hootswitch.
That is indeed completely wrong on the schematic and PCB, the negative pin on the DC jack needs to be on the ground plane. If you tie the connection labeled (-) to the ground pin of C1 that should (poorly) fix the problem (though see below note). Sorry about that, it's a straight-up error on my part. I'll add something to Github to warn others that the external circuitry is not working.

I would like to better understand how J10 is supposed to be configured.
Given the issue with the external power, put a jumper horizontally across the two pins closest to the front edge of the board and power via USB. Once that's done the board should completely power up. If J10 isn't set the Pico will power up from USB but none of the external circuitry will. I'm guessing that's why the board is not working, but if that doesn't fix it I'll keep an eye on the thread and suggest some other options.

Given the design issue I'd suggest powering via USB and ignoring the external DC jack power provision.

Just finishing up some last minute tweaks and I'll post the STL here(and feel free to put it on the github if you want)
That would be awesome, thank you for making those!
 
Top