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.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Memory;
public class SSS7 {
private interface NativeSSS7 extends Library {
public int libsss7_start(String serialport);
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_has_received();
public void libsss7_get_received(String data);
public void libsss7_get_received(Pointer data);
public void libsss7_stop();
};
public final int payloadLength = 16;
private NativeSSS7 lib;
private String serial;
@ -28,6 +32,20 @@ public class SSS7 {
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() {
return this.lib.libsss7_send_failed() == 1;
}
@ -36,9 +54,13 @@ public class SSS7 {
return this.lib.libsss7_has_received() == 1;
}
public String getReceived() {
String tmp = new String();
this.lib.libsss7_get_received(tmp);
return tmp;
public byte[] getReceived() {
Pointer p = new Memory(this.payloadLength);
this.lib.libsss7_get_received(p);
return p.getByteArray(0, this.payloadLength);
}
public void stop() {
this.lib.libsss7_stop();
}
}

View File

@ -9,5 +9,17 @@ public class SSS7Test {
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();
}
}