Use Memory instead of abusing Strings
This commit is contained in:
parent
24745f476a
commit
2bffdb93c3
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue