summaryrefslogtreecommitdiff
path: root/network/radio/RadioManagerSample/cpp/SampleRadioInstance.h
diff options
context:
space:
mode:
authorDave Wilson <[email protected]>2015-04-29 09:48:49 -0700
committerDave Wilson <[email protected]>2015-04-29 10:47:29 -0700
commitd40232638faaab19de557e70a3ee938da7a35295 (patch)
tree14e61c973745949af186b7940e3a53d25322f5de /network/radio/RadioManagerSample/cpp/SampleRadioInstance.h
parent02e5b090a6131a7cc1b90f4a9373117c9e3c7088 (diff)
samples update for //build
Diffstat (limited to 'network/radio/RadioManagerSample/cpp/SampleRadioInstance.h')
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRadioInstance.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/network/radio/RadioManagerSample/cpp/SampleRadioInstance.h b/network/radio/RadioManagerSample/cpp/SampleRadioInstance.h
new file mode 100644
index 00000000..176aca3c
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRadioInstance.h
@@ -0,0 +1,71 @@
+#pragma once
+
+class ATL_NO_VTABLE CSampleRadioInstance :
+ public CComObjectRootEx<CComMultiThreadModel>,
+ public CComCoClass<CSampleRadioInstance>,
+ public IRadioInstance,
+ public ISampleRadioInstanceInternal
+{
+public:
+ DECLARE_CLASSFACTORY()
+ DECLARE_NOT_AGGREGATABLE(CSampleRadioInstance)
+ DECLARE_NO_REGISTRY()
+
+ BEGIN_COM_MAP(CSampleRadioInstance)
+ COM_INTERFACE_ENTRY(IRadioInstance)
+ COM_INTERFACE_ENTRY(ISampleRadioInstanceInternal)
+ END_COM_MAP()
+
+ CSampleRadioInstance();
+
+ void FinalRelease();
+
+ static HRESULT CreateInstance(
+ _In_ PCWSTR pszKeyName,
+ _In_ ISampleRadioManagerInternal *pParentManager,
+ _COM_Outptr_ ISampleRadioInstanceInternal **pRadioInstance);
+
+ // IRadioInstance
+ IFACEMETHOD(GetRadioManagerSignature)(_Out_ GUID *pguidSignature);
+ IFACEMETHOD(GetInstanceSignature)(_Out_ BSTR *pbstrID);
+ IFACEMETHOD(GetFriendlyName)(_In_ LCID lcid, _Out_ BSTR *pbstrName);
+ IFACEMETHOD(GetRadioState)(_Out_ DEVICE_RADIO_STATE *pRadioState);
+ IFACEMETHOD(SetRadioState)(_In_ DEVICE_RADIO_STATE radioState, _In_ UINT32 uTimeoutSec);
+ IFACEMETHOD_(BOOL, IsMultiComm)();
+ IFACEMETHOD_(BOOL, IsAssociatingDevice)();
+
+ // ISampleRadioInstanceInternal
+ IFACEMETHOD(OnSysRadioChange)(_In_ SYSTEM_RADIO_STATE sysRadioSate);
+
+private:
+ HRESULT _Init(_In_ PCWSTR pszKeyName, _In_ ISampleRadioManagerInternal *pParentManager);
+ void _Cleanup();
+ void _OnInstanceUpdate();
+ HRESULT _SetRadioState(_In_ DEVICE_RADIO_STATE radioState);
+ static DWORD WINAPI s_ThreadInstanceChange(LPVOID pThis);
+ static DWORD WINAPI s_ThreadSetRadio(LPVOID pThis);
+
+ ISampleRadioManagerInternal *_pParentManager;
+ CComAutoCriticalSection _criticalSection;
+ CString _strInstanceId;
+ CString _strInstanceName;
+ bool _fIsMultiCommDevice;
+
+ CHandle _hEventThread;
+ bool _fClosing; // object is closing
+ CHandle _hRegChangeEvent;
+ CRegKey _hKeyRoot;
+ static PCWSTR s_pszInstanceName;
+ static PCWSTR s_pszInstanceRadioState;
+ static PCWSTR s_pszPreviousRadioState;
+ static PCWSTR s_pszMultiComm;
+ static PCWSTR s_pszAssocatingDevice;
+};
+
+typedef struct _SET_DEVICE_RADIO_JOB{
+ HRESULT hr;
+ CHandle hEvent;
+ CSampleRadioInstance *pInstance;
+ DEVICE_RADIO_STATE drsTarget;
+} SET_DEVICE_RADIO_JOB;
+