[...] Simplicity Studio, the IDE, is Eclipse-based and completely free. It runs well on Windows, macOS, and Linux. Includes a full, free license to Keil C51 (the 8051 C compiler).
The GUI code generator tool built-in (called Simplicity Configurator) has support for all the peripherals, as well as the USB stack, so it's completely seamless. Really nice property-pane configuration of all the endpoints and descriptors that makes the whole thing a breeze. Silicon Labs also has a USBXpress library that basically gives you a "black box" solution for exchanging byte arrays with a computer --- they provide the library on the part, the USB driver, and a DLL you can call into. It's super easy to use, but obviously has some limitations inherent to its design.
Does this stack work under macOS or Linux?
If you're asking about the USB firmware stack, yes you can develop EFM8 firmware inside of Linux (using Simplicity Studio, which is cross-platform)
If you're asking if the "USBXpress" package — which is a do-everything-for-you-black-box — works in Linux, the answer is "yes, if you know what you're doing." The main thing that USBXpress does is provide a frictionless Windows development experience; developers get a DLL file they can easily call into from C++ or .NET, and all the drivers are handled for them (that's the big issue on Windows, until Microsoft came up with WinUSB). In Linux, a properly-permissioned user can open any arbitrary device with libusb, and start exchanging data with it. Since USBXpress is just a single bulk I/O endpoint set, with no data encoding, you should be able to easily use it. But it's not much harder to just use full USB stack, too, and that gives you flexibility to develop for an HID device, or have multiple endpoints, etc.
It sounds like you might be new to USB. You should learn about device classes and types of endpoints before you dig into the weeds too much. Keep in mind that you're going to have to do some host-side software development (Windows, Linux, macOS... whatever your computers are connected to your KVM) — a lot of embedded devs don't necessarily realize that when they get started.
For your PWM LED gadget, you'll probably do either an HID device, or a vendor device (class code 0xFF) with a bulk-I/O endpoint.
HIDAPI is one such library that provides a cross-platform API you can use to talk to an HID device; if you do a vendor-class device, you'll probably be using WinUSB on Windows, and direct LibUSB calls on Linux.
There are important technical differences between HID (which is limited to a single, 64-byte interrupt endpoint that's polled once every millisecond) and bulk devices (which can spit out a lot more data), but for your application, either will work.
Shameless plug: I'm currently getting ready to launch an open-source project, called Treehopper (
https://treehopper.io), that would basically be a plug-and-play solution to your problem. It's essentially a "black box" development board with analog, digital I/O, PWM, UART, SPI, and I2C interfaces, and you can talk to it from Windows, Linux, and macOS using .NET (C#), Java, or C++. The firmware running on the boards essentially listens to commands from the computer to toggle pins, collect ADC readings, send/receive bytes through the comms interfaces, or change PWM duty cycles. In this way, you can build software on your computer that can interact with physical hardware, and you won't need to do any embedded programming at all.
If you used Treehopper for your project, you'd essentially write a computer program that did this:
var board = await ConnectionService.Instance.GetFirstDeviceAsync(); // get the first board out there
await board.ConnectAsync();
board.Pwm1.Enabled = true; // start PWM1 output
board.Pwm1.DutyCycle = 0.7; // turn the LED to 70%
While they're still a month or two away from being available on Amazon, I have a few prototypes kicking around that I'd be more than willing to ship to you if you're interested in beta-testing them. Just send me a PM with your address and I'll get something in the mail to you!
Treehopper is great for software-oriented people new to hardware development, or for engineers or hobbyists who want to get stuff working quickly. However, it completely hides all the USB implementation details, so if you're interested in learning this stuff, I'd stick to bare-metal development on the Silicon Labs EFM8UB1 line of MCUs.