/** * Checks whether an edge-triggered alarm can be fired (does not care about the suppress interval * - use the <code>isSuppressed</code> method). * * @param value The current value of the corresponding managed object field * @param alarmControl The alarm control * @return <code>true</code> if it can be fired, <code>false</code> otherwise */ private boolean isEdgeTriggeredAlarmReadyForFire( long value, EdgeTriggeredAlarmControl alarmControl) { if (alarmControl.getEnabled()) { boolean fallingEdge = alarmControl.getDirection() == EdgeTriggeredAlarmDirection.FALLING; if (alarmControl.getStatus() == EdgeTriggeredAlarmStatus.FIRED) { if (fallingEdge) { if (value > alarmControl.getRearmThreshold()) alarmControl.setStatus(EdgeTriggeredAlarmStatus.ARMED); } else { if (value < alarmControl.getRearmThreshold()) alarmControl.setStatus(EdgeTriggeredAlarmStatus.ARMED); } } if (alarmControl.getStatus() == EdgeTriggeredAlarmStatus.ARMED) { if (fallingEdge) { if (value < alarmControl.getAlarmThreshold()) { return true; } } else { if (value > alarmControl.getAlarmThreshold()) { return true; } } } } return false; }
/** The main loop of the polling thread. */ @Override public void run() { while (true) { // free memory alarm EdgeTriggeredAlarmControl freeMemAlarmControl = readerDevice.getFreeMemoryAlarmControl(); if (isEdgeTriggeredAlarmReadyForFire(readerDevice.getFreeMemory(), freeMemAlarmControl)) { if (freeMemoryAlarm == null) freeMemoryAlarm = new FreeMemoryAlarm("FreeMemoryAlarm", freeMemAlarmControl.getLevel(), readerDevice); if (!alarmIsSuppressed(freeMemAlarmControl)) { fireAlarm_(freeMemoryAlarm, freeMemAlarmControl); freeMemoryAlarm = null; } else { freeMemoryAlarm.suppress(); log.debug(freeMemoryAlarm.getName() + " suppressed"); } } // other alarms... // operational status alarms readerDevice.getOperStatus(); ReadPoint[] readPoints = readerDevice.getAllReadPoints(); for (int i = 0; i < readPoints.length; i++) { readPoints[i].getOperStatus(); } IOPort[] ioPorts = readerDevice.getAllIOPorts(); for (int i = 0; i < ioPorts.length; i++) { ioPorts[i].getOperStatus(); } NotificationChannel[] notifChans = readerDevice.getAllNotificationChannels(); for (int i = 0; i < notifChans.length; i++) { notifChans[i].getOperStatus(); } Source[] sources = readerDevice.getAllSources(); for (int i = 0; i < sources.length; i++) { sources[i].getOperStatus(); } try { Thread.sleep(AlarmManager.POLL_INTERVAL); } catch (InterruptedException ignore) { } } }
/** * Fires an alarm. * * @param alarm The alarm * @param alarmControl The alarm control */ private void fireAlarm_(Alarm alarm, AlarmControl alarmControl) { alarmProcessor.process(alarm); lastFiredTimes.remove(alarmControl); lastFiredTimes.put(alarmControl, System.currentTimeMillis()); if (alarmControl instanceof EdgeTriggeredAlarmControl) { ((EdgeTriggeredAlarmControl) alarmControl).setStatus(EdgeTriggeredAlarmStatus.FIRED); } log.debug(alarm.getName() + " fired"); }
/** * Fires an alarm iff all relevant conditions are fulfilled. * * @param alarm The alarm * @param alarmControl The alarm control */ public void fireAlarm(Alarm alarm, AlarmControl alarmControl) { if (alarmControl.getEnabled()) { try { if (alarm instanceof TTOperStatusAlarm) { TTOperStatusAlarm operStatusAlarm = (TTOperStatusAlarm) alarm; TTOperationalStatusAlarmControl operStatusAlarmControl = (TTOperationalStatusAlarmControl) alarmControl; if ((operStatusAlarmControl.getTriggerFromState() == OperationalStatus.ANY) || (operStatusAlarmControl.getTriggerToState() == OperationalStatus.ANY) || (operStatusAlarm.getFromState() == operStatusAlarmControl.getTriggerFromState()) || (operStatusAlarm.getToState() == operStatusAlarmControl.getTriggerToState())) { if (!alarmIsSuppressed(operStatusAlarmControl)) { fireAlarm_(operStatusAlarm, operStatusAlarmControl); } else { operStatusAlarm.suppress(); log.debug(operStatusAlarm.getName() + " suppressed"); } } } else if (alarmControl instanceof EdgeTriggeredAlarmControl) { EdgeTriggeredAlarmControl edgeTriggeredAlarmControl = (EdgeTriggeredAlarmControl) alarmControl; if (edgeTriggeredAlarmControl.getStatus() == EdgeTriggeredAlarmStatus.ARMED) { if (!alarmIsSuppressed(edgeTriggeredAlarmControl)) { fireAlarm_(alarm, edgeTriggeredAlarmControl); } else { alarm.suppress(); log.debug(alarm.getName() + " suppressed"); } } } else { if (!alarmIsSuppressed(alarmControl)) { fireAlarm_(alarm, alarmControl); } else { alarm.suppress(); log.debug(alarm.getName() + " suppressed"); } } } catch (ClassCastException cce) { log.error("Alarm and AlarmControl don't match."); } } }