equeue: sceGnmGetEqEventType/sceKernelGetEventData impl (#1839)

This commit is contained in:
Nenkai 2024-12-27 19:33:45 +01:00 committed by GitHub
parent e40ede5db2
commit f95803664b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 51 additions and 22 deletions

View file

@ -66,8 +66,11 @@ struct EqueueEvent {
std::chrono::steady_clock::time_point time_added;
std::unique_ptr<boost::asio::steady_timer> timer;
void Reset() {
void ResetTriggerState() {
is_triggered = false;
}
void Clear() {
event.fflags = 0;
event.data = 0;
}
@ -83,7 +86,7 @@ struct EqueueEvent {
}
bool operator==(const EqueueEvent& ev) const {
return ev.event.ident == event.ident;
return ev.event.ident == event.ident && ev.event.filter == event.filter;
}
private:
@ -99,7 +102,7 @@ public:
}
bool AddEvent(EqueueEvent& event);
bool RemoveEvent(u64 id);
bool RemoveEvent(u64 id, s16 filter);
int WaitForEvents(SceKernelEvent* ev, int num, u32 micros);
bool TriggerEvent(u64 ident, s16 filter, void* trigger_data);
int GetTriggeredEvents(SceKernelEvent* ev, int num);
@ -122,6 +125,8 @@ private:
using SceKernelUseconds = u32;
using SceKernelEqueue = EqueueInternal*;
u64 PS4_SYSV_ABI sceKernelGetEventData(const SceKernelEvent* ev);
void RegisterEventQueue(Core::Loader::SymbolsResolver* sym);
} // namespace Libraries::Kernel