183 lines
3.1 KiB
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;
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|