diff options
author | Camil Staps | 2015-07-01 17:36:37 +0200 |
---|---|---|
committer | Camil Staps | 2015-07-01 17:36:37 +0200 |
commit | 7553b7f9d4dddc2235c137d41de8ce22547bebe3 (patch) | |
tree | 34f8fb4b36640317d728a60586424f67f9befbe7 /receiverevent.icl | |
parent | gitignore (diff) |
Initial commit
Diffstat (limited to 'receiverevent.icl')
-rw-r--r-- | receiverevent.icl | 28 |
1 files changed, 28 insertions, 0 deletions
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)
|