do memory card write test in a separate thread

This commit is contained in:
Chris Danford
2004-04-07 01:18:11 +00:00
parent 7135f8cc1d
commit d93f758024
9 changed files with 340 additions and 20 deletions
@@ -0,0 +1,91 @@
#include "global.h"
#include "MemoryCardDriverThreaded.h"
#include "RageLog.h"
#include "RageUtil.h"
#include "RageFileManager.h"
int MemoryCardDriverThreaded::MountThread_Start( void *p )
{
((MemoryCardDriverThreaded*)p)->MountThreadMain();
return 0;
}
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_mutexStorageDevices("StorageDevices")
{
m_bShutdown = false;
}
void MemoryCardDriverThreaded::StartThread()
{
m_threadMemoryCardMount.SetName("MemoryCardMount");
m_threadMemoryCardMount.Create( MountThread_Start, this );
}
MemoryCardDriverThreaded::~MemoryCardDriverThreaded()
{
m_bShutdown = true;
LOG->Trace( "Shutting down Mount thread..." );
m_threadMemoryCardMount.Wait();
LOG->Trace( "Mount thread shut down." );
}
bool MemoryCardDriverThreaded::StorageDevicesChanged()
{
LockMut( m_mutexStorageDevices );
if( m_bStorageDevicesChanged )
{
m_bStorageDevicesChanged = false;
return true;
}
else
{
return false;
}
}
void MemoryCardDriverThreaded::GetStorageDevices( vector<UsbStorageDevice>& vDevicesOut )
{
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, CString sMountPoint )
{
LockMut( m_mutexStorageDevices );
vector<UsbStorageDeviceEx>::const_iterator iter = find( m_vStorageDevices.begin(), m_vStorageDevices.end(), *pDevice );
if( iter == m_vStorageDevices.end() )
{
LOG->Warn( "Tried to mount a memory card that is no longer connected" );
return false;
}
if( !iter->bWriteTestSucceeded )
return false;
this->Mount( pDevice, sMountPoint );
return true;
}
/*
* Copyright (c) 2003 by the person(s) listed below. All rights reserved.
* Chris Danford
*/