public int sceKernelClearEventFlag(EventFlagId EventId, uint BitsToClear) { var EventFlag = EventFlagManager.EventFlags.Get(EventId); EventFlag.ClearBits(BitsToClear); return 0; }
/// <summary> /// Wait for an event flag for a given bit pattern with callback. /// </summary> /// <param name="EventId">The event id returned by sceKernelCreateEventFlag.</param> /// <param name="Bits">The bit pattern to poll for.</param> /// <param name="Wait">Wait type, one or more of ::PspEventFlagWaitTypes or'ed together</param> /// <param name="OutBits">The bit pattern that was matched.</param> /// <param name="Timeout">Timeout in microseconds</param> /// <param name="HandleCallbacks"></param> /// <returns> /// ERROR_KERNEL_NOT_FOUND_EVENT_FLAG - If can't find the eventFlag /// ERROR_KERNEL_WAIT_TIMEOUT - If there was a timeout /// 0 - On success /// </returns> public int _sceKernelWaitEventFlagCB(EventFlagId EventId, uint Bits, EventFlagWaitTypeSet Wait, uint *OutBits, uint *Timeout, bool HandleCallbacks) { var EventFlag = HleState.EventFlagManager.EventFlags.Get(EventId); bool TimedOut = false; HleState.ThreadManager.Current.SetWaitAndPrepareWakeUp(HleThread.WaitType.Semaphore, String.Format("_sceKernelWaitEventFlagCB(EventId={0}, Bits={1:X}, Wait={2})", EventId, Bits, Wait), WakeUpCallback => { if (Timeout != null) { HleState.PspRtc.RegisterTimerInOnce(TimeSpanUtils.FromMicroseconds(*Timeout), () => { TimedOut = true; WakeUpCallback(); }); } EventFlag.AddWaitingThread(new HleEventFlag.WaitThread() { HleThread = HleState.ThreadManager.Current, BitsToMatch = Bits, WaitType = Wait, WakeUpCallback = () => { WakeUpCallback(); }, OutBits = OutBits, }); }, HandleCallbacks: HandleCallbacks); if (TimedOut) { throw(new SceKernelException(SceKernelErrors.ERROR_KERNEL_WAIT_TIMEOUT)); } //throw(new NotImplementedException()); return(0); }
public int sceKernelClearEventFlag(EventFlagId EventId, uint BitsToClear) { var EventFlag = HleState.EventFlagManager.EventFlags.Get(EventId); EventFlag.ClearBits(BitsToClear); return(0); }
public int sceKernelCancelEventFlag(EventFlagId EventId, int NewPattern, int* NumWaitThread) { var EventFlag = EventFlagManager.EventFlags.Get(EventId); foreach (var WaitingThread in EventFlag.WaitingThreads) { WaitingThread.WakeUpCallback(); } //throw(new NotImplementedException()); return 0; }
public int sceKernelPollEventFlag(EventFlagId EventId, uint Bits, EventFlagWaitTypeSet WaitType, uint* OutBits) { var EventFlag = HleState.EventFlagManager.EventFlags.Get(EventId); if (Bits == 0) throw(new SceKernelException(SceKernelErrors.ERROR_KERNEL_EVENT_FLAG_ILLEGAL_WAIT_PATTERN)); bool Matched = EventFlag.Poll(Bits, WaitType, OutBits); if (!Matched) { throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_EVENT_FLAG_POLL_FAILED)); } return 0; }
public int sceKernelPollEventFlag(EventFlagId EventId, uint Bits, EventFlagWaitTypeSet WaitType, uint *OutBits) { var EventFlag = HleState.EventFlagManager.EventFlags.Get(EventId); if (Bits == 0) { throw(new SceKernelException(SceKernelErrors.ERROR_KERNEL_EVENT_FLAG_ILLEGAL_WAIT_PATTERN)); } bool Matched = EventFlag.Poll(Bits, WaitType, OutBits); if (!Matched) { throw (new SceKernelException(SceKernelErrors.ERROR_KERNEL_EVENT_FLAG_POLL_FAILED)); } return(0); }
public int sceKernelReferEventFlagStatus(EventFlagId EventId, EventFlagInfo* Info) { *Info = HleState.EventFlagManager.EventFlags.Get(EventId).Info; return 0; }
public int sceKernelDeleteEventFlag(EventFlagId EventId) { HleState.EventFlagManager.EventFlags.Remove(EventId); return(0); }
public int sceKernelReferEventFlagStatus(EventFlagId EventId, EventFlagInfo *Info) { *Info = HleState.EventFlagManager.EventFlags.Get(EventId).Info; return(0); }
public int sceKernelSetEventFlag(EventFlagId EventId, uint BitPattern) { //Console.WriteLine("FLAG:{0} : {1:X}", EventId, BitPattern); HleState.EventFlagManager.EventFlags.Get(EventId).Set(BitPattern); return(0); }
public int sceKernelWaitEventFlagCB(EventFlagId EventId, uint Bits, EventFlagWaitTypeSet WaitType, uint *OutBits, uint *Timeout) { return(_sceKernelWaitEventFlagCB(EventId, Bits, WaitType, OutBits, Timeout, true)); }
public int sceKernelDeleteEventFlag(EventFlagId EventId) { EventFlagManager.EventFlags.Remove(EventId); return 0; }
public int sceKernelCancelEventFlag(EventFlagId EventId, int NewPattern, int* NumWaitThread) { throw(new NotImplementedException()); //return 0; }
/// <summary> /// Wait for an event flag for a given bit pattern with callback. /// </summary> /// <param name="EventId">The event id returned by sceKernelCreateEventFlag.</param> /// <param name="Bits">The bit pattern to poll for.</param> /// <param name="Wait">Wait type, one or more of ::PspEventFlagWaitTypes or'ed together</param> /// <param name="OutBits">The bit pattern that was matched.</param> /// <param name="Timeout">Timeout in microseconds</param> /// <param name="HandleCallbacks"></param> /// <returns> /// ERROR_KERNEL_NOT_FOUND_EVENT_FLAG - If can't find the eventFlag /// ERROR_KERNEL_WAIT_TIMEOUT - If there was a timeout /// 0 - On success /// </returns> public int _sceKernelWaitEventFlagCB(EventFlagId EventId, uint Bits, EventFlagWaitTypeSet Wait, uint* OutBits, uint* Timeout, bool HandleCallbacks) { var EventFlag = EventFlagManager.EventFlags.Get(EventId); bool TimedOut = false; ThreadManager.Current.SetWaitAndPrepareWakeUp( HleThread.WaitType.Semaphore, String.Format("_sceKernelWaitEventFlagCB(EventId={0}, Bits={1:X}, Wait={2})", EventId, Bits, Wait), EventFlag, WakeUpCallback => { if (Timeout != null) { PspRtc.RegisterTimerInOnce(TimeSpanUtils.FromMicroseconds(*Timeout), () => { TimedOut = true; WakeUpCallback(); }); } EventFlag.AddWaitingThread(new HleEventFlag.WaitThread() { HleThread = ThreadManager.Current, BitsToMatch = Bits, WaitType = Wait, WakeUpCallback = () => { WakeUpCallback(); }, OutBits = OutBits, }); }, HandleCallbacks: HandleCallbacks); if (OutBits != null) { *OutBits = EventFlag.Info.CurrentPattern; } if (TimedOut) { throw(new SceKernelException(SceKernelErrors.ERROR_KERNEL_WAIT_TIMEOUT)); } //throw(new NotImplementedException()); return 0; }
public int sceKernelWaitEventFlagCB(EventFlagId EventId, uint Bits, EventFlagWaitTypeSet WaitType, uint* OutBits, uint* Timeout) { return _sceKernelWaitEventFlagCB(EventId, Bits, WaitType, OutBits, Timeout, true); }
public int sceKernelSetEventFlag(EventFlagId EventId, uint BitPattern) { //Console.WriteLine("FLAG:{0} : {1:X}", EventId, BitPattern); EventFlagManager.EventFlags.Get(EventId).Set(BitPattern); return 0; }
public int sceKernelReferEventFlagStatus(EventFlagId EventId, out EventFlagInfo Info) { var EventFlag = EventFlagManager.EventFlags.Get(EventId); Info = EventFlag.Info; Console.WriteLine(Info); return 0; }