So I was browsing through the code when I noticed a DebugActivity. Trying to figure out where it's used, I discovered if you go to the About screen (in the drawer on the main screen) and tap the QRing icon multiple times it will launch the DebugActivity, which lets you toggle debug mode. So far I don't know what it does Doesn't look like it does more than let you skip required updates? Anyway, trying to understand the sync process still. I think we want to read `syncTodaySportPlusDetail` Although I just noticed I didn't read the last thing properly and I'm missing some values `this.data = new byte[]{(byte) i, 15, (byte) i2, (byte) i3, 1};` `i` is the day, usually 0, and then `i2 = 0` and `i3 = 95` That means I want to send `b\x00\x0F\x00\x5F\x01`. Success! I got back 4 packets: ```python bytearray(b'C\xf0\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x007') bytearray(b'C#\x08\x07,\x00\x03\xfb\r\x1d\x03\xee\x01\x00\x00\xbb') bytearray(b'C#\x08\x070\x01\x03\x93-\x1d\tJ\x06\x00\x00\xdf') bytearray(b'C#\x08\x074\x02\x03\x10\x03\xb0\x00l\x00\x00\x00\xdd') ``` Ok, now to decode this data. The android app does, where `bArr` is the input packet minus the first (the type) and the last (the checksum) byte. ```java public boolean acceptData(byte[] bArr) { byte b = bArr[0]; int i = this.index; if (i == 0 && (b & 255) == 255) { this.bleStepDetailses.clear(); return false; } if (i == 0 && (b & 255) == 240) { if (bArr[2] == 1) { this.calorieNewProtocol = true; } this.index = i + 1; this.bleStepDetailses.clear(); } else { BleStepDetails bleStepDetails = new BleStepDetails(); bleStepDetails.setYear(BLEDataFormatUtils.BCDToDecimal(bArr[0]) + 2000); bleStepDetails.setMonth(BLEDataFormatUtils.BCDToDecimal(bArr[1])); bleStepDetails.setDay(BLEDataFormatUtils.BCDToDecimal(bArr[2])); bleStepDetails.setTimeIndex(bArr[3]); int bytes2Int = BLEDataFormatUtils.bytes2Int(new byte[]{bArr[7], bArr[6]}); if (this.calorieNewProtocol) { bytes2Int *= 10; } bleStepDetails.setCalorie(bytes2Int); bleStepDetails.setWalkSteps(BLEDataFormatUtils.bytes2Int(new byte[]{bArr[9], bArr[8]})); bleStepDetails.setDistance(BLEDataFormatUtils.bytes2Int(new byte[]{bArr[11], bArr[10]})); this.bleStepDetailses.add(bleStepDetails); this.index++; if (bArr[4] == bArr[5] - 1) { return false; } } return true; } ``` It looks like this method might actually be called with multiple packets to build up the data? We'll see