Open fullipsori opened 1 year ago
public static Object EvalCAN(TriggerParser trigger, Tuple canmsg) { try { byte[] rawdata = Base64.decode(canmsg.getString("DATA")); long baseTime = canmsg.getLong("BaseTime"); int rawvalue = 0; int startbyte = trigger.sigstartbit >> 3; int lastbyte = (trigger.sigstartbit + trigger.siglength -1) >> 3; trigger.time = canmsg.getLong("DeltaTime"); /** fullipsori: java 에서 동작하는지 확인 필요함 **/ if("Little".equalsIgnoreCase(trigger.sigendian)) { for(int i=lastbyte; i > startbyte-1; i--) { rawvalue = rawvalue*256 + rawdata[i]; } rawvalue = rawvalue >> (trigger.sigstartbit % 8); /** byteBuffer = ByteBuffer.wrap(rawdata, startbyte, lastbyte-startbyte+1).order(ByteOrder.LITTLE_ENDIAN); rawvalue = byteBuffer.getInt(); rawvalue = rawvalue>> (trigger.sigstartbit % 8); **/ }else { for(int i=startbyte; i<lastbyte+1; i++) { rawvalue = rawvalue * 256 + rawdata[i]; } rawvalue = rawvalue >> ((8000 - trigger.sigstartbit - trigger.siglength) % 8); /** byteBuffer = ByteBuffer.wrap(rawdata, startbyte, lastbyte-startbyte+1).order(ByteOrder.BIG_ENDIAN); rawvalue = byteBuffer.getInt(); rawvalue = rawvalue>> ((8000 - trigger.sigstartbit - trigger.siglength) % 8); **/ } /* rawvalue = rawvalue & ((int)Math.pow(2,trigger.siglength) -1); if("signed".equals(trigger.sigtype)) { if((rawvalue & (1<<(trigger.siglength-1))) != 0) { rawvalue = (-(((~rawvalue) & ((int)Math.pow(2, trigger.siglength) -1)) + 1)); } } */ rawvalue = rawvalue & (int)(((long)1<< trigger.siglength) - 1); if((rawvalue & (int)(((long)1)<<(trigger.siglength - 1))) != 0) rawvalue = (-(((~rawvalue) & (int)(((long)1)<<trigger.siglength - 1)) + 1)); double value = rawvalue * trigger.sigfactor + trigger.sigoffset; boolean rvalue = false; switch(trigger.conditionformula) { case "GE": { if(value >= trigger.conditionvalue) rvalue = true; break; } case "GT": { if(value > trigger.conditionvalue) rvalue = true; break; } case "LE": { if(value <= trigger.conditionvalue) rvalue = true; break; } case "LT": { if(value < trigger.conditionvalue) rvalue = true; break; } case "EQ": { if(value == trigger.conditionvalue) rvalue = true; break; } case "NEQ": { if(value != trigger.conditionvalue) rvalue = true; break; } case "DIFF": { if(trigger.lastvalue == null) { trigger.lastvalue = value; }else if(value != trigger.lastvalue) { trigger.status = true; trigger.lastvalue = value; return trigger.eventCallback.OnCalled(trigger.time, true, String.valueOf(value)); } return trigger.eventCallback.OnCalled(trigger.time, null, String.valueOf(value)); } } if(trigger.status != rvalue) { if(trigger.conditionTime + trigger.conditionduration <= trigger.time + baseTime) { trigger.status = rvalue; trigger.conditionTime = trigger.time + baseTime; if(!"DIFF".equals(trigger.conditionformula)) { //fullipsori check second parm (trigger.time) return trigger.eventCallback.OnCalled(trigger.time, false, String.valueOf(value)); } } }else { trigger.status = rvalue; if(trigger.conditionTime == 0) { trigger.conditionTime = trigger.time + baseTime; if(!"DIFF".equals(trigger.conditionformula)) { return trigger.eventCallback.OnCalled(trigger.time, false, String.valueOf(value)); } } } return trigger.eventCallback.OnCalled(trigger.time, null, String.valueOf(value)); } catch (Exception e) { System.out.println("Exception:" + e.getMessage()); return null; } } public static Object EvalDM1(TriggerParser trigger, Tuple dm1msg) { try { byte[] rawdata = Base64.decode(dm1msg.getString("DATA")); int dataID= dm1msg.getInt("DataID"); trigger.time = dm1msg.getLong("DeltaTime"); if(trigger.id == (dataID & 0x00FFFFFF)) { if(rawdata[5] == (byte)0xCA && rawdata[6] == (byte)0xFE) { trigger.nowDmSize = (rawdata[2] & (byte)0xF) * 256 + rawdata[1]; trigger.dm1Data = rawdata; }else { trigger.dm1Data = null; } }else if(trigger.tpdtID == (dataID & 0x00FFFFFF) && trigger.lamp.equals("False")) { if(trigger.dm1Data != null && rawdata[0] == 1) { if(trigger.lastDmSize == 0) { trigger.lastDmSize = trigger.nowDmSize; }else { if(trigger.nowDmSize != trigger.lastDmSize) { trigger.status = true; trigger.lastDmSize = trigger.nowDmSize; trigger.lastDm1 = StringUtils.mergeByteArray(Arrays.copyOfRange(rawdata, 3, 6), Arrays.copyOfRange(rawdata, 7, rawdata.length)); trigger.dm1Data = null; return trigger.eventCallback.OnCalled(trigger.time, true, null); } } if(trigger.lastDm1 == null) { trigger.status = true; trigger.lastDm1 = StringUtils.mergeByteArray(Arrays.copyOfRange(rawdata, 3, 6), Arrays.copyOfRange(rawdata, 7, rawdata.length)); trigger.dm1Data = null; return trigger.eventCallback.OnCalled(trigger.time, true, null); }else { if(!Arrays.equals(trigger.lastDm1, StringUtils.mergeByteArray(Arrays.copyOfRange(rawdata, 3, 6), Arrays.copyOfRange(rawdata, 7, rawdata.length)))) { trigger.status = true; trigger.lastDm1 = StringUtils.mergeByteArray(Arrays.copyOfRange(rawdata, 3, 6), Arrays.copyOfRange(rawdata, 7, rawdata.length)); trigger.dm1Data = null; return trigger.eventCallback.OnCalled(trigger.time, true, null); } } } }else if(trigger.tpdtID == (dataID & 0x00FFFFFF) && "AWL".equals(trigger.lamp)) { if(trigger.dm1Data != null && rawdata[0] == 1) { boolean rvalue = false; int awlStatus = (rawdata[1] & (byte)0B00001100) >> 2; if(awlStatus == 1) { rvalue = true; } trigger.status = rvalue; return trigger.eventCallback.OnCalled(trigger.time, false, null); } }else if(trigger.tpdtID == (dataID & 0x00FFFFFF) && "RSL".equals(trigger.lamp)) { if(trigger.dm1Data != null && rawdata[0] == 1) { boolean rvalue = false; int awlStatus = (rawdata[1] & 0B00110000) >> 4; if(awlStatus == 1) { rvalue = true; } trigger.status = rvalue; return trigger.eventCallback.OnCalled(trigger.time, false, null); } } return trigger.eventCallback.OnCalled(trigger.time, null, null); }catch(Exception e) { System.out.println("Exception:" + e.getMessage()); return null; } } public static Object EvalUDS(TriggerParser trigger, Tuple udsmsg) { try { byte[] rawdata = Base64.decode(udsmsg.getString("DATA")); int frameType = ((int)rawdata[0]) >> 4;; int length; trigger.time = udsmsg.getLong("DeltaTime"); if(frameType == 0) { length = rawdata[0] & (byte)0xF; if(rawdata[1] == (byte)0x59 || rawdata[1] == (byte)0x58) { if(trigger.lastLength == 0) { trigger.lastLength = length; if(length > 3) { trigger.status = true; return trigger.eventCallback.OnCalled(trigger.time, true, null); } }else { if(trigger.lastLength != length && length > 3) { trigger.status = true; trigger.lastLength = length; return trigger.eventCallback.OnCalled(trigger.time, true, null); }else if(trigger.lastLength != length && length <= 3) { trigger.status = false; trigger.lastLength = length; return trigger.eventCallback.OnCalled(trigger.time, true, null); } } } }else if(frameType == 1) { length = (rawdata[0] & (byte)0xF) * 256 + rawdata[1]; if(rawdata[2] == (byte)0x59 || rawdata[2] == (byte)0x58) { if(trigger.lastLength != length) { trigger.status = true; trigger.lastLength = length; return trigger.eventCallback.OnCalled(trigger.time, true, null); } } } return trigger.eventCallback.OnCalled(trigger.time, null, null); }catch(Exception e) { System.out.println("Exception:" + e.getMessage()); return null; } }