This note translates the reviewed TC66 manuals and the current app code into an implementation-oriented working reference.
This note is about TC66C, not TC66.
Reason:
TC66 is USB-onlyTC66C-onlyTC66C BLE pathPrimary sources used for this note:
Documentation/Research Resources/Specifications/TC66 Manuals Working Summary.mdDocumentation/Research Resources/Specifications/PW0316 BLE Module Working Summary.mdUSB Meter/Model/Meter.swiftUSB Meter/Model/BluetoothRadio.swiftUSB Meter/Model/BluetoothSerial.swiftThe current app already treats TC66C as a different protocol family than UM25C / UM34C.
Confirmed from code:
TC66C caseTC66C is mapped to radio type PW0316TC66C and PW0316 are both recognized as TC66CFFE0 and FFE5 for this radio familyThe current code assumes the following BLE transport for TC66C:
FFE0, characteristic FFE4FFE5, characteristic FFE9This differs from the UM family path already documented elsewhere:
UM25C / UM34C use FFE0 / FFE1TC66C uses a separate PW0316-style path in the current appThe newly imported PW0316 vendor manual explicitly validates this mapping:
FFE5 / FFE9 is the BLE-to-UART write channelFFE0 / FFE4 is the UART-to-BLE notification channelFFC0 / FFC1 / FFC2 exists as an optional anti-hijack password channelThe current app polls TC66C using ASCII commands.
Confirmed command surface already used by the app:
bgetva\r\nbnextp\r\nblastp\r\nbrotat\r\nExpected snapshot response size in current code:
192 bytesImportant implication:
TC66CWhat the PW0316 module manual adds here:
20-byte BLE payloads200 bytes and are automatically split by the moduleWorking interpretation:
192-byte encrypted snapshot is application-layer behavior above the module transport192-byte frame itselfThe current parser decrypts the 192-byte response with AES ECB.
Observed implementation details:
32-byte AES key64-byte packetspac1, pac2, and pac3Each packet is validated as:
pac1, pac2, or pac30...59 are CRC-covered0xFFFF60If any of the three packets fail validation, the app rejects the snapshot as invalid.
The offsets below are offsets inside the decrypted packet blocks, not offsets into the encrypted 192-byte BLE frame.
pac14, size 4: candidate model name as ASCII8, size 4: candidate firmware version as ASCII12, size 4: candidate serial number, little-endian UInt3244, size 4: candidate boot count, little-endian UInt3248, size 4: voltage, raw / 1000052, size 4: current, raw / 10000056, size 4: power, raw / 10000Confidence:
pac24, size 4: load resistance, raw / 108, size 4: data group 0 accumulated charge, raw / 100016, size 4: data group 1 accumulated charge, raw / 100048, size 4: data group 0 accumulated energy, raw / 100056, size 4: data group 1 accumulated energy, raw / 100024, size 4: temperature sign flag, 1 means negative in current parser28, size 4: temperature magnitude32, size 4: D+ voltage, raw / 10036, size 4: D- voltage, raw / 100Confidence:
D+, and D- are high-confidence in the sense that the app displays them0 and 1pac3pac3This is a major open area for further reverse engineering.
The manuals describe many on-device capabilities:
The current app only implements these direct TC66C controls:
Not implemented in the current app for TC66C:
The code explicitly guards these setters off for TC66C.
The manuals discuss data groups, but the current parser only populates two groups for TC66C.
Working interpretation:
TC66C exposes only two remotely readable groups in the current snapshot layoutThis needs verification from captures or app analysis.
The manuals are clear that:
TC66 is not a Bluetooth targetTC66C uses BLE for mobile appsThis matches the current app architecture and strengthens confidence that TC66C should remain a separate transport family in the codebase.
TC66CThe current implementation implicitly models at least these state domains:
D+D-TC66C separate from UM-family decodingThe code already reflects this split and the manuals support it.
pac3 as the highest-value unknownWe already have enough for a basic live meter UI from pac1 and pac2.
What is still likely hidden:
The app's TC66C parser only maps two groups, while the manuals talk more generally about groups and offline storage.
Until verified, avoid hard-coding a stronger assumption than:
TC66C snapshots currently expose at least two group-like accumulators in our parserThe manuals are strong for:
PD / CC pull-down behaviorThe manuals are not enough for:
FFE0/FFE4 notify and FFE5/FFE9 write behavior against real TC66C hardware192-byte encrypted snapshotspac3pac1 from code comments to confirmed fieldsThe next helpful artifacts for the repository would be:
TC66C sample-capture note in Payload Notespac1, pac2, and pac3TC66C features in the UI