[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [win-pv-devel] [PATCH 07/20] Track a single device in the service.
> -----Original Message----- > From: win-pv-devel [mailto:win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx] On > Behalf Of Owen Smith > Sent: 24 May 2016 15:21 > To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx > Cc: Owen Smith > Subject: [win-pv-devel] [PATCH 07/20] Track a single device in the service. > > Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> > --- > src/liteagent/DeviceList.cpp | 9 +++++++++ > src/liteagent/DeviceList.h | 4 ++++ > src/liteagent/LiteAgent.cpp | 21 ++++++++++++++++++++- > src/liteagent/LiteAgent.h | 3 +++ > 4 files changed, 36 insertions(+), 1 deletion(-) > > diff --git a/src/liteagent/DeviceList.cpp b/src/liteagent/DeviceList.cpp > index 1cb3bf6..9033407 100644 > --- a/src/liteagent/DeviceList.cpp > +++ b/src/liteagent/DeviceList.cpp > @@ -96,6 +96,11 @@ void CDevice::Close() > m_handle = INVALID_HANDLE_VALUE; > } > > +const wchar_t* CDevice::Path() const > +{ > + return m_path.c_str(); > +} > + > bool CDevice::Ioctl(DWORD ioctl, void* in, DWORD insz, void* out, DWORD > outsz, DWORD* bytes) > { > if (m_handle == INVALID_HANDLE_VALUE) > @@ -255,6 +260,8 @@ void CDeviceList::OnDeviceAdded(const std::wstring& > path) > } > > m_devs[handle] = dev; > + if (m_impl) > + m_impl->OnDeviceAdded(dev); > } > > void CDeviceList::OnDeviceQueryRemove(HANDLE handle) > @@ -264,6 +271,8 @@ void CDeviceList::OnDeviceQueryRemove(HANDLE > handle) > return; // spurious event? > > CDevice* dev = it->second; > + if (m_impl) > + m_impl->OnDeviceRemoved(dev); > dev->Close(); > } > > diff --git a/src/liteagent/DeviceList.h b/src/liteagent/DeviceList.h > index 10df546..457a099 100644 > --- a/src/liteagent/DeviceList.h > +++ b/src/liteagent/DeviceList.h > @@ -46,6 +46,8 @@ public: > HANDLE Open(HANDLE svc); > void Close(); > > + const wchar_t* Path() const; > + > protected: > bool Ioctl(DWORD ioctl, void* in, DWORD insz, void* out, DWORD outsz, > DWORD* bytes); > > @@ -58,6 +60,8 @@ private: > interface IDeviceCreator > { > virtual CDevice* Create(const wchar_t* path) = 0; > + virtual void OnDeviceAdded(CDevice* dev) = 0; > + virtual void OnDeviceRemoved(CDevice* dev) = 0; > }; > > class CDeviceList > diff --git a/src/liteagent/LiteAgent.cpp b/src/liteagent/LiteAgent.cpp > index 1eec87e..a7987dc 100644 > --- a/src/liteagent/LiteAgent.cpp > +++ b/src/liteagent/LiteAgent.cpp > @@ -116,7 +116,7 @@ static CLiteAgent s_service; > return s_service.__ServiceControlHandlerEx(req, evt, data, ctxt); > } > > -CLiteAgent::CLiteAgent() : m_handle(NULL), > m_devs(GUID_INTERFACE_XENIFACE) > +CLiteAgent::CLiteAgent() : m_handle(NULL), > m_devs(GUID_INTERFACE_XENIFACE), m_dev(NULL) > { > m_status.dwServiceType = SERVICE_WIN32; > m_status.dwCurrentState = SERVICE_START_PENDING; > @@ -136,9 +136,28 @@ CLiteAgent::~CLiteAgent() > > /*virtual*/ CDevice* CLiteAgent::Create(const wchar_t* path) > { > + // create subclass of CDevice Shouldn't this comment have been there in the first place? Paul > return new CDevice(path); > } > > +/*virtual*/ void CLiteAgent::OnDeviceAdded(CDevice* dev) > +{ > + CLiteAgent::Log("OnDeviceAdded(%ws)\n", dev->Path()); > + if (m_dev == NULL) { > + m_dev = dev; > + // setting active device > + } > +} > + > +/*virtual*/ void CLiteAgent::OnDeviceRemoved(CDevice* dev) > +{ > + CLiteAgent::Log("OnDeviceRemoved(%ws)\n", dev->Path()); > + if (dev == m_dev) { > + m_dev = NULL; > + // active device > + } > +} > + > void CLiteAgent::OnServiceStart() > { > CLiteAgent::Log("OnServiceStart()\n"); > diff --git a/src/liteagent/LiteAgent.h b/src/liteagent/LiteAgent.h > index 57ed9e7..261e737 100644 > --- a/src/liteagent/LiteAgent.h > +++ b/src/liteagent/LiteAgent.h > @@ -58,6 +58,8 @@ public: // ctor/dtor > > public: // IDeviceCreator > virtual CDevice* Create(const wchar_t* path); > + virtual void OnDeviceAdded(CDevice* dev); > + virtual void OnDeviceRemoved(CDevice* dev); > > private: // service events > void OnServiceStart(); > @@ -75,6 +77,7 @@ private: // service support > HANDLE m_svc_stop; > > CDeviceList m_devs; > + CDevice* m_dev; > }; > > #endif > -- > 1.9.4.msysgit.1 > > > _______________________________________________ > win-pv-devel mailing list > win-pv-devel@xxxxxxxxxxxxxxxxxxxx > http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |