📄 scsicmds.cpp
字号:
" supplier help line.", /* 0x08 */ "W: Preventive maintenance of the library is required.\n" " Check the library users manual for device specific preventative maintenance\n" " tasks, or call your library supplier help line.", /* 0x09 */ "C: General environmental conditions inside the library are outside the\n" " specified humidity range.", /* 0x0a */ "C: General environmental conditions inside the library are outside the\n" " specified temperature range.", /* 0x0b */ "C: The voltage supply to the library is outside the specified range.\n" " There is a potential problem with the power supply or failure of\n" " a redundant power supply.", /* 0x0c */ "C: A cartridge has been left inside the library by a previous hardware\n" " fault:\n" " 1. Insert an empty magazine to clear the fault.\n" " 2. If the fault does not clear, turn the library off and then on again.\n" " 3. If the problem persists, call the library supplier help line.", /* 0x0d */ "W: There is a potential problem with the drive ejecting cartridges or\n" " with the library mechanism picking a cartridge from a slot.\n" " 1. No action needs to be taken at this time.\n" " 2. If the problem persists, call the library supplier help line.", /* 0x0e */ "W: There is a potential problem with the library mechanism placing a\n" " cartridge into a slot.\n" " 1. No action needs to be taken at this time.\n" " 2. If the problem persists, call the library supplier help line.", /* 0x0f */ "W: There is a potential problem with the drive or the library mechanism\n" " loading cartridges, or an incompatible cartridge.", /* 0x10 */ "C: The library has failed because the door is open:\n" " 1. Clear any obstructions from the library door.\n" " 2. Close the library door.\n" " 3. If the problem persists, call the library supplier help line.", /* 0x11 */ "C: There is a mechanical problem with the library media import/export\n" " mailslot.", /* 0x12 */ "C: The library cannot operate without the magazine.\n" " 1. Insert the magazine into the library.\n" " 2. Restart the operation.", /* 0x13 */ "W: Library security has been compromised.", /* 0x14 */ "I: The library security mode has been changed.\n" " The library has either been put into secure mode, or the library has exited\n" " the secure mode.\n" " This is for information purposes only. No action is required.", /* 0x15 */ "I: The library has been manually turned offline and is unavailable for use.", /* 0x16 */ "I: A drive inside the library has been taken offline.\n" " This is for information purposes only. No action is required.", /* 0x17 */ "W: There is a potential problem with the bar code label or the scanner\n" " hardware in the library mechanism.\n" " 1. No action needs to be taken at this time.\n" " 2. If the problem persists, call the library supplier help line.", /* 0x18 */ "C: The library has detected an inconsistency in its inventory.\n" " 1. Redo the library inventory to correct inconsistency.\n" " 2. Restart the operation.\n" " Check the applications users manual or the hardware users manual for\n" " specific instructions on redoing the library inventory.", /* 0x19 */ "W: A library operation has been attempted that is invalid at this time.", /* 0x1a */ "W: A redundant interface port on the library has failed.", /* 0x1b */ "W: A library cooling fan has failed.", /* 0x1c */ "W: A redundant power supply has failed inside the library. Check the\n" " library users manual for instructions on replacing the failed power supply.", /* 0x1d */ "W: The library power consumption is outside the specified range.", /* 0x1e */ "C: A failure has occurred in the cartridge pass-through mechanism between\n" " two library modules.", /* 0x1f */ "C: A cartridge has been left in the pass-through mechanism from a\n" " previous hardware fault. Check the library users guide for instructions on\n" " clearing this fault.", /* 0x20 */ "I: The library was unable to read the bar code on a cartridge.",};const char * scsiTapeAlertsChangerDevice(unsigned short code){ const int num = sizeof(ChangerTapeAlertsMessageTable) / sizeof(ChangerTapeAlertsMessageTable[0]); return (code < num) ? ChangerTapeAlertsMessageTable[code] : "Unknown Alert"; }/* this is a subset of the SCSI additional sense code strings indexed * by "ascq" for the case when asc==SCSI_ASC_IMPENDING_FAILURE (0x5d) */static const char * strs_for_asc_5d[] = { /* 0x00 */ "FAILURE PREDICTION THRESHOLD EXCEEDED", "MEDIA FAILURE PREDICTION THRESHOLD EXCEEDED", "LOGICAL UNIT FAILURE PREDICTION THRESHOLD EXCEEDED", "SPARE AREA EXHAUSTION PREDICTION THRESHOLD EXCEEDED", "", "", "", "", "", "", "", "", "", "", "", "", /* 0x10 */ "HARDWARE IMPENDING FAILURE GENERAL HARD DRIVE FAILURE", "HARDWARE IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH", "HARDWARE IMPENDING FAILURE DATA ERROR RATE TOO HIGH", "HARDWARE IMPENDING FAILURE SEEK ERROR RATE TOO HIGH", "HARDWARE IMPENDING FAILURE TOO MANY BLOCK REASSIGNS", "HARDWARE IMPENDING FAILURE ACCESS TIMES TOO HIGH", "HARDWARE IMPENDING FAILURE START UNIT TIMES TOO HIGH", "HARDWARE IMPENDING FAILURE CHANNEL PARAMETRICS", "HARDWARE IMPENDING FAILURE CONTROLLER DETECTED", "HARDWARE IMPENDING FAILURE THROUGHPUT PERFORMANCE", "HARDWARE IMPENDING FAILURE SEEK TIME PERFORMANCE", "HARDWARE IMPENDING FAILURE SPIN-UP RETRY COUNT", "HARDWARE IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT", "", "", "", /* 0x20 */ "CONTROLLER IMPENDING FAILURE GENERAL HARD DRIVE FAILURE", "CONTROLLER IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH", "CONTROLLER IMPENDING FAILURE DATA ERROR RATE TOO HIGH", "CONTROLLER IMPENDING FAILURE SEEK ERROR RATE TOO HIGH", "CONTROLLER IMPENDING FAILURE TOO MANY BLOCK REASSIGNS", "CONTROLLER IMPENDING FAILURE ACCESS TIMES TOO HIGH", "CONTROLLER IMPENDING FAILURE START UNIT TIMES TOO HIGH", "CONTROLLER IMPENDING FAILURE CHANNEL PARAMETRICS", "CONTROLLER IMPENDING FAILURE CONTROLLER DETECTED", "CONTROLLER IMPENDING FAILURE THROUGHPUT PERFORMANCE", "CONTROLLER IMPENDING FAILURE SEEK TIME PERFORMANCE", "CONTROLLER IMPENDING FAILURE SPIN-UP RETRY COUNT", "CONTROLLER IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT", "", "", "", /* 0x30 */ "DATA CHANNEL IMPENDING FAILURE GENERAL HARD DRIVE FAILURE", "DATA CHANNEL IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH", "DATA CHANNEL IMPENDING FAILURE DATA ERROR RATE TOO HIGH", "DATA CHANNEL IMPENDING FAILURE SEEK ERROR RATE TOO HIGH", "DATA CHANNEL IMPENDING FAILURE TOO MANY BLOCK REASSIGNS", "DATA CHANNEL IMPENDING FAILURE ACCESS TIMES TOO HIGH", "DATA CHANNEL IMPENDING FAILURE START UNIT TIMES TOO HIGH", "DATA CHANNEL IMPENDING FAILURE CHANNEL PARAMETRICS", "DATA CHANNEL IMPENDING FAILURE CONTROLLER DETECTED", "DATA CHANNEL IMPENDING FAILURE THROUGHPUT PERFORMANCE", "DATA CHANNEL IMPENDING FAILURE SEEK TIME PERFORMANCE", "DATA CHANNEL IMPENDING FAILURE SPIN-UP RETRY COUNT", "DATA CHANNEL IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT", "", "", "", /* 0x40 */ "SERVO IMPENDING FAILURE GENERAL HARD DRIVE FAILURE", "SERVO IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH", "SERVO IMPENDING FAILURE DATA ERROR RATE TOO HIGH", "SERVO IMPENDING FAILURE SEEK ERROR RATE TOO HIGH", "SERVO IMPENDING FAILURE TOO MANY BLOCK REASSIGNS", "SERVO IMPENDING FAILURE ACCESS TIMES TOO HIGH", "SERVO IMPENDING FAILURE START UNIT TIMES TOO HIGH", "SERVO IMPENDING FAILURE CHANNEL PARAMETRICS", "SERVO IMPENDING FAILURE CONTROLLER DETECTED", "SERVO IMPENDING FAILURE THROUGHPUT PERFORMANCE", "SERVO IMPENDING FAILURE SEEK TIME PERFORMANCE", "SERVO IMPENDING FAILURE SPIN-UP RETRY COUNT", "SERVO IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT", "", "", "", /* 0x50 */ "SPINDLE IMPENDING FAILURE GENERAL HARD DRIVE FAILURE", "SPINDLE IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH", "SPINDLE IMPENDING FAILURE DATA ERROR RATE TOO HIGH", "SPINDLE IMPENDING FAILURE SEEK ERROR RATE TOO HIGH", "SPINDLE IMPENDING FAILURE TOO MANY BLOCK REASSIGNS", "SPINDLE IMPENDING FAILURE ACCESS TIMES TOO HIGH", "SPINDLE IMPENDING FAILURE START UNIT TIMES TOO HIGH", "SPINDLE IMPENDING FAILURE CHANNEL PARAMETRICS", "SPINDLE IMPENDING FAILURE CONTROLLER DETECTED", "SPINDLE IMPENDING FAILURE THROUGHPUT PERFORMANCE", "SPINDLE IMPENDING FAILURE SEEK TIME PERFORMANCE", "SPINDLE IMPENDING FAILURE SPIN-UP RETRY COUNT", "SPINDLE IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT", "", "", "", /* 0x60 */ "FIRMWARE IMPENDING FAILURE GENERAL HARD DRIVE FAILURE", "FIRMWARE IMPENDING FAILURE DRIVE ERROR RATE TOO HIGH", "FIRMWARE IMPENDING FAILURE DATA ERROR RATE TOO HIGH", "FIRMWARE IMPENDING FAILURE SEEK ERROR RATE TOO HIGH", "FIRMWARE IMPENDING FAILURE TOO MANY BLOCK REASSIGNS", "FIRMWARE IMPENDING FAILURE ACCESS TIMES TOO HIGH", "FIRMWARE IMPENDING FAILURE START UNIT TIMES TOO HIGH", "FIRMWARE IMPENDING FAILURE CHANNEL PARAMETRICS", "FIRMWARE IMPENDING FAILURE CONTROLLER DETECTED", "FIRMWARE IMPENDING FAILURE THROUGHPUT PERFORMANCE", "FIRMWARE IMPENDING FAILURE SEEK TIME PERFORMANCE", "FIRMWARE IMPENDING FAILURE SPIN-UP RETRY COUNT", /* 0x6c */ "FIRMWARE IMPENDING FAILURE DRIVE CALIBRATION RETRY COUNT"};/* this is a subset of the SCSI additional sense code strings indexed * * by "ascq" for the case when asc==SCSI_ASC_WARNING (0xb) * */static const char * strs_for_asc_b[] = { /* 0x00 */ "WARNING", "WARNING - SPECIFIED TEMPERATURE EXCEEDED", "WARNING - ENCLOSURE DEGRADED"};static char spare_buff[128];const char * scsiGetIEString(UINT8 asc, UINT8 ascq){ const char * rp; if (SCSI_ASC_IMPENDING_FAILURE == asc) { if (ascq == 0xff) return "FAILURE PREDICTION THRESHOLD EXCEEDED (FALSE)"; else if (ascq < (sizeof(strs_for_asc_5d) / sizeof(strs_for_asc_5d[0]))) { rp = strs_for_asc_5d[ascq]; if (strlen(rp) > 0) return rp; } snprintf(spare_buff, sizeof(spare_buff), "FAILURE PREDICTION THRESHOLD EXCEEDED: ascq=0x%x", ascq); return spare_buff; } else if (SCSI_ASC_WARNING == asc) { if (ascq < (sizeof(strs_for_asc_b) / sizeof(strs_for_asc_b[0]))) { rp = strs_for_asc_b[ascq]; if (strlen(rp) > 0) return rp; } snprintf(spare_buff, sizeof(spare_buff), "WARNING: ascq=0x%x", ascq); return spare_buff; } return NULL; /* not a IE additional sense code */}/* This is not documented in t10.org, page 0x80 is vendor specific *//* Some IBM disks do an offline read-scan when they get this command. */int scsiSmartIBMOfflineTest(int device){ UINT8 tBuf[256]; int res; memset(tBuf, 0, sizeof(tBuf)); /* Build SMART Off-line Immediate Diag Header */ tBuf[0] = 0x80; /* Page Code */ tBuf[1] = 0x00; /* Reserved */ tBuf[2] = 0x00; /* Page Length MSB */ tBuf[3] = 0x04; /* Page Length LSB */ tBuf[4] = 0x03; /* SMART Revision */ tBuf[5] = 0x00; /* Reserved */ tBuf[6] = 0x00; /* Off-line Immediate Time MSB */ tBuf[7] = 0x00; /* Off-line Immediate Time LSB */ res = scsiSendDiagnostic(device, SCSI_DIAG_NO_SELF_TEST, tBuf, 8); if (res) pout("IBM offline test failed [%s]\n", scsiErrString(res)); return res;}int scsiSmartDefaultSelfTest(int device){ int res; res = scsiSendDiagnostic(device, SCSI_DIAG_DEF_SELF_TEST, NULL, 0); if (res) pout("Default self test failed [%s]\n", scsiErrString(res)); return res;}int scsiSmartShortSelfTest(int device){ int res; res = scsiSendDiagnostic(device, SCSI_DIAG_BG_SHORT_SELF_TEST, NULL, 0); if (res) pout("Short offline self test failed [%s]\n", scsiErrString(res)); return res;}int scsiSmartExtendSelfTest(int device){ int res; res = scsiSendDiagnostic(device, SCSI_DIAG_BG_EXTENDED_SELF_TEST, NULL, 0); if (res) pout("Long (extended) offline self test failed [%s]\n", scsiErrString(res)); return res;}int scsiSmartShortCapSelfTest(int device){ int res; res = scsiSendDiagnostic(device, SCSI_DIAG_FG_SHORT_SELF_TEST, NULL, 0); if (res) pout("Short foreground self test failed [%s]\n", scsiErrString(res)); return res;}int scsiSmartExtendCapSelfTest(int device){ int res; res = scsiSendDiagnostic(device, SCSI_DIAG_FG_EXTENDED_SELF_TEST, NULL, 0); if (res) pout("Long (extended) foreground self test failed [%s]\n", scsiErrString(res)); return res;}int scsiSmartSelfTestAbort(int device){ int res; res = scsiSendDiagnostic(device, SCSI_DIAG_ABORT_SELF_TEST, NULL, 0); if (res) pout("Abort self test failed [%s]\n", scsiErrString(res)); return res;}/* Retu
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -