mirror of
https://github.com/akuker/RASCSI.git
synced 2024-06-27 14:29:31 +00:00
3e7f317c49
* Use foreach * Renaming * Revert "Renaming" This reverts commitb0554b9c0a
. * Manpage updates * Removed obsolete assertions * Replaced QWORD by uint64_t and removed respective typedef * Removed LPCSTR typedef * Removed LPCTSTR typedef * Removed LPTSTR typedef * Renamed SCSI command interface classes * Renamed xm6.h to rascsi.h * Moved interface classes to new interfaces subfolder * Added include * Fixed compilation issues of 64 bit Ubuntu * Renaming * Sort block sizes * protobuf interface description update * Fixed handling for sector size for non-disk devices * Fixed typo * Fixed comment * Translate code commends into English, removing redundant ones (#214) * Comment update * For other bridge interfaces than eth0 IP address and netmask can be provided * Added special rule for testing on x86 PCs * Translated code comments into English, removing some redundant ones in the process, plus fixing typos (#215) * Translate code commends into English, removing redundant ones * - Translated all remaining Japanese code comments in src/raspberrypi/ to English, with the exception of cfilesystem.cpp|h - Removed some redundant comments where the context is obvious from the code - Fixed a few typos and mistakes * Comment update * Removed unused typedefs * Added special rule for testing on x86 PCs * Comment update * Comment update * Updated capacity calculation * Updated protobuf interface to signal parameter support * Simplified protobuf interface * Updated rasctl server info output * Updated logging * protobuf interface has to return block only if it is configurable * Updated block size handling * Improved error message if ID is already in use * Removed typedef * Renamed protobuf interface method * Renaming * Use protobuf::Messsge instead of protobuf::MessageLite * default_image_folder cannot be an empty string, removed obsolete check * Logging update * Made some error messages more concise * Removed magic constant * Updated error message * Comment update * Names of removable media drives must be constant and not contain the capacity * Improved DeviceFactory error handling * More error handing improvements * Interface comment update * Pass interface list to ctapdriver when creating bridge * Moved initialization code * Updated rasctl server information output * Improved handling of MO capacities * Renaming * Comment update * Reject inserting a medium when there is already a medium present (eject first) * Save list of files in use before dry-run * Updated rasctl server info message * Comment update * Fixed typo * Cleaned list handling * Sort devices list by ID *and unit* * Improved block size check * Fixed issue with missing method in old Raspberry Pi OS protobuf implementation * Updated error message * Improve and fix bugs with saving&loading configuration files for rascsi-web (#218) * Translate code commends into English, removing redundant ones * - Translated all remaining Japanese code comments in src/raspberrypi/ to English, with the exception of cfilesystem.cpp|h - Removed some redundant comments where the context is obvious from the code - Fixed a few typos and mistakes * - Store only file path and name to configuration csv - Strip known non-file path strings when reading configuration csv (backwards compatibility) - Validate SCSI ID before attempting to attach a device * Add comment and TODO * Partial translation of cfilesystem.h * Move csv read/write logic into file_cmd.py * Load default.csv on rascsi-web startup * Add rudimentary error handling to config loading/saving * Implement a delete configuration csv file feature. Also rename the delete_image method to delete_file and made it take the full file patch as argument to be consistent with other file operation methods. * Catch the exception when attempting to exclude SCSI id that is already in use from a list of valid SCSI ids * Fix error handling when failing to open a csv file for read or write * Removed unused structures, code and type cleanup * Use unscoped enums for commands * SASI Format opcode is 0x06, not 0x04 (see comment in code) * Removed duplicate command * Code review, data type updates * Data type updated, use #pragma once * Logging update * Renaming * Renaming * Removed duplicate code * Renaming * Refactoring * Removed TODO * Updated logging * Comment update * Comment update * Updated GetEventStatusNotification * Removed goto * Options -h and -v do not require to be the root user (fixes issue #166) * Updated error messages and exception handling * Added number of supported LUNs to protobuf interface * Updated list handling of protobuf interface * Comment update * Improved error handling * Added missing return statement * Allow empty device list * Fixed unnecessary detach_all() when config file isn't read (#221) * Translate code commends into English, removing redundant ones * - Translated all remaining Japanese code comments in src/raspberrypi/ to English, with the exception of cfilesystem.cpp|h - Removed some redundant comments where the context is obvious from the code - Fixed a few typos and mistakes * - Store only file path and name to configuration csv - Strip known non-file path strings when reading configuration csv (backwards compatibility) - Validate SCSI ID before attempting to attach a device * Add comment and TODO * Partial translation of cfilesystem.h * Move csv read/write logic into file_cmd.py * Load default.csv on rascsi-web startup * Add rudimentary error handling to config loading/saving * Implement a delete configuration csv file feature. Also rename the delete_image method to delete_file and made it take the full file patch as argument to be consistent with other file operation methods. * Catch the exception when attempting to exclude SCSI id that is already in use from a list of valid SCSI ids * Fix error handling when failing to open a csv file for read or write * Run detach_all() only after succeeding to open a file for reading * Protecting/unprotecing a non-ready medium is considered not possible * Updated error message * Extract detaching all devices, add parameter list support * Comment update * Fixed typos * Restore files in use if dry-run fails * Feature configurable reserved id for rascsi-web (#223) * Translate code commends into English, removing redundant ones * - Translated all remaining Japanese code comments in src/raspberrypi/ to English, with the exception of cfilesystem.cpp|h - Removed some redundant comments where the context is obvious from the code - Fixed a few typos and mistakes * - Store only file path and name to configuration csv - Strip known non-file path strings when reading configuration csv (backwards compatibility) - Validate SCSI ID before attempting to attach a device * Add comment and TODO * Partial translation of cfilesystem.h * Move csv read/write logic into file_cmd.py * Load default.csv on rascsi-web startup * Add rudimentary error handling to config loading/saving * Implement a delete configuration csv file feature. Also rename the delete_image method to delete_file and made it take the full file patch as argument to be consistent with other file operation methods. * Catch the exception when attempting to exclude SCSI id that is already in use from a list of valid SCSI ids * Fix error handling when failing to open a csv file for read or write * Run detach_all() only after succeeding to open a file for reading * Make the reserved SCSI id configurable through an argument to start.sh; make the rascsi-web service reserve 7 by default to maintain current behavior. * Make it possible to reserve multiple scsi ids in the web ui * Added support for reserved IDs * rasctl output update * Re-ordered logging * Logging update * Make use of the newly introduced 'rasctl -r' to have the webui reserve ids on the backend side upon startup (#224) * Translate code commends into English, removing redundant ones * - Translated all remaining Japanese code comments in src/raspberrypi/ to English, with the exception of cfilesystem.cpp|h - Removed some redundant comments where the context is obvious from the code - Fixed a few typos and mistakes * - Store only file path and name to configuration csv - Strip known non-file path strings when reading configuration csv (backwards compatibility) - Validate SCSI ID before attempting to attach a device * Add comment and TODO * Partial translation of cfilesystem.h * Move csv read/write logic into file_cmd.py * Load default.csv on rascsi-web startup * Add rudimentary error handling to config loading/saving * Implement a delete configuration csv file feature. Also rename the delete_image method to delete_file and made it take the full file patch as argument to be consistent with other file operation methods. * Catch the exception when attempting to exclude SCSI id that is already in use from a list of valid SCSI ids * Fix error handling when failing to open a csv file for read or write * Run detach_all() only after succeeding to open a file for reading * Make use of the new 'rasctl -r' command to reserve IDs on the backend side as well. * Updated string to integer conversions * Improved string to integer conversion * Move string to integer conversion to rasutil * Removed unused variable * Fixed detach, which did not remove the filename from the filenames set * Re-added folder to gitignore * Set/Display patch version * Fix issue where reserved ids were not reserved again when restarting rascsi-service from within the web ui (#226) * Translate code commends into English, removing redundant ones * - Translated all remaining Japanese code comments in src/raspberrypi/ to English, with the exception of cfilesystem.cpp|h - Removed some redundant comments where the context is obvious from the code - Fixed a few typos and mistakes * - Store only file path and name to configuration csv - Strip known non-file path strings when reading configuration csv (backwards compatibility) - Validate SCSI ID before attempting to attach a device * Add comment and TODO * Partial translation of cfilesystem.h * Move csv read/write logic into file_cmd.py * Load default.csv on rascsi-web startup * Add rudimentary error handling to config loading/saving * Implement a delete configuration csv file feature. Also rename the delete_image method to delete_file and made it take the full file patch as argument to be consistent with other file operation methods. * Catch the exception when attempting to exclude SCSI id that is already in use from a list of valid SCSI ids * Fix error handling when failing to open a csv file for read or write * Run detach_all() only after succeeding to open a file for reading * Make use of the new 'rasctl -r' command to reserve IDs on the backend side as well. * Make sure reserved SCSI IDs gets reserved again when restarting rascsi-service from within the web ui * Updated interface comment * Accept daynaport as legacy type * Fixed typo * Remove file from the list of files in use when ejected with a SCSI command * Check for attached device for INSERT, EJECT, PROTECT, UNPROTECT * Fixed error handling * Fixed filepath handling * Added more device shortcuts to rasctl * Fixed function declaration * Extraced ATTACH and DETACH * Extracted INSERT * Simplified ProcessCmd * Comment update * Fixed memory leak * Log information on whether a new device is protected or read-only * Updated errro message * Updated error message * Initialize private fields * Updated rasctl help message * Added DEVICE_INFO to protobuf interface * Improved error handling * DEVICE_INFO supports device list * Updated server info handling * Unified result handling with oneof, all commands now return PbResult * A result can always return a message string * Fixed typo * Simplified sending of commands * Improved error handling * Removed unused code * Updated error handling * Code cleanup * Comment update * Updated logging * Updated error handling * Updated handling of removed status for devices without image file support * Comment update * Fixed typo * Updated logging * Updated parameter handling * Updated setting default interfaces * Revert "Updated setting default interfaces" This reverts commit210abc775d
. * Revert "Updated parameter handling" This reverts commit35302addd5
. * rascsi supports reserving IDs * Updated help message * Replaced BOOL by bool * Logging update * Logging update * Added default parameters to device properties * Return parameters a device was set up with * Improved device initialization * Updated default parameter handling * Updated default parameter handling * Fixed typo * Comment updates * Comment update * Manage default parameters in the respective device * Do not pass empty parameter string * Added supports_params flag * Made comparisons more consistent * Updated error handling * Updated exception handling * Renaming * Comment update * NEC sectors size must be 512 bytes * Updated logging * Updated vendor name handling * Updated handling of media loading/unloading * Added stoppable property and stopped status * Made MO stoppable * Removed duplicate code * Removed duplicate code * Copy read-only property * Renaming * Removed duplicate code, added START/STOP * Improved default parameter handling * Updated load/eject handling * Logging update * Fixed typo * Verified START/STOP UNIT * Updated logging * Updated status handling * Updated status handling * More status handling updates * Logging update * Made instance fields local variables * Made disk_t private * Made some data structures private * Fixed ARM compile issue * Fixed ctapdriver initialization issue * Reset read-only status when opening an image file * Made logging more consistent * Updated log level * Log load/eject on error level for testing * Revert "Log load/eject on error level for testing" This reverts commitd35a15ea8e
. * Assume drive is not ready after having been stopped * Updated status handling * Fixed typo * Rebuild manpage * Fixed issue #234 (MODE SENSE (10) returns wrong mode parameter header) * Removed unused code * Enum data type update * Removed duplicate range check * Removed duplicate code * Removed more duplicate code * Logging update * SCCD sector size was not meant to be configurable * Updated configurable sector size properties * Removed assertion * Improved error handling * Updated error handling * Re-added special error handling only relevant for SASI * Added TODOs * Comment update * Added override modifier * Removed obsolete debug flag (related code was not called) * Comment and logging updates * Removed obsolete try/catch * Revert "Removed obsolete try/catch" This reverts commit39ca12d8b1
. * Comment update * Removed duplicate code * Updated error messages, use more foreach loops * Updated logging * Logging update * README update * Added block_count * Evaluate block size when inserting a media * rasctl display capacity if available * Info message update * Added missing product name to NEC vital product data * MO block size depends on capacity only * Extended property/status display * Property display update * Updated error handling * (Doc only changes) Fix typos and add clarification that SASI is used on Unix workstations Co-authored-by: Daniel Markstedt <markstedt@gmail.com> Co-authored-by: Tony Kuker <akuker@gmail.com>
155 lines
3.5 KiB
C++
155 lines
3.5 KiB
C++
//---------------------------------------------------------------------------
|
||
//
|
||
// X68000 EMULATOR "XM6"
|
||
//
|
||
// Copyright (C) 2001-2006 PI.(ytanaka@ipc-tokai.or.jp)
|
||
// Copyright (C) 2014-2020 GIMONS
|
||
//
|
||
// [ SCSI Common Functionality ]
|
||
//
|
||
//---------------------------------------------------------------------------
|
||
|
||
#pragma once
|
||
|
||
//===========================================================================
|
||
//
|
||
// Sense Keys and Additional Sense Codes
|
||
// (See https://www.t10.org/lists/1spc-lst.htm)
|
||
//
|
||
//===========================================================================
|
||
class ERROR_CODES
|
||
{
|
||
public:
|
||
enum sense_key : int {
|
||
NO_SENSE = 0x00,
|
||
RECOVERED_ERROR = 0x01,
|
||
NOT_READY = 0x02,
|
||
MEDIUM_ERROR = 0x03,
|
||
HARDWARE_ERROR = 0x04,
|
||
ILLEGAL_REQUEST = 0x05,
|
||
UNIT_ATTENTION = 0x06,
|
||
DATA_PROTECT = 0x07,
|
||
BLANK_CHECK = 0x08,
|
||
VENDOR_SPECIFIC = 0x09,
|
||
COPY_ABORTED = 0x0a,
|
||
ABORTED_COMMAND = 0x0b,
|
||
VOLUME_OVERFLOW = 0x0d,
|
||
MISCOMPARE = 0x0e,
|
||
COMPLETED = 0x0f
|
||
};
|
||
|
||
enum asc : int {
|
||
NO_ADDITIONAL_SENSE_INFORMATION = 0x00,
|
||
INVALID_COMMAND_OPERATION_CODE = 0x20,
|
||
LBA_OUT_OF_RANGE = 0x21,
|
||
INVALID_FIELD_IN_CDB = 0x24,
|
||
INVALID_LUN = 0x25,
|
||
WRITE_PROTECTED = 0x27,
|
||
MEDIUM_NOT_PRESENT = 0x3a
|
||
};
|
||
};
|
||
|
||
//===========================================================================
|
||
//
|
||
// SASI/SCSI Bus
|
||
//
|
||
//===========================================================================
|
||
class BUS
|
||
{
|
||
public:
|
||
// Operation modes definition
|
||
enum mode_e {
|
||
TARGET = 0,
|
||
INITIATOR = 1,
|
||
MONITOR = 2,
|
||
};
|
||
|
||
// Phase definitions
|
||
enum phase_t : BYTE {
|
||
busfree,
|
||
arbitration,
|
||
selection,
|
||
reselection,
|
||
command,
|
||
execute, // Execute phase is an extension of the command phase
|
||
datain,
|
||
dataout,
|
||
status,
|
||
msgin,
|
||
msgout,
|
||
reserved // Unused
|
||
};
|
||
|
||
BUS() { };
|
||
virtual ~BUS() { };
|
||
|
||
// Basic Functions
|
||
virtual BOOL Init(mode_e mode) = 0;
|
||
virtual void Reset() = 0;
|
||
virtual void Cleanup() = 0;
|
||
phase_t GetPhase();
|
||
|
||
static phase_t GetPhase(DWORD mci)
|
||
{
|
||
return phase_table[mci];
|
||
}
|
||
|
||
static const char* GetPhaseStrRaw(phase_t current_phase);
|
||
// Get the string phase name, based upon the raw data
|
||
|
||
// Extract as specific pin field from a raw data capture
|
||
static inline DWORD GetPinRaw(DWORD raw_data, DWORD pin_num)
|
||
{
|
||
return ((raw_data >> pin_num) & 1);
|
||
}
|
||
|
||
virtual bool GetBSY() = 0;
|
||
virtual void SetBSY(bool ast) = 0;
|
||
|
||
virtual BOOL GetSEL() = 0;
|
||
virtual void SetSEL(BOOL ast) = 0;
|
||
|
||
virtual BOOL GetATN() = 0;
|
||
virtual void SetATN(BOOL ast) = 0;
|
||
|
||
virtual BOOL GetACK() = 0;
|
||
virtual void SetACK(BOOL ast) = 0;
|
||
|
||
virtual BOOL GetRST() = 0;
|
||
virtual void SetRST(BOOL ast) = 0;
|
||
|
||
virtual BOOL GetMSG() = 0;
|
||
virtual void SetMSG(BOOL ast) = 0;
|
||
|
||
virtual BOOL GetCD() = 0;
|
||
virtual void SetCD(BOOL ast) = 0;
|
||
|
||
virtual BOOL GetIO() = 0;
|
||
virtual void SetIO(BOOL ast) = 0;
|
||
|
||
virtual BOOL GetREQ() = 0;
|
||
virtual void SetREQ(BOOL ast) = 0;
|
||
|
||
virtual BYTE GetDAT() = 0;
|
||
virtual void SetDAT(BYTE dat) = 0;
|
||
virtual BOOL GetDP() = 0; // Get parity signal
|
||
|
||
virtual int CommandHandShake(BYTE *buf) = 0;
|
||
virtual int ReceiveHandShake(BYTE *buf, int count) = 0;
|
||
virtual int SendHandShake(BYTE *buf, int count, int delay_after_bytes) = 0;
|
||
|
||
virtual BOOL GetSignal(int pin) = 0;
|
||
// Get SCSI input signal value
|
||
virtual void SetSignal(int pin, BOOL ast) = 0;
|
||
// Set SCSI output signal value
|
||
static const int SEND_NO_DELAY = -1;
|
||
// Passed into SendHandShake when we don't want to delay
|
||
protected:
|
||
phase_t m_current_phase = phase_t::reserved;
|
||
|
||
private:
|
||
static const phase_t phase_table[8];
|
||
|
||
static const char* phase_str_table[];
|
||
};
|