X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=top%2Flst%2Fexample.icl;h=d1f62227ec6fe74c71f13f2ece6ef60c93abe6f1;hb=a5b8d7509c5846d51e2f9e75d4787c7d9b90b408;hp=7d15baadad4badbd34676bb6aa0531ca470a8b20;hpb=3369704052f2381076b72efb24d57a943172e729;p=phd-thesis.git diff --git a/top/lst/example.icl b/top/lst/example.icl index 7d15baa..d1f6222 100644 --- a/top/lst/example.icl +++ b/top/lst/example.icl @@ -19,39 +19,54 @@ autoHome = withDevice arduino \dev1-> /*\label{lst:example:conn1}*/ >>* [OnAction (Action "Shutdown") (always (shutDown 0))]/*\label{lst:example:task2}\label{lst:example:par2}*/ chooseTask :: MTDevice MTDevice (SharedTaskList ()) -> Task ()/*\label{lst:example:ct1}*/ -chooseTask dev1 dev2 stl = tune (Title "Run a task") - $ enterChoice [] (zip2 [0..] (map fst tasks)) - <<@ Hint "Choose a task" - >>? \(i, n)->enterChoice [] ["arduino", "node"] +chooseTask dev1 dev2 stl = tune (Title "Run a task") $ + enterChoice [] (zip2 [0..] (map fst tasks)) <<@ Hint "Choose a task" + >>? \(i, n)->enterChoice [] ["arduino", "node"]/*\label{lst:example:selectdev}*/ <<@ Hint "Which device?" >>? \device->appendTask Embedded (mkTask n i device) stl >-| chooseTask dev1 dev2 stl where - mkTask n i device stl - # dev = if (device == "node") dev2 dev1 - = ((snd (tasks !! i) $ dev) - >>* [OnAction ActionClose $ always $ return ()]) <<@ Title n/*\label{lst:example:ct2}*/ + mkTask n i device stl = ((snd (tasks !! i) $ dev) + >>* [OnAction ActionClose $ always $ return ()]) <<@ Title n/*\label{lst:example:ct2}*/ + where dev = if (device == "node") dev2 dev1 tasks :: [(String, MTDevice -> Task ())]/*\label{lst:example:tasks1}*/ tasks = [ ("temp", \dev-> - liftmTask ( DHT (DHT_DHT (DigitalPin D6) DHT22) \dht-> - {main=temperature dht}) dev + liftmTask (DHT (DHT_DHT (DigitalPin D6) DHT22) \dht-> + {main=temperature dht} + ) dev >&> \t->viewSharedInformation - [ViewAs \i->toString (fromMaybe 0.0 i) +++ "C"] t - <<@ Hint "Current Temperature" - @! ()) - , ("lightswitch", \dev-> + [ViewAs \i->toString (fromMaybe 0.0 i) +++ "C"] t + <<@ Hint "Current Temperature" @! ()) + , ("lightswitch", \dev-> /*\label{lst:example:ls1}*/ withShared False \sh-> liftmTask (lightswitch sh) dev - -|| updateSharedInformation [] sh <<@ Hint "Switch") - , ("factorial", \dev-> - updateInformation [] 5 <<@ Hint "Factorial of what?" + -|| updateSharedInformation [] sh <<@ Hint "Switch")/*\label{lst:example:ls2}*/ + , ("remote computation", \dev-> + updateInformation [] 5 <<@ Hint "Factorial of what?" >>? \i->liftmTask (factorial i) dev - >>- \r->viewInformation [] r <<@ Hint "Result" - @! ()) + >>- \r->viewInformation [] r <<@ Hint "Result" @! ()) ] -factorial i = {main=rtrn (lit i)} -blink d = {main=writeD (lit d) (lit True)} -lightswitch sh = {main=rtrn (lit ())} +factorial :: Int -> Main (MTask v Int) | mtask v +factorial i = + fun \fac=(\i->If (i ==. lit 0) (lit 1) (i *. fac (i -. lit 1))) + In {main=rtrn (fac (lit i))} +blink :: Int -> Main (MTask v ()) | mtask v +blink d = + declarePin D13 PMOutput \d13-> + fun \bl=(\st-> + writeD d13 st + >>|. delay (lit d) + >>|. bl (Not st)) + In {main=bl true} +lightswitch :: (Shared sds Bool) -> Main (MTask v ()) | lowerSds, mtask v & RWShared sds & TC (sds () Bool Bool) +lightswitch sh = + declarePin D13 PMOutput \d13-> + lowerSds \ls=sh + In fun \f=(\st-> + getSds ls + >>*. [IfValue ((!=.)st) (\v->writeD d13 v)] + >>|. f (Not st)) + In {main=f true}