/* * canbus_obd.h * OBD-II (ISO 15031) PID decoder over ISO-TP. */ #pragma once #include #include #include #ifdef __cplusplus extern "C" { #endif /* Standard OBD-II CAN IDs */ #define OBD_REQUEST_ID 0x7DF /* Broadcast functional request */ #define OBD_RESPONSE_MIN 0x7E8 #define OBD_RESPONSE_MAX 0x7EF /* Decoded PID result */ typedef struct { uint8_t pid; float value; const char *unit; /* "rpm", "km/h", "C", etc. */ const char *name; /* "Engine RPM", "Vehicle Speed", etc. */ } obd_result_t; /* Query a single PID (Mode 01). Returns 0 on success, -1 on error. */ int obd_query_pid(uint8_t mode, uint8_t pid, obd_result_t *out); /* Query supported PIDs (Mode 01, PID 00/20/40/60). Returns count. */ int obd_query_supported(uint8_t pids_out[], int max_pids); /* Read Vehicle Identification Number (Mode 09, PID 02). Returns 0 or -1. */ int obd_read_vin(char *vin_out, size_t cap); /* Read Diagnostic Trouble Codes (Mode 03). Returns formatted string length. */ int obd_read_dtcs(char *dtc_buf, size_t cap); /* Continuous monitoring: stream PIDs to C2 at interval */ void obd_monitor_start(const uint8_t *pids, int pid_count, int interval_ms, const char *request_id); void obd_monitor_stop(void); bool obd_monitor_is_running(void); #ifdef __cplusplus } #endif