cxxwrap und JNI Schnittstelle

Status
Nicht offen für weitere Antworten.

vladimir

Aktives Mitglied
Hallo liebe Leute,

Ich entwickele unter Linux und würde gern das ganze mit Java machen.
Meine Aufgabe ist es über einen CAN-Protokoll einen Motor anzusteuern. Die nötige Hardware habe ich mir besorgt CANUSB - The Low cost CAN to USB converter. Dazu gab es auch einen Linux Treiber der ebenfalls funktioniert (in C getestet). Normalerweise kann man die Headerfiles von dem Treiber wrappen und direkt auf die Funktionen über native Funktionsaufrufe zugreifen.
Ich habe Probleme mit dem wrappen von einer C Headersfiles in eine Native Java Klasse. Als Wrapper benutze ich den cxxwrap. Wenn ich eine einfachen C-Header wrappe geht es wunderbar. Beim Versuch die Headers von dem Treiber zu wrappen funktioniert das ganze nicht mehr, ich bekomme leider auch keine Fehlermeldungen.

Consolenausgabe:
root@root-ubuntu:~/Downloads/cxxwrap-20061217$ ./cxxwrap --jni ftd2xx.h
scanned 1 header file.

generated 0 class definitions.

Summary: .


Ich hoffe jemand kann mir da helfen,

Gruß Vladimir
 

vladimir

Aktives Mitglied
Hallo nochmals habe mein Problem selbst gelöst. cxxwrap kann nur C++ Header wrappen.
Um C Header zu wrappen muss man unter Linux SWIG benutzen. SWIG braucht eine Datei die ihm sagt welche Header er zu wrappen hat.

(Dateibeispiel:)
/* File: convert.i */
%module convert
%{
#include "ftd2xx.h"
#include "WinTypes.h"
%}

%include "ftd2xx.h"
%include "WinTypes.h"

danach einfach in der Konsole
swig -java convert.i
eintipern, wuala hat das Tool für uns eine komplette native Bibliothek für die Benutzung über JNI erstellt.

Hoffe das das einer gebrauchen kann!

Gruß Vladimir
 

vladimir

Aktives Mitglied
Sorry Leute muss noch mal posten,

mit dem einfachen SWIG geht das wrappen wunderbar. Leider entstehen Konvertierungsfehler beim Parsen, die Nativen Klassen werden dadurch unbrauchbar.
Der SWIG-1.3 ist da viel besser und ausgewogener, die Datentypen werden konsistent behandelt und passend umgewandelt. Die Wrapperklassen können vernünftig eingesetzt werden.

Falls ich noch was raus finden sollte, werde ich nochmal posten.
Schließlich ist dies ein praxisnahes Thema!

Gruß Vladimir
 
T

tuxedo

Gast
--> http://jna.dev.java.net

Hab damit auch schon gearbeitet. Allerdings gibts auch da die eine oder andere Falltüre. Konnte aber bisher 98% der zu wrappenden Methoden/Libraries problemlos wrappen.

- Alex
 

vladimir

Aktives Mitglied
Danke euch beiden für die Tips, ich glaube das ist genau das richtige für mich.
Einige Schwirigkeiten habe ich dennoch, in C kann man Zeiger und Strukturen übergeben.
Wie ich dies in JNA mache habe ich keine Ahnung:
Ein Beispiel aus dem Header:

//Definitionen:
typedef DWORD *FT_HANDLE;

typedef ULONG FT_STATUS;

Funktionen:

FTD2XX_API
FT_STATUS WINAPI FT_Open(int deviceNumber, FT_HANDLE *pHandle);

FTD2XX_API
FT_STATUS WINAPI FT_OpenEx(PVOID pArg1, DWORD Flags, FT_HANDLE *pHandle);

Wie soll ich unter umständen so eine Funktion aufrufen? Unter JNI wird für eine Definition oder Struktur eine Komplette Klasse angelegt. Mussman bei JNA kommplet den Header nachbilden?
 
M

max k

Gast
Hallo

tut mir leid, dass ich dieses thema nocheinmal aufwärmen muss, aber genau zu der oben denannten Bibliothek habe ich eine frage (FT2xxj)

Wie bzw. welche Dateien genau muss ich einbinden um diese Klassen benutzen zu können. Ich arbeite unter eclipse.

Lg
 

vladimir

Aktives Mitglied
Es war schon etwas länger her aber das ist eigentlich nicht weiter schwer. Du musst bei Windows die ft2xx.dll runterladen und einbinden (bei Linux die ft2xx.o). In Eclipse oder Netbeans das Jar ganz normal als eine Bibliothek einbinden und benutzen. Es gab ein paar Beispiele dazu. Hier der Link, dies funktioniert auf jeden Fall ist von mir zig male benutzt worden… Dort findest Du auch eine andere Bibliothek JD2XX die kann man auch nehmen geht auch sehr einfach. Ist änlich.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben