The app for AT2 GitHub - byf3332/Baofeng-ALERVITES-AT2-Android: Open-source Android app for the Baofeng ALERVITES AT2 radioFor Baofeng GMSK, now its vocoder is known: AMR-NB MR475. I was able to identify it by analyzing the ALERVITES AT2, which is unusual among these Baofeng GMSK radios because it has official phone app (named Ola Radio) support, and after analyzing its behavior I found it can exchange digital voice data with a phone over BLE.
The voice path is roughly: Radio->BLE vocoder frames->official app->built-in libtalkie.so codec->PCM audio, and also vice versa. This made it possible to directly observe the vocoder payload format and analyze the codec library independently of the RF layer.
After analyzing the heavily obfucsated android codec library structure and tables, I found that they match AMR-NB MR475. After testing, the original vocoder payloads from OlaRadio can be decoded correctly with OpenCORE AMR-NB, and OpenCORE-generated MR475 frames can also be sent to the AT2 and are correctly decoded by it. The voice frames are 12 bytes every 20 ms, with 95 useful bits per frame. In the OpenCORE/IETF storage format, an MR475 frame is 13 bytes: a 1-byte ToC/frame header (0x04 for an MR475 good speech frame), followed by a 12-byte payload containing the 95 codec bits plus one padding bit. The AT2 BLE format simply omits the first header byte and transmits the remaining 12 bytes unchanged. Converting an AT2 frame back to the IETF format is therefore just a matter of prepending 0x04.
Because the AT2 allows controlled vocoder payloads, as well as UTF-8 text and JPG images to be sent over BLE, it should also be possible to generate RF IQ recordings together with the exact corresponding AMR payloads or just by repeatedly transmitting a known fixed text payload. This may be useful for further work on frame synchronization, interleaving, and FEC.
I have also made (well, vibe coded) a working replacement for the Ola Radio app that implements the complete AT2 BLE protocol and replaces the proprietary libtalkie.so codec with this open-source AMR-NB MR475 implementation (GitHub - BelledonneCommunications/opencore-amr: Linphone.org mirror for opencore-amr (git://git.code.sf.net/p/opencore-amr/code)). The replacement codec has been tested successfully with real AT2 hardware. I am preparing to publish the source soon.
This obviously does not solve the RF framing and FEC yet, but at least the vocoder part is now identified, and hopefully this will make future work easier.
There is also technical information in README
