diff options
| author | Dave Wilson <[email protected]> | 2015-04-29 09:48:49 -0700 |
|---|---|---|
| committer | Dave Wilson <[email protected]> | 2015-04-29 10:47:29 -0700 |
| commit | d40232638faaab19de557e70a3ee938da7a35295 (patch) | |
| tree | 14e61c973745949af186b7940e3a53d25322f5de /network/radio/RadioManagerSample/cpp/SampleRadioManager.h | |
| parent | 02e5b090a6131a7cc1b90f4a9373117c9e3c7088 (diff) | |
samples update for //build
Diffstat (limited to 'network/radio/RadioManagerSample/cpp/SampleRadioManager.h')
| -rw-r--r-- | network/radio/RadioManagerSample/cpp/SampleRadioManager.h | 79 |
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; + |
