62void obdSendPacket(
int mode,
int PID,
int numBytes, uint32_t iValue,
size_t busIndex) {
69 resp[0] = (uint8_t)(2 + numBytes);
71 resp[1] = (uint8_t)(0x40 + mode);
72 resp[2] = (uint8_t)PID;
74 for (
int i = 8 * (numBytes - 1), j = 3; i >= 0; i -= 8, j++) {
75 resp[j] = (uint8_t)((iValue >> i) & 0xff);
95 for (
int i = 0; i < 32 && supportedPids[i] > 0; i++)
96 value |= 1 << (31 + bitOffset - supportedPids[i]);
98#ifdef MOCK_SUPPORTED_PIDS
100 value = MOCK_SUPPORTED_PIDS;
107 int pid = rx.
data8[2];
109 case PID_SUPPORTED_PIDS_REQUEST_01_20:
112 case PID_SUPPORTED_PIDS_REQUEST_21_40:
115 case PID_SUPPORTED_PIDS_REQUEST_41_60:
118 case PID_MONITOR_STATUS:
121 case PID_FUEL_SYSTEM_STATUS:
125 case PID_ENGINE_LOAD:
128 case PID_COOLANT_TEMP:
146 case PID_TIMING_ADVANCE: {
148 timing = (timing > 360.0f) ? (timing - 720.0f) : timing;
149 obdSendValue(_1_MODE, pid, 1, (timing + 64.0f) * 2.0f, busIndex);
152 case PID_INTAKE_TEMP:
161 case PID_FUEL_AIR_RATIO_1: {
164 uint16_t scaled = lambda * 32768;
168 }
case PID_FUEL_RATE: {
170#ifdef MODULE_ODOMETER
173 float gPerSecond = 0;
176 float gPerHour = gPerSecond * 3600;
177 float literPerHour = gPerHour * 0.00139f;
178 obdSendValue(_1_MODE, pid, 2, literPerHour * 20.0f, busIndex);
180 }
case PID_CONTROL_UNIT_VOLTAGE: {
183 }
case PID_ETHANOL: {
186 }
case PID_OIL_TEMPERATURE: {