summaryrefslogtreecommitdiff
path: root/network/radio/RadioManagerSample/cpp/SampleRadioManager.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/SampleRadioManager.h
parent02e5b090a6131a7cc1b90f4a9373117c9e3c7088 (diff)
samples update for //build
Diffstat (limited to 'network/radio/RadioManagerSample/cpp/SampleRadioManager.h')
-rw-r--r--network/radio/RadioManagerSample/cpp/SampleRadioManager.h79
1 files changed, 79 insertions, 0 deletions
diff --git a/network/radio/RadioManagerSample/cpp/SampleRadioManager.h b/network/radio/RadioManagerSample/cpp/SampleRadioManager.h
new file mode 100644
index 00000000..a39673ed
--- /dev/null
+++ b/network/radio/RadioManagerSample/cpp/SampleRadioManager.h
@@ -0,0 +1,79 @@
+#pragma once
+
+typedef struct {
+ CString strRadioInstanceID;
+ bool fExisting;
+ CComPtr<ISampleRadioInstanceInternal> spRadioInstance;
+} INSTANCE_LIST_OBJ;
+
+EXTERN_C const IID IID_IMediaRadioManagerNotifySink;
+
+class ATL_NO_VTABLE CSampleRadioManager :
+ public CComObjectRootEx<CComMultiThreadModel>,
+ public CComCoClass<CSampleRadioManager, &CLSID_SampleRadioManager>,
+ public IConnectionPointContainerImpl<CSampleRadioManager>,
+ public IConnectionPointImpl<CSampleRadioManager, &IID_IMediaRadioManagerNotifySink>,
+ public IMediaRadioManager,
+ public ISampleRadioManagerInternal
+{
+public:
+
+ DECLARE_CLASSFACTORY()
+ DECLARE_NOT_AGGREGATABLE(CSampleRadioManager)
+
+ DECLARE_NO_REGISTRY()
+
+ BEGIN_COM_MAP(CSampleRadioManager)
+ COM_INTERFACE_ENTRY(IMediaRadioManager)
+ COM_INTERFACE_ENTRY(ISampleRadioManagerInternal)
+ COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
+ END_COM_MAP()
+
+ BEGIN_CONNECTION_POINT_MAP(CSampleRadioManager)
+ CONNECTION_POINT_ENTRY(IID_IMediaRadioManagerNotifySink)
+ END_CONNECTION_POINT_MAP()
+
+ DECLARE_PROTECT_FINAL_CONSTRUCT()
+
+ CSampleRadioManager();
+
+ HRESULT FinalConstruct();
+ void FinalRelease();
+
+ // IMediaRadioManager interface
+ IFACEMETHOD(GetRadioInstances)(_Out_ IRadioInstanceCollection **ppCollection);
+ IFACEMETHOD(OnSystemRadioStateChange)(_In_ SYSTEM_RADIO_STATE sysRadioState, _In_ UINT32 uTimeoutSec);
+
+ // ISampleRadioManagerInternal interface
+ IFACEMETHOD(OnInstanceRadioChange)(_In_ BSTR bstrRadioInstanceID, _In_ DEVICE_RADIO_STATE radioState);
+
+private:
+ HRESULT _FireEventOnInstanceAdd(_In_ IRadioInstance *pRadioInstance);
+ HRESULT _FireEventOnInstanceRemove(_In_ BSTR bstrRadioInstanceID);
+ HRESULT _FireEventOnInstanceRadioChange(_In_ BSTR bstrRadioInstanceID, _In_ DEVICE_RADIO_STATE radioState);
+
+ void _Cleanup();
+ HRESULT _AddInstance(_In_ PCWSTR pszKeyName, _Out_opt_ IRadioInstance **ppRadioInstance);
+ void _OnInstanceAddRemove();
+ HRESULT _SetSysRadioState(_In_ SYSTEM_RADIO_STATE sysRadioState);
+ static DWORD WINAPI s_ThreadRegChange(LPVOID pThis);
+ static DWORD WINAPI s_ThreadSetSysRadio(LPVOID pThis);
+
+ CComAutoCriticalSection _criticalSection;
+ CAtlList<INSTANCE_LIST_OBJ *> _listRadioInstances;
+
+ CRegKey _hKeyRoot;
+ CHandle _hRegChangeEvent;
+ CHandle _hEventThread;
+ bool _fClosing; // object is closing
+
+ static PCWSTR s_pszRootKey;
+};
+
+typedef struct _SET_SYS_RADIO_JOB{
+ HRESULT hr;
+ CHandle hEvent;
+ CSampleRadioManager *pSampleRM;
+ SYSTEM_RADIO_STATE srsTarget;
+} SET_SYS_RADIO_JOB;
+