I have found this set of functions to be all that is required for the majorit of logging programs and digital modes such as the WSJTX suite and FLDIGI.
## Supported software ##
So far we have tested support for the following CAT capable software:
* Hamlib
* Fldigi (using Hamlib)
* WSJTX
* CatBKT
* Ham Radio Deluxe
If you use find this library does not work with any particular CAT enabled software please let me know via the "Issues" tab on Github.
## Tips for developers: ##
The library implements the IC-746 version of ICOM's CI-V protocol. I chose the IC-746 as the target as it is the first in the ICOM linde to implement all of what is needed to run digital modes easily and doesn't have too many extra features to code around.
The CI-V protocol is reasonably well documented but I have made some some assumptions about appropriate responses. I referred to the IC-7600 CIV referece manual which has much additional detail. I did not have an IC-746 available for comparison, but I tested with the Hamlib rigctl program and all functions work without error. I also have tested with WSJTX, FLDIGI and Ham Radio Deluxe. I found the program CatBkt to be especially helpful as it exposes many controls that are not used in other programs.
The library is coded to give reasonable responsed to 100% of the IC-746 cat protocol commands whether or not the feature is actually implemented.
## Inspiration ##
This library has was inspired by the work of Pavel Milanes, C07WT on his Yaes FT-857D library
## Installation ##
Copy the IC746CAT folder to the Arduino libraries folder.
## Usage ##
The libary uses the the hardware serial port "Serial" to communcate with the CAT controller softaware. The default paramters are baud 19200, N81, the same as the IC-746.
To use the library you must code a few custom call back functions and register them with the library. Your callbacks will require specific parameters and return values based on the particular command. Your functions will be called by the CAT libary upon receipt of the relevant CAT commands. Your functions need to take whatever actions are necessary to implement the command and where requested, return the appropriate value to the library for transmission back to the CAT controller.
A word on the example sketch. It is configured to write debug output to a ILI9341 TFT using the Adafruit libraries, because that is what I had on the bench. It should be straightforward to modify it to use SoftwareSerial or other output device of your choice. There is also debug code in the library itself to send all received CAT command to a SoftwareSerial port.