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!