Use Memory instead of abusing Strings

This commit is contained in:
Sebastian 2016-12-04 20:55:29 +01:00
parent 24745f476a
commit 2bffdb93c3
2 changed files with 40 additions and 6 deletions

View File

@ -1,17 +1,21 @@
import com.sun.jna.Library; import com.sun.jna.Library;
import com.sun.jna.Native; import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Memory;
public class SSS7 { public class SSS7 {
private interface NativeSSS7 extends Library { private interface NativeSSS7 extends Library {
public int libsss7_start(String serialport); public int libsss7_start(String serialport);
public int libsss7_can_send(); public int libsss7_can_send();
public void libsss7_send(String data); public void libsss7_send(Pointer data);
public int libsss7_send_failed(); public int libsss7_send_failed();
public int libsss7_has_received(); public int libsss7_has_received();
public void libsss7_get_received(String data); public void libsss7_get_received(Pointer data);
public void libsss7_stop(); public void libsss7_stop();
}; };
public final int payloadLength = 16;
private NativeSSS7 lib; private NativeSSS7 lib;
private String serial; private String serial;
@ -28,6 +32,20 @@ public class SSS7 {
return this.lib.libsss7_can_send() == 1; return this.lib.libsss7_can_send() == 1;
} }
public void send(byte[] data) {
Pointer p = new Memory(this.payloadLength);
for(long i = 0; i < this.payloadLength; i++) {
if(i < data.length) {
p.setByte(i, data[(int) i]);
}
else {
p.setByte(i, (byte) 0);
}
}
this.lib.libsss7_send(p);
}
public boolean sendFailed() { public boolean sendFailed() {
return this.lib.libsss7_send_failed() == 1; return this.lib.libsss7_send_failed() == 1;
} }
@ -36,9 +54,13 @@ public class SSS7 {
return this.lib.libsss7_has_received() == 1; return this.lib.libsss7_has_received() == 1;
} }
public String getReceived() { public byte[] getReceived() {
String tmp = new String(); Pointer p = new Memory(this.payloadLength);
this.lib.libsss7_get_received(tmp); this.lib.libsss7_get_received(p);
return tmp; return p.getByteArray(0, this.payloadLength);
}
public void stop() {
this.lib.libsss7_stop();
} }
} }

View File

@ -9,5 +9,17 @@ public class SSS7Test {
bus.start(); bus.start();
while(!bus.canSend());
bus.send("Hallo Java".getBytes());
while(!bus.canSend());
while(!bus.hasReceived());
byte[] data = bus.getReceived();
String str = new String(data);
System.out.println(str);
bus.stop();
} }
} }