WIP161209
parent
ae09543e3d
commit
0d07076547
|
@ -64,7 +64,7 @@ public class ServiceLink implements NewSerialPortListener {
|
|||
|
||||
public ServiceLink(NewSerialPort serialPort)
|
||||
{
|
||||
this.requestTimeOut = 75;
|
||||
this.requestTimeOut = 500;
|
||||
|
||||
this.serviceLinkListeners = new LinkedList<ServiceLinkListener>();
|
||||
this.retries = 3;
|
||||
|
@ -181,6 +181,7 @@ public class ServiceLink implements NewSerialPortListener {
|
|||
try {
|
||||
request.wait(requestTimeOut);
|
||||
} catch (InterruptedException e) {
|
||||
log(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -195,6 +196,7 @@ public class ServiceLink implements NewSerialPortListener {
|
|||
synchronized (pendingRequests) {
|
||||
if (pendingRequests.containsKey(rx.getAddress())){
|
||||
for (ServiceLinkTelegram pending: pendingRequests.get(rx.getAddress())){
|
||||
log(DEBUGDETAIL,"Found Pending: %s", pending);
|
||||
if ((pending.getOpcode() & (REQ_INT | REQ_FLOAT))==(rx.getOpcode() & (REQ_INT | REQ_FLOAT))){
|
||||
synchronized (pending) {
|
||||
pending.setValue(rx.getValue());
|
||||
|
@ -271,14 +273,14 @@ public class ServiceLink implements NewSerialPortListener {
|
|||
public void writeInt(int achse,int knoten,int register,int value) throws IOException, ServiceLinkException, ServiceLinkRequestFailedException
|
||||
{
|
||||
ServiceLinkTelegram request = useV2 ?
|
||||
new ServiceLinkV2Telegram(REQ_INT | REQ_WRITE, achse, knoten, register, null) :
|
||||
new ServiceLinkV1Telegram(REQ_INT | REQ_WRITE, achse, knoten, register, null);
|
||||
new ServiceLinkV2Telegram(REQ_INT | REQ_WRITE, achse, knoten, register, value) :
|
||||
new ServiceLinkV1Telegram(REQ_INT | REQ_WRITE, achse, knoten, register, value);
|
||||
queueRequest(request);
|
||||
}
|
||||
public void writeFloat(int achse,int knoten,int register,float value) throws IOException, ServiceLinkException, ServiceLinkRequestFailedException{
|
||||
ServiceLinkTelegram request = useV2 ?
|
||||
new ServiceLinkV2Telegram(REQ_FLOAT | REQ_WRITE, achse, knoten, register, null) :
|
||||
new ServiceLinkV1Telegram(REQ_FLOAT | REQ_WRITE, achse, knoten, register, null);
|
||||
new ServiceLinkV2Telegram(REQ_FLOAT | REQ_WRITE, achse, knoten, register, value) :
|
||||
new ServiceLinkV1Telegram(REQ_FLOAT | REQ_WRITE, achse, knoten, register, value);
|
||||
queueRequest(request);
|
||||
}
|
||||
|
||||
|
@ -333,13 +335,20 @@ public class ServiceLink implements NewSerialPortListener {
|
|||
return;
|
||||
}
|
||||
}
|
||||
rx = useV2 ?
|
||||
new ServiceLinkV2Telegram(getSerialPort().getInputStream()) :
|
||||
new ServiceLinkV1Telegram(getSerialPort().getInputStream()) ;
|
||||
|
||||
if (rx != null){
|
||||
received(rx);
|
||||
}
|
||||
|
||||
try {
|
||||
rx = useV2 ?
|
||||
new ServiceLinkV2Telegram(getSerialPort().getInputStream()) :
|
||||
new ServiceLinkV1Telegram(getSerialPort().getInputStream()) ;
|
||||
|
||||
if (rx != null){
|
||||
if (!rx.isNull()){
|
||||
received(rx);
|
||||
};
|
||||
}
|
||||
} catch (Exception io){
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,9 @@ package org.hwo.servicelink;
|
|||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.lang.Thread.State;
|
||||
import static org.hwo.logging.LogLevel.*;
|
||||
import static org.hwo.logging.Logging.*;
|
||||
|
||||
public abstract class ServiceLinkTelegram {
|
||||
|
||||
|
@ -74,9 +77,13 @@ public abstract class ServiceLinkTelegram {
|
|||
return value;
|
||||
}
|
||||
public void setValue(Object value) {
|
||||
log(DEBUGDETAIL,"setValue( %s )",value);
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public boolean isNull(){
|
||||
return (getAddress().getAx()==0) && (getAddress().getNode()==0) && (getAddress().getRegister()==0) && (opcode == 0) && value.equals(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ import java.util.zip.CRC32;
|
|||
import org.hwo.ByteArrayHexlifier;
|
||||
import org.hwo.ChkSum;
|
||||
import org.hwo.servicelink.exceptions.CRCFailedException;
|
||||
import org.hwo.servicelink.exceptions.ServiceLinkException;
|
||||
|
||||
import static org.hwo.logging.Logging.*;
|
||||
import static org.hwo.logging.LogLevel.*;
|
||||
|
@ -32,13 +33,14 @@ public class ServiceLinkV2Telegram extends ServiceLinkTelegram {
|
|||
byte[] buffer = new byte[8];
|
||||
|
||||
try {
|
||||
in.read(buffer, 0, 8);
|
||||
in.read(buffer, 0, 8);
|
||||
} catch (IOException e) {
|
||||
log(e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
log(DEBUGDETAIL,"RX BYTES: %s",ByteArrayHexlifier.byteArrayToString(buffer));
|
||||
|
||||
setAddress(new ServiceLinkAddress((buffer[1]>>4) & 0x0F, buffer[1] & 0x0F, ((int)buffer[2]) | ((int)buffer[3])<<8 ));
|
||||
setAddress(new ServiceLinkAddress((buffer[1]>>4) & 0x0F, buffer[1] & 0x0F, (((int)buffer[2])&0xff) | (((int)buffer[3])<<8)&0xFF00 ));
|
||||
|
||||
int op = 0;
|
||||
|
||||
|
@ -49,7 +51,16 @@ public class ServiceLinkV2Telegram extends ServiceLinkTelegram {
|
|||
setOpcode(op);
|
||||
|
||||
if ((op & (REQ_READ | REQ_ACK))==(REQ_READ | REQ_ACK)){
|
||||
// ToDo: set value...
|
||||
ByteBuffer bb = ByteBuffer.wrap(buffer);
|
||||
|
||||
if ((op & REQ_FLOAT)==REQ_FLOAT){
|
||||
log(DEBUGDETAIL,"############################################################");
|
||||
setValue( bb.order(ByteOrder.LITTLE_ENDIAN).asFloatBuffer().get(1) );
|
||||
} else {
|
||||
log(DEBUGDETAIL,"*************************************************************");
|
||||
setValue( bb.order(ByteOrder.LITTLE_ENDIAN).asIntBuffer().get(1) );
|
||||
}
|
||||
|
||||
} else {
|
||||
setValue(null);
|
||||
}
|
||||
|
@ -58,7 +69,25 @@ public class ServiceLinkV2Telegram extends ServiceLinkTelegram {
|
|||
|
||||
@Override
|
||||
public byte[] toByteArray() {
|
||||
return null;
|
||||
byte[] buffer = new byte[8];
|
||||
byte[] bv;
|
||||
int i;
|
||||
|
||||
i = (getOpcode() & REQ_WRITE) == REQ_WRITE ? 0x01 : 0x00;
|
||||
i |= (getOpcode() & REQ_FLOAT) == REQ_FLOAT ? 0x02 : 0x00;
|
||||
|
||||
buffer[0] = (byte)i;
|
||||
buffer[1] = (byte)( ((getAddress().getAx()&0x0F)<<4) | (getAddress().getNode() & 0x0F) );
|
||||
buffer[2] = (byte)(getAddress().getRegister() & 0xFF);
|
||||
buffer[3] = (byte)((getAddress().getRegister()>>8) & 0xFF);
|
||||
|
||||
bv = valueAsByteArray();
|
||||
buffer[4] = bv[0];
|
||||
buffer[5] = bv[1];
|
||||
buffer[6] = bv[2];
|
||||
buffer[7] = bv[3];
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue