Pleora Technologies Inc. eBUS SDK v6.4.0.6670 API



PvStreamingChannelSourceTrigger.h
1 // *****************************************************************************
2 //
3 // Copyright (c) 2022, Pleora Technologies Inc., All rights reserved.
4 //
5 // *****************************************************************************
6 
7 #ifndef __PVSTREAMINGCHANNELSOURCETRIGGER_H__
8 #define __PVSTREAMINGCHANNELSOURCETRIGGER_H__
9 
10 #include <map>
11 #include <memory>
12 #include <vector>
13 
14 #include <PvTriggerSelector.h>
15 #include <IPvSemaphore.h>
16 #include <PvSoftDeviceGEVInterfaces.h>
17 
18 
19 #define TRIGGERSELECTOR_ADDRESS( base, channel ) (base + 0x0 + ( 0x80 * (channel) ) )
20 #define TRIGGERMODE_ADDRESS( base, channel ) (base + 0x4 + ( 0x80 * (channel) ) )
21 #define TRIGGERSOURCE_ADDRESS( base, channel ) (base + 0x8 + ( 0x80 * (channel) ) )
22 #define TRIGGERSOFTWARE_ADDRESS( base, channel ) (base + 0xc + ( 0x80 * (channel) ) )
23 
24 
25 enum TriggerSelectorEnum
26 {
27  TRIGGER_SELECTOR_FRAMESTART = 0,
28  TRIGGER_SELECTOR_ACQUISITIONSTART,
29  TRIGGER_SELECTOR_ACQUISITIONEND,
30  TRIGGER_SELECTOR_ACQUISITIONACTIVE,
31  TRIGGER_SELECTOR_FRAMEBURSTSTART,
32  TRIGGER_SELECTOR_FRAMEBURSTEND,
33  TRIGGER_SELECTOR_FRAMEBURSTACTIVE,
34  TRIGGER_SELECTOR_FRAMEEND,
35  TRIGGER_SELECTOR_FRAMEACTIVE,
36  TRIGGER_SELECTOR_LINESTART,
37  TRIGGER_SELECTOR_EXPOSURESTART,
38  TRIGGER_SELECTOR_EXPOSUREEND,
39  TRIGGER_SELECTOR_EXPOSUREACTIVE,
40  TRIGGER_SELECTOR_LAST = TRIGGER_SELECTOR_EXPOSUREACTIVE
41 };
42 
43 enum TriggerModeEnum
44 {
45  TRIGGER_MODE_OFF = 0,
46  TRIGGER_MODE_ON = 1
47 };
48 
49 enum TriggerSourceEnum
50 {
51  TRIGGER_SOURCE_SOFTWARE = 0,
52  TRIGGER_SOURCE_USER = 1
53 };
54 
55 
56 class IPvTriggerSelector;
57 
58 
59 class PV_VIRTUAL_DEVICE_API PvStreamingChannelSourceTrigger
61  , public IPvRegisterEventSink
62 {
63 public:
64  typedef std::unique_ptr<IPvTriggerSelector> SelectorEntry;
65 
66  PvStreamingChannelSourceTrigger( uint32_t mChannel, uint32_t aRegisterBaseAddress );
68 
69  // IPvStreamingChannelSource interface.
70  virtual void OnStreamingStart();
71  virtual void OnStreamingStop();
72 
73  virtual bool PreQueueBufferProc();
74  virtual void PostRetrieveBufferProc();
75 
76  virtual void CreateRegisters( IPvRegisterMap *aRegisterMap, IPvRegisterFactory *aFactory );
77  virtual void CreateGenApiFeatures( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
78 
79  // IPvRegisterEventSink interface.
80  virtual PvResult PreRead( IPvRegister *aRegister );
81  virtual PvResult PreWrite( IPvRegister *aRegister );
82  virtual PvResult Persist( IPvRegister *aRegister, IPvRegisterStore *aStore );
83 
84  // Local interface.
85  virtual void FireTrigger() const;
86 
87  void AddSelector( TriggerSelectorEnum aIndex, SelectorEntry aSelector );
88  void AddSource( uint32_t aIndex, const PvString &aName );
89 
90  bool GetMode() const;
91  uint32_t GetSource() const;
92 
93 protected:
94 
95  virtual void CreateTriggerSelector( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
96  virtual void CreateTriggerMode( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
97  virtual void CreateTriggerSource( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
98  virtual void CreateTriggerSoftware( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
99 
100 private:
101 
102  void SetSelector( uint32_t aIndex );
103  void SetMode( uint32_t aMode );
104  void SetSource( uint32_t aIndex );
105  void SyncAll();
106  bool IsSourceSoftware( uint32_t aIndex ) const;
107 
108  PvResult PersistByTriggerSelector( IPvRegister *aRegister, IPvRegisterStore *aStore );
109 
110  uint32_t mChannel;
111  uint32_t mRegisterBaseAddress;
112 
113  uint32_t mSourceIndex;
114  std::map<uint32_t, std::string> *mSources;
115  std::map<uint32_t, SelectorEntry> *mSelectors;
116  IPvTriggerSelector *mDoNothing;
117 
118  uint32_t mCurrentSelector;
119  IPvTriggerSelector* mSelector;
120  IPvSemaphore *mTrigSem;
121 };
122 
123 
124 #endif // __PVSTREAMINGCHANNELSOURCETRIGGER_H__
PvResult
Result information.
Definition: PvResult.h:29
IPvRegisterEventSink::PreWrite
virtual PvResult PreWrite(IPvRegister *aRegister)
Pre-write register notification.
Definition: PvSoftDeviceGEVInterfaces.h:1766
IPvRegisterMap
Register map interface for a software-based GigE Vision Device.
Definition: PvSoftDeviceGEVInterfaces.h:1876
IPvStreamingChannelSource::OnStreamingStop
virtual void OnStreamingStop()=0
Notification that the GigE Vision controller has requested that the device stop streaming on this cha...
IPvGenApiFactory
GenApi factory used to add custom GenApi parameters to a software-based GigE Vision Device GenICam XM...
Definition: PvSoftDeviceGEVInterfaces.h:1991
IPvStreamingChannelSource::OnStreamingStart
virtual void OnStreamingStart()=0
Notification that the GigE Vision controller has requested that the device start streaming on this ch...
PvStreamingChannelSourceTrigger
An implementation providing Trigger support for the IPvStreamingChannelSource interface.
Definition: PvStreamingChannelSourceTrigger.h:59
IPvStreamingChannelSource::PreQueueBufferProc
virtual bool PreQueueBufferProc()
Definition: PvSoftDeviceGEVInterfaces.h:1141
PvString
String class.
Definition: PvString.h:25
IPvTriggerSelector
This class implements a triggering mechanism.
Definition: PvTriggerSelector.h:21
IPvRegisterFactory
Class used for register creation.
Definition: PvSoftDeviceGEVInterfaces.h:1820
IPvRegister
Interface that is used to access the registers of the software-based GigE Vision Device.
Definition: PvSoftDeviceGEVInterfaces.h:1468
IPvStreamingChannelSource::CreateRegisters
virtual void CreateRegisters(IPvRegisterMap *aRegisterMap, IPvRegisterFactory *aFactory)
When called, the streaming channel source should create its custom registers if they are needed.
Definition: PvSoftDeviceGEVInterfaces.h:1199
IPvRegisterEventSink::PreRead
virtual PvResult PreRead(IPvRegister *aRegister)
Pre-read register notification.
Definition: PvSoftDeviceGEVInterfaces.h:1729
IPvSemaphore
Definition: IPvSemaphore.h:14
IPvStreamingChannelSource::CreateGenApiFeatures
virtual void CreateGenApiFeatures(IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory)
When called, the streaming channel source should create its custom GenApi parameters if they are need...
Definition: PvSoftDeviceGEVInterfaces.h:1265
IPvStreamingChannelSource::PostRetrieveBufferProc
virtual void PostRetrieveBufferProc()
Definition: PvSoftDeviceGEVInterfaces.h:1148
IPvRegisterStore
Class used with register persistence in the context of user-sets.
Definition: PvSoftDeviceGEVInterfaces.h:1657
IPvRegisterEventSink
Interface that is used to report the register activity of the software-based GigE Vision Device.
Definition: PvSoftDeviceGEVInterfaces.h:1699
IPvStreamingChannelSource
Interface that is used by PvSoftDeviceGEV to query and report information from a streaming source imp...
Definition: PvSoftDeviceGEVInterfaces.h:738
IPvRegisterEventSink::Persist
virtual PvResult Persist(IPvRegister *aRegister, IPvRegisterStore *aStore)
Peristence request for selected registers for user-sets.
Definition: PvSoftDeviceGEVInterfaces.h:1807

Copyright (c) 2002-2024 Pleora Technologies Inc.
www.pleora.com