sss7modem/software/jna/SSS7.java

75 lines
1.6 KiB
Java

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.Memory;
public class SSS7 {
private static SSS7 instance = null;
public static SSS7 getInstance() {
if(instance == null) {
instance = new SSS7();
}
return instance;
}
private interface NativeSSS7 extends Library {
public int libsss7_start(String serialport);
public int libsss7_can_send();
public void libsss7_send(Pointer data);
public int libsss7_send_failed();
public int libsss7_has_received();
public void libsss7_get_received(Pointer data);
public void libsss7_stop();
};
public final int payloadLength = 16;
private NativeSSS7 lib;
private String serial;
protected SSS7() {
this.lib = (NativeSSS7) Native.loadLibrary("libsss7.so", NativeSSS7.class);
}
public boolean start(String serial) {
return this.lib.libsss7_start(this.serial) == 0;
}
public boolean canSend() {
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;
}
public boolean hasReceived() {
return this.lib.libsss7_has_received() == 1;
}
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();
}
}