+
+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
+ >>= \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 -> Task [MTaskShare]
+ toSDSRecords s st = sequence ""
+ [makeShare wta 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]}