More info:
I used Wireshark to do a raw capture USB. I am NOT a USB expert, but here's what I saw in 3 different tests:
#1:
I first examined a successful CHIRP session w/ a Wouxun radio.
After the initial GET DESCRIPTOR for the device and about 10 URB_CONTROL packets, I saw lots of URB_BULK packets exchanging the data with the radio.
#2
I then tried it with PuTTY connected to the FT-8900.
As soon as I started the capture, I saw the GET DESCRIPTOR request/response.
When I pressed the button on the radio to send the data, I then saw 16 "URB_BULK in" packets, the 1st one being from the radio to the PC, the 2nd being the other direction, etc. Each of the 8 packets from the radio contained one of 8 chars of the "AH008$.$" string.
#3
I then monitored a session w/ CHIRP and the FT-8900.
Note: I'm going to prefix some of my comments w/ WireShark packet numbers, just so I can keep track of where I am in the dump and go back and reference it later if needed.
The serial port was USB device #12. lsusb shows these endpoints defined for the device: EP 1 IN EP 2 OUT EP 3 IN
1) As soon as I started the capture, I saw the GET DESCRIPTOR request/response (to/from 12.0).
409) When I started CHIRP listening, I saw two "URB_CONTROL out" packets (PC-->radio & response) to/from 12.0.
417) When I pressed the button on the radio to send the data, I saw the same "URB_BULK in" packets as in #2. These 1st 16 packets were from/to 12.3 and contained the same "AH008$.$" string.
Each of these bulk packets seem to contain 64 bytes plus whatever the data payload is. The recipient always replies with a 64-bit packet w/ no data. I won't bother to mention these confirmation packets anymore.
433) I then saw a reply from the host ("URB_BULK out") to 12.2 containing a single data byte (0x06). 435) The radio (12.3) replied with a 0x06. 439) Then the same exchange happened again (host sent 0x06, radio replied).
443) Then the host sent a "URB_CONTROL out" tp 12/-
445) The radio (12.3) sent an empty (64 bytes, no data) "URB_BULK in" packet to the PC. 446) The radio sent another one -- without a confirmation packet from the PC. I'll take a wild guess that the previous packet killed CHIRP. 447) 12.1 sent a "URB_INTERRUPT in" packet.
That was the end of the session.