AJA NTV2 SDK  17.5.0.1242
NTV2 SDK 17.5.0.1242
pnpimpl.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
10 
11 void
12 CALLBACK SignaledAddRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
13 {
14  AJAPnpImpl *context = (AJAPnpImpl*)lpParam;
15  context->AddSignaled();
16 
17 }
18 
19 void
20 CALLBACK SignaledRemoveRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
21 {
22  AJAPnpImpl *context = (AJAPnpImpl*)lpParam;
23  context->RemoveSignaled();
24 
25 }
26 
27 AJAPnpImpl::AJAPnpImpl() : mRefCon(NULL), mCallback(NULL), mDevices(0), mAddEventHandle(NULL), mAddWaitHandle(NULL), mRemoveEventHandle(NULL), mRemoveWaitHandle(NULL)
28 {
29 }
30 
31 
33 {
34  Uninstall();
35 }
36 
37 
38 AJAStatus
39 AJAPnpImpl::Install(AJAPnpCallback callback, void* refCon, uint32_t devices)
40 {
41  mCallback = callback;
42  mRefCon = refCon;
43  mDevices = devices;
44 
45  if (!mCallback)
46  return AJA_STATUS_NULL; // NULL callback
47 
48  // Windows only handles PCIe devices
49  if (mDevices & AJA_Pnp_PciVideoDevices)
50  {
51  BOOL ok(false);
52  mAddEventHandle = CreateEventW(NULL, FALSE, FALSE, L"Global\\AJAPNPAddEvent");
53  if (!mAddWaitHandle)
54  return AJA_STATUS_FAIL;
55  if (!RegisterWaitForSingleObject(&mAddWaitHandle, mAddEventHandle, (WAITORTIMERCALLBACK)&SignaledAddRoutine, this, INFINITE, NULL))
56  return AJA_STATUS_FAIL;
57 
58  mRemoveEventHandle = CreateEventW(NULL, FALSE, FALSE, L"Global\\AJAPNPRemoveEvent");
59  if (!mRemoveWaitHandle)
60  return AJA_STATUS_FAIL;
61  if (!RegisterWaitForSingleObject(&mRemoveWaitHandle, mRemoveEventHandle, (WAITORTIMERCALLBACK)&SignaledRemoveRoutine, this, INFINITE, NULL))
62  return AJA_STATUS_FAIL;
63 
64  return AJA_STATUS_SUCCESS;
65  }
66  return AJA_STATUS_FAIL; // Nothing installed
67 }
68 
69 AJAStatus
71 {
72  mCallback = NULL;
73  mRefCon = NULL;
74  mDevices = 0;
75 
76  if(mAddWaitHandle != NULL)
77  {
78  UnregisterWait(mAddWaitHandle);
79  mAddWaitHandle = NULL;
80  }
81  if(mRemoveWaitHandle != NULL)
82  {
83  UnregisterWait(mRemoveWaitHandle);
84  mRemoveWaitHandle = NULL;
85  }
86 
87  return AJA_STATUS_SUCCESS;
88 }
89 
90 void
92 {
93  AJATime::Sleep(1000);
94  if (mCallback)
95  (*(mCallback))(AJA_Pnp_DeviceAdded, mRefCon);
96 
97  RegisterWaitForSingleObject(&mAddWaitHandle, mAddEventHandle, (WAITORTIMERCALLBACK)SignaledAddRoutine, this, INFINITE, NULL);
98 }
99 
100 void
102 {
103  if (mCallback)
104  (*(mCallback))(AJA_Pnp_DeviceRemoved, mRefCon);
105 
106  RegisterWaitForSingleObject(&mRemoveWaitHandle, mRemoveEventHandle, (WAITORTIMERCALLBACK)SignaledRemoveRoutine, this, INFINITE, NULL);
107 }
AJAPnpImpl::Uninstall
AJAStatus Uninstall(void)
Definition: pnpimpl.cpp:62
NULL
#define NULL
Definition: ntv2caption608types.h:19
SignaledRemoveRoutine
void CALLBACK SignaledRemoveRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
Definition: pnpimpl.cpp:20
AJA_STATUS_SUCCESS
@ AJA_STATUS_SUCCESS
Definition: types.h:381
AJAPnpCallback
void(* AJAPnpCallback)(AJAPnpMessage inMessage, void *inRefCon)
If installed (see AJAPnp::Install) in an AJAPnp instance, this function is called when an AJA device ...
Definition: pnp.h:39
systemtime.h
Declares the AJATime class.
SignaledAddRoutine
void CALLBACK SignaledAddRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
Definition: pnpimpl.cpp:12
AJA_Pnp_PciVideoDevices
@ AJA_Pnp_PciVideoDevices
Definition: pnp.h:16
pnpimpl.h
Declares the AJAPnpImpl class.
AJAStatus
AJAStatus
Definition: types.h:378
AJATime::Sleep
static void Sleep(const int32_t inMilliseconds)
Suspends execution of the current thread for a given number of milliseconds.
Definition: systemtime.cpp:284
AJA_STATUS_FAIL
@ AJA_STATUS_FAIL
Definition: types.h:382
AJAPnpImpl::Install
AJAStatus Install(AJAPnpCallback callback, void *refCon, uint32_t devices)
Definition: pnpimpl.cpp:32
PVOID
void * PVOID
Definition: ajatypes.h:318
AJA_Pnp_DeviceRemoved
@ AJA_Pnp_DeviceRemoved
Definition: pnp.h:25
AJAPnpImpl
Definition: pnpimpl.h:13
AJAPnpImpl::AJAPnpImpl
AJAPnpImpl()
Definition: pnpimpl.cpp:20
AJA_STATUS_NULL
@ AJA_STATUS_NULL
Definition: types.h:387
AJAPnpImpl::AddSignaled
void AddSignaled(void)
Definition: pnpimpl.cpp:91
AJAPnpImpl::~AJAPnpImpl
virtual ~AJAPnpImpl(void)
Definition: pnpimpl.cpp:25
AJA_Pnp_DeviceAdded
@ AJA_Pnp_DeviceAdded
Definition: pnp.h:24
AJAPnpImpl::RemoveSignaled
void RemoveSignaled(void)
Definition: pnpimpl.cpp:101