View Javadoc

1   package org.jscsi.target.scsi.cdb;
2   
3   /**
4    * The SELF-TEST CODE field is a member of SEND DIAGNOSTIC CDBs.
5    * <p>
6    * A {@link SendDiagnosticCdb#selfTest} bit set to zero specifies that the device server shall perform the diagnostic
7    * operation specified by the {@link SendDiagnosticCdb#selfTestCode} field.
8    * <p>
9    * The {@link SelfTestCode} field has a length of three bits.
10   * 
11   * @see SendDiagnosticCdb
12   * @author Andreas Ergenzinger
13   */
14  public enum SelfTestCode {
15      /**
16       * This value shall be used when the {@link SendDiagnosticCdb#selfTest} bit is set to one, or when the SELFTEST bit
17       * is set to zero and the PF bit is set to one.
18       */
19      ALL_ZEROS((byte) 0),
20      /**
21       * The device server shall start its short self-test in the background mode. The
22       * {@link SendDiagnosticCdb#parameterListLength} field shall contain zero.
23       */
24      BACKGROUND_SHORT_SELF_TEST((byte) 1),
25      /**
26       * The device server shall start its extended self-test (see 5.5.2) in the background mode (see 5.5.3.3). The
27       * {@link SendDiagnosticCdb#parameterListLength} field shall contain zero.
28       */
29      BACKGROUND_EXTENDED_SELF_TEST((byte) 2),
30      /**
31       * The device server shall abort the current self-test running in background mode. The
32       * {@link SendDiagnosticCdb#parameterListLength} field shall contain zero. This value is only valid if a previous
33       * SEND DIAGNOSTIC command specified a background self-test function and that self-test has not completed. If either
34       * of these conditions is not met, the command shall be terminated with CHECK CONDITION status, with the sense key
35       * set to ILLEGAL REQUEST, and the additional sense code set to INVALID FIELD IN CDB.
36       */
37      ABORT_BACKGROUND_SELF_TEST((byte) 4),
38      /**
39       * The device server shall start its short self-test (see 5.5.2) in the foreground mode. The
40       * {@link SendDiagnosticCdb#parameterListLength} field shall contain zero.
41       */
42      FOREGROUND_SELF_TEST((byte) 5),
43      /**
44       * The device server shall start its extended self-test in the foreground mode. The
45       * {@link SendDiagnosticCdb#parameterListLength} field shall contain zero.
46       */
47      FOREGROUND_EXTENDED_SELF_TEST((byte) 6);
48      // all other values (011b and 111b) are reserved
49  
50      /**
51       * The serialized value of this object.
52       */
53      private final byte value;
54  
55      private SelfTestCode (final byte value) {
56          this.value = value;
57      }
58  
59      public byte getValue () {
60          return value;
61      }
62  
63      /**
64       * Returns the {@link SelfTestCode} corresponding to the passed value.
65       * 
66       * @param value the value of a SELF-TEST CODE field
67       * @return the {@link SelfTestCode} corresponding to the passed value or <code>null</code> if none exists
68       */
69      public static SelfTestCode getValue (int value) {
70          SelfTestCode[] values = values();
71          for (int i = 0; i < values.length; ++i)
72              if (value == values[i].getValue()) return values[i];
73          return null;
74      }
75  }