Zwraca bieżące wartości parametrów protokołu dla wskazanego kanału. Parametry mogą być ustawione domyślnie lub zmienione wcześniej przez SET_CONFIG.
IoctlID
0x01
pInput
SCONFIG_LIST* — lista żądanych parametrów
pOutput
NULL (wynik zapisywany jest w pInput)
SET_CONFIG — Zapis parametrów protokołu
Ustawia wartości parametrów protokołu dla wskazanego kanału. Parametry są stosowane natychmiast i wpływają na późniejszą wymianę danych.
IoctlID
0x02
pInput
SCONFIG_LIST* — lista parametrów do ustawienia
pOutput
NULL
Struktury danych
typedef struct {
unsigned long Parameter; // Identyfikator parametru
unsigned long Value; // Wartość parametru
} SCONFIG;
typedef struct {
unsigned long NumOfParams; // Liczba parametrów na liście
SCONFIG *ConfigPtr; // Wskaźnik na tablicę SCONFIG
} SCONFIG_LIST;
Zwracane kody błędów
Kod
Opis
Możliwe przyczyny i rozwiązania
STATUS_NOERROR
Funkcja wykonana pomyślnie
—
ERR_DEVICE_NOT_CONNECTED
Brak połączenia z adapterem
Adapter jest wyłączony lub poza zasięgiem
Rozwiązanie: sprawdź zasilanie i podłączenie
ERR_INVALID_CHANNEL_ID
Nieprawidłowy identyfikator kanału
ChannelID nie został uzyskany przez PassThruConnect
Rozwiązanie: wykonaj PassThruConnect
ERR_NULL_PARAMETER
Przekazano NULL zamiast wskaźnika
pInput jest równy NULL
Rozwiązanie: przekaż wskaźnik na SCONFIG_LIST
ERR_NOT_SUPPORTED
Parametr nie jest obsługiwany
Parametr jest nieprawidłowy dla danego protokołu
Rozwiązanie: sprawdź zgodność parametru z protokołem
ERR_INVALID_IOCTL_VALUE
Niedozwolona wartość parametru
Wartość wykracza poza dopuszczalny zakres
Rozwiązanie: sprawdź dopuszczalne wartości parametru
ERR_FAILED
Nieokreślony błąd
Błąd wewnętrzny
Rozwiązanie: wywołaj PassThruGetLastError()
Parametry protokołów
Parametry wspólne (wszystkie protokoły)
Parametr
Wartość
Opis
Domyślnie
LOOPBACK
0x03
Tryb loopback: 0 — wył., 1 — wł.
0
Pełną listę parametrów wspólnych zobacz w normie SAE J2534-1.
Parametry K-Line (ISO 9141 / ISO 14230)
Parametry czasowe podawane są w milisekundach.
Parametr
Wartość
Opis
Domyślnie
P1_MAX
0x07
Maksymalny czas międzybajtowy z ECU (ms)
20
P3_MIN
0x0A
Minimalny czas między końcem odpowiedzi a nowym żądaniem (ms)
55
P4_MIN
0x0C
Minimalny czas międzybajtowy z testera (ms)
5
Pełną listę parametrów K-Line zobacz w normie SAE J2534-1.
Parametry CAN
Parametr
Wartość
Opis
Domyślnie
BIT_SAMPLE_POINT
0x17
Punkt próbkowania bitu w % (60-90)
80
SYNC_JUMP_WIDTH
0x18
Szerokość skoku synchronizacji w % (1-25)
15
HS_CAN_TERMINATIONJ2534-2
0x805E
Terminacja CAN: 0 — wył., 3 — wł.
0
Parametry ISO 15765 (CAN UDS)
Parametr
Wartość
Opis
Domyślnie
ISO15765_BS
0x1E
Block Size (BS) dla odbioru segmentowanych komunikatów
0 (bez ograniczeń)
ISO15765_STMIN
0x1F
STmin dla odbioru — minimalny czas między CF (ms)
0
N_CR_MAX v5.0
0x805F
Maksymalny czas oczekiwania na Consecutive Frame (ms)
Pełną listę parametrów ISO 15765 zobacz w normie SAE J2534-1.
CAN_MIXED_FORMAT — Format mieszany J2534-2
Parametr CAN_MIXED_FORMAT ma zastosowanie wyłącznie do kanałów ISO 15765. Pozwala odbierać i przesyłać zarówno sformatowane komunikaty ISO 15765, jak i niesformatowane ramki CAN na jednym kanale.
Wartość
Stała
Opis
0
CAN_MIXED_FORMAT_OFF
Wszystkie komunikaty są przetwarzane jako ISO 15765 (domyślnie)
1
CAN_MIXED_FORMAT_ON
Komunikaty są przetwarzane jako ISO 15765 lub niesformatowane ramki CAN
2
CAN_MIXED_FORMAT_ALL_FRAMES
Komunikaty są przetwarzane jako ISO 15765, niesformatowane ramki CAN lub oba typy
Ważne: Przy zmianie tego parametru:
Kolejki odbioru i nadawania są czyszczone
Wszystkie PASS_FILTER i BLOCK_FILTER są usuwane
Komunikaty okresowe z ProtocolID niesformatowanego CAN są usuwane
Przy korzystaniu z formatu mieszanego:
FLOW_CONTROL_FILTER — ma zastosowanie do komunikatów ISO 15765
PASS_FILTER / BLOCK_FILTER — ma zastosowanie do niesformatowanych ramek CAN
Parametry CAN FD J2534-2
Parametr
Wartość
Opis
Domyślnie
FD_CAN_DATA_PHASE_RATE
0x805C
Prędkość transmisji danych w fazie danych CAN FD (bit/s)
0 (nie ustawiono)
Pełną listę parametrów CAN FD zobacz w normie SAE J2534-2 rev.2020-12, strona 87, tabela 90.
Parametry SW-CAN (Single-Wire CAN)
Parametr
Wartość
Opis
Domyślnie
SW_CAN_HS_DATA_RATE
0x8010
Prędkość trybu High-Speed (bit/s)
83333
Pełną listę parametrów SW-CAN zobacz w normie SAE J2534-2 rev.2020-12, strona 29, tabela 9.
J1962_PINS — Przełączanie styków OBD-II
Parametr J1962_PINS (0x8001) pozwala podłączać linie sygnałowe do różnych styków złącza OBD-II. Wartość podawana jest jako liczba 16-bitowa: starszy bajt — Primary Pin (PP), młodszy bajt — Secondary Pin (SS).
Primary Pin używany jest dla K-Line, CAN-H, J1850+. Secondary Pin — dla L-Line, CAN-L, J1850-.
Compact
Stała
Wartość
Styk
PP_1 / SS_1
0x01
Pin 1
PP_2 / SS_2
0x02
Pin 2
PP_3 / SS_3
0x03
Pin 3
PP_6 / SS_6
0x06
Pin 6 (CAN-H)
PP_7 / SS_7
0x07
Pin 7 (K-Line)
PP_11 / SS_11
0x0B
Pin 11
PP_12 / SS_12
0x0C
Pin 12
PP_13 / SS_13
0x0D
Pin 13
PP_14 / SS_14
0x0E
Pin 14 (CAN-L)
PP_15 / SS_15
0x0F
Pin 15 (L-Line)
Parametry TP 2.0 (VAG) J2534-2
Protokół TP 2.0 jest używany w samochodach VAG (Volkswagen, Audi, Skoda, Seat) do diagnostyki.
Dla TP 2.0 obsługiwane są również parametry DATA_RATE, LOOPBACK, BIT_SAMPLE_POINT, SYNC_JUMP_WIDTH i J1962_PINS. Wartości domyślne: LOOPBACK = 0, BIT_SAMPLE_POINT = 80%,
SYNC_JUMP_WIDTH = 15%.
Parametr
Wartość
Opis
Domyślnie
TP2_0_T_BR_INT
0x8044
Broadcast interval — interwał między 5 komunikatami jednej transmisji broadcast (ms)
20
TP2_0_T_E
0x8045
Maksymalny czas oczekiwania na Channel Acknowledge lub Connection Acknowledge (ms)
100
TP2_0_MNTC
0x8046
Liczba ponownych prób dla komunikatów zarządzania połączeniem
10
Pełną listę parametrów TP 2.0 zobacz w normie SAE J2534-2 rev.2020-12, strona 78, tabela 77.
Parametry UART Echo Byte J2534-2
Protokół UART Echo Byte jest używany do diagnostyki starszych samochodów (SAE J2809, SAE J2818). Wszystkie parametry czasowe podawane są w milisekundach.
Parametr
Wartość
Opis
SAE J2809
SAE J2818
UEB_T0_MIN
0x8028
Minimalny czas bezczynności przed wysłaniem bajtu adresowego
t0
T_R0
UEB_T1_MAX
0x8029
Maksymalny czas między stymulacją a początkiem bajtu synchronizacji
t1
t_r1
UEB_T2_MAX
0x802A
Maksymalny czas między bajtem synchronizacji a KeyByte 1
t2
t_r2
Pełną listę parametrów UART Echo Byte zobacz w normie SAE J2534-2 rev.2020-12, strona 46, tabela 36.
Przykłady
GET_CONFIG — odczyt parametrów
Przykład w C/C++
#include "j2534_dll.hpp"
unsigned long ChannelID; // Uzyskany z PassThruConnect
SCONFIG Config[2];
SCONFIG_LIST ConfigList;
long ret;
// Żądamy DATA_RATE i ISO15765_STMIN
Config[0].Parameter = DATA_RATE;
Config[0].Value = 0;
Config[1].Parameter = ISO15765_STMIN;
Config[1].Value = 0;
ConfigList.NumOfParams = 2;
ConfigList.ConfigPtr = Config;
ret = PassThruIoctl(ChannelID, GET_CONFIG, &ConfigList, NULL);
if (ret == STATUS_NOERROR)
{
printf("DATA_RATE: %lu bps\n", Config[0].Value);
printf("ISO15765_STMIN: %lu ms\n", Config[1].Value);
}
Przykład w Kotlin (Android)
// channelID uzyskany z ptConnect
val params = listOf(
PtConfig(parameter = DATA_RATE, value = 0u),
PtConfig(parameter = ISO15765_STMIN, value = 0u)
)
val result = j2534.ptIoctl(channelID, GET_CONFIG, params.size, params.toByteArray())
if (result.status == STATUS_NOERROR) {
val resultParams = result.toConfigList()
resultParams.forEach { config ->
Log.i("J2534", "Parametr ${config.parameter}: ${config.value}")
}
}
Przykład w Python
from ctypes import *
config = (SCONFIG * 2)()
config[0].Parameter = DATA_RATE
config[1].Parameter = ISO15765_STMIN
config_list = SCONFIG_LIST()
config_list.NumOfParams = 2
config_list.ConfigPtr = config
ret = j2534.PassThruIoctl(channel_id, GET_CONFIG, byref(config_list), None)
if ret == 0:
print(f"DATA_RATE: {config[0].Value} bps")
print(f"ISO15765_STMIN: {config[1].Value} ms")
Przykład w C#
var configs = new SCONFIG[2];
configs[0].Parameter = DATA_RATE;
configs[1].Parameter = ISO15765_STMIN;
var configList = new SCONFIG_LIST {
NumOfParams = 2,
ConfigPtr = configs
};
int ret = J2534.PassThruIoctl(channelId, GET_CONFIG, ref configList, IntPtr.Zero);
if (ret == 0)
{
Console.WriteLine($"DATA_RATE: {configs[0].Value} bps");
Console.WriteLine($"ISO15765_STMIN: {configs[1].Value} ms");
}
SET_CONFIG — ustawianie parametrów
Przykład w C/C++ — konfiguracja ISO 15765
#include "j2534_dll.hpp"
unsigned long ChannelID; // Uzyskany z PassThruConnect dla ISO15765
SCONFIG Config[3];
SCONFIG_LIST ConfigList;
long ret;
// Ustawiamy parametry ISO 15765
Config[0].Parameter = ISO15765_STMIN;
Config[0].Value = 0; // Bez opóźnienia między CF
Config[1].Parameter = ISO15765_BS;
Config[1].Value = 0; // Bez ograniczenia bloku
Config[2].Parameter = ISO15765_PAD_VALUE;
Config[2].Value = 0xCC; // Wypełnienie 0xCC
ConfigList.NumOfParams = 3;
ConfigList.ConfigPtr = Config;
ret = PassThruIoctl(ChannelID, SET_CONFIG, &ConfigList, NULL);
if (ret != STATUS_NOERROR)
{
char error[256];
PassThruGetLastError(error);
printf("Błąd SET_CONFIG: %s\n", error);
}
Przykład w C/C++ — konfiguracja J1962_PINS
#include "j2534_dll.hpp"
unsigned long ChannelID;
SCONFIG Config[1];
SCONFIG_LIST ConfigList;
long ret;
// Podłączamy K-Line do Pin 3, L-Line do Pin 11
Config[0].Parameter = J1962_PINS;
Config[0].Value = PP_3 | SS_11; // 0x030B
ConfigList.NumOfParams = 1;
ConfigList.ConfigPtr = Config;
ret = PassThruIoctl(ChannelID, SET_CONFIG, &ConfigList, NULL);
if (ret == STATUS_NOERROR)
{
printf("K-Line podłączony do Pin 3, L-Line do Pin 11\n");
}
Przykład w Kotlin (Android)
// channelID uzyskany z ptConnect
val params = listOf(
PtConfig(parameter = ISO15765_STMIN, value = 0u),
PtConfig(parameter = ISO15765_BS, value = 0u),
PtConfig(parameter = ISO15765_PAD_VALUE, value = 0xCCu)
)
val result = j2534.ptIoctl(channelID, SET_CONFIG, params.size, params.toByteArray())
if (result.status == STATUS_NOERROR) {
Log.i("J2534", "Parametry ISO 15765 ustawione")
} else {
Log.e("J2534", "Błąd SET_CONFIG: ${result.status}")
}
Przykład w Python
from ctypes import *
config = (SCONFIG * 2)()
config[0].Parameter = DATA_RATE
config[0].Value = 500000 # 500 kbps
config[1].Parameter = CAN_MIXED_FORMAT
config[1].Value = 1 # Włącz format mieszany
config_list = SCONFIG_LIST()
config_list.NumOfParams = 2
config_list.ConfigPtr = config
ret = j2534.PassThruIoctl(channel_id, SET_CONFIG, byref(config_list), None)
if ret == 0:
print("Parametry CAN ustawione")
Przykład w C#
var configs = new SCONFIG[2];
configs[0].Parameter = DATA_RATE;
configs[0].Value = 500000; // 500 kbps
configs[1].Parameter = HS_CAN_TERMINATION;
configs[1].Value = 3; // Włącz terminację
var configList = new SCONFIG_LIST {
NumOfParams = 2,
ConfigPtr = configs
};
int ret = J2534.PassThruIoctl(channelId, SET_CONFIG, ref configList, IntPtr.Zero);
if (ret == 0)
{
Console.WriteLine("Parametry ustawione");
}