remove MemoryCardDriverThreaded
This commit is contained in:
@@ -1,163 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "MemoryCardDriverThreaded.h"
|
||||
#include "RageLog.h"
|
||||
#include "RageUtil.h"
|
||||
#include "RageFileManager.h"
|
||||
|
||||
|
||||
template<class T>
|
||||
bool VectorsAreEqual( const T &a, const T &b )
|
||||
{
|
||||
if( a.size() != b.size() )
|
||||
return false;
|
||||
|
||||
for( unsigned i=0; i<a.size(); i++ )
|
||||
{
|
||||
if( a[i] != b[i] )
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
MemoryCardDriverThreaded::MemoryCardDriverThreaded() :
|
||||
m_mutexPause("Pause"),
|
||||
m_mutexStorageDevices("StorageDevices")
|
||||
{
|
||||
m_bShutdownNextUpdate = false;
|
||||
m_bStorageDevicesChanged = false;
|
||||
m_MountThreadState = detect_and_mount;
|
||||
}
|
||||
|
||||
void MemoryCardDriverThreaded::StartThread()
|
||||
{
|
||||
m_threadMemoryCardMount.SetName("MemoryCardMount");
|
||||
m_threadMemoryCardMount.Create( MountThread_Start, this );
|
||||
}
|
||||
|
||||
void MemoryCardDriverThreaded::StopThread()
|
||||
{
|
||||
m_bShutdownNextUpdate = true;
|
||||
LOG->Trace( "Shutting down Mount thread..." );
|
||||
m_threadMemoryCardMount.Wait();
|
||||
LOG->Trace( "Mount thread shut down." );
|
||||
}
|
||||
|
||||
MemoryCardDriverThreaded::~MemoryCardDriverThreaded()
|
||||
{
|
||||
/* Must call StopThread from the derived destructor. Otherwise, we can
|
||||
* call MountThreadDoOneUpdate from the thread after the derived dtor,
|
||||
* which means that function is now virtual, and we'll crash with "pure
|
||||
* virtual method called". */
|
||||
ASSERT( !m_threadMemoryCardMount.IsCreated() );
|
||||
}
|
||||
|
||||
void MemoryCardDriverThreaded::SetMountThreadState( MountThreadState mts )
|
||||
{
|
||||
CHECKPOINT;
|
||||
|
||||
MountThreadState old = m_MountThreadState;
|
||||
|
||||
if( old != paused && mts == paused )
|
||||
m_mutexPause.Lock();
|
||||
|
||||
if( old == paused && mts != paused )
|
||||
m_mutexPause.Unlock();
|
||||
|
||||
m_MountThreadState = mts;
|
||||
}
|
||||
|
||||
int MemoryCardDriverThreaded::MountThread_Start( void *p )
|
||||
{
|
||||
((MemoryCardDriverThreaded*)p)->MountThreadMain();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void MemoryCardDriverThreaded::MountThreadMain()
|
||||
{
|
||||
CHECKPOINT;
|
||||
|
||||
while( !m_bShutdownNextUpdate )
|
||||
{
|
||||
if( !this->MountThreadWaitForUpdate() )
|
||||
continue;
|
||||
|
||||
LockMut( m_mutexPause ); // wait until we're unpaused
|
||||
this->MountThreadDoOneUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
bool MemoryCardDriverThreaded::MountThreadWaitForUpdate()
|
||||
{
|
||||
usleep( 100000 );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool MemoryCardDriverThreaded::StorageDevicesChanged()
|
||||
{
|
||||
CHECKPOINT;
|
||||
|
||||
LockMut( m_mutexStorageDevices );
|
||||
if( m_bStorageDevicesChanged )
|
||||
{
|
||||
m_bStorageDevicesChanged = false;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void MemoryCardDriverThreaded::GetStorageDevices( vector<UsbStorageDevice>& vDevicesOut )
|
||||
{
|
||||
CHECKPOINT;
|
||||
|
||||
LockMut( m_mutexStorageDevices );
|
||||
vDevicesOut.clear();
|
||||
for( unsigned i=0; i<m_vStorageDevices.size(); i++ )
|
||||
vDevicesOut.push_back( m_vStorageDevices[i] );
|
||||
}
|
||||
|
||||
bool MemoryCardDriverThreaded::MountAndTestWrite( UsbStorageDevice* pDevice )
|
||||
{
|
||||
LockMut( m_mutexStorageDevices );
|
||||
vector<UsbStorageDevice>::const_iterator iter = find( m_vStorageDevices.begin(), m_vStorageDevices.end(), *pDevice );
|
||||
if( iter == m_vStorageDevices.end() )
|
||||
{
|
||||
LOG->Warn( "Trying to mount a memory card that is no longer connected. bus %d port %d device %d path %s", pDevice->iBus, pDevice->iPort, pDevice->iLevel, pDevice->sOsMountDir.c_str() );
|
||||
return false;
|
||||
}
|
||||
|
||||
if( !iter->bWriteTestSucceeded )
|
||||
return false;
|
||||
|
||||
this->Mount( pDevice );
|
||||
|
||||
return pDevice->bWriteTestSucceeded;
|
||||
}
|
||||
|
||||
/*
|
||||
* (c) 2003-2004 Chris Danford
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||
* whom the Software is furnished to do so, provided that the above
|
||||
* copyright notice(s) and this permission notice appear in all copies of
|
||||
* the Software and that both the above copyright notice(s) and this
|
||||
* permission notice appear in supporting documentation.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
@@ -1,70 +0,0 @@
|
||||
#ifndef MemoryCardDriverThreaded_H
|
||||
#define MemoryCardDriverThreaded_H 1
|
||||
|
||||
#include "MemoryCardDriver.h"
|
||||
#include "RageThreads.h"
|
||||
|
||||
class MemoryCardDriverThreaded : public MemoryCardDriver
|
||||
{
|
||||
public:
|
||||
MemoryCardDriverThreaded();
|
||||
~MemoryCardDriverThreaded();
|
||||
|
||||
virtual bool StorageDevicesChanged();
|
||||
virtual void GetStorageDevices( vector<UsbStorageDevice>& vStorageDevicesOut );
|
||||
virtual bool MountAndTestWrite( UsbStorageDevice* pDevice );
|
||||
virtual void SetMountThreadState( MountThreadState mts );
|
||||
|
||||
private:
|
||||
static int MountThread_Start( void *p );
|
||||
void MountThreadMain();
|
||||
|
||||
RageThread m_threadMemoryCardMount;
|
||||
bool m_bShutdownNextUpdate;
|
||||
|
||||
// Aquire this before detecting devices or reading/writing devices.
|
||||
// Calling Pause() and Unpause will lock/unlock this so that the mounting thread
|
||||
// will temporarily halt.
|
||||
RageMutex m_mutexPause;
|
||||
|
||||
MountThreadState m_MountThreadState;
|
||||
|
||||
protected:
|
||||
void StartThread(); // call this in the derived constructor to start the mounting thread
|
||||
void StopThread(); // call this in the derived desstructor to stop the mounting thread
|
||||
virtual void MountThreadDoOneUpdate() = 0; // this will get called as fast as possible
|
||||
virtual bool MountThreadWaitForUpdate();
|
||||
virtual void Mount( UsbStorageDevice* pDevice ) = 0;
|
||||
bool ShouldDoOsMount() { return m_MountThreadState==detect_and_mount; }
|
||||
|
||||
vector<UsbStorageDevice> m_vStorageDevices;
|
||||
bool m_bStorageDevicesChanged;
|
||||
RageMutex m_mutexStorageDevices; // protects the above two
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* (c) 2003-2004 Chris Danford
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, and/or sell copies of the Software, and to permit persons to
|
||||
* whom the Software is furnished to do so, provided that the above
|
||||
* copyright notice(s) and this permission notice appear in all copies of
|
||||
* the Software and that both the above copyright notice(s) and this
|
||||
* permission notice appear in supporting documentation.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
||||
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
||||
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
||||
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||||
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
* PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
Reference in New Issue
Block a user