Pleora Technologies Inc. eBUS SDK v6.6.1.7475 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 
66 
67 class PV_VIRTUAL_DEVICE_API IPvTriggerCallback
68 {
69 public:
77  virtual void TriggerCallbackMethod( const IPvTriggerSelector *aTriggerSelector) = 0;
78 };
79 
80 class PV_VIRTUAL_DEVICE_API PvStreamingChannelSourceTrigger
82  , public IPvRegisterEventSink
83 {
84 public:
85  typedef std::unique_ptr<IPvTriggerSelector> SelectorEntry;
86 
87  PvStreamingChannelSourceTrigger( uint32_t mChannel, uint32_t aRegisterBaseAddress );
89 
90  // IPvStreamingChannelSource interface.
91  virtual void OnStreamingStart();
92  virtual void OnStreamingStop();
93 
94  virtual bool PreQueueBufferProc();
95  virtual void PostRetrieveBufferProc();
96 
97  virtual void CreateRegisters( IPvRegisterMap *aRegisterMap, IPvRegisterFactory *aFactory );
98  virtual void CreateGenApiFeatures( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
99 
100  // Disabled IPvStreamingChannelSource interface.
101  PvResult GetTxNumBuffersToUse( uint32_t &aNumBuffer ) { aNumBuffer = 0; return PvResult::Code::NOT_IMPLEMENTED; }
102 
103  // IPvRegisterEventSink interface.
104  virtual PvResult PreRead( IPvRegister *aRegister );
105  virtual PvResult PreWrite( IPvRegister *aRegister );
106  virtual PvResult Persist( IPvRegister *aRegister, IPvRegisterStore *aStore );
107 
108  // Local interface.
109  virtual void FireTrigger() const;
110 
111  void AddSelector( TriggerSelectorEnum aIndex, SelectorEntry aSelector );
112 
115 
119  void AddSelectorTriggerCallback( TriggerSelectorEnum aIndex, IPvTriggerCallback *aCallback);
120  void AddSource( uint32_t aIndex, const PvString &aName );
121 
122  bool GetMode() const;
123  uint32_t GetSource() const;
124 
125 protected:
126 
127  virtual void CreateTriggerSelector( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
128  virtual void CreateTriggerMode( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
129  virtual void CreateTriggerSource( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
130  virtual void CreateTriggerSoftware( IPvRegisterMap *aRegisterMap, IPvGenApiFactory *aFactory );
131 
132 private:
133 
134  void SetSelector( uint32_t aIndex );
135  void SetMode( uint32_t aMode );
136  void SetSource( uint32_t aIndex );
137  void SyncAll();
138  bool IsSourceSoftware( uint32_t aIndex ) const;
139 
140  PvResult PersistByTriggerSelector( IPvRegister *aRegister, IPvRegisterStore *aStore );
141 
142  uint32_t mChannel;
143  uint32_t mRegisterBaseAddress;
144 
145  uint32_t mSourceIndex;
146  std::map<uint32_t, std::string> *mSources;
147  std::map<uint32_t, SelectorEntry> *mSelectors;
148  IPvTriggerCallback *mSelectorCallback;
149  IPvTriggerSelector *mDoNothing;
150 
151  uint32_t mCurrentSelector;
152  IPvTriggerSelector* mSelector;
153  IPvSemaphore *mTrigSem;
154 };
155 
156 
157 #endif // __PVSTREAMINGCHANNELSOURCETRIGGER_H__
GenApi factory used to add custom GenApi parameters to a software-based GigE Vision Device GenICam XM...
Definition: PvSoftDeviceGEVInterfaces.h:2097
Interface that is used to report the register activity of the software-based GigE Vision Device.
Definition: PvSoftDeviceGEVInterfaces.h:1805
Class used for register creation.
Definition: PvSoftDeviceGEVInterfaces.h:1926
Interface that is used to access the registers of the software-based GigE Vision Device.
Definition: PvSoftDeviceGEVInterfaces.h:1575
Register map interface for a software-based GigE Vision Device.
Definition: PvSoftDeviceGEVInterfaces.h:1982
Class used with register persistence in the context of user-sets.
Definition: PvSoftDeviceGEVInterfaces.h:1763
Definition: IPvSemaphore.h:15
Interface that is used by PvSoftDeviceGEV to query and report information from a streaming source imp...
Definition: PvSoftDeviceGEVInterfaces.h:788
An interface which provides a trigger callback function.
Definition: PvStreamingChannelSourceTrigger.h:68
virtual void TriggerCallbackMethod(const IPvTriggerSelector *aTriggerSelector)=0
The callback to implement to receive notice of a trigger generation.
Interface used by PvStreamingChannelSourceTrigger to support a trigger mechanism.
Definition: PvTriggerSelector.h:20
Result information.
Definition: PvResult.h:30
An implementation providing Trigger support for the IPvStreamingChannelSource interface.
Definition: PvStreamingChannelSourceTrigger.h:83
PvResult GetTxNumBuffersToUse(uint32_t &aNumBuffer)
This method is requested by PvSoftDeviceGEV to limit the number of buffers used by the transmitter....
Definition: PvStreamingChannelSourceTrigger.h:101
String class.
Definition: PvString.h:26
@ NOT_IMPLEMENTED
Definition: PvResult.h:527

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