Brian Lovin
/
Hacker News
Daily Digest email

Get the top HN stories in your inbox every day.

rx_tx

Unfortunately, this is not an ideal design.

- Most USB hub chips can be strapped/hard wired configured, or controllable by i2c already directly. Funnily enough this chip isn't, but is extremely cheap (less than 24 cents!).

- The "port enable" feature on this design only controls VBUS (power pin of each connector), not the hub itself, so on a self-powered device it may not actually disconnect the device if it doesn't need VBUS to operate.

[1]: https://www.lcsc.com/product-detail/USB-ICs_CoreChips-SL2-1A...

boffinAudio

Very good points - have you made an Issue on their repo to report these points? As they are currently doing a new revision, it would be good to see these sticking points submitted and get addressed by the devs, if they're not aware of them already.

I do a lot of firmware development and am constantly having to unplug/replug devices during the process .. for this reason I have an I-Tec 16-port Charging Hub, which has individual switches for each port - and this works fine, as long as I get the druthers to launch out of my chair and turn things off and on again... however being able to do all of this remotely, with software, would mean I could a) automate the hell out of a lot of things that requires monkey-tapping, and b) put the whole mess in a closet where it belongs, away from my coffee cup.

So I'm quite eager to see this project proceed - especially if there is a way the port capacities can be expanded (16-port would be ideal) .. so please consider officially reporting any issues in the design that you see!

GrumpyYoungMan

Don't commercially available software controlled USB hubs exist already? The Yepkit YKUSH 3 came to mind immediately (https://www.yepkit.com/product/300110/YKUSH3) and is the only device I've seen that explicitly says that it disconnects both the data lines and power lines when switching. A casual search also finds https://www.usbgear.com/managed-hubs.html

ddlsmurf

I don't really see those as issues... The hub chip is cheap and doesn't directly do i2c, but, so ? Controlling VBus seems to be by design, exactly for devices that are separately powered to still work: see author's other project https://github.com/JimHeaney/usb-toggle . There should be a way to block further communication at the software level if that matters to one's use case. You can expand this, just plug a bunch of them into another hub...

codazoda

I wonder if it supports software control? I haven’t messed with this in a long long time, but here’s a C program for controlling USB port power via software.

It works on a pretty limited set of hubs, because most cheap out on including the switches.

https://github.com/codazoda/hub-ctrl.c

loxias

What hub(s) do you use it on?

fellowmartian

Hub chips often already have pins for per port VBUS control, and you just need to wire P-channel mosfets to them (hub manufacturers often cheap out on this). You can then control port power through sysfs.

mikepurvis

In my experience this support was rare. I had an issue a few years ago with multiple USB 3 cameras (Intel Realsense) on a mobile robot that would periodically freeze up and need to be hard-reset, and a power-controllable hub seemed like the least-bad way to hack around it. I found my way to this tool, with its convenient list of compatible hardware:

https://github.com/mvp/uhubctl

Of the USB 3 options on the list, several were EOL or impossible to find, and when I ordered one each of the remainder, there was only one I could get working, and it wasn't reliable about being able to reset a device that had frozen to the point where Linux no longer had sysfs entries for it.

We ended up instead using a hub with an internal jumper to disable bus power, and then putting the self power line through a separately-controllable relay.

brunorsini

Last year I bought a second computer for my music studio. I wanted to use the same set of 2 monitors and wired keyboard + trackpad on both machines.

I wrote simple scripts to switch my monitor inputs with keyboard shortcuts (even simpler with Lunar, amazing new Mac app — https://lunar.fyi), which saved me from having to press annoying input-source buttons.

But I couldn't for the life of me find a simple, suitable software controllable KVM switch. That still requires the hardware button to be controlled, so frustrating.

liminalsunset

If you or anyone else is still looking for a programmable or controllable USB KVM, though this also comes with a HDMI 2.0 4K 60hz switcher and is accordingly more expensive,

https://www.aliexpress.com/item/1005005149590635.html

is probably what you need. It has a USB port linked to a USB serial internally that you send strings to switch. It was designed to be used with the Pi KVM/BLIKVM KVM over IP solution but works for other things as well.

ARob109

For full software no hardware kvm solution, there is Microsoft Garage Mouse Without Borders. Wish it was open source. Mostly useful for multi monitor setup where you don’t need to change sources just change keyboard and mouse. For soft switching source I use a script to send DDC commands to the monitor

thetoon

Isn't that functionnaly the same as Synergy (which was opensource but isn't anymore), and it's opensource fork Barrier (https://github.com/debauchee/barrier) ?

rft

If you are up for some hardware tinkering, you might be able to modify an existing KVM switch to add remote control.

I had a KVM switch with a wired button (place KVM out of the way, put small button on your desk). The button was connected via a 3.5mm "audio" jack. I never measured the interface, but I bet it just connected two rings of the jack.

Using a switch like that, you can build your own control for it without opening the KVM. Either with an ESP for wifi control (MQTT would be my choice) or a smaller board for USB/serial control (Cortex-M dev board). Short the proper rings via an optocoupler controlled by the MCU and it will behave as if you pressed the button.

boffinAudio

I am constantly on the lookout for a monitor that has a USB port/KVM switch built in - it seems like such a no-brainer, but alas there are very few options like this available out there .. I do recall someone making an open-source KVM switcher design some time ago, will have to try and dig it out of the archives ..

the_pwner224

Lots of Dell monitors support this - probably every single currently-in-production Ultrasharp supports it, and I think some of the lower tier non-Ultrasharps may support it as well.

Dell monitors all support DDC, I'm not sure if KVM switching can be controlled over DDC but it's likely.

Somewhat unrelated, but some of the Dell monitors also have USB-C support, where a single USB-C cable connects to your laptop and: charges it (Power Delivery from the monitor), hooks up the display (DP alt mode), and connects to the USB hub on the monitor. So if you use a wireless kb/mouse with receivers plugged into the monitor, you'll have literally just 2 cables on your desk - a power cable for your monitor, and a USB-C cable between the monitor and laptop.

bazzargh

For me, you want 2 more wires:

- the laptop to the side is awkwardly positioned for zoom chat, so you probably want a webcam as well

- audio is a problem. If you use bluetooth and swap lots of things over then you keep needing to re-pair which is a pain. The model I have (Dell UltraSharp 27 USB-C Hub Monitor - U2722DE) has an audio jack but this is for connecting to soundbars not headphones, and the soundbars Dell offered that are compatible with that monitor don't support headphones. So, I ended up using a USB headset. You can use bluetooth with a usb soundcard dongle to avoid swapping, but bidirectional sound is an issue with that so you'll want to use the mic on the webcam (if you got one like that)

My keyboard/trackball are wired to the monitor, there doesn't seem to be much point to having wireless to attach something that's only a foot away anyway.

Either way, it's one connection to the laptop, but 4-5 other things need to connect to the monitor too. Still pretty good and not too much clutter tho

bdd

> I'm not sure if KVM switching can be controlled over DDC but it's likely.

They do. Here's my shell function that helps me switch between DisplayPort-1 + USB uplink cable to the host AND USB-C cable with DisplayPort Alt Mode+Charging+uplink to display's USB hub.

  # x0f: DisplayPort-1
  # x1b: USB-C
  DDC_SOURCES=("x0f" "x1b")

  switchkvm() {
    local vcp_input_src="x60"
    local current next src
    current=$(ddcutil -t getvcp ${vcp_input_src} | awk '{ print $4 }')
    for src in "${DDC_SOURCES[@]}"; do
      if [[ ${src} != "${current}" ]]; then
        next=${src}
      fi
    done
  
    if [[ -z ${next} ]]; then
      echo "No eligible alternate input in \$DDC_SOURCES" >&2
      echo "\$DDC_SOURCES=(${DDC_SOURCES[*]}); current=${current}"
      return 1
    fi

    ddcutil setvcp "${vcp_input_src}" "${next}"
  }

hamandcheese

+1, I recently got a Dell and it works great.

I have a desktop Linux PC but I often need to switch to my MacBook. If I plug the MacBook in, all my peripherals automatically switch to it. If I unplug, everything switch he's back to the Linux PC.

You can definitely use DDC to switch inputs, and the KVM is linked to the selected input. On MacOS I use Better Display which lets me switch inputs from a menu bar app. On linux there is ddcui (which is more like a proof of concept than a polished app, but it works). It's rare that I need to use this though since the auto-switching is usually all I need.

Hendrikto

> I am constantly on the lookout for a monitor that has a USB port/KVM switch built in

Dough (formerly Eve) Spectrum monitors have this feature. They are also great all-round monitors.

edualm

Some exist. I have the Philip 279M1RV, which is 4K 144Hz with a built-in KVM. It's not a perfect monitor, but was the best one I could find for my needs, spec-wise.

kjs3

I have a pair of Gigabyte M32U monitors that have an integrated KVM, which I confess I don't use (they're on a discrete KVM). Nice monitors.

alanbernstein

What monitor model do you have? I want the same thing, and the Samsung monitor I bought previously doesn't support very much.

Like sibling comment, I have a 4-port USB switch with a remote that connects via micro-usb, it was quite easy to hack a custom remote that I keep next to my keyboard.

dementik

There is also wifi-connected Sinilink XY-WFUSB: https://devices.esphome.io/devices/Sinilink-XY-WFUSB-USB-Swi...

Not opensource hardware, but available immediately for order and ESPHome/Tasmota can be used as a firmwre.

TheLoafOfBread

I think adding USB to I2C chip and connecting it to USB hub would make device self-contained and great candidate for automated testing of USB hardware - i.e. 3 different hardware revisions which needs to be tested after release of new firmware by test software to verify that all 3 are working the same.

seba_dos1

USB hubs are controllable via USB, so I guess this is for cases where your hub is connected to a device you don't control.

boffinAudio

This is very, very handy for development purposes - those of us building firmware and drivers for USB devices are very familiar with the need to reset (unplug/replug) devices during development, and being able to do this with I2C and automatable software procedures is a GODSEND .. I've already started the process of getting a couple PCB's made from this project, and have subscribed for futher updates as the devs get their revision made... this project is very valuable for us in the embedded industry, and I for one would like to see software-controllable USB ports become a very standard thing, personally.

So many issues with USB during development can be resolved if you can just get the device reset during the dev process. Being able to hard-reset a device during compile/debug phases is going to save me huge amounts of time and effort ...

Goz3rr

Software controllable USB ports already are a thing, Per-port power switching can be found in the USB 2.0 spec and there's a bunch of hubs out there that implement it, controllable via USB instead of I2C. Since USB 3.2 any device that has downstream type C ports is required to implement PPPS.

A DIY hub that uses a chip with PPPS support can be found here for example: https://oshwlab.com/iamseer/ch335-hub

boffinAudio

Cool, got any suggestions for products that already implement this, particularly those with existing software shims that could be easily integrated into a test suite? I'd be a happy customer if there were such a thing, easily orderable, but I confess I don't quite know what keywords to use to find it ..

crote

It is extremely rare for USB hubs to support remote power switching of individual USB ports. As someone who develops USB devices, this kind of i2c-controllable hub would save me a lot of cable unplugging.

alufers

I've tried a few Amazon Basics ones, and on all of them power switching per-port worked. Uhubctl's compatibility list. seems to confirm my experience. The only problem is that the 7 port ones are in fact two 4-port hubs in a trenchcoat, which makes port numbering a bit weird. Nothing a couple of stickers can't fix, though.

https://github.com/mvp/uhubctl

ilyt

Get USB hub with buttons ? I-tec makes one, there is even 16 port version

rickdeckard

No need to guess. First sentence on the page: "Have you ever wanted to control USB devices using an Arduino, ESP32, or Raspberry Pi? with the i2C USB Hub, you can!"

seba_dos1

But you can control USB devices using an Arduino, ESP32 or Raspberry Pi via USB just fine :P

gsich

Not all.

seba_dos1

All.

The available features vary though.

gsich

Not all. I have several that can't be controlled.

fodkodrasz

I think an USB controllable USB hub might be more handy.

riedel

There are already off the shelf hubs that support power control: https://github.com/mvp/uhubctl

dividedbyzero

I tried to get one (USB3, 4ports, not too pricey) earlier this year, but all the qualifying ones on the list there were either discontinued or had been updated and weren't individually switchable anymore. It's a pity because this would be so handy.

hglee

I used Acroname USB hub: https://acroname.com/store/programmable-industrial-hub-s79-u...

It was very expensive but works reliable. You can use API to control it.

puzzlingcaptcha

You'd only need to use something like a MCP2221a breakout [1] with the linked project.

Although it would be more convenient to integrate it directly on board.

https://www.adafruit.com/product/4471

undefined

[deleted]
Daily Digest email

Get the top HN stories in your inbox every day.