org.hwo.pulscounter/src/org/hwo/pulscounter/SnapShot.java

272 lines
5.9 KiB
Java

package org.hwo.pulscounter;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.UUID;
import org.hwo.csv.CSVRecord;
import org.hwo.models.TableMapper.TableColumn;
import org.hwo.servicelink.ServiceLink;
import org.hwo.servicelink.exceptions.ServiceLinkException;
import org.hwo.ui.diagram.annotation.Plot;
public class SnapShot {
UUID uuid;
Integer deviceSerial;
Integer index;
Integer timestamp;
Integer field0;
Integer[] values;
Integer[] analog;
Integer[] merker;
Integer inputmask,
outputmask,
pullupmask,
invertmask,
triggermask;
static SimpleDateFormat
df = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
public SnapShot(int deviceSerial){
this.deviceSerial = deviceSerial;
this.values = new Integer[32];
this.analog = new Integer[8];
this.merker = new Integer[24];
}
public SnapShot(){
this.values = new Integer[32];
this.analog = new Integer[8];
}
public SnapShot(byte[] bytes){
this.values = new Integer[32];
this.analog = new Integer[8];
fromBytes(bytes);
}
public SnapShot(ResultSet rs) throws SQLException {
this.values = new Integer[32];
this.analog = new Integer[8];
this.deviceSerial = rs.getInt("device");
this.index = rs.getInt("snap_id");
this.timestamp = rs.getInt("timestamp");
this.inputmask = rs.getInt("inputs");
this.outputmask = rs.getInt("outputs");
this.invertmask = rs.getInt("inverts");
this.triggermask = 0;
this.pullupmask = rs.getInt("pullups");
this.field0 = rs.getInt("field0");
Object[] va = (Object[])rs.getArray("counters").getArray();
for (int i=0;i<32;i++){
this.values[i] = (Integer)va[i];
}
va = (Object[])rs.getArray("analogs").getArray();
for (int i=0;i<8;i++){
this.analog[i] = (Integer)va[i];
}
}
@TableColumn(label="Gerät",order=5,width=80)
public Integer getDeviceSerial() {
return deviceSerial;
}
public void setDeviceSerial(Integer deviceSerial) {
this.deviceSerial = deviceSerial;
}
@TableColumn(label="HW-Index",order=0,width=80)
public Integer getIndex() {
return index;
}
public void setIndex(Integer index) {
this.index = index;
}
public void setField0(Integer field0) {
this.field0 = field0;
}
public Integer getField0() {
return field0;
}
public void setTimestamp(Integer timestamp) {
this.timestamp = timestamp;
}
public Integer getTimestamp() {
return timestamp;
}
public Integer getInputmask() {
return inputmask;
}
public void setInputmask(Integer inputmask) {
this.inputmask = inputmask;
}
public Integer getOutputmask() {
return outputmask;
}
public void setOutputmask(Integer outputmask) {
this.outputmask = outputmask;
}
public Integer getPullupmask() {
return pullupmask;
}
public void setPullupmask(Integer pullupmask) {
this.pullupmask = pullupmask;
}
public Integer getInvertmask() {
return invertmask;
}
public void setInvertmask(Integer invertmask) {
this.invertmask = invertmask;
}
public Integer getTriggermask() {
return triggermask;
}
public void setTriggermask(Integer triggermask) {
this.triggermask = triggermask;
}
public void setValue(Integer ch,Integer value){
if ((ch >= 0) && (ch<32)){
this.values[ch] = value;
}
}
@Plot(label="Zähler %d",instances=32)
public Integer getValue(Integer ch){
if ((ch >= 0) && (ch<32)){
return this.values[ch];
}
return null;
}
@TableColumn(label="Zähler #%d",order=50,fieldlength=32, width=80)
public Integer[] getValues(){
return Arrays.copyOf(this.values, this.values.length);
}
public void setAnalog(Integer ch,Integer value){
if ((ch >= 0) && (ch<8)){
this.analog[ch] = value;
}
}
public Integer getAnalog(Integer ch){
if ((ch >= 0) && (ch<8)){
return this.analog[ch];
}
return null;
}
public Integer[] getAnalog(){
return Arrays.copyOf(this.analog, this.analog.length);
}
public long getHashCode(){
return ((long)timestamp << 32) | field0;
}
public TriggerType getTriggerType(){
return TriggerType.get(this.field0 & 0xff);
}
public int getSource(){
return (field0 >> 8) & 0xff;
}
@TableColumn(label="Zeitstempel",order=10,width=100)
public String getTimeStampFormated(){
return df.format(new Date(((long)timestamp)*1000));
}
public byte[] toBytes(){
byte[] buffer = new byte[256];
ByteBuffer bb = ByteBuffer.wrap(buffer);
Arrays.fill(buffer, (byte)0);
bb.putInt(0, timestamp);
bb.putInt(4, field0);
bb.putInt(8, inputmask);
bb.putInt(12, outputmask);
bb.putInt(16, pullupmask);
bb.putInt(20, invertmask);
bb.putInt(24, triggermask);
for (int i=0;i<32;i++){
bb.putInt(32 + (i<<2), values[i]);
}
for (int i=0;i<8;i++){
bb.putInt(160 + (i<<2), analog[i]);
}
return buffer;
}
private void fromBytes(byte[] bytes){
ByteBuffer bb = ByteBuffer.wrap(bytes);
timestamp = bb.getInt(0);
field0 = bb.getInt(4);
inputmask = bb.getInt(8);
outputmask = bb.getInt(12);
pullupmask = bb.getInt(16);
invertmask = bb.getInt(20);
triggermask = bb.getInt(24);
for (int i=0;i<32;i++){
values[i] = bb.getInt(32 + (i<<2));
}
for (int i=0;i<8;i++){
analog[i] = bb.getInt(160 + (i<<2));
}
}
public CSVRecord getCSVRecord(){
return getCSVRecord(false);
}
public CSVRecord getCSVRecord(Boolean extended){
CSVRecord record = new CSVRecord();
if (extended)
record.appendValue(timestamp);
record.appendValue(df.format(new Date(((long)timestamp)*1000)));
if (extended){
record.appendValue(field0 & 0x000000FF);
record.appendValue((field0 >> 8) & 0xff);
}
for (int n=0;n<32;n++)
record.appendValue( values[n]);
for (int n=0;n<8;n++)
record.appendValue( analog[n]);
return record;
}
@Override
public String toString() {
return String.format("SnapShot [ Device: %d Timestamp: %d ]",this.deviceSerial,this.timestamp);
}
}