DeviceSpecificConfigurationEventHandlerTie.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. //-----------------------------------------------------------------------------
  2. // Basler pylon SDK
  3. // Copyright (c) 2010-2021 Basler AG
  4. // http://www.baslerweb.com
  5. // Author: Andreas Gau
  6. //-----------------------------------------------------------------------------
  7. /*!
  8. \file
  9. \brief Contains an adapter class for device specific configuration event handlers.
  10. */
  11. #ifndef INCLUDED_DEVICESPECIFICCONFIGURATIONEVENTHANDLERTIE_H_5249532
  12. #define INCLUDED_DEVICESPECIFICCONFIGURATIONEVENTHANDLERTIE_H_5249532
  13. #include <pylon/ConfigurationEventHandler.h>
  14. #include <pylon/stdinclude.h>
  15. namespace Pylon
  16. {
  17. /*!
  18. \class CDeviceSpecificConfigurationEventHandlerTie
  19. \brief Implementation Detail: Adapter for device specific configuration event handlers.
  20. */
  21. template <typename DeviceSpecificCameraT, typename InterfaceT>
  22. class CDeviceSpecificConfigurationEventHandlerTie : public CConfigurationEventHandler
  23. {
  24. public:
  25. CDeviceSpecificConfigurationEventHandlerTie( InterfaceT* ptr, bool isCleanupDelete )
  26. : m_ptr( ptr )
  27. , m_isCleanupDelete( isCleanupDelete )
  28. {
  29. }
  30. ~CDeviceSpecificConfigurationEventHandlerTie()
  31. {
  32. }
  33. void OnAttach( CInstantCamera& camera )
  34. {
  35. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  36. m_ptr->OnAttach( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  37. }
  38. void OnAttached( CInstantCamera& camera )
  39. {
  40. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  41. m_ptr->OnAttached( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  42. }
  43. void OnOpen( CInstantCamera& camera )
  44. {
  45. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  46. m_ptr->OnOpen( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  47. }
  48. void OnOpened( CInstantCamera& camera )
  49. {
  50. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  51. m_ptr->OnOpened( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  52. }
  53. void OnGrabStart( CInstantCamera& camera )
  54. {
  55. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  56. m_ptr->OnGrabStart( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  57. }
  58. void OnGrabStarted( CInstantCamera& camera )
  59. {
  60. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  61. m_ptr->OnGrabStarted( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  62. }
  63. void OnGrabStop( CInstantCamera& camera )
  64. {
  65. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  66. m_ptr->OnGrabStop( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  67. }
  68. void OnGrabStopped( CInstantCamera& camera )
  69. {
  70. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  71. m_ptr->OnGrabStopped( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  72. }
  73. void OnClose( CInstantCamera& camera )
  74. {
  75. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  76. m_ptr->OnClose( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  77. }
  78. void OnClosed( CInstantCamera& camera )
  79. {
  80. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  81. m_ptr->OnClosed( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  82. }
  83. void OnDestroy( CInstantCamera& camera )
  84. {
  85. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  86. m_ptr->OnDestroy( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  87. }
  88. void OnDestroyed( CInstantCamera& camera )
  89. {
  90. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  91. m_ptr->OnDestroyed( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  92. }
  93. void OnDetach( CInstantCamera& camera )
  94. {
  95. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  96. m_ptr->OnDetach( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  97. }
  98. void OnDetached( CInstantCamera& camera )
  99. {
  100. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  101. m_ptr->OnDetached( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  102. }
  103. void OnGrabError( CInstantCamera& camera, const char* errorMessage )
  104. {
  105. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  106. m_ptr->OnGrabError( dynamic_cast<DeviceSpecificCameraT&>(camera), errorMessage );
  107. }
  108. void OnCameraDeviceRemoved( CInstantCamera& camera )
  109. {
  110. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  111. m_ptr->OnCameraDeviceRemoved( dynamic_cast<DeviceSpecificCameraT&>(camera) );
  112. }
  113. virtual void OnConfigurationRegistered( CInstantCamera& camera )
  114. {
  115. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  116. m_ptr->OnConfigurationRegistered( static_cast<DeviceSpecificCameraT&>(camera) );
  117. }
  118. virtual void OnConfigurationDeregistered( CInstantCamera& camera )
  119. {
  120. PYLON_ASSERT2( dynamic_cast<DeviceSpecificCameraT*>(&camera) != NULL, "Unexpected camera type passed." );
  121. m_ptr->OnConfigurationDeregistered( static_cast<DeviceSpecificCameraT&>(camera) );
  122. }
  123. virtual void DestroyConfiguration()
  124. {
  125. try
  126. {
  127. // destroy only when demanded
  128. if (m_isCleanupDelete)
  129. {
  130. m_ptr->DestroyConfiguration();
  131. }
  132. m_ptr = NULL;
  133. }
  134. catch (...)
  135. {
  136. delete this;
  137. m_ptr = NULL;
  138. throw;
  139. }
  140. delete this;
  141. }
  142. private:
  143. InterfaceT* m_ptr;
  144. bool m_isCleanupDelete;
  145. };
  146. }
  147. #endif /* INCLUDED_DEVICESPECIFICCONFIGURATIONEVENTHANDLERTIE_H_5249532 */