eliminated some hid-thread race conditions

This commit is contained in:
Jack Andersen
2015-04-22 14:46:32 -10:00
parent c1dc218bd1
commit 92e7c3fb04
12 changed files with 131 additions and 26 deletions

View File

@@ -11,8 +11,8 @@ class CDeviceBase
friend CDeviceToken;
void _deviceDisconnected();
public:
inline CDeviceBase(CDeviceToken* token, IHIDDevice* hidDev)
: m_token(token), m_hidDev(hidDev) {}
CDeviceBase(CDeviceToken* token, IHIDDevice* hidDev);
virtual ~CDeviceBase();
void closeDevice();
virtual void deviceDisconnected()=0;
};

View File

@@ -55,8 +55,9 @@ private:
if (preCheck != m_tokens.end())
{
CDeviceToken& tok = preCheck->second;
CDeviceBase* dev = tok.m_connectedDev;
tok._deviceClose();
deviceDisconnected(tok);
deviceDisconnected(tok, dev);
m_tokensLock.lock();
m_tokens.erase(preCheck);
m_tokensLock.unlock();
@@ -127,7 +128,7 @@ public:
}
virtual void deviceConnected(CDeviceToken&) {}
virtual void deviceDisconnected(CDeviceToken&) {}
virtual void deviceDisconnected(CDeviceToken&, CDeviceBase*) {}
};

View File

@@ -26,7 +26,6 @@ class CDeviceToken
friend class CDeviceFinder;
inline void _deviceClose()
{
printf("CLOSE %p\n", this);
if (m_connectedDev)
m_connectedDev->_deviceDisconnected();
m_connectedDev = NULL;
@@ -52,7 +51,6 @@ public:
inline bool isDeviceOpen() const {return m_connectedDev;}
inline CDeviceBase* openAndGetDevice()
{
printf("OPEN %p\n", this);
if (!m_connectedDev)
m_connectedDev = BooDeviceNew(this);
return m_connectedDev;

View File

@@ -8,6 +8,7 @@ class CDolphinSmashAdapter final : public CDeviceBase
void deviceDisconnected();
public:
CDolphinSmashAdapter(CDeviceToken* token, IHIDDevice* hidDev);
~CDolphinSmashAdapter();
};
#endif // CDOLPHINSMASHADAPTER_HPP

View File

@@ -7,6 +7,9 @@
#include "CDualshockPad.hpp"
#include "CGenericPad.hpp"
#define VID_NINTENDO 0x57e
#define PID_SMASH_ADAPTER 0x337
enum EDeviceMask
{
DEV_NONE = 0,