From 7553b7f9d4dddc2235c137d41de8ce22547bebe3 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Wed, 1 Jul 2015 17:36:37 +0200 Subject: Initial commit --- receiverevent.icl | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 receiverevent.icl (limited to 'receiverevent.icl') diff --git a/receiverevent.icl b/receiverevent.icl new file mode 100644 index 0000000..84f19b6 --- /dev/null +++ b/receiverevent.icl @@ -0,0 +1,28 @@ +implementation module receiverevent + +import StdBool +import deviceevents, iostate, /*MW11*/ clCrossCall_12 +from StdPSt import accPIO + + +/* receiverEvent filters the appropriate events for the receiver device. + These are only the message events (as long as receivers do not contain timers). + receiverEvent assumes that it is not applied to an empty IOSt. +*/ +receiverEvent :: !SchedulerEvent !(PSt .l) -> (!Bool,!Maybe DeviceEvent,!SchedulerEvent,!PSt .l) +receiverEvent schedulerEvent=:(ScheduleMsgEvent msgEvent) pState + # (ioid,pState) = accPIO ioStGetIOId pState + recloc = case msgEvent of + (QASyncMessage {qasmRecLoc}) -> qasmRecLoc + (ASyncMessage { asmRecLoc}) -> asmRecLoc + (SyncMessage { smRecLoc}) -> smRecLoc + | ioid==recloc.rlIOId && ReceiverDevice==recloc.rlDevice + = (True, Just (ReceiverEvent msgEvent),schedulerEvent,pState) + | otherwise + = (False,Nothing,schedulerEvent,pState) +// MW11.. +receiverEvent schedulerEvent=:(ScheduleOSEvent {ccMsg=CcWmINETEVENT,p1,p2,p3,p4} _) pState + = (True, Just (InternetEvent (p1,p2,p3,p4)), schedulerEvent, pState) +// ..MW11 +receiverEvent schedulerEvent pState + = (False,Nothing,schedulerEvent,pState) -- cgit v1.2.3