Coverage Report - org.jscsi.target.scsi.cdb.ScsiOperationCode
 
Classes in this File Line Coverage Branch Coverage Complexity
ScsiOperationCode
0%
0/16
N/A
1
 
 1  
 package org.jscsi.target.scsi.cdb;
 2  
 
 3  
 /**
 4  
  * The OPERATION CODE of a Command Descriptor Block specifies the type of command the initiator wants the target to
 5  
  * perform.
 6  
  * <p>
 7  
  * The OPERATION CODE of the {@link CommandDescriptorBlock} has a GROUP CODE field and a COMMAND CODE field. The
 8  
  * three-bit GROUP CODE field provides for eight groups of command codes. The five-bit COMMAND CODE field provides for
 9  
  * thirty-two command codes in each group. A total of 256 possible operation codes exist.
 10  
  * <p>
 11  
  * The value of the GROUP CODE field specifies the {@link CommandDescriptorBlock}'s length.
 12  
  * 
 13  
  * @see CdbType
 14  
  * @author Andreas Ergenzinger
 15  
  */
 16  0
 public enum ScsiOperationCode {
 17  0
     TEST_UNIT_READY((byte) 0x00), REQUEST_SENSE((byte) 0x03), FORMAT_UNIT((byte) 0x04), READ_6((byte) 0x08), WRITE_6((byte) 0x0a), INQUIRY((byte) 0x12), MODE_SELECT_6((byte) 0x15), MODE_SENSE_6((byte) 0x1a), SEND_DIAGNOSTIC((byte) 0x1d), READ_CAPACITY_10((byte) 0x25), READ_10((byte) 0x28), WRITE_10((byte) 0x2a), READ_CAPACITY_16((byte) 0x9e), REPORT_LUNS((byte) 0xa0);
 18  
 
 19  
     /**
 20  
      * The serialized value of the operation code.
 21  
      */
 22  
     private final byte value;
 23  
 
 24  
     /**
 25  
      * Maps byte values/index positions to {@link ScsiOperationCode} constants.
 26  
      */
 27  0
     private static final ScsiOperationCode[] mapping = new ScsiOperationCode[256];
 28  
     static {// initialize mapping
 29  0
         final ScsiOperationCode[] values = values();
 30  
         int index;
 31  0
         for (ScsiOperationCode v : values) {
 32  0
             index = (v.value & 255);
 33  0
             mapping[index] = v;
 34  
         }
 35  0
     }
 36  
 
 37  
     /**
 38  
      * Returns the {@link ScsiOperationCode} corresponding to the passed byte value.
 39  
      * 
 40  
      * @param value the serialized value of a SCSI operation code
 41  
      * @return the corresponding {@link ScsiOperationCode} or <code>null</code> if the passed value is not known by the
 42  
      *         jSCSI Target
 43  
      */
 44  
     public static final ScsiOperationCode valueOf (final byte value) {
 45  0
         return mapping[value & 255];
 46  
     }
 47  
 
 48  0
     private ScsiOperationCode (final byte value) {
 49  0
         this.value = value;
 50  0
     }
 51  
 
 52  
     /**
 53  
      * Returns the serialized value of the operation code.
 54  
      * 
 55  
      * @return the serialized value of the operation code
 56  
      */
 57  
     public final byte value () {
 58  0
         return value;
 59  
     }
 60  
 
 61  
     /**
 62  
      * The three-bit GROUP CODE field provides for eight groups of command codes.
 63  
      * 
 64  
      * @return the three-bit GROUP CODE field
 65  
      */
 66  
     public int getGroupCode () {
 67  0
         return (value >>> 5) & 7;
 68  
     }
 69  
 
 70  
     /**
 71  
      * Returns the five-bit COMMAND CODE field.
 72  
      * 
 73  
      * @return the five-bit COMMAND CODE field
 74  
      */
 75  
     public int getCommandCode () {
 76  0
         return value & 31;
 77  
     }
 78  
 
 79  
     /**
 80  
      * Returns the {@link CdbType} for this operation code.
 81  
      * 
 82  
      * @return the {@link CdbType} for this operation code
 83  
      */
 84  
     public CdbType getCdbType () {
 85  0
         return CdbType.getCdbType(this);
 86  
     }
 87  
 }