From: Dan B. <dan...@us...> - 2007-10-28 22:41:04
|
Update of /cvsroot/jmri/jmri/jmrix/nce In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv13062/src/jmri/jmrix/nce Modified Files: NceTurnout.java NceTurnoutMonitor.java Log Message: New feature turnout lock. When a turnout is locked, only JMRI can change the state of the turnout. Commands from cabs to change turnout state are detected and canceled by JMRI. This feature requires feedback from layout. Only NCE is supported with these commits. Index: NceTurnout.java =================================================================== RCS file: /cvsroot/jmri/jmri/jmrix/nce/NceTurnout.java,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** NceTurnout.java 10 Jul 2007 14:13:24 -0000 1.22 --- NceTurnout.java 28 Oct 2007 22:41:00 -0000 1.23 *************** *** 135,138 **** --- 135,150 ---- public boolean canInvert(){return true;} + /** + * NCE turnouts can be locked if there's feedback available + * Only Monitoring is currently supported for turnout locking + */ + public boolean canLock(){ + if ((getFeedbackMode() == MONITORING)) + return true; + else + return false; + } + + protected void sendMessage(boolean closed) { // get the packet Index: NceTurnoutMonitor.java =================================================================== RCS file: /cvsroot/jmri/jmri/jmrix/nce/NceTurnoutMonitor.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** NceTurnoutMonitor.java 9 Jul 2007 20:45:56 -0000 1.17 --- NceTurnoutMonitor.java 28 Oct 2007 22:41:00 -0000 1.18 *************** *** 274,279 **** if (rControlTurnout == null) return; ! int tState = rControlTurnout.getCommandedState(); int nceAccyThrown = NCE_ACCY_THROWN; --- 274,283 ---- if (rControlTurnout == null) return; + + // don't update commanded state if turnout locked + if (rControlTurnout.getLocked()) + return; ! int tCommandedState = rControlTurnout.getCommandedState(); int nceAccyThrown = NCE_ACCY_THROWN; *************** *** 285,289 **** if (debugTurnoutMonitor && log.isDebugEnabled()) { ! log.debug("turnout exists NT" + NTnum + " state: " + tState + " Feed back mode: " + rControlTurnout.getFeedbackMode()); } --- 289,293 ---- if (debugTurnoutMonitor && log.isDebugEnabled()) { ! log.debug("turnout exists NT" + NTnum + " state: " + tCommandedState + " Feed back mode: " + rControlTurnout.getFeedbackMode()); } *************** *** 296,302 **** // test for closed or thrown, normally 0 = closed, 1 = thrown int nceAccState = (recMemByte >> bit) & 0x01; ! if (nceAccState == nceAccyThrown && tState != Turnout.THROWN) { if (log.isDebugEnabled()) { ! log.debug("turnout discrepancy, NT"+ NTnum+" CommandedState is now THROWN"); } // change JMRI's knowledge of the turnout state to match observed --- 300,308 ---- // test for closed or thrown, normally 0 = closed, 1 = thrown int nceAccState = (recMemByte >> bit) & 0x01; ! if (nceAccState == nceAccyThrown && tCommandedState != Turnout.THROWN) { ! if (log.isDebugEnabled()) { ! log.debug("turnout discrepancy, NT" + NTnum ! + " CommandedState is now THROWN"); } // change JMRI's knowledge of the turnout state to match observed *************** *** 304,310 **** } ! if (nceAccState == nceAccyClosed && tState != Turnout.CLOSED) { if (log.isDebugEnabled()) { ! log.debug("turnout discrepancy, NT"+ NTnum+" CommandedState is now CLOSED"); } // change JMRI's knowledge of the turnout state to match observed --- 310,318 ---- } ! if (nceAccState == nceAccyClosed && tCommandedState != Turnout.CLOSED) { ! if (log.isDebugEnabled()) { ! log.debug("turnout discrepancy, NT" + NTnum ! + " CommandedState is now CLOSED"); } // change JMRI's knowledge of the turnout state to match observed *************** *** 321,329 **** return; ! int tState = rControlTurnout.getKnownState(); ! int nceAccyThrown = NCE_ACCY_THROWN; int nceAccyClosed = NCE_ACCY_CLOSED; ! if (rControlTurnout.getInverted()){ nceAccyThrown = NCE_ACCY_CLOSED; nceAccyClosed = NCE_ACCY_THROWN; --- 329,338 ---- return; ! int tKnownState = rControlTurnout.getKnownState(); ! int tCommandedState = rControlTurnout.getCommandedState(); ! int nceAccyThrown = NCE_ACCY_THROWN; int nceAccyClosed = NCE_ACCY_CLOSED; ! if (rControlTurnout.getInverted()) { nceAccyThrown = NCE_ACCY_CLOSED; nceAccyClosed = NCE_ACCY_THROWN; *************** *** 331,335 **** if (debugTurnoutMonitor && log.isDebugEnabled()) { ! log.debug("turnout exists NT" + NTnum + " state: " + tState + " Feed back mode: " + rControlTurnout.getFeedbackMode()); } --- 340,344 ---- if (debugTurnoutMonitor && log.isDebugEnabled()) { ! log.debug("turnout exists NT" + NTnum + " state: " + tKnownState + " Feed back mode: " + rControlTurnout.getFeedbackMode()); } *************** *** 342,359 **** // test for closed or thrown, normally 0 = closed, 1 = thrown int nceAccState = (recMemByte >> bit) & 0x01; ! if (nceAccState == nceAccyThrown && tState != Turnout.THROWN) { ! if (log.isDebugEnabled()) { ! log.debug("turnout discrepancy, NT"+ NTnum+" KnownState is now THROWN"); } - // change JMRI's knowledge of the turnout state to match observed - rControlTurnout.setKnownStateFromCS(Turnout.THROWN); } ! if (nceAccState == nceAccyClosed && tState != Turnout.CLOSED) { ! if (log.isDebugEnabled()) { ! log.debug("turnout discrepancy, NT"+ NTnum+" KnownState is now CLOSED"); } - // change JMRI's knowledge of the turnout state to match observed - rControlTurnout.setKnownStateFromCS(Turnout.CLOSED); } } --- 351,406 ---- // test for closed or thrown, normally 0 = closed, 1 = thrown int nceAccState = (recMemByte >> bit) & 0x01; ! if (nceAccState == nceAccyThrown && tKnownState != Turnout.THROWN) { ! ! if (rControlTurnout.getLocked() && tCommandedState == Turnout.CLOSED) { ! ! if (log.isDebugEnabled()) { ! log.debug("Turnout NT" + NTnum + " is locked," ! + " will negate THROW turnout command from layout"); ! } ! rControlTurnout.forwardCommandChangeToLayout(Turnout.CLOSED); ! ! if (rControlTurnout.reportLocked()){ ! log.info("Turnout NT" + NTnum + " is locked," ! + " JMRI has canceled THROW turnout command from cab"); ! } ! ! } else { ! ! if (log.isDebugEnabled()) { ! log.debug("turnout discrepancy, NT" + NTnum ! + " KnownState is now THROWN"); ! } ! // change JMRI's knowledge of the turnout state to match ! // observed ! rControlTurnout.setKnownStateFromCS(Turnout.THROWN); } } ! if (nceAccState == nceAccyClosed && tKnownState != Turnout.CLOSED) { ! ! if (rControlTurnout.getLocked()&& tCommandedState == Turnout.THROWN) { ! ! if (log.isDebugEnabled()) { ! log.debug("Turnout NT" + NTnum + " is locked," ! + " will negate CLOSE turnout command from layout"); ! } ! rControlTurnout.forwardCommandChangeToLayout(Turnout.THROWN); ! ! if (rControlTurnout.reportLocked()){ ! log.info("Turnout NT" + NTnum + " is locked," ! + " JMRI has canceled CLOSE turnout command from cab"); ! } ! ! } else { ! ! if (log.isDebugEnabled()) { ! log.debug("turnout discrepancy, NT" + NTnum ! + " KnownState is now CLOSED"); ! } ! // change JMRI's knowledge of the turnout state to match ! // observed ! rControlTurnout.setKnownStateFromCS(Turnout.CLOSED); } } } |