Skip to content

HaliKey Status: 2025 Q4

Update: 2026-01-14

This post talks about the state in November and December of 2025. As of January 2026, (almost) all the issues discussed below are resolved.

HaliKey MIDI is for sale, and NetKeyer is released (though as of 2026-01-14, still waiting on Flex to get SmartLink working.)

Original Post:

HaliKey has been one of my best selling products over the last few years. It’s simplicity and small size, doing one thing and doing it well, has made it a favorite for remote operators. Flex even gave them out with purchases of Pre-Loved Flex radios for a while. But they’ve been on back-order for several months now. What gives?

tldr:

The new version, HaliKey MIDI, will be available again soon is available now, with more features than before:

  • Still works as a PTT and Morse Key interface for all ham-radio-apps.com tools: SmartSDR (Flex), SDR-Control (Icom), FT-Control (Yaesu), TS-Control (Kenwood), and K4-Control (Elecraft) on MacOS.
  • Works with NetKeyer (available soon), a software based PTT and full Iambic Keyer on Windows.
  • Now works with SmartSDR for iPhone and iPad, and web based tools like Remote Ham Radio.

This post explains why it’s taken me so long.

What is HaliKey?

HaliKey lets you connect a PTT and/or CW morse paddles to a computer running SmartSDR connected to a remote radio, like a Flex. This lets you use your favorite physical PTT and paddles, while operating your radio remotely. (I don’t know about your laptop, but mine doesn’t have a Morse Key input socket on it.)

How does it work?

To do this, HaliKey is “just” and FTDI USB to serial chip and a 3.5mm TRS socket, with Tip wired to CTS and Ring wired to DSR and DCD. This lets it work as a PTT in SmartSDR for Windows, and a PTT and CW paddle interface for SmartSDR for MacOS (and the other apps from Marcus), since both of those can use serial port flow control signals to trigger key-down events.

That’s cool, can I use it with SmartSDR on my phone?

iOS (and iPadOS) don’t provide an API to access the flow control signals on a serial port, so SmartSDR for iOS can’t use HaliKey. Similarly, any web application such as Remote Ham Radio can’t use HaliKey either. And I’m not aware of any Flex software for Android.

That’s a bummer, is there a way around this?

MIDI (Musical Instrument Digital Interface) however IS available on both iOS and web applications. And also Windows and MacOS. SmartSDR for MacOS and iOS, and Remote Ham Radio, already know how to trigger PTT and CW events using MIDI. The CTR2-MIDI device from Lynovations also uses MIDI.

The FTDI serial chip used in HaliKey can ONLY do serial, not MIDI. So for the next version of HaliKey, I’ve replaced the FTDI chip with a microcontroller, an RP2040, and wrote my own firmware to generate both serial flow control signals, like the FTDI chip, and also MIDI events to support all the new platforms as well! I had this tested and working earlier this year (2025).

I call it HaliKey MIDI.

That’s cool, so HaliKey MIDI is for sale now?

Almost. This is where the story gets a little WTF?-y.

For starters, the TinyUSB library that implements USB in microcontrollers, does not implement sending flow control signals from the device (HaliKey) to the host (the computer.) So I implemented it and submitted my improvements back to the community. Cool. Update 2026-01-14: They did not accept my pull request, but have implemented this feature in another way. So I no longer have to maintain my own branch! 🙂

BUT! Turns out, the USB spec’s standard protocol for serial ports, called CDC-ACM, does not include all the flow control signals in RS-232. Notably, it does not include CTS, Clear To Send. It’s just missing from the standard entirely. I did confirm that my code correctly generates all the other flow control signals: DSR, DCD, and RI. (The DTR and RTS host-to-device signals were already implemented. I only had to implement the device-to-host signals.)

Fun Fact! This is why you need to install drivers on your OS to get your FTDI, or PL2102, or CH341 based USB to Serial devices to work. They don’t use the USB standard protocols. They implement their own proprietary USB protocol so they can retain full “serial port” functionality that doesn’t exist in the USB spec. For Linux users, this is the difference between /dev/ttyACM0 (a device using the USB CDC ACM spec), and /dev/ttyUSB0 (a device using an FTDI or similar chip with their own driver.)

Guess which flow control signal SmartSDR for Windows uses to trigger PTT? Yep! CTS! It is PHYSICALLY IMPOSSIBLE for HaliKey MIDI to trigger a PTT in SmartSDR for Windows. In works in every other use case: PTT and Morse in SmartSDR for MacOS and iOS, and Remote Ham Radio. But not the one primary use case: PTT on Windows.

Update 2026-01-14: Turns out, I was incorrect about this. SmartSDR for Windows CAN use DSR to trigger PTT. You do this by enabling the DTR option in the CAT program. I’m not sure why they call the buttons “RTS” to enable CTS, and “DTR” to enable DSR; those are literally the opposite signals. But anyway, I incorrectly blamed Flex for what was actually a problem in Windows!

The CDC serial driver that comes with Windows doesn’t implement flow control signals…

WhaAaAat?!

I know, right? My RP2040 sends them, but the application code on Windows never sees them. They work on Linux and MacOS, but Windows is all “Nah. Do flow control at the USB layer, we don’t need these old RS232 signals.”

There is literally no way forme to make HaliKey MIDI work with SmartSDR for Windows as currently written. Flex would need to switch over to MIDI, which is a much bigger change than they have the resources to do right now.

This is what’s been holding up the release of HaliKey v2. And I’ve been loath to order more v1 boards when I know I’m about to release a much more functional HaliKey MIDI.

Have you tried any other solutions?

Several. Seriously Nerdy Explanation follows: The most promising is this patch to emulate a CH341 chip in TinyUSB. However, the Arduino TinyUSB library requires a CDC driver for the Serial console device, and the CH341 OS drivers require a very specific USB Device Descriptor, with the CH341 in the spot where the CDC device goes. In short, they are mutually exclusive, and the Arduino TinyUSB library requires CDC therefore excludes the CH341.

I tried to use the non-Arduino version of the TinyUSB library, but the Arduino version is built-in to the RP2040 PlatformIO build platform, and two different copies of TinyUSB don’t play nicely with each other.

I spent several days hacking at low level USB driver code trying to make this work and couldn’t.

What about something other than SmartSDR?

To quote Ringo Starr Billy Shears, I’ll get by with a little help from my friends. Andrew Rodland is working on an application (2026-01-14: Now released!) to run beside SmartSDR for Windows, that talks MIDI to HaliKey, and will trigger PTT on your Flex. He also implemented a software keyer, so you can use HaliKey for morse code in Windows, which wasn’t available before! This bridges the gap left behind by the combined deficiencies of: TinyUSB library, USB CDC ACM spec, Windows drivers, and Flex Radio’s lack of spare time.

It’s tentatively called NetKeyer. It’s a simple app, open source, and cross platform on Windows, MacOS, and Linux. It talks to HaliKey (any serial or MIDI device) on one side, and talks over the network to a Flex Radio on the other. It triggers PTT in voice modes, and is an Iambic Keyer in CW mode. It’ll also work for straight keys. It generates side-tone locally for very low latency.

In short, NetKeyer does everything we want in Windows.

Great! Where can I download it?

Not so fast, it’s still in development. ACTIVE development, but it’s not ready for publication yet. I’ve been testing it and it works great! Like all “in active development” projects, it still has a few rough edges to sand down, and some of the features I mention haven’t been implemented yet. But the basic functionality is there, enough to prove that it will work.

Update 2026-01-14: NetKeyer is now available for download! https://netkeyer.radio/

I don’t use Windows, can I get a HaliKey MIDI now?

Yes! Well, very soon. I have been holding off until I had an answer to the SmartSDR on Windows question, and I think I have that now. Expect https://electronics.halibut.com/halikey/ to get updated soon. HaliKey is selling and shipping now, as of 2026-01-14.

Until then, thank you for reading. Please let me know if you have any questions about any of this.

Cheers, 73 de N6MTS
-Mark

3 thoughts on “HaliKey Status: 2025 Q4”

  1. Thanks for the details! Feel free to put my halikey midi order into the “I don’t use windows” bucket. 😂 I’m team SDR Control. Marcus does an amazing job!

  2. Does this mean that for those of us, (maybe just me? I don’t know.), that have built Halikey based apps using CTS on windows with the old version that CTS-based control with the new version will not be available? If so, is there a stockpile of old version Halikey’s available anywhere? 🙂 Actually, I’m pretty sure if any of the signals are still available my apps will be fine since I’m only using one incoming signal at the moment, but I’d still like to understand.

    1. Unfortunately, that is correct. HaliKey MIDI is unable to trigger CTS on any computer, and is unable to trigger DSR, DCD, or RI on Windows. It can still trigger DSR, DCD, and RI on Linux and MacOS. Which input (left or right paddle) triggers which signal(s) is not set in stone; if you have an opinion, speak up. 🙂

      And, no, unfortunately, I don’t have any v1 HaliKeys anywhere. That’s the root problem here: I don’t want to have any more made because MIDI is basically ready to go, but for NetKeyer.

Leave a Reply

Your email address will not be published. Required fields are marked *