nx_video_source_sdk  1.0
Video Source SDK
axis_relayio_manager.h
1 // Copyright 2018-present Network Optix, Inc. Licensed under MPL 2.0: www.mozilla.org/MPL/2.0/
2 
3 #pragma once
4 
5 #include <list>
6 #include <map>
7 #include <set>
8 
9 #include <QtCore/QAtomicInt>
10 #include <QtCore/QObject>
11 #include <QtCore/QMutex>
12 #include <QtNetwork/QNetworkReply>
13 #include <QtCore/QWaitCondition>
14 
15 #include <camera/camera_plugin.h>
16 #include <plugins/plugin_tools.h>
17 
18 class AxisCameraManager;
19 
21 
26 :
27  public QObject,
29 {
30  Q_OBJECT
31 
32 public:
37  AxisCameraManager* cameraManager,
38  unsigned int inputPortCount,
39  unsigned int outputPortCount );
40  virtual ~AxisRelayIOManager();
41 
43  virtual void* queryInterface( const nxpl::NX_GUID& interfaceID ) override;
45  virtual int addRef() const override;
47  virtual int releaseRef() const override;
48 
50  virtual int getRelayOutputList( char** idList, int* idNum ) const override;
52  virtual int getInputPortList( char** idList, int* idNum ) const override;
54  virtual int setRelayOutputState(
55  const char* outputID,
56  int activate,
57  unsigned int autoResetTimeoutMS ) override;
59  virtual int startInputPortMonitoring() override;
61  virtual void stopInputPortMonitoring() override;
63  virtual void registerEventHandler( nxcip::CameraInputEventHandler* handler ) override;
65  virtual void unregisterEventHandler( nxcip::CameraInputEventHandler* handler ) override;
67  virtual void getLastErrorString( char* errorString ) const override;
68 
69 private:
70  struct AsyncCallContext
71  {
72  AsyncCallContext()
73  :
74  done( false ),
75  resultCode( 0 )
76  {
77  }
78 
79  bool done;
80  int resultCode;
81  };
82 
83  enum MultipartedParsingState
84  {
85  waitingDelimiter,
86  readingHeaders,
87  readingData
88  };
89 
90  nxpt::CommonRefManager m_refManager;
91  AxisCameraManager* m_cameraManager;
92  unsigned int m_inputPortCount;
93  unsigned int m_outputPortCount;
94  std::map<QString, unsigned int> m_inputPortNameToIndex;
95  std::map<QString, unsigned int> m_outputPortNameToIndex;
96  std::list<nxcip::CameraInputEventHandler*> m_eventHandlers;
98  mutable QMutex m_mutex;
99  std::map<unsigned int, QNetworkReply*> m_inputPortHttpMonitor;
100  QWaitCondition m_cond;
101  QAtomicInt m_asyncCallCounter;
103  std::map<int, AsyncCallContext> m_awaitedAsyncCallIDs;
104  MultipartedParsingState m_multipartedParsingState;
105 
106  void copyPortList(
107  char** idList,
108  int* idNum,
109  const std::map<QString, unsigned int>& portNameToIndex ) const;
110  void callSlotFromOwningThread( const char* slotName, int* const resultCode = NULL );
111  void readAxisRelayPortNotification( const QByteArray& line );
112 
113 private slots:
114  void startInputPortMonitoringPriv( int asyncCallID );
115  void stopInputPortMonitoringPriv( int asyncCallID );
116  void onMonitorDataAvailable();
117  void onConnectionFinished( QNetworkReply* reply );
118 };
AxisRelayIOManager(AxisCameraManager *cameraManager, unsigned int inputPortCount, unsigned int outputPortCount)
Definition: axis_relayio_manager.cpp:17
virtual void * queryInterface(const nxpl::NX_GUID &interfaceID) override
Implementation of nxcip::CameraRelayIOManager::queryInterface.
Definition: axis_relayio_manager.cpp:69
virtual int releaseRef() const override
Implementaion of nxpl::PluginInterface::releaseRef.
Definition: axis_relayio_manager.cpp:89
virtual int setRelayOutputState(const char *outputID, int activate, unsigned int autoResetTimeoutMS) override
Implementation of nxcip::CameraRelayIOManager::getRelayOutputList.
Definition: axis_relayio_manager.cpp:106
virtual int getRelayOutputList(char **idList, int *idNum) const override
Implementation of nxcip::CameraRelayIOManager::getRelayOutputList.
Definition: axis_relayio_manager.cpp:94
virtual int getInputPortList(char **idList, int *idNum) const override
Implementation of nxcip::CameraRelayIOManager::getRelayOutputList.
Definition: axis_relayio_manager.cpp:100
virtual int startInputPortMonitoring() override
Implementation of nxcip::CameraRelayIOManager::getRelayOutputList.
Definition: axis_relayio_manager.cpp:135
Receives events on input port state change.
Definition: camera_plugin.h:1462
Provides access to camera&#39;s relay input/output port (implements nxcip::CameraRelayIOManager) ...
Definition: axis_relayio_manager.h:25
GUID of plugin interface.
Definition: plugin_api.h:26
Provides access to camera&#39;s properties and instanciates other managers (implements nxcip::BaseCameraM...
Definition: axis_camera_manager.h:21
virtual void getLastErrorString(char *errorString) const override
Implementation of nxcip::CameraRelayIOManager::getRelayOutputList.
Definition: axis_relayio_manager.cpp:168
virtual void unregisterEventHandler(nxcip::CameraInputEventHandler *handler) override
Implementation of nxcip::CameraRelayIOManager::getRelayOutputList.
Definition: axis_relayio_manager.cpp:160
Relay input/output management.
Definition: camera_plugin.h:1380
Definition: plugin_tools.h:68
virtual int addRef() const override
Implementaion of nxpl::PluginInterface::addRef.
Definition: axis_relayio_manager.cpp:84
virtual void registerEventHandler(nxcip::CameraInputEventHandler *handler) override
Implementation of nxcip::CameraRelayIOManager::getRelayOutputList.
Definition: axis_relayio_manager.cpp:152
virtual void stopInputPortMonitoring() override
Implementation of nxcip::CameraRelayIOManager::getRelayOutputList.
Definition: axis_relayio_manager.cpp:146