aboutsummaryrefslogtreecommitdiffstats
path: root/alc/events.h
diff options
context:
space:
mode:
Diffstat (limited to 'alc/events.h')
-rw-r--r--alc/events.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/alc/events.h b/alc/events.h
new file mode 100644
index 00000000..3f53ec76
--- /dev/null
+++ b/alc/events.h
@@ -0,0 +1,50 @@
+#ifndef ALC_EVENTS_H
+#define ALC_EVENTS_H
+
+#include "inprogext.h"
+#include "opthelpers.h"
+
+#include <bitset>
+#include <mutex>
+#include <optional>
+#include <string_view>
+
+
+namespace alc {
+
+enum class EventType : uint8_t {
+ DefaultDeviceChanged,
+ DeviceAdded,
+ DeviceRemoved,
+
+ Count
+};
+
+std::optional<alc::EventType> GetEventType(ALCenum type);
+
+enum class EventSupport : ALCenum {
+ FullSupport = ALC_EVENT_SUPPORTED_SOFT,
+ NoSupport = ALC_EVENT_NOT_SUPPORTED_SOFT,
+};
+
+enum class DeviceType : ALCenum {
+ Playback = ALC_PLAYBACK_DEVICE_SOFT,
+ Capture = ALC_CAPTURE_DEVICE_SOFT,
+};
+
+using EventBitSet = std::bitset<al::to_underlying(EventType::Count)>;
+inline EventBitSet EventsEnabled{0};
+
+inline std::mutex EventMutex;
+
+inline ALCEVENTPROCTYPESOFT EventCallback{};
+inline void *EventUserPtr{};
+
+void Event(EventType eventType, DeviceType deviceType, ALCdevice *device, std::string_view message) noexcept;
+
+inline void Event(EventType eventType, DeviceType deviceType, std::string_view message) noexcept
+{ Event(eventType, deviceType, nullptr, message); }
+
+} // namespace alc
+
+#endif /* ALC_EVENTS_H */