package art.servers.colorsserver.M.protocol;
|
|
import java.io.ByteArrayOutputStream;
|
|
public class M_ProtocolWriter
|
{
|
public static final int STX = 0x02;
|
public static final int ETX = 0x03;
|
public static final int EOB12 = 0x0A;
|
public static final int EOB14 = 0x0C;
|
public static final int EOB15 = 0x0D;
|
|
public static final int HTR = 0x33;
|
public static final int PRH = 0x40;
|
public static final int DET = 0x20;
|
|
public static final int M_READ_TABLE_FULL = 0x20; // A0;
|
public static final int M_WRITE_TABLE_FULL = 0x60; // E0;
|
public static final int M_READ_TABLE_PARTIAL = 0x21; // A1;
|
public static final int M_WRITE_TABLE_PARTIAL = 0x61; // E1;
|
|
public static final int M_START_RECORDING = 0x59; // D9;
|
public static final int M_START_RECORDING_RESPONSE = 0x19; // 99;
|
|
public static final int M_END_RECORDING = 0x5A; // DA;
|
public static final int M_END_RECORDING_RESPONSE = 0x1A; // 9A;
|
|
public static final int M_RECORDABLE_PLAN_QUERY = 0x10; // 90;
|
public static final int M_CURRENT_PLAN_QUERY = 0x11; // 91;
|
public static final int M_CURRENT_TIME_QUERY = 0x12; // 92;
|
public static final int M_CURRENT_SUBCONTROLLER_STATE_QUERY = 0x14; // 94;
|
public static final int M_CURRENT_PRESENCE_DETECTORS = 0x30; // B0;
|
public static final int M_CURRENT_COUNTING_DETECTORS_DATETIME = 0x32; // B2;
|
public static final int M_CURRENT_COUNTING_DETECTORS = 0x33; // B3;
|
public static final int M_ALARMS_QUERY = 0x34; // B4;
|
public static final int M_BLOWN_LAMPS_ALARMS_QUERY = 0x35; // B5;
|
public static final int M_DAMAGED_GROUP_ALARMS_QUERY = 0x36; // B6;
|
public static final int M_INCOMPATIBILITY_ALARMS_QUERY = 0x37; // B7;
|
public static final int M_CURRENT_STATUS_GROUPS_QUERY = 0x39; // B9;
|
|
public static final int M_SET_REALTIME_BUS_DETECTIONS_ENABLE = 0x40; // C0;
|
public static final int M_SET_REALTIME_BUS_DETECTIONS_DISABLE = 0x41; // C1;
|
|
public static final int M_REALTIME_BUS_DETECTIONS = 0x3B; // BB;
|
public static final int M_BUS_DETECTIONS_QUERY = 0x3C; // BC;
|
|
public static final int M_SAVE_RECORDABLE_PLAN = 0x50; // D0;
|
public static final int M_SELECT_PLAN = 0x51; // D1;
|
public static final int M_SET_TIME = 0x52; // D2;
|
public static final int M_SET_REALTIME_DETECTORS = 0x53; // D3;
|
public static final int M_SET_STATE = 0x54; // D4;
|
public static final int M_PHASE_CHANGING = 0x55; // D5;
|
public static final int M_DIRECT_GROUP_OUTPUT = 0x56; // D6;
|
public static final int M_GROUPS_REALTIME_ENABLE = 0x5B; // DB;
|
public static final int M_GROUPS_REALTIME_DISABLE = 0x5C; // DC;
|
public static final int M_ERASE_ALARMS = 0x5D; // DD;
|
|
public static final int M_SELECT_SPECIAL_DEMAND = 0x5E; // DE;
|
public static final int M_CANCEL_SPECIAL_DEMAND = 0x5F; // DF;
|
|
private ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
|
public M_ProtocolWriter()
|
{
|
}
|
|
|
public void write(int data)
|
{
|
bos.write((data & 0x7F) + 0x80);
|
}
|
|
|
public void writeRaw(int data)
|
{
|
bos.write(data);
|
}
|
|
|
public void writeEOB(int data)
|
{
|
bos.write(data & 0x7F);
|
}
|
|
|
public void write(int[] data)
|
{
|
for (int i=0; i<data.length; i++)
|
{
|
write(data[i]);
|
}
|
}
|
|
|
public void STX()
|
{
|
bos.write(STX & 0x7F);
|
}
|
|
|
public void DET()
|
{
|
bos.write(DET & 0x7F);
|
}
|
|
|
public void ETX(boolean hasCRC)
|
{
|
if (hasCRC == true)
|
{
|
byte[] data = toByteArray();
|
byte crc = 0x00;
|
for (int i=1; i<data.length; i++)
|
{
|
crc = (byte)(crc ^ (byte)((data[i] - 0x80)));
|
}
|
|
bos.write((crc & 0x7F) + 0x80);
|
}
|
|
bos.write(ETX & 0x7F);
|
}
|
|
// 02 81 A0 8F AE 03
|
|
public void EOB12()
|
{
|
bos.write(EOB12 & 0x7F);
|
}
|
|
public void EOB14()
|
{
|
bos.write(EOB14 & 0x7F);
|
}
|
|
public void EOB15()
|
{
|
bos.write(EOB15 & 0x7F);
|
}
|
|
|
|
public byte[] toByteArray()
|
{
|
return bos.toByteArray();
|
}
|
|
|
public int[] toIntegerArray()
|
{
|
byte[] data = bos.toByteArray();
|
int[] result = new int[data.length];
|
for (int i=0; i<data.length; i++) result[i] = (int)data[i] & 0xFF;
|
return result;
|
}
|
|
|
public M_Message createMessage(int controllerCode)
|
{
|
M_Message message = new M_Message();
|
message.controller = controllerCode;
|
message.setData(toByteArray());
|
message.fillInformation();
|
return(message);
|
}
|
|
}
|