diff --git a/src/raspberrypi/devices/cfilesystem.cpp b/src/raspberrypi/devices/cfilesystem.cpp index 0d25040a..050f0e73 100644 --- a/src/raspberrypi/devices/cfilesystem.cpp +++ b/src/raspberrypi/devices/cfilesystem.cpp @@ -2697,19 +2697,19 @@ BOOL CHostFcb::Close() //=========================================================================== // -// FCB処理 マネージャ +// FCB processing manager // //=========================================================================== #ifdef _DEBUG //--------------------------------------------------------------------------- // -/// デストラクタ final +// Final destructor // //--------------------------------------------------------------------------- CHostFcbManager::~CHostFcbManager() { - // 実体が存在しないことを確認 (念のため) + // Confirm that the entity does not exist (just in case) ASSERT(m_cRing.Next() == &m_cRing); ASSERT(m_cRing.Prev() == &m_cRing); } @@ -2717,17 +2717,17 @@ CHostFcbManager::~CHostFcbManager() //--------------------------------------------------------------------------- // -/// 初期化 (ドライバ組込み時) +// Initialization (when the driver is installed) // //--------------------------------------------------------------------------- void CHostFcbManager::Init() { - // 実体が存在しないことを確認 (念のため) + // Confirm that the entity does not exist (just in case) ASSERT(m_cRing.Next() == &m_cRing); ASSERT(m_cRing.Prev() == &m_cRing); - // メモリ確保 + // Memory allocation for (DWORD i = 0; i < XM6_HOST_FCB_MAX; i++) { ring_t* p = new ring_t; ASSERT(p); @@ -2737,13 +2737,13 @@ void CHostFcbManager::Init() //--------------------------------------------------------------------------- // -/// 解放 (起動・リセット時) +// Clean (at startup/reset) // //--------------------------------------------------------------------------- void CHostFcbManager::Clean() { - // メモリ解放 + // Fast task killer CRing* p; while ((p = m_cRing.Next()) != &m_cRing) { delete (ring_t*)p; @@ -2752,26 +2752,26 @@ void CHostFcbManager::Clean() //--------------------------------------------------------------------------- // -/// 確保 +// Alloc // //--------------------------------------------------------------------------- CHostFcb* CHostFcbManager::Alloc(DWORD nKey) { ASSERT(nKey); - // 末尾から選択 + // Select from the end ring_t* p = (ring_t*)m_cRing.Prev(); - // 使用中ならエラー (念のため) + // Error if in use (just in case) if (p->f.isSameKey(0) == FALSE) { ASSERT(0); return NULL; } - // リング先頭へ移動 + // Move to the top of the ring p->r.Insert(&m_cRing); - // キーを設定 + // Set key p->f.SetKey(nKey); return &p->f; @@ -2779,18 +2779,18 @@ CHostFcb* CHostFcbManager::Alloc(DWORD nKey) //--------------------------------------------------------------------------- // -/// 検索 +// Search // //--------------------------------------------------------------------------- CHostFcb* CHostFcbManager::Search(DWORD nKey) { ASSERT(nKey); - // 該当するオブジェクトを検索 + // Search for applicable objects ring_t* p = (ring_t*)m_cRing.Next(); while (p != (ring_t*)&m_cRing) { if (p->f.isSameKey(nKey)) { - // リング先頭へ移動 + // Move to the top of the ring p->r.Insert(&m_cRing); return &p->f; } @@ -2802,40 +2802,40 @@ CHostFcb* CHostFcbManager::Search(DWORD nKey) //--------------------------------------------------------------------------- // -/// 解放 +// Free // //--------------------------------------------------------------------------- void CHostFcbManager::Free(CHostFcb* pFcb) { ASSERT(pFcb); - // 解放 + // Free pFcb->SetKey(0); pFcb->Close(); - // リング末尾へ移動 + // Move to the end of the ring ring_t* p = (ring_t*)((size_t)pFcb - offsetof(ring_t, f)); p->r.InsertTail(&m_cRing); } //=========================================================================== // -// ホスト側ファイルシステム +// Host side file system // //=========================================================================== -DWORD CFileSys::g_nOption; ///< ファイル名変換フラグ +DWORD CFileSys::g_nOption; // File name conversion flag //--------------------------------------------------------------------------- // -/// デフォルトコンストラクタ +// Default constructor // //--------------------------------------------------------------------------- CFileSys::CFileSys() { m_nHostSectorCount = 0; - // コンフィグデータ初期化 + // Config data initialization m_nDrives = 0; for (size_t n = 0; n < DriveMax; n++) { diff --git a/src/raspberrypi/gpiobus.cpp b/src/raspberrypi/gpiobus.cpp index 8fa855fe..d17e24d5 100644 --- a/src/raspberrypi/gpiobus.cpp +++ b/src/raspberrypi/gpiobus.cpp @@ -89,6 +89,17 @@ DWORD bcm_host_get_peripheral_address(void) //--------------------------------------------------------------------------- GPIOBUS::GPIOBUS() { + actmode = TARGET; + baseaddr = 0; + gicc = 0; + gicd = 0; + gpio = 0; + level = 0; + pads = 0; + irpctl = 0; + qa7regs = 0; + signals = 0; + rpitype = 0; } //--------------------------------------------------------------------------- diff --git a/src/raspberrypi/gpiobus.h b/src/raspberrypi/gpiobus.h index eac6c9b6..dc6c56fc 100644 --- a/src/raspberrypi/gpiobus.h +++ b/src/raspberrypi/gpiobus.h @@ -618,8 +618,7 @@ private: DWORD baseaddr; // Base address - int rpitype; - // Type of Raspberry Pi + int rpitype; // Type of Raspberry Pi volatile DWORD *gpio; // GPIO register diff --git a/src/raspberrypi/rascsi.cpp b/src/raspberrypi/rascsi.cpp index a1b23fe1..817c5073 100644 --- a/src/raspberrypi/rascsi.cpp +++ b/src/raspberrypi/rascsi.cpp @@ -267,7 +267,7 @@ void Reset() // Get the list of attached devices // //--------------------------------------------------------------------------- -PbDevices GetDevices() { +const PbDevices GetDevices() { PbDevices devices; for (int i = 0; i < CtrlMax * UnitNum; i++) { @@ -433,8 +433,12 @@ bool MapController(Disk **map) bool ReturnStatus(int fd, bool status = true, const string msg = "") { + if (!status && !msg.empty()) { + LOGWARN("%s", msg.c_str()); + } + if (fd == -1) { - if (msg.length()) { + if (!msg.empty()) { FPRT(stderr, "Error: "); FPRT(stderr, msg.c_str()); FPRT(stderr, "\n"); @@ -487,7 +491,7 @@ bool SetLogLevel(const string& log_level) return true; } -void LogDeviceList(const string& device_list) +void LogDevices(const string& device_list) { stringstream ss(device_list); string line; @@ -536,10 +540,6 @@ bool ProcessCmd(int fd, const PbCommand &command) s << "Processing: cmd=" << PbOperation_Name(cmd) << ", id=" << id << ", un=" << un << ", type=" << PbDeviceType_Name(type) << ", params=" << params; LOGINFO("%s", s.str().c_str()); - // Copy the Unit List - Disk *map[CtrlMax * UnitNum]; - memcpy(map, disk, sizeof(disk)); - // Check the Controller Number if (id < 0 || id >= CtrlMax) { error << "Invalid ID " << id << " (0-" << CtrlMax - 1 << ")"; @@ -558,9 +558,13 @@ bool ProcessCmd(int fd, const PbCommand &command) ext = params.substr(len - 3); } + // Copy the Unit List + Disk *map[CtrlMax * UnitNum]; + memcpy(map, disk, sizeof(disk)); + // Connect Command if (cmd == ATTACH) { - if (map[id]) { + if (map[id * UnitNum + un]) { error << "Duplicate ID " << id; return ReturnStatus(fd, false, error); } @@ -642,7 +646,6 @@ bool ProcessCmd(int fd, const PbCommand &command) delete pUnit; error << "Tried to open an invalid file '" << file << "': " << e.getmsg(); - LOGWARN("%s", error.str().c_str()); return ReturnStatus(fd, false, error); } } @@ -672,17 +675,15 @@ bool ProcessCmd(int fd, const PbCommand &command) // Does the controller exist? if (ctrl[id] == NULL) { - LOGWARN("Received a command for invalid controller %d", id); - - return ReturnStatus(fd, false, "No such device"); + error << "Received a command for invalid ID " << id; + return ReturnStatus(fd, false, error); } // Does the unit exist? pUnit = disk[id * UnitNum + un]; if (pUnit == NULL) { - LOGWARN("Received a command for invalid unit ID %d UN %d", id, un); - - return ReturnStatus(fd, false, "No such device"); + error << "Received a command for invalid ID " << id << ", unit " << un; + return ReturnStatus(fd, false, error); } // Disconnect Command @@ -704,16 +705,12 @@ bool ProcessCmd(int fd, const PbCommand &command) // Only MOs or CDs may be inserted/ejected, only MOs, CDs or hard disks may be protected if ((cmd == INSERT || cmd == EJECT) && !pUnit->IsRemovable()) { - LOGWARN("%s requested for incompatible type %s", PbOperation_Name(cmd).c_str(), pUnit->GetID().c_str()); - - error << "Operation denied (Device type " << pUnit->GetID().c_str() << " isn't removable)"; + error << PbOperation_Name(cmd) << " operation denied (Device type " << pUnit->GetID() << " isn't removable)"; return ReturnStatus(fd, false, error); } if ((cmd == PROTECT || cmd == UNPROTECT) && (!pUnit->IsProtectable() || pUnit->IsReadOnly())) { - LOGWARN("%s requested for incompatible type %s", PbOperation_Name(cmd).c_str(), pUnit->GetID().c_str()); - - error << "Operation denied (Device type " << pUnit->GetID().c_str() << " isn't protectable)"; + error << PbOperation_Name(cmd) << " operation denied (Device type " << pUnit->GetID() << " isn't protectable)"; return ReturnStatus(fd, false, error); } @@ -761,7 +758,6 @@ bool ProcessCmd(int fd, const PbCommand &command) default: error << "Received unknown command: " << PbOperation_Name(cmd); - LOGWARN("%s", error.str().c_str()); return ReturnStatus(fd, false, error); } @@ -867,10 +863,9 @@ bool ParseArgument(int argc, char* argv[], int& port) } // Display and log the device list - const PbDevices devices = GetDevices(); - const string device_list = ListDevices(devices); - cout << device_list << endl; - LogDeviceList(device_list); + const string devices = ListDevices(GetDevices()); + cout << devices << endl; + LogDevices(devices); return true; } @@ -940,7 +935,7 @@ static void *MonThread(void *param) case LIST: { const PbDevices devices = GetDevices(); SerializeMessage(fd, devices); - LogDeviceList(ListDevices(devices)); + LogDevices(ListDevices(devices)); break; } @@ -964,6 +959,7 @@ static void *MonThread(void *param) serverInfo.set_current_log_level(current_log_level); serverInfo.set_default_image_folder(default_image_folder); GetAvailableImages(serverInfo); + serverInfo.set_allocated_devices(new PbDevices(GetDevices())); SerializeMessage(fd, serverInfo); break; } diff --git a/src/raspberrypi/rascsi_interface.proto b/src/raspberrypi/rascsi_interface.proto index ef14135c..98059dd7 100644 --- a/src/raspberrypi/rascsi_interface.proto +++ b/src/raspberrypi/rascsi_interface.proto @@ -17,9 +17,11 @@ enum PbDeviceType { // rascsi remote operations enum PbOperation { NONE = 0; + // Returns the full server information SERVER_INFO = 1; - LOG_LEVEL = 2; - LIST = 3; + // Returns the device list only (required for rasctl/logging semantics compatibility) + LIST = 2 [deprecated = true]; + LOG_LEVEL = 3; ATTACH = 4; DETACH = 5; INSERT = 6; @@ -43,7 +45,6 @@ message PbResult { string msg = 2; } - // The device meta data message PbDevice { int32 id = 1; @@ -53,7 +54,7 @@ message PbDevice { bool read_only = 5; // Note: Read-only media (e.g. CD-ROMs) are not protectable bool protectable = 6; - // Note: Read-only media (e.g. CD-ROMs) are not protected by just read-only + // Note: Read-only media (e.g. CD-ROMs) are not protected but just read-only bool protected = 7; bool removable = 8; bool removed = 9; @@ -75,4 +76,6 @@ message PbServerInfo { string default_image_folder = 4; // Files in the default folder repeated string available_image_files = 5; + // The attached devices + PbDevices devices = 6; } \ No newline at end of file