#pragma once #include #define MSGID(Area, Number) (DWORD)((WORD)(Area) << 16 | (WORD)(Number)) #define MSG_AREA(msgid) (((msgid) >> 16) & 0xFFFF) #define MSG_NUMBER(msgid) ((msgid) & 0xFFFF) struct XamListener { uint32_t id{}; uint64_t areas{}; std::vector> notifications; XamListener(const XamListener&) = delete; XamListener& operator=(const XamListener&) = delete; XamListener(); ~XamListener(); }; class XamEnumeratorBase { public: virtual ~XamEnumeratorBase() = default; virtual uint32_t Next(void* buffer) { return -1; } }; template::iterator> class XamEnumerator : public XamEnumeratorBase { public: uint32_t fetch; size_t size; TIterator position; TIterator begin; TIterator end; XamEnumerator() = default; XamEnumerator(uint32_t fetch, size_t size, TIterator begin, TIterator end) : fetch(fetch), size(size), position(begin), begin(begin), end(end) { } uint32_t Next(void* buffer) override { if (position == end) { return -1; } if (buffer == nullptr) { for (size_t i = 0; i < fetch; i++) { if (position == end) { return i == 0 ? -1 : i; } ++position; } } for (size_t i = 0; i < fetch; i++) { if (position == end) { return i == 0 ? -1 : i; } memcpy(buffer, &*position, size); ++position; buffer = (void*)((size_t)buffer + size); } return fetch; } }; XCONTENT_DATA XamMakeContent(DWORD type, const std::string_view& name); void XamRegisterContent(const XCONTENT_DATA& data, const std::string_view& root); std::string_view XamGetRootPath(const std::string_view& root); void XamRootCreate(const std::string_view& root, const std::string_view& path); SWA_API DWORD XamNotifyCreateListener(uint64_t qwAreas); SWA_API void XamNotifyEnqueueEvent(DWORD dwId, DWORD dwParam); // i made it the fuck up SWA_API bool XNotifyGetNext(DWORD hNotification, DWORD dwMsgFilter, XDWORD* pdwId, XDWORD* pParam); SWA_API uint32_t XamShowMessageBoxUI(DWORD dwUserIndex, XWORD* wszTitle, XWORD* wszText, DWORD cButtons, xpointer* pwszButtons, DWORD dwFocusButton, DWORD dwFlags, XLPDWORD pResult, XXOVERLAPPED* pOverlapped); SWA_API uint32_t XamContentCreateEnumerator(DWORD dwUserIndex, DWORD DeviceID, DWORD dwContentType, DWORD dwContentFlags, DWORD cItem, XLPDWORD pcbBuffer, XLPDWORD phEnum); SWA_API uint32_t XamEnumerate(uint32_t hEnum, DWORD dwFlags, PVOID pvBuffer, DWORD cbBuffer, XLPDWORD pcItemsReturned, XXOVERLAPPED* pOverlapped); SWA_API uint32_t XamContentCreateEx(DWORD dwUserIndex, LPCSTR szRootName, const XCONTENT_DATA* pContentData, DWORD dwContentFlags, XLPDWORD pdwDisposition, XLPDWORD pdwLicenseMask, DWORD dwFileCacheSize, uint64_t uliContentSize, PXXOVERLAPPED pOverlapped); SWA_API uint32_t XamContentGetDeviceData(DWORD DeviceID, XDEVICE_DATA* pDeviceData); SWA_API uint32_t XamContentClose(LPCSTR szRootName, XXOVERLAPPED* pOverlapped); SWA_API uint32_t XamInputGetCapabilities(uint32_t unk, uint32_t userIndex, uint32_t flags, XAMINPUT_CAPABILITIES* caps); SWA_API uint32_t XamInputGetState(uint32_t userIndex, uint32_t flags, XAMINPUT_STATE* state); SWA_API uint32_t XamInputSetState(uint32_t userIndex, uint32_t flags, XAMINPUT_VIBRATION* vibration);