package art.servers.etdserver.protocols.skp3; import java.io.ByteArrayOutputStream; public class SKP3_ProtocolWriter { public static final int STX = 0x7E; public static final int ETX = 0x7E; public static final int MASK = 0x7D; public static final int STX_FLAG = 0x5E; public static final int MASK_FLAG = 0x5D; // COMMAND-RESPONSE public static final int PING_CONTROLLER_QUERY = 0x81; public static final int PING_CONTROLLER_RESPONSE = 0x01; public static final int READ_SLAVE_DRIVER_VERSION_QUERY = 0x86; public static final int READ_SLAVE_DRIVER_VERSION_RESPONSE = 0x06; public static final int RESET_SLAVE_DRIVER_QUERY = 0xC7; public static final int RESET_SLAVE_DRIVER_RESPONSE = 0x47; public static final int CONFIGURE_DRIVER_QUERY = 0x8A; public static final int CONFIGURE_DRIVER_RESPONSE = 0x0A; public static final int READ_WRITE_TIME_QUERY = 0x8B; public static final int READ_WRITE_TIME_RESPONSE = 0x0B; public static final int READ_STATUS_CONTROLLER_QUERY = 0x8C; public static final int READ_STATUS_CONTROLLER_RESPONSE = 0x0C; public static final int READ_EVENT_QUERY = 0x8F; public static final int READ_EVENT_RESPONSE = 0x0F; public static final int READ_DATA_QUERY = 0xA0; public static final int READ_DATA_RESPONSE = 0x20; public static final int CLEAR_EVENTS_QUERY = 0xCF; public static final int CLEAR_EVENTS_RESPONSE = 0x4F; public static final int READ_DIAGNOSIS_DATA_QUERY = 0x90; public static final int READ_DIAGNOSIS_DATA_RESPONSE = 0x10; // ALARMS CFG CODES public static final int ERROR_CFG_EXTERNAL_MEMORY = 0x01; public static final int ERROR_CFG_RAM = 0x02; public static final int ERROR_CFG_FLASH = 0x04; public static final int ERROR_CFG_FRAM = 0x08; public static final int ERROR_CFG_RTC = 0x10; public static final int ERROR_CFG_WIZNET = 0x20; public static final int ERROR_CFG_CPLD_HW = 0x40; public static final int ERROR_CFG_CPLD_SW = 0x80; // ALARMS ERROR CODES public static final int ALARM_CFG_EXTERNAL_MEMORY_READ_ERROR = 0xFFFF; public static final int ALARM_CFG_RAM_UNINITIALISED = 0xFFFF; public static final int ALARM_CFG_RAM_SHORTCIRCUIT_DATA = 0xFFFE; public static final int ALARM_CFG_RAM_SHORTCIRCUIT_ADDRESS = 0xFFFD; public static final int ALARM_CFG_FLASH_UNINITIALISED = 0xFFFF; public static final int ALARM_CFG_FLASH_LACK_COMMS = 0xFFFE; public static final int ALARM_CFG_FLASH_MODEL_ERROR = 0xFFFD; public static final int ALARM_CFG_FRAM_UNINITIALISED = 0xFFFF; public static final int ALARM_CFG_FRAM_LACK_COMMS = 0xFFFE; public static final int ALARM_CFG_RTC_UNINITIALISED = 0xFFFF; public static final int ALARM_CFG_RTC_LACK_COMMS = 0xFFFE; public static final int ALARM_CFG_WIZNET_UNINITIALISED = 0xFFFF; public static final int ALARM_CFG_WIZNET_NO_COMMS = 0xFFFD; public static final int ALARM_CFG_CPLD_HW_UNKNOWN_ERROR = 0xFFFF; public static final int ALARM_CFG_CPLD_HW_WRITE_ERROR = 0xFFFE; public static final int ALARM_CFG_CPLD_HW_LIMIT_EXCEEDED = 0xFFFD; public static final int ALARM_CFG_CPLD_HW_UNKNOWN_COMMAND = 0xFFFC; public static final int ALARM_CFG_CPLD_HW_UNKNOWN_STATE = 0xFFFB; public static final int ALARM_CFG_CPLD_HW_OVERFLOW = 0xFFFA; public static final int ALARM_CFG_CPLD_HW_LACK_BUFFER_SPACE1 = 0xFFF9; public static final int ALARM_CFG_CPLD_HW_LACK_BUFFER_SPACE2 = 0xFFF8; public static final int ALARM_CFG_CPLD_SW_UNKNOWN_ERROR = 0xFFFF; public static final int ALARM_CFG_CPLD_SW_WRITE_ERROR = 0xFFFE; public static final int ALARM_CFG_CPLD_SW_LIMIT_EXCEEDED = 0xFFFD; public static final int ALARM_CFG_CPLD_SW_UNKNOWN_COMMAND = 0xFFFC; public static final int ALARM_CFG_CPLD_SW_UNKNOWN_STATE = 0xFFFB; public static final int ALARM_CFG_CPLD_SW_OVERFLOW = 0xFFFA; public static final int ALARM_CFG_CPLD_SW_LACK_BUFFER_SPACE1 = 0xFFF9; public static final int ALARM_CFG_CPLD_SW_LACK_BUFFER_SPACE2 = 0xFFF8; // DATA IDENTIFIERS COUNTING public static final int DATA_ID_TOTAL_L1 = 49; public static final int DATA_ID_TOTAL_L2 = 51; // DATA IDENTIFIERS LENGTH CLASSIFICATION public static final int DATA_ID_K1_L1 = 7; public static final int DATA_ID_K1_L2 = 9; public static final int DATA_ID_K2_L1 = 195; public static final int DATA_ID_K2_L2 = 515; public static final int DATA_ID_K3_L1 = 196; public static final int DATA_ID_K3_L2 = 516; // DATA IDENTIFIERS SPEED public static final int DATA_ID_AVG_SPEED_L1 = 77; public static final int DATA_ID_AVG_SPEED_L2 = 78; public static final int DATA_ID_MAX_SPEED_L1 = 71; public static final int DATA_ID_MAX_SPEED_L2 = 72; // DATA IDENTIFIERS SPEED CLASSIFICATION public static final int DATA_ID_30_L1 = 334; public static final int DATA_ID_30_L2 = 335; public static final int DATA_ID_30_40_L1 = 330; public static final int DATA_ID_30_40_L2 = 331; public static final int DATA_ID_40_50_L1 = 332; public static final int DATA_ID_40_50_L2 = 333; public static final int DATA_ID_50_60_L1 = 63; public static final int DATA_ID_50_60_L2 = 64; public static final int DATA_ID_60_70_L1 = 65; public static final int DATA_ID_60_70_L2 = 66; public static final int DATA_ID_70_80_L1 = 336; public static final int DATA_ID_70_80_L2 = 337; public static final int DATA_ID_80_90_L1 = 338; public static final int DATA_ID_80_90_L2 = 339; public static final int DATA_ID_90_100_L1 = 376; public static final int DATA_ID_90_100_L2 = 408; public static final int DATA_ID_100_110_L1 = 377; public static final int DATA_ID_100_110_L2 = 409; public static final int DATA_ID_110_120_L1 = 378; public static final int DATA_ID_110_120_L2 = 410; public static final int DATA_ID_120_130_L1 = 379; public static final int DATA_ID_120_130_L2 = 411; public static final int DATA_ID_130_140_L1 = 380; public static final int DATA_ID_130_140_L2 = 412; public static final int DATA_ID_140_150_L1 = 381; public static final int DATA_ID_140_150_L2 = 413; public static final int DATA_ID_150_160_L1 = 382; public static final int DATA_ID_150_160_L2 = 414; public static final int DATA_ID_160_170_L1 = 383; public static final int DATA_ID_160_170_L2 = 415; public static final int DATA_ID_170_180_L1 = 384; public static final int DATA_ID_170_180_L2 = 416; public static final int DATA_ID_180_L1 = 385; public static final int DATA_ID_180_L2 = 417; // CFG MULTIPLIERS public static final int CFG_MULTIPLIER_1 = 0; public static final int CFG_MULTIPLIER_10 = 1; public static final int CFG_MULTIPLIER_100 = 2; public static final int CFG_MULTIPLIER_1000 = 3; private ByteArrayOutputStream bos = new ByteArrayOutputStream(); public SKP3_ProtocolWriter() { } public void write(int data) { bos.write(data); } public void writeShort(int data) { bos.write((data >> 8) & 0xFF); bos.write((data & 0xFF)); } public void writeInt(int data) { bos.write((data >> 24) & 0xFF); bos.write((data >> 16) & 0xFF); bos.write((data >> 8) & 0xFF); bos.write((data & 0xFF)); } public void writeString(String data) { for (int i=0; i> 8)); bos.write((serialNumber & 0xFF)); } public void writeHeader() { bos.write('S'); bos.write('K'); bos.write('P'); bos.write('3'); } public void STX() { bos.write(STX); } public void ETX() { bos.write(ETX); } public int[] applyMask(int[] command) { int newLength = 0; for (int i=0; i