WiiFlow_Lite/source/devicemounter/DeviceHandler.hpp
2012-01-21 20:57:41 +00:00

122 lines
3.3 KiB
C++

/****************************************************************************
* Copyright (C) 2010
* by Dimok
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any
* damages arising from the use of this software.
*
* Permission is granted to anyone to use this software for any
* purpose, including commercial applications, and to alter it and
* redistribute it freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you
* must not claim that you wrote the original software. If you use
* this software in a product, an acknowledgment in the product
* documentation would be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and
* must not be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*
* for WiiXplorer 2010
***************************************************************************/
#ifndef DEVICE_HANDLER_HPP_
#define DEVICE_HANDLER_HPP_
#include "PartitionHandle.h"
enum
{
SD = 0,
USB1,
USB2,
USB3,
USB4,
USB5,
USB6,
USB7,
USB8,
GCSDA,
GCSDB,
MAXDEVICES
};
const char DeviceName[MAXDEVICES][6] =
{
"sd",
"usb1",
"usb2",
"usb3",
"usb4",
"usb5",
"usb6",
"usb7",
"usb8",
"gca",
"gcb",
};
class DeviceHandler
{
public:
static DeviceHandler * Instance();
static void DestroyInstance();
bool MountAll();
void UnMountAll();
bool Mount(int dev);
bool IsInserted(int dev);
void UnMount(int dev);
//! Individual Mounts/UnMounts...
bool MountSD();
bool MountUSB(int part);
bool MountAllUSB();
bool MountGCA();
bool MountGCB();
bool SD_Inserted() { if(sd) return sd->IsInserted(); return false; };
bool USB_Inserted() { if(usb) return usb->IsInserted(); return false; };
bool GCA_Inserted() { if(gca) return gca->IsInserted(); return false; };
bool GCB_Inserted() { if(gcb) return gcb->IsInserted(); return false; };
void UnMountSD() { if(sd) delete sd; sd = NULL; };
void UnMountUSB(int pos);
void UnMountAllUSB();
void UnMountGCA() { if(gca) delete gca; gca = NULL; };
void UnMountGCB() { if(gcb) delete gcb; gcb = NULL; };
const PartitionHandle * GetSDHandle() { return sd; };
const PartitionHandle * GetUSBHandle() { return usb; };
const PartitionHandle * GetGCAHandle() { return gca; };
const PartitionHandle * GetGCBHandle() { return gcb; };
static bool SetWatchdog(unsigned int timeout);
static int PathToDriveType(const char * path);
static const char * GetFSName(int dev);
static int GetFSType(int dev);
s16 GetMountedCount(int dev);
static const char * PathToFSName(const char * path) { return GetFSName(PathToDriveType(path)); };
static wbfs_t * GetWbfsHandle(int dev);
//static u32 GetLBAStart(int dev);
s32 Open_WBFS(int dev);
private:
DeviceHandler() : sd(0), usb(0), gca(0), gcb(0) { };
~DeviceHandler();
static bool InternalSetWatchdog(unsigned int timeout);
static DeviceHandler * instance;
static unsigned int watchdog_timeout;
PartitionHandle * sd;
PartitionHandle * usb;
PartitionHandle * gca;
PartitionHandle * gcb;
};
#endif