Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
3.5 KiB

  1. /////////////////////////////////////////////////////////////////////////////////////
  2. // DVBtsimpl.h :
  3. // Copyright (c) Microsoft Corporation 1999.
  4. #ifndef DVBTSIMPL_H
  5. #define DVBTSIMPL_H
  6. #include "tuningspaceimpl.h"
  7. #include "dvbTuneRequest.h"
  8. namespace BDATuningModel {
  9. template<class T,
  10. class TUNEREQUESTTYPE = CDVBTuneRequest,
  11. class MostDerived = IDVBTuningSpace2,
  12. LPCGUID iid = &__uuidof(MostDerived),
  13. LPCGUID LibID = &LIBID_TunerLib,
  14. WORD wMajor = 1,
  15. WORD wMinor = 0,
  16. class tihclass = CComTypeInfoHolder
  17. > class ATL_NO_VTABLE IDVBTuningSpaceImpl :
  18. public ITuningSpaceImpl<T, TUNEREQUESTTYPE, MostDerived, iid, LibID, wMajor, wMinor, tihclass>,
  19. public IMPEG2TuneRequestSupport
  20. {
  21. public:
  22. DVBSystemType m_SystemType;
  23. long m_NetworkID;
  24. IDVBTuningSpaceImpl(DVBSystemType systypei = DVB_Cable) : m_SystemType(systypei), m_NetworkID(-1) {}
  25. virtual ~IDVBTuningSpaceImpl() {}
  26. typedef ITuningSpaceImpl<T, TUNEREQUESTTYPE, MostDerived, iid, LibID, wMajor, wMinor, tihclass> basetype;
  27. BEGIN_PROP_MAP(IDVBTuningSpaceImpl)
  28. CHAIN_PROP_MAP(basetype)
  29. PROP_DATA_ENTRY("System Type", m_SystemType, VT_I4)
  30. PROP_DATA_ENTRY("Network ID", m_NetworkID, VT_I4)
  31. END_PROPERTY_MAP()
  32. // IDVBTS
  33. STDMETHOD(get_SystemType)(DVBSystemType *pSysType)
  34. {
  35. if (!pSysType) {
  36. return E_POINTER;
  37. }
  38. ATL_LOCKT();
  39. *pSysType = m_SystemType;
  40. return NOERROR;
  41. }
  42. STDMETHOD(put_SystemType)(DVBSystemType NewSysType)
  43. {
  44. ATL_LOCKT();
  45. m_SystemType = NewSysType;
  46. MARK_DIRTY(T);
  47. return NOERROR;
  48. }
  49. STDMETHOD(get_NetworkID)(long *pNetID)
  50. {
  51. if (!pNetID) {
  52. return E_POINTER;
  53. }
  54. ATL_LOCKT();
  55. *pNetID = m_NetworkID;
  56. return NOERROR;
  57. }
  58. STDMETHOD(put_NetworkID)(long NewNetID)
  59. {
  60. ATL_LOCKT();
  61. m_NetworkID = NewNetID;
  62. MARK_DIRTY(T);
  63. return NOERROR;
  64. }
  65. // override standard ITuningSpaceImpl
  66. STDMETHOD(put_DefaultLocator)(ILocator *pLoc) {
  67. ATL_LOCKT();
  68. if (pLoc) {
  69. switch (m_SystemType) {
  70. case DVB_Terrestrial: {
  71. PQDVBTLocator p(pLoc);
  72. if (!p) {
  73. return DISP_E_TYPEMISMATCH;
  74. }
  75. break;
  76. }
  77. case DVB_Satellite: {
  78. PQDVBSLocator p(pLoc);
  79. if (!p) {
  80. return DISP_E_TYPEMISMATCH;
  81. }
  82. break;
  83. }
  84. case DVB_Cable:
  85. // dvb cable locator is same as base locator
  86. default:
  87. break;
  88. };
  89. }
  90. return basetype::put_DefaultLocator(pLoc);
  91. }
  92. STDMETHOD(Clone) (ITuningSpace **ppTS) {
  93. try {
  94. if (!ppTS) {
  95. return E_POINTER;
  96. }
  97. ATL_LOCKT();
  98. HRESULT hr = basetype::Clone(ppTS);
  99. if (FAILED(hr)) {
  100. return hr;
  101. }
  102. T* pt = static_cast<T*>(*ppTS);
  103. pt->m_SystemType = m_SystemType;
  104. pt->m_NetworkID = m_NetworkID;
  105. return NOERROR;
  106. } CATCHCOM_CLEANUP(if (*ppTS) {
  107. (*ppTS)->Release();
  108. *ppTS = NULL;
  109. }
  110. );
  111. }
  112. };
  113. }; // namespace
  114. #endif // DVBTSIMPL_H
  115. // end of file -- DVBtsimpl.h