package javaforce.controls.s7;
import javaforce.BE;
/**
* S7 Header
*
* @author pquiring
*/
public class S7Header {
public byte id = 0x32; //protocol id (always 0x32)
public byte rosctr = 1; //1=JOB 3=Ack_Data 7=UserData
public short res; //reserved
public short pdu_ref; //protocol data unit reference
public short param_length;
public short data_length;
public int size() {
switch (rosctr) {
case 1: return 10;
case 3: return 12;
}
return 0;
}
public void write(byte data[], int offset, short _param_length, short _data_length) {
pdu_ref = 0x500;
param_length = _param_length;
data_length = _data_length;
data[offset++] = id;
data[offset++] = rosctr;
BE.setuint16(data, offset, res); offset += 2;
BE.setuint16(data, offset, pdu_ref); offset += 2;
BE.setuint16(data, offset, param_length); offset += 2;
BE.setuint16(data, offset, data_length); offset += 2;
}
public void read(byte data[], int offset) throws Exception {
id = data[offset++];
rosctr = data[offset++];
res = (short)BE.getuint16(data, offset); offset += 2;
pdu_ref = (short)BE.getuint16(data, offset); offset += 2;
param_length = (short)BE.getuint16(data, offset); offset += 2;
data_length = (short)BE.getuint16(data, offset); offset += 2;
if (rosctr == 3) {
//error_cls = data[offset++]
//error_code = data[offset++]
}
}
}