New Arduino CAT Control Library for Homebrew SSB transceiver #arduino #cat #homebrew

Dean Souleles

(Also posted to SoftwareControlledHamRadio group - sorry if a duplicate for some)

Hi all -

I got frustrated with the  inconsistent behavior of the Yaesu FT-8x7 CAT emulation library that many were using to add CAT control to homebrew SSB transceivers (including the uBitx).  It was particularly a problem with the most recent release of WSJTX that has still not been corrected.   So I decided to to move away from Yaesu emulation and implement the ICOM CI-V CAT protocol emulating an IC-746 transceiver.  I chose the CI-V protocol because, unlike the Yaesu protocol it implements a complete handshake between the CAT controller and the rig with a well defined communications protocol. 

I am pleased to make version 1 of the KK4DAS IC746 CAT Library available on Github - kk4das/IC746CAT

I have tested on a homebrew transceiver of my creation. I tested on an Arduino Nano and Arduino Nano Every although it should work with any MCU with a serial port. It works with WSJTX in all modes as well as the fldigi suite, Ham Radio Deluxe, the hamlib rigclt command line, and the CatBkt universal rig CAT control tool. It should work with any hamlib enabled software.

The following CAT functions are implemented:

  • PTT (SET ON/OFF) or GET PTT state
  • VFO A/B Selection
  • VFO Swap
  • VFO Set A=B
  • Split (On/Off)
  • Frequency GET/SET
  • Mode GET/SET (USB, LSB only)
  • S-meter level GET

All other functions are coded to give correct reasonable responses to other CAT commands.

The library methods are fully documented in the header file and a fully working example sketch is supplied.  The example sketch is not a complete radio controller, but it has enough functionality to test CAT control commands from any CAT software - I used it to test with all of the above before integrating in to my rig.

The library takes care of all the protocol handling and communication between your sketch and the CAT controller. Your sketch must provide callback functions to "do the work" of controlling your rig.  An example callback function you need to write is:

#include <IC746.h>
IC746 radio = IC746();

void catSetFreq(long freq) {
 // your code goes here to set your rig freq

You register your callback with the library in  your setup() function like this...


and then in your loop you call:

Whenever a CAT command is received your callback function(s) will get invoked.  As I said - it works well with WSJTX, fldigi, Ham Radio Deluxe and anything else I have tried it with.   But then I am only an army of 1! 

I haven't looked at porting to any of the uBitx sketches but I wouldn't think it would be too difficult.

If you download it please let me know.  And if you try it out and find any bugs, please really let me know.

73 and cheers all,


Join to automatically receive all group messages.