Great job, you may have other case? (kwp2000 :: decodeBlockData?
Yes it would be a maximum of 255 pieces what is possible.
One can also apply them to TP2.0.
I miss the other case number.
Thanks
QVariant kwp2000::decodeBlockData(quint8 id, quint8 a, quint8 b, QString &units)
{
//qDebug() << "ID " << id << QString::number(id, 16) << " A " << a << " B " << b << flush;
unsigned int uint;
double dbl;
QString ret;
switch (id) {
case 0x01:
units = "rpm";
dbl = a*b/5.0;
return dbl;
case 0x04:
if (b > 127) {
units = QString::fromUtf8("\u00B0 ATDC");
}
else {
units = QString::fromUtf8("\u00B0 BTDC");
}
dbl = abs(b-127)*0.01*a;
return dbl;
case 0x07:
units = "km/h";
dbl = 0.01*a*b;
return dbl;
case 0x08:
units = "Binary";
uint = (a << 8 | b);
return uint;
case 0x10:
units = "Binary";
uint = (a << 8 | b);
return uint;
case 0x11:
units = "ASCII";
ret = QChar::fromAscii(a);
ret += QChar::fromAscii(b);
return ret;
case 0x12:
units = "mbar";
dbl = a*b/25.0;
return dbl;
case 0x14:
units = "%";
dbl = a*b/128.0-1;
return dbl;
case 0x15:
units = "V";
dbl = a*b/1000.0;
return dbl;
case 0x16:
units = "ms";
dbl = 0.001*a*b;
return dbl;
case 0x17:
units = "%";
dbl = b*a/256.0;
return dbl;
case 0x1A:
units = QString::fromUtf8("\u00B0 C");
dbl = b-a;
return dbl;
case 0x21:
units = "%";
if (a == 0)
dbl = 100.0*b;
else
dbl = 100.0*b/a;
return dbl;
case 0x22:
units = "kW";
dbl = (b-128)*0.01*a;
return dbl;
case 0x23:
units = "l/h";
dbl = a*b/100.0;
return dbl;
case 0x25:
units = "Binary";
uint = (a << 8 | b);
return uint;
case 0x27:
// fuel
units = "mg/stk";
dbl = a*b/256.0;
return dbl;
case 0x31:
// air
units = "mg/stk";
dbl = a*b/40.0;
return dbl;
case 0x33:
units = QString::fromUtf8("mg/stk \u0394");
dbl = ((b-128)/255.0)*a;
return dbl;
case 0x36:
units = "Count";
dbl = a*256+b;
return dbl;
case 0x37:
units = "s";
dbl = a*b/200.0;
return dbl;
case 0x51:
units = QString::fromUtf8("\u00B0 CF");
dbl = ((a*112000.0) + (b*436.0))/1000.0; // Torsion, check formula
return dbl;
case 0x5E:
units = "Nm";
dbl = a*(b/50.0-1); // Torque, check formula
return dbl;
default:
units = "Raw";
uint = (a << 8 | b);
return uint;