obs-studio/build_dependencies/aja/include/ajalibraries/ajabase/pnp/pnp.h
Ward Nakchbandi b48576284b first commit
2023-03-04 20:33:16 +03:00

132 lines
3.7 KiB
C++

/* SPDX-License-Identifier: MIT */
/**
@file pnp/pnp.h
@brief Declares the AJAPnp (plug-and-play) class.
@copyright (C) 2011-2021 AJA Video Systems, Inc. All rights reserved.
**/
#ifndef AJA_PNP_H
#define AJA_PNP_H
#include "ajabase/common/public.h"
typedef enum
{
AJA_Pnp_PciVideoDevices = (1 << 0),
AJA_Pnp_UsbSerialDevices = (1 << 1),
AJA_Pnp_FireWireDevices = (1 << 2)
} AJAPnpDevice;
typedef enum
{
AJA_Pnp_DeviceAdded,
AJA_Pnp_DeviceRemoved,
AJA_Pnp_DeviceOnline,
AJA_Pnp_DeviceOffline,
AJA_Pnp_DeviceGoingToSleep,
AJA_Pnp_DeviceWakingUp
} AJAPnpMessage;
/**
@brief If installed (see AJAPnp::Install) in an AJAPnp instance, this function is called when
an AJA device is attached/detached, powered on/off, etc.
@param[in] inMessage Specifies the message (i.e., added, removed, etc.).
@param[in] inRefCon Specifies the reference cookie that was passed to AJAPnp::Install.
**/
typedef void (*AJAPnpCallback)(AJAPnpMessage inMessage, void * inRefCon);
// forward declarations.
class AJAPnpImpl;
/**
@brief This is a platform-agnostic plug-and-play class that notifies a client when AJA devices are
attached/detached, powered on/off, sleep/wake, etc.
@ingroup AJAGroupPnp
@bug This class has no Linux implementation.
**/
class AJA_EXPORT AJAPnp
{
public: // INSTANCE METHODS
/**
* @brief Default constructor.
*/
AJAPnp();
/**
* @brief Default destructor.
*/
virtual ~AJAPnp();
/**
* @brief Installs the given plug-n-play notification callback function, replacing any callback function that
* may have been installed previously. If any matching devices are attached to the host, the callback
* function is immediately called for each attached device with the AJA_Pnp_DeviceAdded message.
*
* @param[in] callback Specifies a pointer to a client-defined function to be called when AJA devices
* sleep/wake or are attached/detached to/from the host. If non-NULL, must be valid.
* @param[in] refCon Specifies a pointer-sized reference cookie that gets passed to the callback function.
* Defaults to NULL.
* @param[in] devices Specifies a bit mask that filters which devices to include/ignore (see implementation).
* Use zero (the default) to see all possible devices.
*
* @bug The current Windows implementation doesn't automatically invoke the callback for each attached device.
* As a workaround, the caller must explicitly enumerate the devices immediately before or after calling
* this function.
*
* @return AJA_STATUS_SUCCESS Install succeeded
* AJA_STATUS_FAIL Install failed
*/
virtual AJAStatus Install(AJAPnpCallback callback, void* refCon= NULL, uint32_t devices = 0);
/**
* @return the address of the currently-installed callback (NULL if none installed).
*/
virtual AJAPnpCallback GetCallback() const;
/**
* @brief Uninstalls any previously-installed callback notifier.
* @return AJA_STATUS_SUCCESS Uninstall succeeded
* AJA_STATUS_FAIL Uninstall failed
*/
virtual AJAStatus Uninstall();
/**
* @return the currently installed reference cookie.
*/
virtual void* GetRefCon() const;
/**
* @return the current bit mask that filters which devices to include or ignore (see implementation).
*/
virtual uint32_t GetPnpDevices() const;
private: // INSTANCE METHODS
/**
* @brief Hidden copy constructor.
*
* @param[in] inObjToCopy Specifies the object to be copied.
**/
AJAPnp (const AJAPnp & inObjToCopy);
/**
* @brief Hidden assignment operator.
*
* @param[in] inObjToCopy Specifies the object to be copied.
**/
virtual AJAPnp & operator= (const AJAPnp & inObjToCopy);
private: // INSTANCE DATA
AJAPnpImpl * mpImpl; ///< @brief My platform-specific implementation object
}; // AJAPnp
#endif // AJA_PNP_H