Devuelve los valores actuales de los parámetros del protocolo para el canal indicado. Los parámetros pueden estar establecidos por defecto o haber sido modificados previamente mediante SET_CONFIG.
IoctlID
0x01
pInput
SCONFIG_LIST* — lista de parámetros solicitados
pOutput
NULL (el resultado se escribe en pInput)
SET_CONFIG — Escritura de parámetros del protocolo
Establece los valores de los parámetros del protocolo para el canal indicado. Los parámetros se aplican de inmediato y afectan al intercambio de datos posterior.
IoctlID
0x02
pInput
SCONFIG_LIST* — lista de parámetros a establecer
pOutput
NULL
Estructuras de datos
typedef struct {
unsigned long Parameter; // Identificador del parámetro
unsigned long Value; // Valor del parámetro
} SCONFIG;
typedef struct {
unsigned long NumOfParams; // Número de parámetros en la lista
SCONFIG *ConfigPtr; // Puntero al arreglo SCONFIG
} SCONFIG_LIST;
Códigos de error devueltos
Código
Descripción
Posibles causas y soluciones
STATUS_NOERROR
La función se ejecutó correctamente
—
ERR_DEVICE_NOT_CONNECTED
No hay conexión con el adaptador
El adaptador está apagado o fuera de alcance
Solución: compruebe la alimentación y la conexión
ERR_INVALID_CHANNEL_ID
Identificador de canal no válido
El ChannelID no se obtuvo mediante PassThruConnect
Solución: ejecute PassThruConnect
ERR_NULL_PARAMETER
Se pasó NULL en lugar de un puntero
pInput es igual a NULL
Solución: pase un puntero a SCONFIG_LIST
ERR_NOT_SUPPORTED
El parámetro no es compatible
El parámetro no es válido para este protocolo
Solución: compruebe la compatibilidad del parámetro con el protocolo
ERR_INVALID_IOCTL_VALUE
Valor de parámetro no permitido
El valor está fuera del rango permitido
Solución: compruebe los valores permitidos del parámetro
ERR_FAILED
Error indefinido
Error interno
Solución: llame a PassThruGetLastError()
Parámetros de protocolos
Parámetros comunes (todos los protocolos)
Parámetro
Valor
Descripción
Por defecto
LOOPBACK
0x03
Modo loopback: 0 — desactivado, 1 — activado
0
Consulte la lista completa de parámetros comunes en la norma SAE J2534-1.
Parámetros K-Line (ISO 9141 / ISO 14230)
Los parámetros de tiempo se indican en milisegundos.
Parámetro
Valor
Descripción
Por defecto
P1_MAX
0x07
Tiempo máximo entre bytes desde la ECU (ms)
20
P3_MIN
0x0A
Tiempo mínimo entre el final de la respuesta y una nueva solicitud (ms)
55
P4_MIN
0x0C
Tiempo mínimo entre bytes desde el tester (ms)
5
Consulte la lista completa de parámetros K-Line en la norma SAE J2534-1.
Parámetros CAN
Parámetro
Valor
Descripción
Por defecto
BIT_SAMPLE_POINT
0x17
Punto de muestreo del bit en % (60-90)
80
SYNC_JUMP_WIDTH
0x18
Ancho del salto de sincronización en % (1-25)
15
HS_CAN_TERMINATIONJ2534-2
0x805E
Terminación CAN: 0 — desactivada, 3 — activada
0
Parámetros ISO 15765 (CAN UDS)
Parámetro
Valor
Descripción
Por defecto
ISO15765_BS
0x1E
Block Size (BS) para la recepción de mensajes segmentados
0 (sin límite)
ISO15765_STMIN
0x1F
STmin para la recepción — tiempo mínimo entre CF (ms)
0
N_CR_MAX v5.0
0x805F
Tiempo máximo de espera del Consecutive Frame (ms)
Consulte la lista completa de parámetros ISO 15765 en la norma SAE J2534-1.
CAN_MIXED_FORMAT — Formato mixto J2534-2
El parámetro CAN_MIXED_FORMAT se aplica únicamente a los canales ISO 15765. Permite recibir y transmitir tanto mensajes formateados ISO 15765 como tramas CAN sin formato en un mismo canal.
Valor
Constante
Descripción
0
CAN_MIXED_FORMAT_OFF
Todos los mensajes se procesan como ISO 15765 (por defecto)
1
CAN_MIXED_FORMAT_ON
Los mensajes se procesan como ISO 15765 o tramas CAN sin formato
2
CAN_MIXED_FORMAT_ALL_FRAMES
Los mensajes se procesan como ISO 15765, tramas CAN sin formato o ambos tipos
Importante: Al cambiar este parámetro:
Las colas de recepción y transmisión se vacían
Todos los PASS_FILTER y BLOCK_FILTER se eliminan
Los mensajes periódicos con ProtocolID de CAN sin formato se eliminan
Al utilizar el formato mixto:
FLOW_CONTROL_FILTER — se aplica a los mensajes ISO 15765
PASS_FILTER / BLOCK_FILTER — se aplica a las tramas CAN sin formato
Parámetros CAN FD J2534-2
Parámetro
Valor
Descripción
Por defecto
FD_CAN_DATA_PHASE_RATE
0x805C
Velocidad de transmisión de datos en la fase de datos de CAN FD (bit/s)
0 (no establecido)
Consulte la lista completa de parámetros CAN FD en la norma SAE J2534-2 rev.2020-12, página 87, tabla 90.
Parámetros SW-CAN (Single-Wire CAN)
Parámetro
Valor
Descripción
Por defecto
SW_CAN_HS_DATA_RATE
0x8010
Velocidad del modo High-Speed (bit/s)
83333
Consulte la lista completa de parámetros SW-CAN en la norma SAE J2534-2 rev.2020-12, página 29, tabla 9.
J1962_PINS — Conmutación de contactos OBD-II
El parámetro J1962_PINS (0x8001) permite conectar las líneas de señal a distintos contactos del conector OBD-II. El valor se indica como un número de 16 bits: el byte alto — Primary Pin (PP), el byte bajo — Secondary Pin (SS).
El Primary Pin se utiliza para K-Line, CAN-H, J1850+. El Secondary Pin — para L-Line, CAN-L, J1850-.
Compact
Constante
Valor
Contacto
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)
Parámetros TP 2.0 (VAG) J2534-2
El protocolo TP 2.0 se utiliza en los vehículos VAG (Volkswagen, Audi, Skoda, Seat) para el diagnóstico.
Para TP 2.0 también se admiten los parámetros DATA_RATE, LOOPBACK, BIT_SAMPLE_POINT, SYNC_JUMP_WIDTH y J1962_PINS. Valores por defecto: LOOPBACK = 0, BIT_SAMPLE_POINT = 80%,
SYNC_JUMP_WIDTH = 15%.
Parámetro
Valor
Descripción
Por defecto
TP2_0_T_BR_INT
0x8044
Broadcast interval — intervalo entre los 5 mensajes de una misma transmisión broadcast (ms)
20
TP2_0_T_E
0x8045
Tiempo máximo de espera de Channel Acknowledge o Connection Acknowledge (ms)
100
TP2_0_MNTC
0x8046
Número de reintentos para los mensajes de gestión de la conexión
10
Consulte la lista completa de parámetros TP 2.0 en la norma SAE J2534-2 rev.2020-12, página 78, tabla 77.
Parámetros UART Echo Byte J2534-2
El protocolo UART Echo Byte se utiliza para el diagnóstico de vehículos antiguos (SAE J2809, SAE J2818). Todos los parámetros de tiempo se indican en milisegundos.
Parámetro
Valor
Descripción
SAE J2809
SAE J2818
UEB_T0_MIN
0x8028
Tiempo mínimo de inactividad antes de enviar el byte de dirección
t0
T_R0
UEB_T1_MAX
0x8029
Tiempo máximo entre la estimulación y el inicio del byte de sincronización
t1
t_r1
UEB_T2_MAX
0x802A
Tiempo máximo entre el byte de sincronización y KeyByte 1
t2
t_r2
Consulte la lista completa de parámetros UART Echo Byte en la norma SAE J2534-2 rev.2020-12, página 46, tabla 36.
Ejemplos
GET_CONFIG — lectura de parámetros
Ejemplo en C/C++
#include "j2534_dll.hpp"
unsigned long ChannelID; // Obtenido de PassThruConnect
SCONFIG Config[2];
SCONFIG_LIST ConfigList;
long ret;
// Solicitamos DATA_RATE e 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);
}
Ejemplo en Kotlin (Android)
// channelID obtenido de 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", "Parámetro ${config.parameter}: ${config.value}")
}
}
Ejemplo en 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")
Ejemplo en 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 — establecimiento de parámetros
Ejemplo en C/C++ — configuración de ISO 15765
#include "j2534_dll.hpp"
unsigned long ChannelID; // Obtenido de PassThruConnect para ISO15765
SCONFIG Config[3];
SCONFIG_LIST ConfigList;
long ret;
// Establecemos los parámetros ISO 15765
Config[0].Parameter = ISO15765_STMIN;
Config[0].Value = 0; // Sin retardo entre CF
Config[1].Parameter = ISO15765_BS;
Config[1].Value = 0; // Sin límite de bloque
Config[2].Parameter = ISO15765_PAD_VALUE;
Config[2].Value = 0xCC; // Relleno 0xCC
ConfigList.NumOfParams = 3;
ConfigList.ConfigPtr = Config;
ret = PassThruIoctl(ChannelID, SET_CONFIG, &ConfigList, NULL);
if (ret != STATUS_NOERROR)
{
char error[256];
PassThruGetLastError(error);
printf("Error de SET_CONFIG: %s\n", error);
}
Ejemplo en C/C++ — configuración de J1962_PINS
#include "j2534_dll.hpp"
unsigned long ChannelID;
SCONFIG Config[1];
SCONFIG_LIST ConfigList;
long ret;
// Conectamos K-Line al Pin 3, L-Line al 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 conectado al Pin 3, L-Line al Pin 11\n");
}
Ejemplo en Kotlin (Android)
// channelID obtenido de 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", "Parámetros ISO 15765 establecidos")
} else {
Log.e("J2534", "Error de SET_CONFIG: ${result.status}")
}
Ejemplo en 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 # Activar el formato mixto
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("Parámetros CAN establecidos")
Ejemplo en 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; // Activar la terminación
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("Parámetros establecidos");
}