diff --git a/devices/common/scsi/scsi.h b/devices/common/scsi/scsi.h index 78292f4..fe47b4e 100644 --- a/devices/common/scsi/scsi.h +++ b/devices/common/scsi/scsi.h @@ -73,6 +73,12 @@ namespace ScsiStatus { namespace ScsiMessage { enum : uint8_t { COMMAND_COMPLETE = 0, + + TARGET_ROUTINE_NUMBER_MASK = 0x07, + LOGICAL_UNIT_NUMBER_MASK = 0x07, + IS_TARGET_ROUTINE_NuMBER = 0x20, + HAS_DISCONNECT_PRIVILEDGE = 0x40, + IDENTIFY = 0x80, }; }; @@ -210,6 +216,8 @@ protected: int sksv; int field; + bool last_selection_has_atention = false; + uint8_t last_selection_message = 0; ScsiBus* bus_obj; action_callback pre_xfer_action = nullptr; diff --git a/devices/common/scsi/scsidevice.cpp b/devices/common/scsi/scsidevice.cpp index b41c5d5..dbadfbb 100644 --- a/devices/common/scsi/scsidevice.cpp +++ b/devices/common/scsi/scsidevice.cpp @@ -48,7 +48,11 @@ void ScsiDevice::notify(ScsiMsg msg_type, int param) this->initiator_id = this->bus_obj->get_initiator_id(); if (this->bus_obj->test_ctrl_lines(SCSI_CTRL_ATN)) { this->switch_phase(ScsiPhase::MESSAGE_OUT); + this->last_selection_has_atention = true; + this->last_selection_message = this->msg_buf[0]; + LOG_F(SCSIDEVICE, "%s: received message:0x%02x", this->get_name().c_str(), this->msg_buf[0]); } else { + this->last_selection_has_atention = false; this->switch_phase(ScsiPhase::COMMAND); } });