Ich habe das Problem, dass die Speicherbelegung nicht stimmt. Das schließe ich daraus, dass die Bits zwischen den Attributen verschoben sind.
das ist der native code:
mein Java Code dazu sieht so aus:
Die Klasse XLchannelConfig ist in einem Array, dass ich mit .toArray initialisiert habe.
Wenn ich die Attribute ausgebe, sehe ich, dass die Werte verschoben sind. Es sieht so aus als wären die Bits von dem einen Attribut in das nächste verschoben. Ich vermute, dass es an einem falschen Datentyp liegt, komme aber nicht darauf an welchem es liegt
das ist der native code:
C++:
typedef struct s_xl_channel_config {
char name [32];
unsigned char hwType;
unsigned char hwIndex;
unsigned char hwChannel;
unsigned short transceiverType;
unsigned short transceiverState;
unsigned short configError;
unsigned char channelIndex;
long channelMask;
unsigned int channelCapabilities;
unsigned int channelBusCapabilities;
unsigned char isOnBus;
unsigned int connectedBusType;
XLbusParams busParams;
unsigned int _doNotUse;
unsigned int driverVersion;
unsigned int interfaceVersion;
unsigned int raw_data[10];
unsigned int serialNumber;
unsigned int articleNumber;
char transceiverName [32];
unsigned int specialCabFlags;
unsigned int dominantTimeout;
unsigned char dominantRecessiveDelay;
unsigned char recessiveDominantDelay;
unsigned char connectionInfo;
unsigned char currentlyAvailableTimestamps;
unsigned short minimalSupplyVoltage;
unsigned short maximalSupplyVoltage;
unsigned int maximalBaudrate;
unsigned char fpgaCoreCapabilities;
unsigned char specialDeviceStatus;
unsigned short channelBusActiveCapabilities;
unsigned short breakOffset;
unsigned short delimiterOffset;
unsigned int reserved[3];
} XL_CHANNEL_CONFIG;
mein Java Code dazu sieht so aus:
Java:
@FieldOrder ({"name", "hwType", "hwIndex", "hwChannel", "transceiverType", "transceiverState", "configError", "channelIndex", "channelMask", "channelCapabilities", "channelBusCapabilities", "isOnBus", "connectedBusType", "busParams", "_doNotUse", "driverVersion", "interfaceVersion", "raw_data", "serialNumber", "articleNumber", "transceiverName", "specialCabFlags", "dominantTimeout", "dominantRecessiveDelay", "recessiveDominantDelay", "connectionInfo", "currentlyAvailableTimestamps", "minimalSupplyVoltage", "maximalSupplyVoltage", "maximalBaudrate", "fpgaCoreCapabilities", "specialDeviceStatus", "channelBusActiveCapabilities", "breakOffset", "delimiterOffset", "reserved"})
public class XLchannelConfig extends Structure{
public byte[] name = new byte[32];
public byte hwType;
public byte hwIndex;
public byte hwChannel;
public short transceiverType;
public short transceiverState;
public short configError;
public byte channelIndex;
public long channelMask;
public int channelCapabilities;
public int channelBusCapabilities;
public byte isOnBus;
public int connectedBusType;
public XLbusParams busParams= new XLbusParams();
public int _doNotUse;
public int driverVersion;
public int interfaceVersion;
public int[] raw_data = new int[(10)];
public int serialNumber;
public int articleNumber;
public byte[] transceiverName = new byte[32];
public int specialCabFlags;
public int dominantTimeout;
public byte dominantRecessiveDelay;
public byte recessiveDominantDelay;
public byte connectionInfo;
public byte currentlyAvailableTimestamps;
public short minimalSupplyVoltage;
public short maximalSupplyVoltage;
public int maximalBaudrate;
public byte fpgaCoreCapabilities;
public byte specialDeviceStatus;
public short channelBusActiveCapabilities;
public short breakOffset;
public short delimiterOffset;
public int[] reserved = new int[3];
public XLchannelConfig() {
super();
}
Die Klasse XLchannelConfig ist in einem Array, dass ich mit .toArray initialisiert habe.
Wenn ich die Attribute ausgebe, sehe ich, dass die Werte verschoben sind. Es sieht so aus als wären die Bits von dem einen Attribut in das nächste verschoben. Ich vermute, dass es an einem falschen Datentyp liegt, komme aber nicht darauf an welchem es liegt