named sds's
authorMart Lubbers <mart@martlubbers.net>
Wed, 21 Jun 2017 07:23:29 +0000 (09:23 +0200)
committerMart Lubbers <mart@martlubbers.net>
Wed, 21 Jun 2017 07:23:29 +0000 (09:23 +0200)
Devices/mTaskTCP.icl
Makefile
Shares/mTaskShare.dcl
Shares/mTaskShare.icl
Tasks/mTaskTask.icl
client/task.c
mTask.dcl
mTaskInterpret.dcl
mTaskInterpret.icl

index dc57231..5373d50 100644 (file)
@@ -24,7 +24,8 @@ instance MTaskDuplex TCPSettings where
                                onConnect=onConnect,
                                onData=onData,
                                onShareChange=onShareChange,
-                               onDisconnect=onDisconnect} >>= \_->viewInformation "done" [] "done" @! ()
+                               onDisconnect=onDisconnect}
+                               >>| throw "Device disconnected"
                where
                        onConnect :: String ChD -> (MaybeErrorString String, Maybe ChD, [String], Bool)
                        onConnect acc (msgs,send,sendStopped)
index f8054da..1a570a5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,11 +7,13 @@ ifeq "$(GCCVERSIONGTEQ6)" "1"
        override CLMFLAGS+=-l -no-pie
 endif
 
+ITASKS:=~/projects/iTasks-SDK/Libraries
+
 #      -I ~/projects/iTasks-SDK/Libraries
 CLMLIBS:=\
        -I $(CLEAN_HOME)/lib/Platform\
        -I $(CLEAN_HOME)/lib/Platform/Deprecated/StdLib\
-       -I ~/projects/iTasks-SDK/Libraries\
+       -I $(ITASKS)\
        -I $(CLEAN_HOME)/lib/GraphCopy\
        -I $(CLEAN_HOME)/lib/Sapl\
        -I $(CLEAN_HOME)/lib/StdEnv\
@@ -24,7 +26,8 @@ BINARIES:= mTaskInterpret miTask # mTaskExamples
 
 all: CleanSerial/Clean\ System\ Files/TTY.o $(BINARIES) #client/mTaskSymbols.h
        mkdir -p miTask-www
-       find ~/projects/iTasks-SDK/Libraries -path '*/WebPublic' -execdir sh -c 'cp -nvR WebPublic/* '"$$PWD"/miTask-www/ \;
+       find $(ITASKS) -path '*/WebPublic' -execdir sh -c 'cp -nvR WebPublic/* '"$$PWD"/miTask-www/ \;
+
 CleanSerial/Clean\ System\ Files/TTY.o:
        make -C CleanSerial
 
@@ -35,7 +38,9 @@ client/mTaskSymbols.h: mTaskMakeSymbols
 %: %.icl $(wildcard */*.[id]cl *.[id]cl)
        $(CLM) $(CLMLIBS) $(CLMFLAGS) $(basename $<) -o $@
 
-clean:
-       $(RM) -r $(BINARIES) Clean\ System\ Files miTask-data miTask-www
-       find . -type d -name 'Clean System Files' -print0 | xargs -r0 rm -r
+clean-%:
+       $(RM) -r $(addprefix $(@:clean-%=%),-data -www) $(@:clean-%=%)
+
+clean: $(addprefix clean-,$(BINARIES))
+       find . -type d -name 'Clean System Files' -print0 | xargs -r0 $(RM) -r
        make -C CleanSerial clean
index 2ba97cb..6cd08a9 100644 (file)
@@ -9,15 +9,16 @@ derive class iTask MTaskShare
 derive gPrint BCState
 
 :: MTaskShare =
-               {withTask :: [String]
-               ,identifier :: Int
-               ,value :: BCValue
+               {withTask  :: [String]
+               ,identifier:: Int
+               ,value     :: BCValue
+               ,humanName :: String
                }
 
 instance == MTaskShare
 
 //Constructor
-makeShare :: String Int BCValue -> MTaskShare
+makeShare :: String String Int BCValue -> MTaskShare
 
 //General viewing task
 manageShares :: Task [MTaskDevice]
index fda2a39..e8ed9a2 100644 (file)
@@ -60,11 +60,12 @@ updateShares dev tfun = upd (map upFun) (sdsFocus (Just (dev, -1)) deviceStore)
 //viewShare m = viewSharedInformation "" [] (getSDSShare m)
 //     <<@ Title ("SDS: " +++ toString m.identifier)
 
-makeShare :: String Int BCValue -> MTaskShare
-makeShare withTask identifier value = {MTaskShare
+makeShare :: String String Int BCValue -> MTaskShare
+makeShare withTask human identifier value = {MTaskShare
                |withTask=[withTask]
                ,identifier=identifier
                ,value=value
+               ,humanName=human
                }
 
 import GenPrint, StdMisc, StdDebug, TTY
@@ -145,4 +146,4 @@ updateShareFromPublish dev ident val = set val
        $ mapReadWriteError (deviceLens dev dummy)
        $ deviceStoreNP
 where
-       dummy = {MTaskShare|value=BCValue 0,identifier=ident,withTask=[]}
+       dummy = {MTaskShare|humanName="",value=BCValue 0,identifier=ident,withTask=[]}
index c36d0d2..e828257 100644 (file)
@@ -9,7 +9,7 @@ import iTasks._Framework.Serialization
 derive class iTask MTaskTask, MTaskInterval, Main, ByteCode, Stmt, Expr, BC, BCState, RWST, Identity
 
 makeTask :: String Int -> Task MTaskTask
-makeTask name ident = get currentDateTime 
+makeTask name ident = get currentDateTime
        @ \dt->{MTaskTask | name=name,ident=ident,dateAdded=dt}
 
 import StdDebug
@@ -17,9 +17,9 @@ import StdMisc
 sendTaskToDevice :: String (Main (ByteCode a Stmt)) (MTaskDevice, MTaskInterval) -> Task [MTaskDevice]
 sendTaskToDevice wta mTask (device, timeout)
 | not (trace_tn "compiling task") = undef
-# (msgs, newState) = toMessages timeout mTask device.deviceState
+# (msgs, newState=:{sdss}) = toMessages timeout mTask device.deviceState
 | not (trace_tn "Done compiling task") = undef
-# shares = [makeShare wta sdsi sdsval\\{sdsi,sdsval}<-newState.sdss, (MTSds sdsi` _)<-msgs | sdsi == sdsi`] 
+# shares = [makeShare wta "" sdsi sdsval\\{sdsi,sdsval}<-sdss, (MTSds sdsi` _)<-msgs | sdsi == sdsi`]
 = updateShares device ((++) shares)
        >>| sendMessages msgs device
        >>| makeTask wta -1
@@ -28,3 +28,9 @@ sendTaskToDevice wta mTask (device, timeout)
                addTaskUpState :: BCState MTaskTask MTaskDevice -> MTaskDevice
                addTaskUpState st task device = { MTaskDevice | device &
                        deviceState=st, deviceTasks=[task:device.deviceTasks]}
+
+//liftmTask :: String (Main (ByteCode a Stmt)) (MTaskDevice, MTaskInterval) -> Task a
+//liftmTask wta mTask (device, timeout)
+//     = sendTaskToDevice wta mTask (device, timeout)
+//     >>| wait "waiting for task to return" $ sdsFocus
+//     >>| treturn 
index 266029f..6e7ae0c 100644 (file)
@@ -92,7 +92,7 @@ void task_delete(uint8_t c)
                }
                t = task_next(t);
        }
-        //Write acknowledgement
+        //Write deletion spec
         write_byte('d');
         write16(c);
         write_byte('\n');
index 955b28a..2a82679 100644 (file)
--- a/mTask.dcl
+++ b/mTask.dcl
@@ -90,6 +90,8 @@ class var2 v where
 class sds v where
   sds :: ((v t Upd)->In t (Main (v c s))) -> (Main (v c s)) | type, mTaskType, toCode t
   con :: ((v t Expr)  ->In t (Main (v c s))) -> (Main (v c s)) | type t
+class namedsds v where
+  namedsds :: ((v t Upd)->In (Named t String) (Main (v c s))) -> (Main (v c s)) | type, mTaskType, toCode t
 class sdspub v where
   pub :: (v t Upd) -> v t Expr | type t
 class seq v where
@@ -192,6 +194,7 @@ instance typeSelector Bool
 instance typeSelector a
 
 :: In a b = In infix 0 a b
+:: Named a b = Named infix 1 a b
 
 read` :: Int (ReadWrite a) State` -> (a,State`) | dyn a
 
index 7e8d4b4..3e7513f 100644 (file)
@@ -118,9 +118,10 @@ derive gEq BCValue
 
 :: ByteCode a p = BC (RWS () [BC] BCState ())
 
-:: BCShare = {
-               sdsi :: Int,
-               sdsval :: BCValue
+:: BCShare =
+       { sdsi :: Int
+       , sdsval :: BCValue
+       , sdsname :: String
        }
 
 :: BCState = {
index 3f82f97..164db5e 100644 (file)
@@ -265,15 +265,23 @@ unBC (BC x) = x
 
 instance sds ByteCode where
        sds f = {main = BC $ freshs
-                               >>= \sdsi->pure {BCShare | sdsi=sdsi,sdsval=BCValue 0}
-                               >>= \sds->pure (f (tell` [BCSdsFetch sds]))
-                               >>= \(v In bdy)->modify (addSDS sds v)
-                               >>| unBC (unMain bdy)}
-               where
-                       addSDS sds v s = {s & sdss=[{sds & sdsval=BCValue v}:s.sdss]}
-
+               >>= \sdsi->pure {BCShare | sdsname="", sdsi=sdsi, sdsval=BCValue 0}
+               >>= \sds ->pure (f $ tell` [BCSdsFetch sds])
+               >>= \(v In bdy)->modify (addSDS sds v)
+               >>| unBC (unMain bdy)}
+       where
+               addSDS sds v s = {s & sdss=[{sds & sdsval=BCValue v}:s.sdss]}
        con f = undef
 
+instance namedsds ByteCode where
+       namedsds f = {main = BC $ freshs
+               >>= \sdsi->pure {BCShare | sdsname="", sdsi=sdsi, sdsval=BCValue 0}
+               >>= \sds ->pure (f $ tell` [BCSdsFetch sds])
+               >>= \(v Named n In bdy)->modify (addSDS sds n v)
+               >>| unBC (unMain bdy)}
+       where
+               addSDS sds n v s = {s & sdss=[{sds & sdsname=n, sdsval=BCValue v}:s.sdss]}
+
 instance sdspub ByteCode where
        pub (BC x) = BC $ censor (\[BCSdsFetch s]->[BCSdsPublish s]) x
 
@@ -365,12 +373,14 @@ toMessages interval x s
 instance == BCShare where (==) a b = a.sdsi == b.sdsi
 
 //Start = toMessages (OnInterval 500) $ toRealByteCode (unMain bc) zero
-Start = [fst $ toReadableByteCode (unMain $ p0) zero
-               ,'Text'.concat $ compile p0
-               ]
+//Start = [fst $ toReadableByteCode (unMain $ p0) zero
+//             ,'Text'.concat $ compile p0
+//             ]
+Start = toReadableByteCode (unMain $ p0) zero
        where
-               p0 :: (Main (a Int Expr)) | assign a & arith a & sds a
-               p0 = sds \x = 6 In {main = x =. x *. lit 7}
+               p0 :: (Main (a Int Expr)) | assign, namedsds, sds, arith a
+//             p0 = sds \x = 6 In {main = x =. x *. lit 7}
+               p0 = namedsds \x = 6 Named "x" In {main = x =. x *. lit 7}
 
                bc  = {main =
                        IF (analogRead A0 >. lit 50)