Coverage Report - org.jscsi.target.scsi.modeSense.InformationExceptionsControlModePage
 
Classes in this File Line Coverage Branch Coverage Complexity
InformationExceptionsControlModePage
0%
0/25
N/A
1
 
 1  
 package org.jscsi.target.scsi.modeSense;
 2  
 
 3  
 
 4  
 import java.nio.ByteBuffer;
 5  
 
 6  
 import org.jscsi.target.util.BitManip;
 7  
 import org.jscsi.target.util.ReadWrite;
 8  
 
 9  
 
 10  
 /**
 11  
  * INFORMATION EXCEPTIONS CONTROL MODE PAGEs carry information about recent INFORMATION EXCEPTION SCSI errors.
 12  
  * 
 13  
  * @author Andreas Ergenzinger
 14  
  */
 15  
 public class InformationExceptionsControlModePage extends Page_0FormatModePage {
 16  
 
 17  
     /**
 18  
      * If the performance (PERF) bit is set to zero, informational exception operations that are the cause of delays are
 19  
      * acceptable. If the PERF bit is set to one, the device server shall not cause delays while doing informational
 20  
      * exception operations. A PERF bit set to one may cause the device server to disable some or all of the
 21  
      * informational exceptions operations, thereby limiting the reporting of informational exception conditions.
 22  
      */
 23  
     private final boolean performance;
 24  
 
 25  
     /**
 26  
      * If background functions are supported and the Enable Background Function (EBF) bit is set to one, then the device
 27  
      * server shall enable background functions. If the EBF bit is set to zero, the device server shall disable the
 28  
      * functions.
 29  
      * <p>
 30  
      * For the purposes of the EBF bit, background functions are defined as idle time functions that may impact
 31  
      * performance that are performed by a device server operating without errors but do not impact the reliability of
 32  
      * the logical unit (e.g., read scan).
 33  
      */
 34  
     private final boolean enableBackgroundFunction;
 35  
 
 36  
     /**
 37  
      * If the enable warning (EWASC) bit is set to zero, the device server shall disable reporting of the warning. The
 38  
      * MRIE field is ignored when DEXCPT is set to one and EWASC is set to zero. If the EWASC bit is set to one, warning
 39  
      * reporting shall be enabled. The method for reporting the warning when the EWASC bit is set to one is determined
 40  
      * from the MRIE field.
 41  
      */
 42  
     private final boolean enableWarning;
 43  
 
 44  
     /**
 45  
      * A disable exception control (DEXCPT) bit set to zero indicates the failure prediction threshold exceeded
 46  
      * reporting shall be enabled. The method for reporting the failure prediction threshold exceeded when the DEXCPT
 47  
      * bit is set to zero is determined from the MRIE field. A DEXCPT bit set to one indicates the device server shall
 48  
      * disable reporting of the failure prediction threshold exceeded. The MRIE field is ignored when DEXCPT is set to
 49  
      * one and EWASC is set to zero.
 50  
      */
 51  
     private final boolean disableExceptionControl;
 52  
 
 53  
     /**
 54  
      * A TEST bit set to one shall create a test device failure at the next interval time, as specified by the INTERVAL
 55  
      * TIMER field, if the DEXCPT bit is set to zero. When the TEST bit is set to one, the MRIE and REPORT COUNT fields
 56  
      * shall apply as if the TEST bit were zero. The test device failure shall be reported with the additional sense
 57  
      * code set to FAILURE PREDICTION THRESHOLD EXCEEDED (FALSE). If both the TEST bit and the DEXCPT bit are one, the
 58  
      * MODE SELECT command shall be terminated with CHECK CONDITION status, with the sense key set to ILLEGAL REQUEST,
 59  
      * and the additional sense code set to INVALID FIELD IN PARAMETER LIST. A TEST bit set to zero shall instruct the
 60  
      * device server not to generate any test device failure notifications.
 61  
      */
 62  
     private final boolean test;
 63  
 
 64  
     /**
 65  
      * If the log errors (LOGERR) bit is set to zero, the logging of informational exception conditions by a device
 66  
      * server is vendor specific. If the LOGERR bit is set to one, the device server shall log informational exception
 67  
      * conditions.
 68  
      */
 69  
     private final boolean logErrors;
 70  
 
 71  
     /**
 72  
      * The value in the method of reporting informational exceptions (MRIE) field defines the method that shall be used
 73  
      * by the device server to report informational exception conditions (see SPC3R23 table 257, p.294f). The priority
 74  
      * of reporting multiple information exceptions is vendor specific.
 75  
      */
 76  
     private final int methodOfReportingInformationalExceptionConditions;
 77  
 
 78  
     /**
 79  
      * The value in the INTERVAL TIMER field is the period in 100 millisecond increments for reporting that an
 80  
      * informational exception condition has occurred. The device server shall not report informational exception
 81  
      * conditions more frequently than the time specified by the INTERVAL TIMER field and shall report them after the
 82  
      * time specified by INTERVAL TIMER field has elapsed. After the informational exception condition has been reported
 83  
      * the interval timer shall be restarted.
 84  
      * <p>
 85  
      * A value of zero or FFFF FFFFh in the INTERVAL TIMER field indicates that the period for reporting an
 86  
      * informational exception condition is vendor specific.
 87  
      */
 88  
     private final int intervalTimer;
 89  
 
 90  
     /**
 91  
      * The value in the REPORT COUNT field is the number of times to report an informational exception condition to the
 92  
      * application client. A value of zero in the REPORT COUNT field indicates there is no limit on the number of times
 93  
      * the device server reports an informational exception condition.
 94  
      */
 95  
     private final int reportCount;
 96  
 
 97  
     public InformationExceptionsControlModePage (boolean parametersSaveable, final boolean performance, final boolean enableBackgroundFunction, final boolean enableWarning, final boolean disableExceptionControl, final boolean test, final boolean logErrors, final int methodOfReportingInformationalExceptionConditions, final int intervalTimer, final int reportCount) {
 98  0
         super(parametersSaveable,// PS
 99  
         0x1c,// page code
 100  
         0x0a);// page length
 101  0
         this.performance = performance;
 102  0
         this.enableBackgroundFunction = enableBackgroundFunction;
 103  0
         this.enableWarning = enableWarning;
 104  0
         this.disableExceptionControl = disableExceptionControl;
 105  0
         this.test = test;
 106  0
         this.logErrors = logErrors;
 107  0
         this.methodOfReportingInformationalExceptionConditions = methodOfReportingInformationalExceptionConditions;
 108  0
         this.intervalTimer = intervalTimer;
 109  0
         this.reportCount = reportCount;
 110  
 
 111  0
     }
 112  
 
 113  
     @Override
 114  
     protected void serializeModeParameters (ByteBuffer buffer, int index) {
 115  
 
 116  
         // byte 2 flags
 117  0
         buffer.position(index + 2);
 118  0
         byte b = 0;
 119  0
         b = BitManip.getByteWithBitSet(b, 7, performance);// PERF
 120  0
         b = BitManip.getByteWithBitSet(b, 5, enableBackgroundFunction);// PERF
 121  0
         b = BitManip.getByteWithBitSet(b, 4, enableWarning);// EWASC
 122  0
         b = BitManip.getByteWithBitSet(b, 3, disableExceptionControl);// DEXCPT
 123  0
         b = BitManip.getByteWithBitSet(b, 2, test);// TEST
 124  0
         b = BitManip.getByteWithBitSet(b, 0, logErrors);// LOGERR
 125  0
         buffer.put(b);
 126  
 
 127  
         // byte 3
 128  0
         b = (byte) (methodOfReportingInformationalExceptionConditions & 31);// MRIE
 129  0
         buffer.put(b);
 130  
 
 131  
         // INTERVAL TIMER and REPORT COUNT
 132  0
         ReadWrite.writeInt(intervalTimer,// value
 133  
                 buffer,// buffer
 134  
                 index + 4);// start index
 135  0
         ReadWrite.writeInt(reportCount,// value
 136  
                 buffer,// buffer
 137  
                 index + 8);// start index
 138  0
     }
 139  
 
 140  
 }