001: //
002: // Copyright (C) 2005 United States Government as represented by the
003: // Administrator of the National Aeronautics and Space Administration
004: // (NASA). All Rights Reserved.
005: //
006: // This software is distributed under the NASA Open Source Agreement
007: // (NOSA), version 1.3. The NOSA has been approved by the Open Source
008: // Initiative. See the file NOSA-1.3-JPF at the top of the distribution
009: // directory tree for the complete NOSA document.
010: //
011: // THE SUBJECT SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY OF ANY
012: // KIND, EITHER EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT
013: // LIMITED TO, ANY WARRANTY THAT THE SUBJECT SOFTWARE WILL CONFORM TO
014: // SPECIFICATIONS, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
015: // A PARTICULAR PURPOSE, OR FREEDOM FROM INFRINGEMENT, ANY WARRANTY THAT
016: // THE SUBJECT SOFTWARE WILL BE ERROR FREE, OR ANY WARRANTY THAT
017: // DOCUMENTATION, IF PROVIDED, WILL CONFORM TO THE SUBJECT SOFTWARE.
018: //
019: package DEOS;
020:
021: import gov.nasa.jpf.jvm.Verify;
022:
023: import java.lang.*;
024:
025: /**
026: * DOCUMENT ME!
027: */
028: public class NewTimer extends AbstractClockingDevice {
029: int startingTime = 0; // Time on the clock when timer was started
030: int setTime = 0; // Timer is set to this time
031: int stoppingTime = 0; // Time on clock when timer should stop
032: boolean isStarted = false;
033: boolean timeOut = false;
034: boolean isInterrupted = false;
035:
036: /**
037: * Primary constructor
038: */
039: public NewTimer() {
040: }
041:
042: /**
043: * To get the remaining time
044: * @param currentTime, the current time on the clock
045: * @return remainingTime, amount of time left
046: */
047: public int getRemainingTime(int currentTime) {
048: //Verify.beginAtomic();
049: int remainingTime = stoppingTime - currentTime;
050:
051: //System.out.println("Thread used: " + (currentTime - startingTime));
052: // Assert: timeOut implies remainingTime = 0
053: //assert (!timeOut || remainingTime == 0);
054: //Verify.endAtomic();
055: return remainingTime;
056: }
057:
058: /**
059: * To get the set-time
060: */
061: public int getSetTime() {
062: return setTime;
063: }
064:
065: /**
066: * To get the stoppingTime
067: * @return stoppingTime, the stopping time (on the clock) for the timer
068: */
069: public int getStoppingTime() {
070: return stoppingTime;
071: }
072:
073: /**
074: * Time out
075: * @param currentTime the current time on the clock
076: * @return true if time out occurs
077: */
078: public boolean isTimeOut() {
079: //assert (isStarted);
080: if (timeOut) {
081: isStarted = false;
082: }
083:
084: return timeOut;
085: }
086:
087: /**
088: * To reset the timer
089: * @param startingTimeIn value for setting timer
090: */
091: public void setTimer(int setTimeIn, int startingTimeIn) {
092: //Verify.beginAtomic();
093: //assert (setTimeIn > 0);
094: //System.out.println("--- Resetting timer ---");
095: //System.out.println("Starting time: " + startingTimeIn);
096: startingTime = startingTimeIn;
097: setTime = setTimeIn;
098: stoppingTime = startingTime + setTime;
099:
100: //System.out.println("stopping time: " + stoppingTime);
101: isStarted = true;
102: isInterrupted = false;
103: timeOut = false;
104:
105: // Verify.endAtomic();
106: }
107:
108: /**
109: * Clear time out
110: */
111: public void clearTimeOut() {
112: timeOut = false;
113: }
114:
115: /**
116: * When clock ticks, clock calls this method (inherited from
117: * super class)
118: */
119: public void clockTicks(int currentTime) {
120: if (stoppingTime == currentTime) {
121: timeOut = true;
122: }
123: }
124:
125: /**
126: * Interrupt timer
127: */
128: public void interruptTimer() {
129: isStarted = false;
130: isInterrupted = true;
131: }
132: }
|