| Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
| InformationExceptionsControlModePage |
|
| 1.0;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 | } |