AJA NTV2 SDK  18.0.0.2122
NTV2 SDK 18.0.0.2122
devicenotifier.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
9 #if !defined (__DEVICE_NOTIFIER_H__)
10  #define __DEVICE_NOTIFIER_H__
11 
12  #include <CoreFoundation/CoreFoundation.h>
13  #include <Carbon/Carbon.h>
14  #include <IOKit/IOMessage.h>
15  #include <IOKit/usb/IOUSBLib.h>
16  #include <vector>
17  #include <map>
18  #include <list>
19 
20  #define kAJADeviceInitialOpen 0xAA1
21  #define kAJADeviceTerminate 0xAA2
22 
23 
27  typedef void (*DeviceClientCallback)(unsigned long message, void * refcon);
28 
29 
34  {
35  // Instance Methods
36  public:
37 
38  DeviceNotifier (DeviceClientCallback callback, void *refcon);
39  virtual ~DeviceNotifier ();
40  virtual bool Install (CFMutableDictionaryRef dict = NULL);
41  virtual void Uninstall ();
42 
43  // alternate way to set callback
44  virtual void SetCallback (DeviceClientCallback callback, void *refcon);
45 
46  protected:
47  // override these
48  inline virtual CFMutableDictionaryRef CreateMatchingDictionary () {return NULL;}
49  virtual CFMutableDictionaryRef CreateMatchingDictionary (CFStringRef deviceDriverName);
50 
51  // callbacks
52  virtual void DeviceAdded (io_iterator_t iterator);
53  virtual void DeviceRemoved (io_iterator_t iterator);
54  virtual void DeviceChanged (io_service_t unitService, natural_t messageType, void* message);
55 
56  // util
57  virtual void AddGeneralInterest (io_object_t service);
58 
59  // Class Methods
60  public:
61  //static void SetDebugLogging (const uint64_t inWhichUserClientCommands);
62  static std::string MessageTypeToStr (const natural_t messageType);
63 
64  // Non-Public Class Methods
65  static void DeviceAddedCallback ( DeviceNotifier* thisObject, io_iterator_t iterator);
66  static void DeviceRemovedCallback ( DeviceNotifier* thisObject, io_iterator_t iterator);
67  static void DeviceChangedCallback ( DeviceNotifier * thisObject,
68  io_service_t unitService,
69  natural_t messageType,
70  void * message);
71  // Instance Data
72  protected:
73  void * m_refcon;
75  mach_port_t m_masterPort;
76  IONotificationPortRef m_notificationPort;
77  CFMutableDictionaryRef m_matchingDictionary;
78  std::list<io_object_t> m_deviceMatchList;
79  std::list<io_object_t> m_deviceInterestList;
80 
81  }; // DeviceNotifier
82 
83 
88  {
89  public:
90  inline KonaNotifier (DeviceClientCallback callback, void *refcon)
91  : DeviceNotifier (callback, refcon) {}
92  inline virtual ~KonaNotifier () {}
93  virtual bool Install (CFMutableDictionaryRef dict = NULL);
94  };
95 
96 #endif // __DEVICE_NOTIFIER_H__
virtual void DeviceRemoved(io_iterator_t iterator)
#define NULL
KonaNotifier(DeviceClientCallback callback, void *refcon)
virtual void DeviceAdded(io_iterator_t iterator)
mach_port_t m_masterPort
Subclass of DeviceNotifier that notifies clients when Kona/Corvid/Io/TTap devices are attached/detach...
virtual void Uninstall()
std::list< io_object_t > m_deviceMatchList
Mac-specific class that notifies clients when AJA devices are attached/detached, etc.
virtual ~DeviceNotifier()
static std::string MessageTypeToStr(const natural_t messageType)
virtual ~KonaNotifier()
virtual CFMutableDictionaryRef CreateMatchingDictionary()
virtual bool Install(CFMutableDictionaryRef dict=NULL)
static void DeviceChangedCallback(DeviceNotifier *thisObject, io_service_t unitService, natural_t messageType, void *message)
static void DeviceAddedCallback(DeviceNotifier *thisObject, io_iterator_t iterator)
DeviceNotifier(DeviceClientCallback callback, void *refcon)
virtual bool Install(CFMutableDictionaryRef dict=NULL)
static void DeviceRemovedCallback(DeviceNotifier *thisObject, io_iterator_t iterator)
virtual void AddGeneralInterest(io_object_t service)
IONotificationPortRef m_notificationPort
std::list< io_object_t > m_deviceInterestList
void(* DeviceClientCallback)(unsigned long message, void *refcon)
Mac-specific device add/change/remove event notification callback function.
DeviceClientCallback m_clientCallback
CFMutableDictionaryRef m_matchingDictionary
virtual void DeviceChanged(io_service_t unitService, natural_t messageType, void *message)
virtual void SetCallback(DeviceClientCallback callback, void *refcon)