i don't think you could log data fast enough with anywhere near a full stream to get reliable cylinder-by-cylinder results(at 2000 RPM, if you're running a single O2 sensor and having all cylinders passing exhaust to it, that's (((2000/2)X6)/60)=100 exhaust pulses per second).... you can get a solid 700 bytes in/out of the PCM per second including overhead, but you would need a pretty short stream(perhaps with less a comm scheme with less overhead) to get raw AFR values and a cylinder identifier for each value.

alternatively.... you could have the PCM do a lot of math on its side of the fence and have a rolling average of the AFR seen for each cylinder. then send the AFR for each cylinder as a separate byte in a stream. seems like it would take considerable amounts of RAM to have a decent average... 6 cylinders, 10 sample history and a final, averaged value to send to the laptop is 66 bytes.... I don't know how far the stack will run down on the E-side(I don't know if I've ever monitored it), but it has from 369-5FF to work with in a factory calibration.... there is probably more than a sufficient amount to go about this kind of scheme. the problem I forsee is trying to correctly separate the exhaust pulses in the O2 sensor logic. I don't remember if that is run at a 80 or 160Hz rate, but 80 would allow for 4,800 samples to be taken in a minute... divided between 6 cylinders, that's only 800RPM before pulses get mixed/missed. 160 only brings it up to 1600. 160 and only monitoring half of the cylinders brings it up to 3200RPM.

for the weight of your truck... I think I would start with a L/N calibration rather than a W. after all of the rework you're going to end up with doing in the calibration, it probably won't matter that much though.