I'm trying to wrap my head around the heart rate packets, as they are a multi packet payload that needs stateful parsing. First of all, the first byte of every packet is `0x15` which is the "type" of this packet. The second byte indicates the "sub type". Although looking again I think this might be a counter/index that starts at 0 and counts up. The first packet includes a few length fields, but is mostly empty otherwise. The third byte is the "size" of this payload, aka the total number of packets and it includes itself. The fourth byte is the "range". I don't know what this means yet. It defaults to 5 and the packet includes a 5 as well. In the android app, it allocates `size * 13` bytes to store heart rates. This is always going to be more than enough room for the heart rate data. I was confused last night trying to figure out how the java code worked with an array that was too short but this makes sense now. The second packet contains a timestamp. I don't quite know what this timestamp represents though. It's bytes 3 to 7 that make up the LSB (signed) integer. The 9 remaining bytes (after the type, counter and CRC) are the first 9 heart rate values. For all other packets, the 13 bytes are heart rate readings. One question I do have is how it indicates how many heart rates are valid. Or maybe it always returns a fixed number of them?