import mTask
import iTasks
+import Devices.mTaskDevice
import iTasks._Framework.Serialization
-derive class iTask MTaskTask, MTaskInterval, Main, ByteCode, Stmt, Expr, BC, BCState, UserLED, RWST, Identity
+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 a Stmt)) (MTaskDevice, MTaskInterval) -> Task ()
+sendTaskToDevice wta mTask (device, timeout) =
+ get bcStateStore @ toMessages timeout mTask
+ >>= \(msgs, st1)->set st1 bcStateStore
+ >>| toSDSRecords msgs st1 device
+ >>= \sdss->updateShares device ((++) sdss)
+ >>| 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 = treturn
+ [makeShare wta sdsi sdsval
+ \\{sdsi,sdsval}<-st.sdss, (MTSds sdsi` _)<-s | sdsi == sdsi`]
+
+ addTask :: MTaskTask MTaskDevice -> MTaskDevice
+ addTask task device = {device & deviceTasks=[task:device.deviceTasks]}