GET_DEVICE_INFO — Informations sur le périphérique
Renvoie des informations sur les capacités du périphérique : protocoles pris en charge, nombre de canaux simultanés, numéro de série et autres caractéristiques. S'invoque avec le DeviceID obtenu de PassThruOpen.
IoctlID
0x800C
pInput
SCONFIG_LIST* — liste des paramètres demandés
pOutput
NULL (le résultat est écrit dans pInput)
Contrairement à GET_CONFIG, la fonction GET_DEVICE_INFO s'invoque avec le DeviceID et non avec le ChannelID.
GET_PROTOCOL_INFO — Informations sur le protocole
Renvoie des informations sur les capacités d'un protocole donné : tailles maximales des tampons, nombre de filtres, paramètres pris en charge. S'invoque avec le ChannelID obtenu de PassThruConnect.
IoctlID
0x800D
pInput
SCONFIG_LIST* — liste des paramètres demandés
pOutput
NULL (le résultat est écrit dans pInput)
Structures de données
typedef struct {
unsigned long Parameter; // Identifiant du paramètre
unsigned long Value; // Valeur renvoyée
} SCONFIG;
typedef struct {
unsigned long NumOfParams; // Nombre de paramètres dans la liste
SCONFIG *ConfigPtr; // Pointeur vers le tableau SCONFIG
} SCONFIG_LIST;
Codes d'erreur renvoyés
Code
Description
Causes possibles et solutions
STATUS_NOERROR
La fonction s'est exécutée correctement
—
ERR_DEVICE_NOT_CONNECTED
Aucune connexion avec l'adaptateur
L'adaptateur est éteint ou hors de portée
Solution : vérifiez l'alimentation et la connexion
ERR_INVALID_DEVICE_ID
Identifiant de périphérique non valide
Le DeviceID n'a pas été obtenu via PassThruOpen
Solution : exécutez PassThruOpen
ERR_INVALID_CHANNEL_ID
Identifiant de canal non valide
Le ChannelID n'a pas été obtenu via PassThruConnect (pour GET_PROTOCOL_INFO)
Solution : exécutez PassThruConnect
ERR_NULL_PARAMETER
NULL a été passé à la place d'un pointeur
pInput est égal à NULL
Solution : passez un pointeur vers SCONFIG_LIST
ERR_NOT_SUPPORTED
Paramètre non pris en charge
Le paramètre demandé n'est pas disponible
Solution : consultez la liste des paramètres pris en charge
ERR_FAILED
Erreur indéfinie
Erreur interne
Solution : invoquez PassThruGetLastError()
Paramètres de GET_DEVICE_INFO
Identification du périphérique
Paramètre
Valeur
Description
SERIAL_NUMBER
0x01
Numéro de série du périphérique (chaîne)
PART_NUMBER
0x49
Référence du périphérique
Prise en charge des protocoles
Renvoient SUPPORTED (1) ou NOT_SUPPORTED (0).
Paramètre
Valeur
Protocole
J1850PWM_SUPPORTED
0x02
J1850 PWM (Ford)
J1850VPW_SUPPORTED
0x03
J1850 VPW (GM)
ISO9141_SUPPORTED
0x04
ISO 9141-2
ISO14230_SUPPORTED
0x05
ISO 14230 (KWP2000)
CAN_SUPPORTED
0x06
CAN (raw)
ISO15765_SUPPORTED
0x07
ISO 15765 (CAN UDS)
SCI_A_ENGINE_SUPPORTED
0x08
SCI-A Engine (Chrysler)
SCI_A_TRANS_SUPPORTED
0x09
SCI-A Transmission (Chrysler)
SCI_B_ENGINE_SUPPORTED
0x0A
SCI-B Engine (Chrysler)
SCI_B_TRANS_SUPPORTED
0x0B
SCI-B Transmission (Chrysler)
SW_ISO15765_SUPPORTED
0x0C
Single-Wire ISO 15765
SW_CAN_SUPPORTED
0x0D
Single-Wire CAN (GM)
GM_UART_SUPPORTED
0x0E
GM UART
UART_ECHO_BYTE_SUPPORTED
0x0F
UART Echo Byte
HONDA_DIAGH_SUPPORTED
0x10
Honda DIAG-H
J1939_SUPPORTED
0x11
J1939 (poids lourds)
J1708_SUPPORTED
0x12
J1708 (poids lourds)
TP2_0_SUPPORTED
0x13
TP 2.0 (VAG)
J2610_SUPPORTED
0x14
J2610 (Chrysler DRB-III)
ANALOG_IN_SUPPORTED
0x15
Entrées analogiques
FT_CAN_SUPPORTED
0x31
Fault-Tolerant CAN
FT_ISO15765_SUPPORTED
0x32
FT ISO 15765
FD_CAN_SUPPORTED
0x4C
CAN FD
FD_ISO15765_SUPPORTED
0x4D
ISO 15765 via CAN FD
ETHERNET_NDIS_SUPPORTED
0x54
Ethernet NDIS (DoIP)
Canaux simultanés
Nombre de canaux pouvant être ouverts simultanément pour chaque protocole.
Paramètre
Valeur
Protocole
J1850PWM_SIMULTANEOUS
0x35
J1850 PWM
J1850VPW_SIMULTANEOUS
0x36
J1850 VPW
ISO9141_SIMULTANEOUS
0x37
ISO 9141
ISO14230_SIMULTANEOUS
0x38
ISO 14230
CAN_SIMULTANEOUS
0x39
CAN
ISO15765_SIMULTANEOUS
0x3A
ISO 15765
SW_CAN_SIMULTANEOUS
0x40
SW-CAN
J1939_SIMULTANEOUS
0x44
J1939
TP2_0_SIMULTANEOUS
0x46
TP 2.0
FD_CAN_SIMULTANEOUS
0x4E
CAN FD
FD_ISO15765_SIMULTANEOUS
0x4F
ISO 15765 FD
Affectation des broches J1962
Renvoient le masque des broches OBD-II utilisées pour le protocole.
Paramètre
Valeur
Protocole
CAN_PS_J1962
0x1F
CAN (Pin 6, 14)
ISO15765_PS_J1962
0x20
ISO 15765 (Pin 6, 14)
ISO9141_PS_K_LINE_J1962
0x1B
ISO 9141 K-Line (Pin 7)
ISO9141_PS_L_LINE_J1962
0x1C
ISO 9141 L-Line (Pin 15)
ISO14230_PS_K_LINE_J1962
0x1D
ISO 14230 K-Line (Pin 7)
ISO14230_PS_L_LINE_J1962
0x1E
ISO 14230 L-Line (Pin 15)
SW_CAN_PS_J1962
0x21
SW-CAN (Pin 1)
J1850PWM_PS_J1962
0x19
J1850 PWM (Pin 2, 10)
J1850VPW_PS_J1962
0x1A
J1850 VPW (Pin 2)
FD_CAN_PS_J1962
0x50
CAN FD (Pin 6, 14)
FD_ISO15765_PS_J1962
0x51
ISO 15765 FD (Pin 6, 14)
Capacités supplémentaires
Paramètre
Valeur
Description
MAX_NON_VOLATILE_STORAGE
0x16
Taille de la mémoire non volatile (octets)
SHORT_TO_GND_J1962
0x17
Prise en charge de la détection de court-circuit à la masse
PGM_VOLTAGE_J1962
0x18
Prise en charge de la tension de programmation
READ_J1962PIN_VOLTAGE_SUPPORTED
0x52
Prise en charge de la lecture de tension sur les broches
READ_J1962PIN_VOLTAGE_MAX
0x53
Tension maximale de lecture (mV)
Paramètres de GET_PROTOCOL_INFO
Paramètre
Valeur
Description
MAX_RX_BUFFER_SIZE
0x01
Taille maximale du tampon de réception (octets)
MAX_PASS_FILTER
0x02
Nombre maximal de PASS_FILTER
MAX_BLOCK_FILTER
0x03
Nombre maximal de BLOCK_FILTER
MAX_FILTER_MSG_LENGTH
0x04
Longueur maximale du message du filtre (octets)
MAX_PERIODIC_MSGS
0x05
Nombre maximal de messages périodiques
MAX_PERIODIC_MSG_LENGTH
0x06
Longueur maximale du message périodique (octets)
DESIRED_DATA_RATE
0x07
Débit de transmission recommandé (bit/s)
MAX_FLOW_CONTROL_FILTER
0x12
Nombre maximal de FLOW_CONTROL_FILTER
MAX_ISO15765_WFT_MAX
0x13
Valeur maximale de ISO15765_WFT_MAX
NETWORK_LINE_SUPPORTED
0x0A
Prise en charge de la sélection de la ligne réseau
MAX_FUNCT_MSG_LOOKUP
0x0B
Taille maximale de la table des adresses fonctionnelles
PARITY_SUPPORTED
0x0C
Prise en charge de la configuration de la parité
DATA_BITS_SUPPORTED
0x0D
Prise en charge de la configuration des bits de données (7/8)
FIVE_BAUD_MOD_SUPPORTED
0x0E
Prise en charge des modes d'initialisation à 5 bauds
L_LINE_SUPPORTED
0x0F
Prise en charge de la ligne L
CAN_11_29_IDS_SUPPORTED
0x10
Prise en charge des CAN ID de 11 et 29 bits
CAN_MIXED_FORMAT_SUPPORTED
0x11
Prise en charge du format mixte CAN
TIMESTAMP_RESOLUTION
0x1B
Résolution des horodatages (μs)
FD_CAN_DATA_PHASE_DATA_RATE_SUPPORTED
0x6C
Débits CAN FD pris en charge
Exemples
GET_DEVICE_INFO — obtention des capacités du périphérique
Exemple en C/C++
#include "j2534_dll.hpp"
unsigned long DeviceID; // Obtenu de PassThruOpen
SCONFIG Config[5];
SCONFIG_LIST ConfigList;
long ret;
// Nous demandons des informations sur la prise en charge des protocoles
Config[0].Parameter = CAN_SUPPORTED;
Config[1].Parameter = ISO15765_SUPPORTED;
Config[2].Parameter = ISO14230_SUPPORTED;
Config[3].Parameter = FD_CAN_SUPPORTED;
Config[4].Parameter = TP2_0_SUPPORTED;
ConfigList.NumOfParams = 5;
ConfigList.ConfigPtr = Config;
ret = PassThruIoctl(DeviceID, GET_DEVICE_INFO, &ConfigList, NULL);
if (ret == STATUS_NOERROR)
{
printf("CAN: %s\n", Config[0].Value ? "pris en charge" : "non");
printf("ISO 15765: %s\n", Config[1].Value ? "pris en charge" : "non");
printf("ISO 14230: %s\n", Config[2].Value ? "pris en charge" : "non");
printf("CAN FD: %s\n", Config[3].Value ? "pris en charge" : "non");
printf("TP 2.0: %s\n", Config[4].Value ? "pris en charge" : "non");
}
Exemple en Kotlin (Android)
// deviceID obtenu de ptOpen
val params = listOf(
PtConfig(parameter = CAN_SUPPORTED, value = 0u),
PtConfig(parameter = ISO15765_SUPPORTED, value = 0u),
PtConfig(parameter = FD_CAN_SUPPORTED, value = 0u)
)
val result = j2534.ptIoctl(deviceID, GET_DEVICE_INFO, params.size, params.toByteArray())
if (result.status == STATUS_NOERROR) {
val resultParams = result.toConfigList()
Log.i("J2534", "CAN: ${if (resultParams[0].value > 0u) "oui" else "non"}")
Log.i("J2534", "ISO 15765: ${if (resultParams[1].value > 0u) "oui" else "non"}")
Log.i("J2534", "CAN FD: ${if (resultParams[2].value > 0u) "oui" else "non"}")
}
Exemple en Python
from ctypes import *
config = (SCONFIG * 3)()
config[0].Parameter = CAN_SUPPORTED
config[1].Parameter = ISO15765_SUPPORTED
config[2].Parameter = FD_CAN_SUPPORTED
config_list = SCONFIG_LIST()
config_list.NumOfParams = 3
config_list.ConfigPtr = config
ret = j2534.PassThruIoctl(device_id, GET_DEVICE_INFO, byref(config_list), None)
if ret == 0:
print(f"CAN: {'oui' if config[0].Value else 'non'}")
print(f"ISO 15765: {'oui' if config[1].Value else 'non'}")
print(f"CAN FD: {'oui' if config[2].Value else 'non'}")
Exemple en C#
var configs = new SCONFIG[3];
configs[0].Parameter = CAN_SUPPORTED;
configs[1].Parameter = ISO15765_SUPPORTED;
configs[2].Parameter = FD_CAN_SUPPORTED;
var configList = new SCONFIG_LIST {
NumOfParams = 3,
ConfigPtr = configs
};
int ret = J2534.PassThruIoctl(deviceId, GET_DEVICE_INFO, ref configList, IntPtr.Zero);
if (ret == 0)
{
Console.WriteLine($"CAN: {(configs[0].Value > 0 ? "oui" : "non")}");
Console.WriteLine($"ISO 15765: {(configs[1].Value > 0 ? "oui" : "non")}");
Console.WriteLine($"CAN FD: {(configs[2].Value > 0 ? "oui" : "non")}");
}
GET_PROTOCOL_INFO — obtention des informations sur le protocole
Exemple en C/C++
#include "j2534_dll.hpp"
unsigned long ChannelID; // Obtenu de PassThruConnect pour ISO15765
SCONFIG Config[4];
SCONFIG_LIST ConfigList;
long ret;
// Nous demandons les limites du protocole
Config[0].Parameter = MAX_RX_BUFFER_SIZE;
Config[1].Parameter = MAX_FLOW_CONTROL_FILTER;
Config[2].Parameter = MAX_PERIODIC_MSGS;
Config[3].Parameter = TIMESTAMP_RESOLUTION;
ConfigList.NumOfParams = 4;
ConfigList.ConfigPtr = Config;
ret = PassThruIoctl(ChannelID, GET_PROTOCOL_INFO, &ConfigList, NULL);
if (ret == STATUS_NOERROR)
{
printf("Taille max. du tampon RX : %lu octets\n", Config[0].Value);
printf("Max. filtres FLOW_CONTROL : %lu\n", Config[1].Value);
printf("Max. messages périodiques : %lu\n", Config[2].Value);
printf("Résolution timestamp : %lu μs\n", Config[3].Value);
}
Exemple en Kotlin (Android)
// channelID obtenu de ptConnect
val params = listOf(
PtConfig(parameter = MAX_RX_BUFFER_SIZE, value = 0u),
PtConfig(parameter = MAX_FLOW_CONTROL_FILTER, value = 0u),
PtConfig(parameter = MAX_PERIODIC_MSGS, value = 0u)
)
val result = j2534.ptIoctl(channelID, GET_PROTOCOL_INFO, params.size, params.toByteArray())
if (result.status == STATUS_NOERROR) {
val resultParams = result.toConfigList()
Log.i("J2534", "Max. tampon RX : ${resultParams[0].value} octets")
Log.i("J2534", "Max. filtres FC : ${resultParams[1].value}")
Log.i("J2534", "Max. périodiques : ${resultParams[2].value}")
}