I’ve just some time with the manual...
“Vague” is being generous!
I did find this page, which was helpful:
https://priuschat.com/threads/scanguage-xgauge-how-to-area-please-share-your-knowledge.43139/
After reading it I think I can explain the desired values for you?
We’re using Key Word Protocol, or KWP, so the first three bytes are the header.
In your example C2, 33, F1 are the format, the target address, and the sender address.
The leading C indicates a “functional” address,
(a leading 8 would indicate a “absolute” address)
The 2 indicates that the message data has two bytes: the “01 28”
33 is the functional address of the engine module;
F1 is the absolute address of the scanguage.
The first data byte “01” is the “Service Identifier”, or Mode.
28 is the Parameter Identifier or PID.
The SAE live data values all use Service 01, so documentation usually just discusses the PID value and doesn’t explain why you (or the scanner) needs to prefix it with a 01 byte.
But to request the oil level you need to use Service 21, PID 08.
So the TXD command you want to be sending will be either
TXD C233F12108 (functional) or
TXD 8212F12108 (absolute - with engine module address $12)
RXF is the filter string.
Each four digit group is a byte to match in the ressponse.
For a successful reply the server adds $40 to the Service ID and echoes the PID.
$21 + $40 = $61, so we expect to see something like 84 F1 12 61 08 0C 32 (but with more data) and we can match the 61 08 in bytes 4 & 5 in the response message:
RXF 046105080000
RXD is the BIT offset and numbr of bits to read.
The first byte has an offset of zero, the second skips 8 bits, the third 16 ($10), etc.
We want bytes 32 & 33 of the message, so we skip past 31 x 8 = 248 bits, or $F8 - just under the max value of $FF - and read 16 bits, or $10, so we have:
RXD F810
The MTH value converts the returned value into the computed value.
The gauge multiplies by the first value (4 hex digits), divides by the second (4 hex digits), then adds the third “offset” value (4 hex digits) So MTH 00030002000A would be (Value x 3 / 2 + 10)
The last value is “signed”, with 0001 = +1, and FFFF = -1, FFFE = -2, etc.
For temps, where we would need an offset of -40 ‘C, we would add FFD8
We just want to divide by ten for millimeters, so would use (V x 1 / 10 + 0), which is:
MTH 0001000A0000 (So you did get one right...)
(personally, I would then pull my dipstick, measure the oil’s level above MIN, and adjust the formula’s offset value (last four zeros) so that the gauge displays mm above dipstick MIN)
Good luck! I hope I’m close to being right about these settings...
-dave