예제 #1
0
  // handle incoming parameter notification
  public void propertyChange(java.beans.PropertyChangeEvent e) {
    // notification from CV; check for Value being changed
    if (e.getPropertyName().equals("Busy")) {
      if (((Boolean) e.getNewValue()).equals(Boolean.FALSE)) {
        setToRead(false);
        setToWrite(false); // some programming operation just finished
        setBusy(false);
      }
    } else if (e.getPropertyName().equals("State")) {
      CvValue cv = _cvMap.get(getCvNum());
      if (cv.getState() == STORED) {
        setToWrite(false);
      }
      if (cv.getState() == READ) {
        setToRead(false);
      }
      setState(cv.getState());
      for (JTree tree : trees) {
        tree.setBackground(_value.getBackground());
        // tree.setOpaque(true);
      }

    } else if (e.getPropertyName().equals("Value")) {
      // update value of Variable
      CvValue cv = _cvMap.get(getCvNum());
      int newVal = (cv.getValue() & maskVal(getMask())) >>> offsetVal(getMask());
      setValue(newVal); // check for duplicate done inside setVal
    }
  }
예제 #2
0
  public void actionPerformed(ActionEvent e) {
    // see if this is from _value itself, or from an alternate rep.
    // if from an alternate rep, it will contain the value to select
    if (log.isDebugEnabled()) {
      log.debug(label() + " start action event: " + e);
    }
    if (!(e.getActionCommand().equals(""))) {
      // is from alternate rep
      _value.setSelectedItem(e.getActionCommand());
      if (log.isDebugEnabled()) {
        log.debug(label() + " action event was from alternate rep");
      }
      // match and select in tree
      for (int i = 0; i < _valueArray.length; i++) {
        if (e.getActionCommand().toString().equals(_itemArray[i])) {
          // now select in the tree
          TreePath path = _pathArray[i];
          for (JTree tree : trees) {
            tree.setSelectionPath(path);
            // ensure selection is in visible portion of JScrollPane
            tree.scrollPathToVisible(path);
          }
          break; // first one is enough
        }
      }
    }

    int oldVal = getIntValue();

    // called for new values - set the CV as needed
    CvValue cv = _cvMap.get(getCvNum());
    // compute new cv value by combining old and request
    int oldCv = cv.getValue();
    int newVal = getIntValue();
    int newCv = newValue(oldCv, newVal, getMask());
    if (newCv != oldCv) {
      cv.setValue(newCv); // to prevent CV going EDITED during loading of decoder file

      // notify  (this used to be before setting the values)
      if (log.isDebugEnabled()) {
        log.debug(label() + " about to firePropertyChange");
      }
      prop.firePropertyChange("Value", null, Integer.valueOf(oldVal));
      if (log.isDebugEnabled()) {
        log.debug(label() + " returned to from firePropertyChange");
      }
    }
    if (log.isDebugEnabled()) {
      log.debug(
          label()
              + " end action event saw oldCv="
              + oldCv
              + " newVal="
              + newVal
              + " newCv="
              + newCv);
    }
  }
예제 #3
0
  // handle incoming parameter notification
  public void propertyChange(java.beans.PropertyChangeEvent e) {
    if (log.isDebugEnabled()) {
      log.debug("property changed event - name: " + e.getPropertyName());
    }
    // notification from CV; check for Value being changed
    if (e.getPropertyName().equals("Busy") && ((Boolean) e.getNewValue()).equals(Boolean.FALSE)) {
      // busy transitions drive the state
      switch (_progState) {
        case IDLE: // no, just a CV update
          if (log.isDebugEnabled()) {
            log.error("Busy goes false with state IDLE");
          }
          return;
        case WRITING_PI4R: // have written the PI, now write SI if needed
        case WRITING_PI4C:
        case WRITING_PI4W:
          if (log.isDebugEnabled()) {
            log.debug("Busy goes false with state WRITING_PI");
          }

          // check for success
          if ((retries < RETRY_MAX)
              && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState()
                  != CvValue.STORED)) {
            // need to retry on error; leave progState as it was
            log.debug("retry");
            retries++;
            (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writePI(_status);
            return;
          }
          // success, move on to next
          retries = 0;

          if (_progState == WRITING_PI4R) {
            _progState = WRITING_SI4R;
          } else if (_progState == WRITING_PI4C) {
            _progState = WRITING_SI4C;
          } else {
            _progState = WRITING_SI4W;
          }
          (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writeSI(_status);
          return;
        case WRITING_SI4R:
        case WRITING_SI4C:
        case WRITING_SI4W: // have written SI if needed, now read or write CV
          if (log.isDebugEnabled()) {
            log.debug("Busy goes false with state WRITING_SI");
          }

          // check for success
          if ((retries < RETRY_MAX)
              && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState()
                  != CvValue.STORED)) {
            // need to retry on error; leave progState as it was
            log.debug("retry");
            retries++;
            (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writeSI(_status);
            return;
          }
          // success, move on to next
          retries = 0;

          if (_progState == WRITING_SI4R) {
            _progState = READING_CV;
            (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).readIcV(_status);
          } else if (_progState == WRITING_SI4C) {
            _progState = COMPARE_CV;
            (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).confirmIcV(_status);
          } else {
            _progState = WRITING_CV;
            (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writeIcV(_status);
          }
          return;
        case READING_CV: // now done with the read request
          if (log.isDebugEnabled()) {
            log.debug("Finished reading the Indexed CV");
          }

          // check for success
          if ((retries < RETRY_MAX)
              && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState()
                  != CvValue.READ)) {
            // need to retry on error; leave progState as it was
            log.debug("retry");
            retries++;
            (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).readIcV(_status);
            return;
          }
          // success, move on to next
          retries = 0;

          _progState = IDLE;
          if (doHigh) {
            doHigh = false;
            programmingLow = false;
            doRead();
          } else if (doLow) {
            doLow = false;
            programmingLow = true;
            doRead();
          } else {
            programmingLow = true;
            setBusy(false);
          }
          return;
        case COMPARE_CV: // now done with the read request
          if (log.isDebugEnabled()) {
            log.debug("Finished reading the Indexed CV for compare");
          }

          // check for success SAME or DIFF?
          if ((retries < RETRY_MAX)
              && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState()
                  != CvValue.SAME)
              && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState()
                  != CvValue.DIFF)) {
            // need to retry on error; leave progState as it was
            log.debug("retry");
            retries++;
            (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).confirmIcV(_status);
          }
          return;
        case WRITING_CV: // now done with the write request
          if (log.isDebugEnabled()) {
            log.debug("Finished writing the Indexed CV");
          }

          // check for success
          if ((retries < RETRY_MAX)
              && ((_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).getState()
                  != CvValue.STORED)) {
            // need to retry on error; leave progState as it was
            log.debug("retry");
            retries++;
            (_cvMap.get(programmingLow ? getCvName() : mSecondCVname)).writeIcV(_status);
            return;
          }
          // success, move on to next
          retries = 0;

          _progState = IDLE;
          if (doHigh) {
            doHigh = false;
            programmingLow = false;
            doWrite();
          } else if (doLow) {
            doLow = false;
            programmingLow = true;
            doWrite();
          } else {
            super.setState(STORED);
            setBusy(false);
          }
          return;
        default: // unexpected!
          log.error("Unexpected state found: " + _progState);
          _progState = IDLE;
          return;
      }
    } else if (e.getPropertyName().equals("State")) {
      CvValue cvLow = _cvMap.get(getCvName());
      CvValue cvHigh = _cvMap.get(mSecondCVname);
      if (log.isDebugEnabled()) {
        log.debug("  found cvLow=" + cvLow + "   cvHigh=" + cvHigh);
      }
      if (log.isDebugEnabled()) {
        log.debug("CV State changed to " + cvLow.getState());
      }
      if (cvHigh.getState() == VariableValue.UNKNOWN) {
        if (cvLow.getState() == VariableValue.EDITED) {
          setState(VariableValue.EDITED);
        } else {
          setState(VariableValue.UNKNOWN);
        }
      } else {
        setState(cvLow.getState());
      }
    } else if (e.getPropertyName().equals("Value")) {
      // update value of Variable
      CvValue cv0 = _cvMap.get(getCvName());
      CvValue cv1 = _cvMap.get(mSecondCVname);
      if (log.isDebugEnabled()) {
        log.debug("  found cv0=" + cv0 + "   cv1=" + cv1);
      }
      int newVal =
          ((cv0.getValue() & lowerbitmask) >> lowerbitoffset)
              + (((cv1.getValue() & upperbitmask) * 256) >> upperbitoffset);
      if (log.isDebugEnabled()) {
        log.debug(
            "CV "
                + getCvName()
                + ","
                + getSecondCvNum()
                + " set value to "
                + newVal
                + " based on cv0="
                + cv0.getValue()
                + " cv1="
                + cv1.getValue());
      }
      setValue(newVal); // check for duplicate done inside setVal
      if (log.isDebugEnabled()) {
        log.debug(
            "CV "
                + getCvName()
                + ","
                + getSecondCvNum()
                + " in property change after setValue call, cv0="
                + cv0.getValue()
                + " cv1="
                + cv1.getValue());
      }
      // state change due to CV state change, so propagate that
      if (cv1.getState() == VariableValue.UNKNOWN) {
        if (cv0.getState() == VariableValue.EDITED) {
          setState(VariableValue.EDITED);
        } else {
          setState(VariableValue.UNKNOWN);
        }
      } else {
        setState(cv0.getState());
      }
    }
  }
예제 #4
0
  void updatedTextField() {
    if (log.isDebugEnabled()) {
      log.debug(
          "CV " + getCvName() + "," + getSecondCvNum() + " enter updatedTextField in SplitVal");
    }
    // called for new values - set the CV as needed
    CvValue cv1 = _cvMap.get(getCvName());
    CvValue cv2 = _cvMap.get(mSecondCVname);

    int newEntry; // entered value
    try {
      newEntry = Integer.valueOf(_value.getText()).intValue();
    } catch (java.lang.NumberFormatException ex) {
      newEntry = 0;
    }

    // calculate resulting number
    int newVal = (newEntry - mOffset) / mFactor;

    // combine with existing values via mask
    if (log.isDebugEnabled()) {
      log.debug(
          "CV "
              + getCvName()
              + ","
              + getSecondCvNum()
              + " lo cv was "
              + cv1.getValue()
              + " mask="
              + lowerbitmask
              + " offset="
              + lowerbitoffset);
    }
    int newCv1 = ((newVal << lowerbitoffset) & lowerbitmask) | (~lowerbitmask & cv1.getValue());

    if (log.isDebugEnabled()) {
      log.debug(
          "CV "
              + getCvName()
              + ","
              + getSecondCvNum()
              + " hi cv was "
              + cv2.getValue()
              + " mask="
              + upperbitmask
              + " offset="
              + upperbitoffset);
    }
    int newCv2 =
        (((newVal << upperbitoffset) >> 8) & upperbitmask) | (~upperbitmask & cv2.getValue());
    if (log.isDebugEnabled()) {
      log.debug(
          "CV "
              + getCvName()
              + ","
              + getSecondCvNum()
              + " new value "
              + newVal
              + " gives first="
              + newCv1
              + " second="
              + newCv2);
    }

    // cv updates here trigger updated property changes, which means
    // we're going to get notified sooner or later.
    cv1.setValue(newCv1);
    cv2.setValue(newCv2);
    if (log.isDebugEnabled()) {
      log.debug("CV " + getCvName() + "," + getSecondCvNum() + " exit updatedTextField");
    }
  }