Quantex GmbH
Votre région : Europe

PassThruOpen v4.04 v5.0

Établir la connexion avec l'adaptateur

Dernière modification :

Description

La fonction établit la connexion avec l'adaptateur ScanDoc. Les paramètres de connexion (adresse IP ou nom du périphérique BLE) sont lus dans le fichier de configuration j2534.json.

long PassThruOpen(void* pName, unsigned long* pDeviceID)

Paramètres

Fichier de configuration

Les paramètres de connexion sont stockés dans le fichier j2534.json. L'emplacement du fichier dépend du système d'exploitation :

Système d'exploitation Chemin du fichier
Windows %APPDATA%\Quantex\j2534.json
Par exemple : C:\Users\User\AppData\Roaming\Quantex\j2534.json
macOS ~/Library/Application Support/Quantex/j2534.json
Linux ~/.config/quantex/j2534.json

Si le fichier n'existe pas, il sera créé automatiquement avec les paramètres par défaut.

Format du fichier de configuration

{
    "current_device": 0,
    "devices": [
        {
            "name": "ScanDoc",
            "connection_type": "LAN",
            "device_ip": "192.168.1.3",
            "device_name": ""
        }
    ],
    "logs_directory": "",
    "debug": false
}

Description des champs

Champ Type Description
current_device number Index du périphérique actif dans le tableau devices (en commençant par 0)
devices array Tableau des périphériques. Pour l'API v04.04, un seul périphérique avec l'index current_device est utilisé
name string Nom affiché du périphérique (pour la commodité de l'utilisateur)
connection_type string "LAN" pour WLAN/Ethernet ou "BLE" pour BLE Low Energy
device_ip string Adresse IP de l'adaptateur (utilisée avec connection_type = "LAN")
device_name string Numéro de série ou nom du périphérique BLE (utilisé avec connection_type = "BLE")
logs_directory string Dossier des fichiers journaux. S'il est vide, les journaux sont enregistrés dans <config_dir>/sdlogs
debug boolean true - activer l'enregistrement des journaux, false - le désactiver

Exemples de configuration

Connexion par WLAN/LAN :

{
    "current_device": 0,
    "devices": [
        {
            "name": "ScanDoc FD",
            "connection_type": "LAN",
            "device_ip": "192.168.1.100",
            "device_name": ""
        }
    ],
    "debug": false
}

Connexion par BLE :

{
    "current_device": 0,
    "devices": [
        {
            "name": "ScanDoc FD",
            "connection_type": "BLE",
            "device_ip": "",
            "device_name": "N4999"
        }
    ],
    "debug": true
}

Ordre d'appel des fonctions

PassThruOpen()       → Établir la connexion avec l'adaptateur
    ↓
PassThruConnect()    → Ouvrir le canal de communication avec l'ECU
    ↓
PassThruReadMsg() / PassThruWriteMsg()  → Échange de messages
    ↓
PassThruDisconnect() → Fermer le canal
    ↓
PassThruClose()      → Libérer les ressources de l'adaptateur
Appelez toujours PassThruClose() avant de terminer le programme. Sinon, la connexion suivante renverra l'erreur ERR_DEVICE_IN_USE.

Délais d'attente

Délai d'attente de connexion : 500 ms. Si l'adaptateur n'est pas disponible, la fonction renverra ERR_DEVICE_NOT_CONNECTED à l'expiration du délai d'attente.

Codes d'erreur renvoyés

Code Description Causes possibles et solutions
STATUS_NOERROR La fonction s'est exécutée avec succès -
ERR_DEVICE_NOT_CONNECTED Aucune connexion avec l'adaptateur
  • L'adaptateur est éteint
  • Aucune connexion réseau
  • Adresse IP incorrecte dans la configuration
  • Solution : vérifiez l'alimentation de l'adaptateur, exécutez un ping vers l'adresse IP
ERR_DEVICE_IN_USE Le périphérique est déjà utilisé
  • PassThruClose() n'a pas été appelée lors de la session précédente
  • Un autre programme utilise l'adaptateur
  • Solution : redémarrez le programme ou l'adaptateur
ERR_NULL_PARAMETER Le pointeur pDeviceID n'est pas spécifié Passez un pointeur valide vers la variable
ERR_FAILED Erreur interne
  • Erreur de lecture du fichier de configuration
  • Erreur d'allocation de mémoire
  • Solution : utilisez PassThruGetLastError() pour obtenir les détails

Exemples

Exemple en C/C++

#include "j2534_dll.hpp"

unsigned long DeviceID;
long ret;

// pName = NULL - les paramètres sont lus dans j2534.json
ret = PassThruOpen(NULL, &DeviceID);
if (ret != STATUS_NOERROR)
{
    char error[256];
    PassThruGetLastError(error);
    printf("Error: %s\n", error);
    return;
}

// Travail avec le périphérique...

// Fermeture obligatoire de la connexion
PassThruClose(DeviceID);

Exemple en Kotlin (Android)

Dans cet exemple, l'enveloppe JNI J2534JNI est utilisée pour appeler les fonctions natives J2534 depuis Kotlin.

// J2534JNI - est une classe enveloppe pour JNI
val j2534 = J2534JNI(context)

// On passe null - les paramètres sont lus dans j2534.json
val deviceResult = j2534.ptOpen(null)

if (deviceResult.status == STATUS_NOERROR) {
    val deviceID = deviceResult.deviceId
    Log.i("J2534", "Adaptateur ouvert, DeviceID: $deviceID")

    // Travail avec le périphérique...

    // Fermeture obligatoire de la connexion
    j2534.ptClose(deviceID)
} else {
    Log.e("J2534", "Erreur: ${deviceResult.status}")
}

Exemple en Python (ctypes)

from ctypes import *
import platform

# Chargement de la bibliothèque selon le système d'exploitation
if platform.system() == "Windows":
    j2534 = windll.LoadLibrary("j2534sd_v04_04_x64.dll")
elif platform.system() == "Darwin":
    j2534 = cdll.LoadLibrary("libj2534_v04_04.dylib")
else:
    j2534 = cdll.LoadLibrary("libj2534_v04_04.so")

device_id = c_ulong()

# pName = None - les paramètres sont lus dans j2534.json
ret = j2534.PassThruOpen(None, byref(device_id))

if ret == 0:  # STATUS_NOERROR
    print(f"Adaptateur ouvert, DeviceID: {device_id.value}")

    # Travail avec le périphérique...

    # Fermeture obligatoire de la connexion
    j2534.PassThruClose(device_id)
else:
    error = create_string_buffer(256)
    j2534.PassThruGetLastError(error)
    print(f"Erreur: {error.value.decode()}")

Exemple en C# (P/Invoke)

using System;
using System.Runtime.InteropServices;

class J2534
{
    [DllImport("j2534sd_v04_04_x64.dll", CallingConvention = CallingConvention.StdCall)]
    public static extern int PassThruOpen(IntPtr pName, out uint pDeviceID);

    [DllImport("j2534sd_v04_04_x64.dll", CallingConvention = CallingConvention.StdCall)]
    public static extern int PassThruClose(uint DeviceID);

    [DllImport("j2534sd_v04_04_x64.dll", CallingConvention = CallingConvention.StdCall)]
    public static extern int PassThruGetLastError(
        [MarshalAs(UnmanagedType.LPStr)] System.Text.StringBuilder pErrorDescription);
}

// Utilisation :
uint deviceId;
// IntPtr.Zero = NULL - les paramètres sont lus dans j2534.json
int ret = J2534.PassThruOpen(IntPtr.Zero, out deviceId);

if (ret == 0) // STATUS_NOERROR
{
    Console.WriteLine($"Adaptateur ouvert, DeviceID: {deviceId}");

    // Travail avec le périphérique...

    // Fermeture obligatoire de la connexion
    J2534.PassThruClose(deviceId);
}
else
{
    var error = new System.Text.StringBuilder(256);
    J2534.PassThruGetLastError(error);
    Console.WriteLine($"Erreur: {error}");
}