void OBD2Task(void *pvParameters) { pr_info("Start OBD2 task\r\n"); size_t max_obd2_samplerate = msToTicks((TICK_RATE_HZ / MAX_OBD2_SAMPLE_RATE)); LoggerConfig *config = getWorkingLoggerConfig(); OBD2Config *oc = &config->OBD2Configs; while(1) { while(oc->enabled && oc->enabledPids > 0) { for (size_t i = 0; i < oc->enabledPids; i++) { PidConfig *pidCfg = &oc->pids[i]; int value; unsigned char pid = pidCfg->pid; if (OBD2_request_PID(pid, &value, OBD2_PID_DEFAULT_TIMEOUT_MS)) { OBD2_set_current_PID_value(i, value); if (TRACE_LEVEL) { pr_trace("read OBD2 PID "); pr_trace_int(pid); pr_trace("=") pr_trace_int(value); pr_trace("\r\n"); } } else { pr_warning_int_msg("OBD2: PID read fail: ", pid); } delayTicks(max_obd2_samplerate); } } delayMs(OBD2_FEATURE_DISABLED_DELAY_MS); } }
int Lua_ReadOBD2(lua_State *L) { if (lua_gettop(L) >= 1) { unsigned char pid = (unsigned char)lua_tointeger(L, 1); int value; if (OBD2_request_PID(pid, &value, OBD2_PID_DEFAULT_TIMEOUT_MS)) { lua_pushnumber(L, value); return 1; } } return 0; }