mirror of
https://github.com/dkgrizzly/GreenSCSI.git
synced 2024-12-26 16:29:45 +00:00
Constant consistency
Cleaning up "Magic Values" and replacing them with defined constants. misc fixes.
This commit is contained in:
parent
968f3336af
commit
2f14c0fed2
@ -5,7 +5,7 @@
|
|||||||
uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
||||||
#if SUPPORT_SASI
|
#if SUPPORT_SASI
|
||||||
{
|
{
|
||||||
0x00, //Device type
|
DEV_DISK, //Device type
|
||||||
0x00, //RMB = 0
|
0x00, //RMB = 0
|
||||||
0x01, //ISO,ECMA,ANSI version
|
0x01, //ISO,ECMA,ANSI version
|
||||||
0x01, //Response data format
|
0x01, //Response data format
|
||||||
@ -21,7 +21,7 @@ uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
|||||||
|
|
||||||
#if SUPPORT_DISK
|
#if SUPPORT_DISK
|
||||||
{
|
{
|
||||||
0x00, //device type
|
DEV_DISK, //device type
|
||||||
0x00, //RMB = 0
|
0x00, //RMB = 0
|
||||||
0x05, //ISO, ECMA, ANSI version
|
0x05, //ISO, ECMA, ANSI version
|
||||||
0x02, //Response data format
|
0x02, //Response data format
|
||||||
@ -39,7 +39,7 @@ uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
0x00, //device type
|
DEV_DISK, //device type
|
||||||
0x00, //RMB = 0
|
0x00, //RMB = 0
|
||||||
0x05, //ISO, ECMA, ANSI version
|
0x05, //ISO, ECMA, ANSI version
|
||||||
0x02, //Response data format
|
0x02, //Response data format
|
||||||
@ -59,7 +59,7 @@ uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
|||||||
|
|
||||||
#if SUPPORT_OPTICAL
|
#if SUPPORT_OPTICAL
|
||||||
{
|
{
|
||||||
0x05, //device type
|
DEV_OPTICAL, //device type
|
||||||
0x80, //RMB = 0
|
0x80, //RMB = 0
|
||||||
0x05, //ISO, ECMA, ANSI version
|
0x05, //ISO, ECMA, ANSI version
|
||||||
0x02, //Response data format
|
0x02, //Response data format
|
||||||
@ -76,7 +76,7 @@ uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
|||||||
0
|
0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
0x05, //device type
|
DEV_OPTICAL, //device type
|
||||||
0x80, //RMB = 0
|
0x80, //RMB = 0
|
||||||
0x05, //ISO, ECMA, ANSI version
|
0x05, //ISO, ECMA, ANSI version
|
||||||
0x02, //Response data format
|
0x02, //Response data format
|
||||||
@ -93,7 +93,7 @@ uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
|||||||
0
|
0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
0x05, //device type
|
DEV_OPTICAL, //device type
|
||||||
0x80, //RMB = 0
|
0x80, //RMB = 0
|
||||||
0x05, //ISO, ECMA, ANSI version
|
0x05, //ISO, ECMA, ANSI version
|
||||||
0x02, //Response data format
|
0x02, //Response data format
|
||||||
@ -106,7 +106,7 @@ uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
|||||||
0
|
0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
0x05, //device type
|
DEV_OPTICAL, //device type
|
||||||
0x80, //RMB = 0
|
0x80, //RMB = 0
|
||||||
0x05, //ISO, ECMA, ANSI version
|
0x05, //ISO, ECMA, ANSI version
|
||||||
0x02, //Response data format
|
0x02, //Response data format
|
||||||
@ -119,7 +119,7 @@ uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
|||||||
0
|
0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
0x05, //device type
|
DEV_OPTICAL, //device type
|
||||||
0x80, //RMB = 0
|
0x80, //RMB = 0
|
||||||
0x05, //ISO, ECMA, ANSI version
|
0x05, //ISO, ECMA, ANSI version
|
||||||
0x02, //Response data format
|
0x02, //Response data format
|
||||||
@ -132,7 +132,7 @@ uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
|||||||
0
|
0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
0x05, //device type
|
DEV_OPTICAL, //device type
|
||||||
0x80, //RMB = 0
|
0x80, //RMB = 0
|
||||||
0x05, //ISO, ECMA, ANSI version
|
0x05, //ISO, ECMA, ANSI version
|
||||||
0x02, //Response data format
|
0x02, //Response data format
|
||||||
@ -148,7 +148,7 @@ uint8_t SCSI_INQUIRY_RESPONSE[][SCSI_INQUIRY_RESPONSE_SIZE] = {
|
|||||||
|
|
||||||
#if SUPPORT_TAPE
|
#if SUPPORT_TAPE
|
||||||
{
|
{
|
||||||
0x01, //device type
|
DEV_TAPE, //device type
|
||||||
0x80, //RMB = 0
|
0x80, //RMB = 0
|
||||||
0x03, //ISO, ECMA, ANSI version
|
0x03, //ISO, ECMA, ANSI version
|
||||||
0x02, //Response data format
|
0x02, //Response data format
|
||||||
|
@ -24,7 +24,7 @@ void Seek6CommandHandler() {
|
|||||||
void ReadCapacityCommandHandler() {
|
void ReadCapacityCommandHandler() {
|
||||||
LOGN("[ReadCapacity]");
|
LOGN("[ReadCapacity]");
|
||||||
if(!m_sel) {
|
if(!m_sel) {
|
||||||
m_sts |= 0x02; // Image file absent
|
m_sts |= STATUS_CHECK;
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
121
src/general.ino
121
src/general.ino
@ -45,8 +45,17 @@ void RequestSenseCommandHandler() {
|
|||||||
buf[12] = 0x25; // Logical Unit Not Supported
|
buf[12] = 0x25; // Logical Unit Not Supported
|
||||||
} else {
|
} else {
|
||||||
buf[2] = m_sel->m_sense.m_key;
|
buf[2] = m_sel->m_sense.m_key;
|
||||||
|
buf[12] = m_sel->m_sense.m_code;
|
||||||
|
buf[13] = m_sel->m_sense.m_key_specific[0];
|
||||||
|
buf[14] = m_sel->m_sense.m_key_specific[1];
|
||||||
|
buf[15] = m_sel->m_sense.m_key_specific[2];
|
||||||
m_sel->m_sense.m_key = 0;
|
m_sel->m_sense.m_key = 0;
|
||||||
|
m_sel->m_sense.m_code = 0;
|
||||||
|
m_sel->m_sense.m_key_specific[0] = 0;
|
||||||
|
m_sel->m_sense.m_key_specific[1] = 0;
|
||||||
|
m_sel->m_sense.m_key_specific[2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
writeDataPhase(len < 18 ? len : 18, buf);
|
writeDataPhase(len < 18 ? len : 18, buf);
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
}
|
}
|
||||||
@ -54,25 +63,67 @@ void RequestSenseCommandHandler() {
|
|||||||
void TestUnitCommandHandler() {
|
void TestUnitCommandHandler() {
|
||||||
LOGN("[TestUnit]");
|
LOGN("[TestUnit]");
|
||||||
if(!m_sel) {
|
if(!m_sel) {
|
||||||
// Image file absent
|
m_sts |= STATUS_CHECK;
|
||||||
m_sel->m_sense.m_key = NOT_READY; // NOT_READY
|
return;
|
||||||
m_sel->m_sense.m_code = NO_MEDIA; // Logical Unit Not Supported
|
|
||||||
}
|
}
|
||||||
|
if(!m_sel->m_file.isOpen()) {
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||||
|
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||||
|
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RezeroUnitCommandHandler() {
|
void RezeroUnitCommandHandler() {
|
||||||
LOGN("[RezeroUnit]");
|
LOGN("[RezeroUnit]");
|
||||||
|
if(!m_sel) {
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!m_sel->m_file.isOpen()) {
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||||
|
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||||
|
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||||
|
return;
|
||||||
|
}
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FormatUnitCommandHandler() {
|
void FormatUnitCommandHandler() {
|
||||||
LOGN("[FormatUnit]");
|
LOGN("[FormatUnit]");
|
||||||
|
if(!m_sel) {
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!m_sel->m_file.isOpen()) {
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||||
|
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||||
|
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReassignBlocksCommandHandler() {
|
void ReassignBlocksCommandHandler() {
|
||||||
LOGN("[ReassignBlocks]");
|
LOGN("[ReassignBlocks]");
|
||||||
|
if(!m_sel) {
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!m_sel->m_file.isOpen()) {
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||||
|
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||||
|
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,14 +154,22 @@ void ModeSenseCommandHandler()
|
|||||||
len = 2;
|
len = 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
m_sts |= 0x02;
|
m_sts |= STATUS_CHECK;
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check whether medium is present */
|
/* Check whether medium is present */
|
||||||
if(!m_sel) {
|
if(!m_sel) {
|
||||||
m_sts |= 0x02;
|
m_sts |= STATUS_CHECK; // Image file absent
|
||||||
|
m_phase = PHASE_STATUSIN;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!m_sel->m_file.isOpen()) {
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
m_sel->m_sense.m_key = NOT_READY; // Not ready
|
||||||
|
m_sel->m_sense.m_code = LUN_NOT_READY; // Logical Unit Not Ready, Manual Intervention Required
|
||||||
|
m_sel->m_sense.m_key_specific[0] = 0x03;
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -387,16 +446,27 @@ void ModeSenseCommandHandler()
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t onModeSelectCommand() {
|
uint8_t onModeSelectCommand() {
|
||||||
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
return STATUS_GOOD;
|
||||||
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 2" */
|
|
||||||
m_sel->m_sense.m_key_specific[1] = 0x00;
|
|
||||||
m_sel->m_sense.m_key_specific[2] = 0x04;
|
|
||||||
return 0x02;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModeSelect6CommandHandler() {
|
void ModeSelect6CommandHandler() {
|
||||||
LOG("[ModeSelect6] ");
|
LOG("[ModeSelect6] ");
|
||||||
uint16_t len = m_cmd[4];
|
uint16_t len = m_cmd[4];
|
||||||
|
if(!m_sel) {
|
||||||
|
m_sts |= STATUS_CHECK; // Image file absent
|
||||||
|
m_phase = PHASE_STATUSIN;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(len > MAX_BLOCKSIZE) {
|
||||||
|
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||||
|
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||||
|
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 4" */
|
||||||
|
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||||
|
m_sel->m_sense.m_key_specific[2] = 0x04;
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
m_phase = PHASE_STATUSIN;
|
||||||
|
return;
|
||||||
|
}
|
||||||
readDataPhase(len, m_responsebuffer);
|
readDataPhase(len, m_responsebuffer);
|
||||||
|
|
||||||
for(int i = 1; i < len; i++ ) {
|
for(int i = 1; i < len; i++ ) {
|
||||||
@ -404,13 +474,28 @@ void ModeSelect6CommandHandler() {
|
|||||||
LOGHEX2(m_responsebuffer[i]);
|
LOGHEX2(m_responsebuffer[i]);
|
||||||
}
|
}
|
||||||
LOGN("");
|
LOGN("");
|
||||||
// m_sts |= onModeSelectCommand();
|
m_sts |= onModeSelectCommand();
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModeSelect10CommandHandler() {
|
void ModeSelect10CommandHandler() {
|
||||||
LOGN("[ModeSelect10]");
|
LOGN("[ModeSelect10]");
|
||||||
uint16_t len = ((uint16_t)m_cmd[7] << 8) | m_cmd[8];
|
uint16_t len = ((uint16_t)m_cmd[7] << 8) | m_cmd[8];
|
||||||
|
if(!m_sel) {
|
||||||
|
m_sts |= STATUS_CHECK; // Image file absent
|
||||||
|
m_phase = PHASE_STATUSIN;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(len > MAX_BLOCKSIZE) {
|
||||||
|
m_sel->m_sense.m_key = ILLEGAL_REQUEST;
|
||||||
|
m_sel->m_sense.m_code = INVALID_FIELD_IN_CDB; /* "Invalid field in CDB" */
|
||||||
|
m_sel->m_sense.m_key_specific[0] = ERROR_IN_OPCODE; /* "Error in Byte 7" */
|
||||||
|
m_sel->m_sense.m_key_specific[1] = 0x00;
|
||||||
|
m_sel->m_sense.m_key_specific[2] = 0x07;
|
||||||
|
m_sts |= STATUS_CHECK;
|
||||||
|
m_phase = PHASE_STATUSIN;
|
||||||
|
return;
|
||||||
|
}
|
||||||
readDataPhase(len, m_responsebuffer);
|
readDataPhase(len, m_responsebuffer);
|
||||||
|
|
||||||
for(int i = 1; i < len; i++ ) {
|
for(int i = 1; i < len; i++ ) {
|
||||||
@ -418,7 +503,7 @@ void ModeSelect10CommandHandler() {
|
|||||||
LOGHEX2(m_responsebuffer[i]);
|
LOGHEX2(m_responsebuffer[i]);
|
||||||
}
|
}
|
||||||
LOGN("");
|
LOGN("");
|
||||||
// m_sts |= onModeSelectCommand();
|
m_sts |= onModeSelectCommand();
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -431,8 +516,8 @@ void ReadDefectCommandHandler() {
|
|||||||
LOGN("[ReadDefect]");
|
LOGN("[ReadDefect]");
|
||||||
m_responsebuffer[0] = 0x00;
|
m_responsebuffer[0] = 0x00;
|
||||||
m_responsebuffer[1] = m_cmd[2];
|
m_responsebuffer[1] = m_cmd[2];
|
||||||
m_responsebuffer[2] = 0x00; // List Length MSB
|
m_responsebuffer[2] = m_cmd[7]; // List Length MSB
|
||||||
m_responsebuffer[3] = 0x00; // List Length LSB
|
m_responsebuffer[3] = m_cmd[8]; // List Length LSB
|
||||||
writeDataPhase(4, m_responsebuffer);
|
writeDataPhase(4, m_responsebuffer);
|
||||||
|
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
@ -450,13 +535,15 @@ void PreAllowMediumRemovalCommandHandler() {
|
|||||||
|
|
||||||
void UnknownCommandHandler() {
|
void UnknownCommandHandler() {
|
||||||
LOGN("[*Unknown]");
|
LOGN("[*Unknown]");
|
||||||
m_sts |= 0x02;
|
m_sts |= STATUS_CHECK;
|
||||||
m_sel->m_sense.m_key = 5;
|
if(m_sel) {
|
||||||
|
m_sel->m_sense.m_key = 5;
|
||||||
|
}
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BadLunCommandHandler() {
|
void BadLunCommandHandler() {
|
||||||
LOGN("[Bad LUN]");
|
LOGN("[Bad LUN]");
|
||||||
m_sts |= 0x02;
|
m_sts |= STATUS_CHECK;
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
}
|
}
|
||||||
|
@ -152,7 +152,7 @@ void OpticalReadSimpleTOC()
|
|||||||
uint8_t len = 0;
|
uint8_t len = 0;
|
||||||
|
|
||||||
if(!m_sel) {
|
if(!m_sel) {
|
||||||
m_sts |= 0x02;
|
m_sts |= STATUS_CHECK;
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -496,7 +496,7 @@ void OpticalLockTrayCommandHandler() {
|
|||||||
void OpticalReadCapacityCommandHandler() {
|
void OpticalReadCapacityCommandHandler() {
|
||||||
LOGN("[ReadCapacity]");
|
LOGN("[ReadCapacity]");
|
||||||
if(!m_sel) {
|
if(!m_sel) {
|
||||||
m_sts |= 0x02; // Image file absent
|
m_sts |= STATUS_CHECK; // Image file absent
|
||||||
m_phase = PHASE_STATUSIN;
|
m_phase = PHASE_STATUSIN;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,8 @@
|
|||||||
|
|
||||||
/* Additional Sense Information */
|
/* Additional Sense Information */
|
||||||
#define NO_ADDITIONAL_SENSE_INFORMATION 0x00
|
#define NO_ADDITIONAL_SENSE_INFORMATION 0x00
|
||||||
#define INVALID_LBA 0x21
|
#define LUN_NOT_READY 0x04
|
||||||
|
#define INVALID_LBA 0x21
|
||||||
#define INVALID_FIELD_IN_CDB 0x24
|
#define INVALID_FIELD_IN_CDB 0x24
|
||||||
#define NOTREADY_TO_READY_CHANGE 0x28
|
#define NOTREADY_TO_READY_CHANGE 0x28
|
||||||
#define UNIT_POWERON_RESET 0x29
|
#define UNIT_POWERON_RESET 0x29
|
||||||
|
Loading…
Reference in New Issue
Block a user