I have built a prototype device using an Arduino Nano Every which communicates (using CI-V commands) with Icom radios, to augment control of them. Currently I use the default addresses of the “target Radio” (set to 0x94 - 0x97 via jumpers on the custom PCB) to tweak the commands it sends, but it would be useful if the radio’s model could be determined to allow my device to tailor the range of some of the functions it provides e.g. there are 8 Mode options on an IC 7300, but 20 on an R8600. I have not (yet) found a command which yields the Model type. An alternative method could be to use the small differences in the command sets, and probe those, but that may not be unique to each Model. Any suggestions are welcome. Here is my prototype device https://youtu.be/-kn3Pd1ENI8.
AFAIK, there is no command to retrieve meta-information about the transceiver.
Probably the most useful information necessary to ID the model is the address.
The default address of Icom models is unique to that model. The assumption is that you already know the model you are sending commands to, because you are sending it to a specific address. (This ignores the convenience of some commands supporting $00.)
There are lists of addresses and models out there, but I don't know if there is a canonical location on the internet. "CI-V Bus Addressing" as search terms will get you close.
I suppose you'll have to have this map in your software, with the ability to modify it as models are released, or as people change the address manually (for example, because they have two identical models they want on the same bus at the same time).
Or, perhaps you can send a simple command to $00 and see who responds, and use that to learn what the models are on the bus based on the from address, defaulting to some generic behaviour and perhaps notifying the user (or a log) that there is an unknown model on the bus.
Depending on how constrained you are for interfacing, a map of models and addresses with a single exception rule to allow for a one identical model on the bus might suffice? For example, you know that \$94 is probably a 7300, and thus \$95 would also be a 7300 because the next model Icom released (IC-R8600) is guaranteed to be $96 (because they always release even valued addresses).
This does not allow for address customization, but if your map has to be fixed this trick might get you 80% there.
ICOM uses "other" CI-V commands to interrogate the radio. If you have any of the radios which use their "Cloning Software" you will notice that there is an "Information" button. This typically will display the serial number of the radio. Some radios give more information. Some such as the current IC-9700 give nothing at all (which may be firmware dependent).
The only way to get this CI-V information is by serial sniffing. What I have found with 5 of the current D-Star radios is that they each have a different "model number" of 4 digits followed by 8 digits of serial number, thus a 12 digit number. There is a special CI-V command based on that 4 digit "model number" to prompt the radio to send back the full serial number.
For example, the ID-5100A sends:
And the ID-4100A sends:
to reply with the full serial number which reads (for ID-5100A):
3484nnnnnnnn, where "nnnnnnnn" is the serial number of the radio.