| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| SenseKey |
|
| 2.0;2 |
| 1 | package org.jscsi.target.scsi.sense; | |
| 2 | ||
| 3 | /** | |
| 4 | * The SENSE KEY field indicates generic information describing an error or exception condition. The field's length is 4 | |
| 5 | * bits. | |
| 6 | * | |
| 7 | * @author Andreas Ergenzinger | |
| 8 | */ | |
| 9 | 0 | public enum SenseKey { |
| 10 | /** | |
| 11 | * Indicates that there is no specific sense key information to be reported. This may occur for a successful command | |
| 12 | * or for a command that receives CHECK CONDITION status because one of the FILEMARK, EOM, or ILI bits is set to | |
| 13 | * one. | |
| 14 | */ | |
| 15 | 0 | NO_SENSE(0x00), |
| 16 | /** | |
| 17 | * Indicates that the command completed successfully, with some recovery action performed by the device server. | |
| 18 | * Details may be determined by examining the additional sense bytes and the INFORMATION field. When multiple | |
| 19 | * recovered errors occur during one command, the choice of which error to report (e.g., first, last, most severe) | |
| 20 | * is vendor specific. | |
| 21 | */ | |
| 22 | 0 | RECOVERED_ERROR(0x1), |
| 23 | /** | |
| 24 | * Indicates that the logical unit is not accessible. Operator intervention may be required to correct this | |
| 25 | * condition. | |
| 26 | */ | |
| 27 | 0 | NOT_READY(0x2), |
| 28 | /** | |
| 29 | * Indicates that the command terminated with a non-recovered error condition that may have been caused by a flaw in | |
| 30 | * the medium or an error in the recorded data. This sense key may also be returned if the device server is unable | |
| 31 | * to distinguish between a flaw in the medium and a specific hardware failure (i.e., sense key 4h | |
| 32 | * {@link #HARDWARE_ERROR}). | |
| 33 | */ | |
| 34 | 0 | MEDIUM_ERROR(0x3), |
| 35 | /** | |
| 36 | * Indicates that the device server detected a non-recoverable hardware failure (e.g., controller failure, device | |
| 37 | * failure, or parity error) while performing the command or during a self test. | |
| 38 | */ | |
| 39 | 0 | HARDWARE_ERROR(0x4), |
| 40 | /** | |
| 41 | * Indicates that: | |
| 42 | * | |
| 43 | * a) The command was addressed to an incorrect logical unit number (see SAM-3); b) The command had an invalid task | |
| 44 | * attribute (see SAM-3); c) The command was addressed to a logical unit whose current configuration prohibits | |
| 45 | * processing the command; d) There was an illegal parameter in the CDB; or e) There was an illegal parameter in the | |
| 46 | * additional parameters supplied as data for some commands (e.g., PERSISTENT RESERVE OUT). | |
| 47 | * | |
| 48 | * If the device server detects an invalid parameter in the CDB, it shall terminate the command without altering the | |
| 49 | * medium. If the device server detects an invalid parameter in the additional parameters supplied as data, the | |
| 50 | * device server may have already altered the medium. | |
| 51 | */ | |
| 52 | 0 | ILLEGAL_REQUEST(0x5), |
| 53 | /** | |
| 54 | * Indicates that a unit attention condition has been established (e.g., the removable medium may have been changed, | |
| 55 | * a logical unit reset occurred). See SAM-3. | |
| 56 | */ | |
| 57 | 0 | UNIT_ATTENTION(0x6), |
| 58 | /** | |
| 59 | * Indicates that a command that reads or writes the medium was attempted on a block that is protected. The read or | |
| 60 | * write operation is not performed. | |
| 61 | */ | |
| 62 | 0 | DATA_PROTECT(0x7), |
| 63 | /** | |
| 64 | * Indicates that a write-once device or a sequential-access device encountered blank medium or format-defined | |
| 65 | * end-of-data indication while reading or that a write-once device encountered a non-blank medium while writing. | |
| 66 | */ | |
| 67 | 0 | BLANK_CHECK(0x8), |
| 68 | /** | |
| 69 | * This sense key is available for reporting vendor specific conditions. | |
| 70 | */ | |
| 71 | 0 | VENDOR_SPECIFIC(0x9), |
| 72 | /** | |
| 73 | * Indicates an EXTENDED COPY command was aborted due to an error condition on the source device, the destination | |
| 74 | * device, or both (see "errors detected during processing of segment descriptors"). | |
| 75 | */ | |
| 76 | 0 | COPY_ABORTED(0xa), |
| 77 | /** | |
| 78 | * Indicates that the device server aborted the command. The application client may be able to recover by trying the | |
| 79 | * command again. | |
| 80 | */ | |
| 81 | 0 | ABORTED_COMMAND(0xb), |
| 82 | /* | |
| 83 | * 0x0c is obsolete. | |
| 84 | */ | |
| 85 | /** | |
| 86 | * Indicates that a buffered SCSI device has reached the end-of-partition and data may remain in the buffer that has | |
| 87 | * not been written to the medium. One or more RECOVER BUFFERED DATA command(s) may be issued to read the unwritten | |
| 88 | * data from the buffer. (See SSC-2.) | |
| 89 | */ | |
| 90 | 0 | VOLUME_OVERFLOW(0xd), |
| 91 | /** | |
| 92 | * Indicates that the source data did not match the data read from the medium. | |
| 93 | */ | |
| 94 | 0 | MISCOMPARE(0xe); |
| 95 | /* | |
| 96 | * 0xf is reserved. | |
| 97 | */ | |
| 98 | ||
| 99 | /** | |
| 100 | * Look-up array that maps sense key values to instances of this enumeration. | |
| 101 | */ | |
| 102 | 0 | private static SenseKey[] mapping = new SenseKey[16]; |
| 103 | ||
| 104 | static {// initialize mapping | |
| 105 | 0 | final SenseKey[] keys = values(); |
| 106 | 0 | for (int i = 0; i < keys.length; ++i) |
| 107 | 0 | mapping[keys[i].value] = keys[i]; |
| 108 | // some will remain initialized to null | |
| 109 | 0 | } |
| 110 | ||
| 111 | /** | |
| 112 | * Returns the {@link SenseKey} instance representing the passed <i>value</i>. | |
| 113 | * | |
| 114 | * @param value a sense key value | |
| 115 | * @return the {@link SenseKey} instance representing the passed <i>value</i> | |
| 116 | */ | |
| 117 | public static SenseKey valueOf (final int value) { | |
| 118 | 0 | final int index = 15 & value;// keep only the last four bits |
| 119 | 0 | if (0 < index || index >= mapping.length) return null; |
| 120 | 0 | return mapping[index]; |
| 121 | } | |
| 122 | ||
| 123 | /** | |
| 124 | * The serialized value of the {@link SenseKey} instance. | |
| 125 | */ | |
| 126 | private final int value; | |
| 127 | ||
| 128 | /** | |
| 129 | * The constructor. | |
| 130 | * | |
| 131 | * @param value the serialized value of the object. | |
| 132 | */ | |
| 133 | 0 | private SenseKey (int value) { |
| 134 | 0 | this.value = value; |
| 135 | 0 | } |
| 136 | ||
| 137 | /** | |
| 138 | * The serialized value of the instance. | |
| 139 | * | |
| 140 | * @return serialized value of the instance | |
| 141 | */ | |
| 142 | public int getValue () { | |
| 143 | 0 | return value; |
| 144 | } | |
| 145 | } |