Пример #1
0
        public int sceKernelClearEventFlag(EventFlagId EventId, uint BitsToClear)
        {
            var EventFlag = EventFlagManager.EventFlags.Get(EventId);
            EventFlag.ClearBits(BitsToClear);

            return 0;
        }
Пример #2
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);
        }
Пример #3
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;
        }
Пример #6
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;
 }
Пример #8
0
 public int sceKernelDeleteEventFlag(EventFlagId EventId)
 {
     HleState.EventFlagManager.EventFlags.Remove(EventId);
     return(0);
 }
Пример #9
0
 public int sceKernelReferEventFlagStatus(EventFlagId EventId, EventFlagInfo *Info)
 {
     *Info = HleState.EventFlagManager.EventFlags.Get(EventId).Info;
     return(0);
 }
Пример #10
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);
 }
Пример #11
0
 public int sceKernelWaitEventFlagCB(EventFlagId EventId, uint Bits, EventFlagWaitTypeSet WaitType, uint *OutBits, uint *Timeout)
 {
     return(_sceKernelWaitEventFlagCB(EventId, Bits, WaitType, OutBits, Timeout, true));
 }
Пример #12
0
 public int sceKernelDeleteEventFlag(EventFlagId EventId)
 {
     EventFlagManager.EventFlags.Remove(EventId);
     return 0;
 }
Пример #13
0
 public int sceKernelCancelEventFlag(EventFlagId EventId, int NewPattern, int* NumWaitThread)
 {
     throw(new NotImplementedException());
     //return 0;
 }
Пример #14
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;
        }
Пример #15
0
 public int sceKernelWaitEventFlagCB(EventFlagId EventId, uint Bits, EventFlagWaitTypeSet WaitType, uint* OutBits, uint* Timeout)
 {
     return _sceKernelWaitEventFlagCB(EventId, Bits, WaitType, OutBits, Timeout, true);
 }
Пример #16
0
 public int sceKernelSetEventFlag(EventFlagId EventId, uint BitPattern)
 {
     //Console.WriteLine("FLAG:{0} : {1:X}", EventId, BitPattern);
     EventFlagManager.EventFlags.Get(EventId).Set(BitPattern);
     return 0;
 }
Пример #17
0
 public int sceKernelReferEventFlagStatus(EventFlagId EventId, out EventFlagInfo Info)
 {
     var EventFlag = EventFlagManager.EventFlags.Get(EventId);
     Info = EventFlag.Info;
     Console.WriteLine(Info);
     return 0;
 }