AJA NTV2 SDK  17.1.1.1245
NTV2 SDK 17.1.1.1245
eventimpl.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
9 #include "ajabase/system/debug.h"
10 #include <errno.h>
11 
12 #define MAX_EVENTS 64
13 
14 using std::string;
15 
16 // event implementation class (linux)
17 AJAEventImpl::AJAEventImpl(bool manualReset, const std::string& name)
18  : mManualReset(manualReset)
19 {
20  AJA_UNUSED(name);
21 #if 0
22  pthread_mutex_init(&mMutex, NULL);
23  pthread_cond_init(&mCondVar, NULL);
24 #endif
25  Clear();
26 }
27 
28 
30 {
31 #if 0
32  pthread_cond_destroy(&mCondVar);
33  pthread_mutex_destroy(&mMutex);
34 #endif
35 }
36 
37 
38 AJAStatus
40 {
41 #if 0
42  // check for open
43  int theError;
44 
45  pthread_mutex_lock(&mMutex);
46  mSignaled = true;
47  theError = pthread_cond_broadcast(&mCondVar);
48  pthread_mutex_unlock(&mMutex);
49 
50  if (theError)
51  {
52  AJA_REPORT(0, AJA_DebugSeverity_Error, "AJAEventImpl::Signal() returns error %08x", theError);
53  return AJA_STATUS_FAIL;
54  }
55  return AJA_STATUS_SUCCESS;
56 #else
57  return AJA_STATUS_FAIL;
58 #endif
59 }
60 
61 
64 {
65  // check for open
66  mSignaled = false;
67  return AJA_STATUS_SUCCESS;
68 }
69 
70 
72 AJAEventImpl::SetState(bool signaled)
73 {
74  AJAStatus status;
75 
76  if (signaled)
77  {
78  status = Signal();
79  }
80  else
81  {
82  status = Clear();
83  }
84 
85  return status;
86 }
87 
88 
90 AJAEventImpl::GetState(bool* pSignaled)
91 {
92  AJA_UNUSED(pSignaled);
93 
94  // wait with timeout 0 returns immediately
95  return WaitForSignal(0);
96 }
97 
98 
101 {
102  mManualReset = manualReset;
103  return AJA_STATUS_SUCCESS;
104 }
105 
106 
107 AJAStatus
108 AJAEventImpl::GetManualReset(bool* pManualReset)
109 {
110  if (pManualReset)
111  {
112  *pManualReset = mManualReset;
113  return AJA_STATUS_SUCCESS;
114  }
115  else
116  return AJA_STATUS_FAIL;
117 }
118 
119 
120 AJAStatus
122 {
123 #if 0
124  static const long long NS_PER_SEC = 1000000000ULL;
125 
126  // check for open
127  int64_t nanos = timeout;
128  nanos *= 1000000;
129 
130  struct timespec ts;
131  int32_t result;
132  AJAStatus status = AJA_STATUS_SUCCESS;
133 
135 
136  nanos += ts.tv_nsec;
137  ts.tv_sec += (nanos / NS_PER_SEC);
138  ts.tv_nsec = (nanos % NS_PER_SEC);
139 
140  pthread_mutex_lock(&mMutex);
141 
142  if (false == mSignaled)
143  {
144  result = pthread_cond_timedwait(&mCondVar, &mMutex, &ts);
145 
146  if (0 != result)
147  {
148  if (result == ETIMEDOUT)
149  {
151  "AJAEventImpl::WaitForSignal() timeout", result);
152  status = AJA_STATUS_TIMEOUT;
153  }
154  else
155  {
157  "AJAEventImpl::WaitForSignal() "
158  "pthread_cond_timedwait returns error %08x", result);
159  status = AJA_STATUS_FAIL;
160  }
161  }
162  }
163  if (!mManualReset)
164  {
165  mSignaled = false;
166  }
167  pthread_mutex_unlock(&mMutex);
168  return (status);
169 #else
170  return AJA_STATUS_FAIL;
171 #endif
172 }
173 
174 
175 AJAStatus
176 AJAEventImpl::GetEventObject(uint64_t* pEventObject)
177 {
178  AJA_UNUSED(pEventObject);
179 
180  return AJA_STATUS_SUCCESS;
181 }
182 
183 
184 /*
185 AJAStatus
186 AJAWaitForEvents(AJAEventPtr* pEventList, uint32_t numEvents, bool all, uint32_t timeout)
187 {
188 
189  HANDLE eventArray[MAX_EVENTS];
190 
191  if (pEventList == NULL)
192  {
193  AJA_REPORT(0, AJA_DebugSeverity_Error, "AJAWaitForEvents event list is NULL");
194  return AJA_STATUS_INITIALIZE;
195  }
196 
197  if (numEvents == 0)
198  {
199  AJA_REPORT(0, AJA_DebugSeverity_Error, "AJAWaitForEvents event list is empty");
200  return AJA_STATUS_RANGE;
201  }
202 
203  if (numEvents > MAX_EVENTS)
204  {
205  AJA_REPORT(0, AJA_DebugSeverity_Error, "AJAWaitForEvents event list larger that MAX_EVENTS");
206  return AJA_STATUS_RANGE;
207  }
208 
209  uint32_t i;
210 
211  // build the array of handles from the AJAEvent(s)
212  for (i = 0; i < numEvents; i++)
213  {
214  AJAEventPtr eventPtr = pEventList[i];
215  AJA_ASSERT(eventPtr->mImplPtr->mEvent != NULL);
216  if(eventPtr->mImplPtr->mEvent == NULL)
217  {
218  AJA_REPORT(0, AJA_DebugSeverity_Error, "AJAWaitForEvents event not initialized");
219  return AJA_STATUS_INITIALIZE;
220  }
221  eventArray[i] = eventPtr->mImplPtr->mEvent;
222  }
223 
224  // check for infinite timeout
225  if (timeout == 0xffffffff)
226  {
227  timeout = INFINITE;
228  }
229 
230  // wait for event(s) to be signaled
231  DWORD retCode = WaitForMultipleObjects(numEvents, eventArray, all, (DWORD)timeout);
232 
233  // an event was signaled
234  if ((retCode >= WAIT_OBJECT_0) && (retCode < (WAIT_OBJECT_0 + numEvents)))
235  {
236  return AJA_STATUS_SUCCESS;
237  }
238  // the wait timed out
239  else if (retCode == WAIT_TIMEOUT)
240  {
241  return AJA_STATUS_TIMEOUT;
242  }
243 
244  // some type of error occurred
245  AJA_REPORT(0, AJA_DebugSeverity_Error, "AJAEvent()::WaitForEvents WaitForMultipleObjects() returns error %08x", retCode);
246 
247  return AJA_STATUS_FAIL;
248 }
249 */
NULL
#define NULL
Definition: ntv2caption608types.h:19
AJA_STATUS_SUCCESS
@ AJA_STATUS_SUCCESS
Definition: types.h:381
AJA_DebugSeverity_Error
@ AJA_DebugSeverity_Error
Definition: debugshare.h:28
AJAEventImpl::~AJAEventImpl
virtual ~AJAEventImpl(void)
Definition: eventimpl.cpp:29
AJA_UNUSED
#define AJA_UNUSED(_x_)
Definition: types.h:424
AJAStatus
AJAStatus
Definition: types.h:378
CLOCK_REALTIME
#define CLOCK_REALTIME
Definition: pthreadsextra.h:21
AJA_STATUS_FAIL
@ AJA_STATUS_FAIL
Definition: types.h:382
eventimpl.h
Declares the AJAEventImpl class.
AJAEventImpl::GetState
AJAStatus GetState(bool *pSignaled)
Definition: eventimpl.cpp:90
AJAEventImpl::SetState
AJAStatus SetState(bool signaled=true)
Definition: eventimpl.cpp:72
AJA_REPORT
#define AJA_REPORT(_index_, _severity_, _format_,...)
Definition: debug.h:117
AJAEventImpl::GetEventObject
virtual AJAStatus GetEventObject(uint64_t *pEventObject)
Definition: eventimpl.cpp:176
AJAEventImpl::WaitForSignal
AJAStatus WaitForSignal(uint32_t timeout=0xffffffff)
Definition: eventimpl.cpp:121
AJA_DebugSeverity_Info
@ AJA_DebugSeverity_Info
Definition: debugshare.h:31
AJA_STATUS_TIMEOUT
@ AJA_STATUS_TIMEOUT
Definition: types.h:384
AJAEventImpl::GetManualReset
AJAStatus GetManualReset(bool *pManualReset)
Definition: eventimpl.cpp:108
AJAEventImpl::AJAEventImpl
AJAEventImpl(bool manualReset, const std::string &name)
Definition: eventimpl.cpp:17
clock_gettime
int clock_gettime(clockid_t clk_id, struct timespec *tp)
Definition: pthreadsextra.cpp:12
AJAEventImpl::SetManualReset
AJAStatus SetManualReset(bool manualReset)
Definition: eventimpl.cpp:100
AJAEventImpl::Clear
AJAStatus Clear(void)
Definition: eventimpl.cpp:63
AJAEventImpl::Signal
AJAStatus Signal(void)
Definition: eventimpl.cpp:39
debug.h
Declares the AJADebug class.