Hello!
I've been using CHIRP for a
while to program my QYT KT8900D, and recently I became interested in
adding support for my handheld radio, the AnyTone AT-D878UV PLUS (and,
by extent, the regular version of it). I set up a dev environment on
Ubuntu 20.04, used USBPcap to capture its packet data from a Read using
its official CPS from Windows, as the Add a Radio guide suggests, and
got that to Ubuntu to analyze with WireShark to start working on the
driver. I managed to figure out that it has a baud rate of 9600, and
which device it is from the .pcap file, also saw that it does a lot of
URB_BULK in and out requests, and also figured out there are actually 2 devices in address 1.2 (where my radio is), 1.2.1 and 1.2.3. The communication works like this, if my order is correct:
host to 1.2.1: URB_BULK in, packet data length is 0
host to 1.2.3: URB_BULK out, packet data length is 6
1.2.3 to host: URB_BULK out, packet data length is 0
1.2.1 to host: URB_BULK in, packet data length is 24
Repeat multiple times (my radio has a lot of entries on it. Is it recommended that I try with 1 entry on it, maybe, to get a shorter pcap file that also shows me how it's done per entry? Or doesn't it matter?)
But I also need some help. How can I figure out the
memory map? How do I see the actual data sent in the packet and not just its header? How do I check how the radio returns stuff like the version?
Also, what are these URB_BULK requests? Does it mean that it just dumps
its memory without some specific protocol? I really need help here, I'm
very new to this (Haven't worked on this for more than a couple hours,
actually, and this is my first time reverse engineering anything and
using WireShark or USBPcap, and I have a lot of questions). Thank you for your help!