I recently had to debug some BLE hardware that I didn't design, and didn't have much/any documentation for. The command line utilities that are included with bluez on Linux (bluetoothctl, gatttool, etc.) make for a surprisingly decent reverse engineering platform, once you figure out how to use them.<p>Tab completion in bluetoothctl is a little wonky, but it lets you very quickly scan, connect, list services and characteristics, select the one(s) you're interested in, request descriptions (if available), directly send/receive bytes, and enable/disable notifications.<p>Once you figure out what data you want or which characteristics you need to poke to get your gadget to do its thing, you can use something like pygatt to build a more purpose-built client application for whatever it is you're trying to interface with.