import mTask
import iTasks
+import Devices.mTaskDevice
+
import iTasks._Framework.Serialization
-derive class iTask MTaskTask, MTaskInterval, Main, ByteCode, Stmt, Expr, BC, BCState, UserLED
+derive class iTask MTaskTask, MTaskInterval, Main, ByteCode, Stmt, Expr, BC, BCState, RWST, Identity
makeTask :: String Int -> Task MTaskTask
makeTask name ident = get currentDateTime
@ \dt->{MTaskTask | name=name,ident=ident,dateAdded=dt}
+
+sendTaskToDevice :: String (Main (ByteCode () Stmt)) (MTaskDevice, MTaskInterval) -> Task ()
+sendTaskToDevice wta mTask (device, timeout) =
+ get bcStateStore @ toMessages timeout mTask
+ >>= \(msgs, st1)->set st1 bcStateStore
+ >>| toSDSRecords msgs st1 device
+ >>= \sdss->upd (mergeShares sdss) sdsStore
+ >>| sendMessages msgs device
+ >>| makeTask wta -1
+ >>= withDevices device o addTask
+ @! ()
+ where
+ sharename i = device.deviceChannels +++ "-" +++ toString i
+
+ toSDSRecords :: [MTaskMSGSend] BCState MTaskDevice -> Task [MTaskShare]
+ toSDSRecords s st device = sequence ""
+ [makeShare wta device sdsi sdsval
+ \\{sdsi,sdspub,sdsval}<-st.sdss
+ , (MTSds sdsi` _)<-s
+ | sdsi == sdsi`]
+
+ mergeShares a b = a ++ b
+
+ addTask :: MTaskTask MTaskDevice -> MTaskDevice
+ addTask task device = {device & deviceTasks=[task:device.deviceTasks]}