Zugriff auf "externes Hardwareinterface" aus einer DLL...



  • Guten Abend zusammen,

    ich komme aus der Mikrocontrollerecke und habe gerade ein Projekt am Wickel, wo ich etwas Hilfe von Windows-Experten brauche 🙂

    Um was geht es genau:
    Es gibt ein Standard SAE J2534 PassThru, welches die Kommunikation zwischen Diagnosesoftware mit dem Diagnoseinterface (VCI) beschreibt. Dieser Standard ist für Fahrzeuge ab Euro5 verbindlich. Die Hersteller der VCI-Hardware (zum Beispiel Bosch, Kvaser, Delphi und wie sie nicht alle heißen) stellen die J2534 Treiber für ihre Hardware frei zur Verfügung und man kann diese Hardware mit der x-beliebigen Diagnosesoftware verwenden, solange sie J2534-kompatibel ist.

    Dieser J2534 Treiber (ist mehr oder weniger nur eine DLL) stellt eine Sammlung an Funktionen zur Verfügung, die von der Diagnosesoftware mit bestimmten Parameter aufgerufen werden. So sieht die API aus:

    PassThruClose
    PassThruConnect
    PassThruDisconnect
    PassThruGetLastError
    PassThruIoctl
    PassThruOpen
    PassThruReadMsgs
    PassThruReadVersion
    PassThruSetProgrammingVoltage
    PassThruStartMsgFilter
    PassThruStartPeriodicMsg
    PassThruStopMsgFilter
    PassThruStopPeriodicMsg
    PassThruWriteMsgs
    

    Das ist alles, was die Diagnosesoftware weißt. Die Diagnosesoftware weißt also nicht mal, was für ein Protokoll verwendet wird (KWP2000, KW1281, KW-81, KW-71, ....) nur welche Zugriffsart, also ISO9141 (K-Line) oder D-CAN oder oder oder. So ganz einfach gesprochen sagt die Software der DLL "stell mal die Verbindung zum Motorsteuergerät mit der Adresse 0x30 über D-CAN her". Die DLL ruft dann im VCI entsprechende Routinen auf, VCI handelt die Verbindung aus und schickt nur das Ergebnis nach oben zu der Software.

    Soweit ist es kein Problem, diese J2534 API ist zwar nicht öffentlich aber bekannt (die Dokumentation dazu habe ich).

    Mein Problem ist gerade, wie implementiere ich die Anbindung an die Hardware am sinnvollsten? Die Hardware (also VCI) ist ein 32-bit STM32F4 mit den passenden Transceiver (ISO9141 und D-CAN) und noch einbisschen weiteres Gedöns. Anbindung an den PC über USB, STM32F4 haben ja ein Host-Controller an Bord.

    Meine erste Überlegung war über VCP, also COM-Port zu gehen, aber das erscheint mir irgendwie blödsinnig, weil ich dann irgendwelche Strings zum VCI schicke, die ich manuell auseinanderfummeln muss... schön und elegant ist anders... Ich habe mir ein paar kommerzielle VCIs angeschaut und rausgefunden, dass sie intern ein RNDIS Protokoll nutzen (Bosch). Bei einem anderen VCI wird libusbk verwendet.

    Hat jemand schon mal sowas in der Art implementiert und mag seine Erfahrungen teilen? Ich habe irgendwie im Moment keine Ideen, wie ich da rangehen soll.

    Sorry für so viel Text und vielen Dank im Voraus!



  • @HeinrichG sagte in Zugriff auf "externes Hardwareinterface" aus einer DLL...:

    Meine erste Überlegung war über VCP, also COM-Port zu gehen, aber das erscheint mir irgendwie blödsinnig, weil ich dann irgendwelche Strings zum VCI schicke, die ich manuell auseinanderfummeln muss... schön und elegant ist anders...

    Was soll daran blöd sein? Fast alle Geräte mit welchem ich gearbeitet habe (Messinstrumente, Modems,...) nutzen serielle Kommunikation. Und wenn du über Bluetooth kommunizeren möchtest, kann du RFCOMM nutzen.



  • @HeinrichG
    Mal eine Fage: Wieviel Daten fallen an? Überträgst du evt. Video-Streams?

    Sobald es nämlich um die Übertragung von Bildern, Videos geht, kommunizeren die Geräte auch gerne über WLAN.


Log in to reply