org.hwo.pulscounter/src/org/hwo/pulscounter/DeviceControlChannel.java

183 lines
3.1 KiB
Java

package org.hwo.pulscounter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
/* DeviceControlChannel
*
* Binary Serial Protocol based on telegrams
*
* telegram:
*
* byte length of next telegram
* byte request
* byte options
* byte reserve
* int32 parameter1
* int32 parameter2
*
*
*/
public class DeviceControlChannel {
public class Telegram
{
private byte[] buffer;
private byte request;
private byte options;
private Integer parameter1;
private Integer parameter2;
public Telegram()
{
buffer = new byte[12];
request = 0;
options = 0;
parameter1 = 0;
parameter2 = 0;
}
public Telegram(byte request)
{
this.request = request;
options = 0;
parameter1 = 0;
parameter2 = 0;
}
public Telegram(byte request,byte options)
{
this.request = request;
this.options = options;
parameter1 = 0;
parameter2 = 0;
}
public Telegram(byte request,byte options,int parameter1,int parameter2)
{
this.request = request;
this.options = options;
this.parameter1 = parameter1;
this.parameter2 = parameter2;
}
public byte[] getBuffer()
{
return this.buffer;
}
public void decodeBuffer()
{
ByteBuffer bb = ByteBuffer.wrap(buffer);
bb.get();
request = bb.get();
options = bb.get();
bb.get();
parameter1 = bb.getInt();
parameter2 = bb.getInt();
}
public Telegram(byte[] buffer)
{
this.buffer = buffer;
decodeBuffer();
}
public byte[] toArray()
{
return ByteBuffer.allocate(12)
.put((byte)11)
.put(request)
.put(options)
.put((byte)0)
.putInt(parameter1)
.putInt(parameter2)
.array();
}
public byte getRequest() {
return request;
}
public void setRequest(byte request) {
this.request = request;
}
public byte getOptions() {
return options;
}
public void setOptions(byte options) {
this.options = options;
}
public Integer getParameter1() {
return parameter1;
}
public void setParameter1(Integer parameter1) {
this.parameter1 = parameter1;
}
public Integer getParameter2() {
return parameter2;
}
public void setParameter2(Integer parameter2) {
this.parameter2 = parameter2;
}
}
public static byte NOOP = 0;
public static byte READ = 1;
public static byte WRITE = 2;
public static byte COMMAND = 3;
public static byte REPLY = 8;
private InputStream inputStream;
private OutputStream outputStream;
public DeviceControlChannel(InputStream input,OutputStream output)
{
this.inputStream = input;
this.outputStream = output;
}
public Telegram sendRequest(Telegram request)
{
Telegram response = new Telegram();
try {
outputStream.write(request.toArray());
inputStream.read(response.getBuffer());
} catch (IOException e) {
e.printStackTrace();
}
if (request.getRequest() != response.getRequest())
System.err.println("DDC Error!");
return response;
}
public void noop()
{
sendRequest(new Telegram());
}
public int readInteger()
{
return 0;
}
}