package art.servers.etdserver.protocols.skp3; import art.library.model.devices.Device; import art.library.model.devices.etd.Etd; import art.library.model.devices.etd.EtdAlarms; import art.library.model.devices.etd.EtdInformation; import art.library.model.devices.etd.EtdStatus; import art.library.model.devices.etd.status.EtdStatusLane; import art.servers.etdserver.Shared; import java.util.HashMap; public class SKP3_ProtocolAnalyser { public static final int MASK_CHAR = 0x7D; public static final int FLAG_CHAR = 0x7E; public static int[] getData(int[] command) { int[] result = new int[command.length-3]; System.arraycopy(command, 1, result, 0, result.length); return(unapplyMask(result)); } public static int[] unapplyMask(int[] command) { try { int newLength = 0; for (int i=0; i hactiveAlarms = new HashMap(); for (int i=0; i information.lLane.size()) { for (int i=status.llane.size()-1; i>=information.lLane.size(); i--) { status.llane.remove(status.llane.size()-1); } } for (int i=0; i information.lSection.size()) { for (int i=status.lsection.size()-1; i>=information.lSection.size(); i--) { status.lsection.remove(status.lsection.size()-1); } } for (int i=0; i> 4) & 0x0F; data.value = message.readShortHigh(); data.value = data.value + ((aux & 0x0F) << 16); try { switch (data.identifier) { case SKP3_ProtocolWriter.DATA_ID_TOTAL_L1: { status.llane.get(0).counting = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_TOTAL_L2: { status.llane.get(1).counting = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_AVG_SPEED_L1: { status.llane.get(0).speed = data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_AVG_SPEED_L2: { status.llane.get(1).speed = data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_K1_L1: { status.llane.get(0).lengths[0] += (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_K2_L1: { status.llane.get(0).lengths[0] += (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_K3_L1: { status.llane.get(0).lengths[1] += (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_K1_L2: { status.llane.get(1).lengths[0] += (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_K2_L2: { status.llane.get(1).lengths[0] += (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_K3_L2: { status.llane.get(1).lengths[1] += (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_30_L1: { status.llane.get(0).speeds[0] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_30_40_L1: { status.llane.get(0).speeds[1] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_40_50_L1: { status.llane.get(0).speeds[2] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_50_60_L1: { status.llane.get(0).speeds[3] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_60_70_L1: { status.llane.get(0).speeds[4] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_70_80_L1: { status.llane.get(0).speeds[5] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_80_90_L1: { status.llane.get(0).speeds[6] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_90_100_L1: { status.llane.get(0).speeds[7] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_100_110_L1: { status.llane.get(0).speeds[8] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_110_120_L1: { status.llane.get(0).speeds[9] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_120_130_L1: { status.llane.get(0).speeds[10] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_130_140_L1: { status.llane.get(0).speeds[11] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_140_150_L1: { status.llane.get(0).speeds[12] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_150_160_L1: { status.llane.get(0).speeds[13] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_160_170_L1: { status.llane.get(0).speeds[14] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_170_180_L1: { status.llane.get(0).speeds[15] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_180_L1: { status.llane.get(0).speeds[16] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_30_L2: { status.llane.get(1).speeds[0] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_30_40_L2: { status.llane.get(1).speeds[1] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_40_50_L2: { status.llane.get(1).speeds[2] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_50_60_L2: { status.llane.get(1).speeds[3] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_60_70_L2: { status.llane.get(1).speeds[4] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_70_80_L2: { status.llane.get(1).speeds[5] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_80_90_L2: { status.llane.get(1).speeds[6] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_90_100_L2: { status.llane.get(1).speeds[7] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_100_110_L2: { status.llane.get(1).speeds[8] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_110_120_L2: { status.llane.get(1).speeds[9] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_120_130_L2: { status.llane.get(1).speeds[10] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_130_140_L2: { status.llane.get(1).speeds[11] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_140_150_L2: { status.llane.get(1).speeds[12] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_150_160_L2: { status.llane.get(1).speeds[13] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_160_170_L2: { status.llane.get(1).speeds[14] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_170_180_L2: { status.llane.get(1).speeds[15] = (int)data.getValue(); } break; case SKP3_ProtocolWriter.DATA_ID_180_L2: { status.llane.get(1).speeds[16] = (int)data.getValue(); } break; } } catch (Exception e) { } } try { for (EtdStatusLane laneStatus : status.llane) { int classified = 0; for (int i=0; i= 7) { if ((j == 3) || (j == 4) || (j == 5)) totalTrucksLane += laneStatus.lengths[j]; } } laneStatus.overspeedCars = 0; for (int k=0; k 0) { laneStatus.maxSpeed = (double)((double)etd.getDeviceInformation().lSpeedClassification.get(k).upperLimit + (double)etd.getDeviceInformation().lSpeedClassification.get(k).lowerLimit) / 2d; if (etd.getDeviceInformation().lSpeedClassification.get(k).lowerLimit >= speedLimit) { laneStatus.overspeedCars += laneStatus.speeds[k]; } } } if (totalVehiclesLane > 0) { laneStatus.heavyTrucks = (float)((float)totalTrucksLane / (float)totalVehiclesLane) * 100f; int heavyTrucks = (int)(laneStatus.heavyTrucks*100f); laneStatus.heavyTrucks = (float)((float)heavyTrucks / 100f); } if (laneStatus.maxSpeed > 0) { int maxSpeed = (int)(laneStatus.maxSpeed*100d); laneStatus.maxSpeed = (double)((double)maxSpeed / 100d); } } for (int s=0; s= 7) { if ((j == 3) || (j == 4) || (j == 5)) totalTrucksLane += sectionStatus.lengths[j]; } } sectionStatus.overspeedCars = 0; for (int k=0; k 0) { sectionStatus.maxSpeed = (double)((double)etd.getDeviceInformation().lSpeedClassification.get(k).upperLimit + (double)etd.getDeviceInformation().lSpeedClassification.get(k).lowerLimit) / 2d; if (etd.getDeviceInformation().lSpeedClassification.get(k).lowerLimit >= speedLimit) { sectionStatus.overspeedCars += sectionStatus.speeds[k]; } } } if (totalVehiclesLane > 0) { sectionStatus.heavyTrucks = (float)((float)totalTrucksLane / (float)totalVehiclesLane) * 100f; int heavyTrucks = (int)(sectionStatus.heavyTrucks*100f); sectionStatus.heavyTrucks = (float)((float)heavyTrucks / 100f); } if (sectionStatus.maxSpeed > 0) { int maxSpeed = (int)(sectionStatus.maxSpeed*100d); sectionStatus.maxSpeed = (double)((double)maxSpeed / 100d); } } EtdStatusLane totalStatus = status.total; int totalTrucksLane = 0; int totalVehiclesLane = totalStatus.counting; for (int j=0; j= 7) { if ((j == 3) || (j == 4) || (j == 5)) totalTrucksLane += totalStatus.lengths[j]; } } totalStatus.overspeedCars = 0; for (int k=0; k 0) { totalStatus.maxSpeed = (double)((double)etd.getDeviceInformation().lSpeedClassification.get(k).upperLimit + (double)etd.getDeviceInformation().lSpeedClassification.get(k).lowerLimit) / 2d; if (etd.getDeviceInformation().lSpeedClassification.get(k).lowerLimit >= speedLimit) { totalStatus.overspeedCars += totalStatus.speeds[k]; } } } if (totalVehiclesLane > 0) { totalStatus.heavyTrucks = (float)((float)totalTrucksLane / (float)totalVehiclesLane) * 100f; int heavyTrucks = (int)(totalStatus.heavyTrucks*100f); totalStatus.heavyTrucks = (float)((float)heavyTrucks / 100f); } if (totalStatus.maxSpeed > 0) { int maxSpeed = (int)(totalStatus.maxSpeed*100d); totalStatus.maxSpeed = (double)((double)maxSpeed / 100d); } } private static int getSpeedLimit(String etdIdentifier) { try { if (etdIdentifier.equalsIgnoreCase("etd-krzewica-1")) return(90); if (etdIdentifier.equalsIgnoreCase("etd-terespol-1")) return(90); if (etdIdentifier.equalsIgnoreCase("etd-wólkaokopska-1")) return(70); if (etdIdentifier.equalsIgnoreCase("etd-żyrzyn-1")) return(70); if (etdIdentifier.equalsIgnoreCase("etd-piaski-1")) return(50); if (etdIdentifier.equalsIgnoreCase("etd-łopienniknadrzeczny-1")) return(50); if (etdIdentifier.equalsIgnoreCase("etd-izbica-1")) return(50); if (etdIdentifier.equalsIgnoreCase("etd-łabuniereforma-1")) return(50); if (etdIdentifier.equalsIgnoreCase("etd-polanówka-1")) return(50); if (etdIdentifier.equalsIgnoreCase("etd-hrebenne-1")) return(70); if (etdIdentifier.equalsIgnoreCase("etd-międzyrzecpodlaski-1")) return(100); if (etdIdentifier.equalsIgnoreCase("etd-radzyńpodlaski-1")) return(90); if (etdIdentifier.equalsIgnoreCase("etd-sobieszyn-1")) return(70); if (etdIdentifier.equalsIgnoreCase("etd-annopol-1")) return(70); if (etdIdentifier.equalsIgnoreCase("etd-szczebrzeszyn-1")) return(70); if (etdIdentifier.equalsIgnoreCase("etd-miączyn-1")) return(70); if (etdIdentifier.equalsIgnoreCase("etd-łęczna-1")) return(70); if (etdIdentifier.equalsIgnoreCase("etd-włodawa-1")) return(50); if (etdIdentifier.equalsIgnoreCase("etd-wisznice-1")) return(70); if (etdIdentifier.equalsIgnoreCase("etd-sławatycze-1")) return(50); if (etdIdentifier.equalsIgnoreCase("etd-staraprawda-1")) return(60); } catch (Exception e) { e.printStackTrace(); } return(70); } }