, deviceError :: Maybe String
, deviceChannels :: String
, deviceName :: String
+ , deviceState :: BCState
, deviceTasks :: [MTaskTask]
, deviceData :: MTaskResource
, deviceSpec :: Maybe MTaskDeviceSpec
,deviceTasks=[]
,deviceTask=Nothing
,deviceError=Nothing
+ ,deviceState=zero
,deviceData=res
,deviceSpec=Nothing
,deviceShares=[]}
import Devices.mTaskDevice
derive class iTask MTaskShare
+derive gPrint BCState
:: MTaskShare =
{withTask :: [String]
}
import GenPrint, StdMisc, StdDebug, TTY
+
+gPrint{|BCState|} x st = gPrint{|*|} "BCState..." st
+
derive gPrint MTaskDevice, MTaskShare, Maybe, MTaskResource, MTaskTask, TaskId, TTYSettings, TCPSettings, DateTime
derive gPrint Parity, BaudRate, ByteSize
}
makeTask :: String Int -> Task MTaskTask
-sendTaskToDevice :: String (Main (ByteCode a Stmt)) (MTaskDevice, MTaskInterval) -> Task ()
+sendTaskToDevice :: String (Main (ByteCode a Stmt)) (MTaskDevice, MTaskInterval) -> Task [MTaskDevice]
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)
+sendTaskToDevice :: String (Main (ByteCode a Stmt)) (MTaskDevice, MTaskInterval) -> Task [MTaskDevice]
+sendTaskToDevice wta mTask (device, timeout)
+# (msgs, newState) = toMessages timeout mTask device.deviceState
+# shares = [makeShare wta sdsi sdsval\\{sdsi,sdsval}<-newState.sdss, (MTSds sdsi` _)<-msgs | sdsi == sdsi`]
+= updateShares device ((++) shares)
>>| sendMessages msgs device
>>| makeTask wta -1
- >>= withDevices device o addTask
- @! ()
+ >>= withDevices device o addTaskUpState newState
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]}
+ addTaskUpState :: BCState MTaskTask MTaskDevice -> MTaskDevice
+ addTaskUpState st task device = { MTaskDevice | device &
+ deviceState=st, deviceTasks=[task:device.deviceTasks]}
from Data.Func import $
import Data.Tuple
+import StdDebug
+
memoryShare :: String a -> Shared a | iTask a
memoryShare s d = sdsFocus s $ memoryStore s $ Just d
| ident == -1 = (merr $> const True, iw)
= case find ((==)dev) w of
Nothing = (Error $ exception "Device doesn't exist anymore", iw)
- Just {deviceShares} = case find (\{identifier}->identifier == ident) deviceShares of
+ Just {deviceShares} = case find (\d->d.identifier == ident) deviceShares of
Nothing = (Error $ exception $ "deviceStore: Share doesn't exist: " +++ toString ident, iw)
- Just s = case sendMessagesIW [MTUpd ident s.MTaskShare.value] dev iw of
+ Just s
+ | not $ trace_tn "Really sending a message from a share update" = undef
+ = case sendMessagesIW [MTUpd ident s.MTaskShare.value] dev iw of
(Error e, iw) = (Error e, iw)
(Ok _, iw) = (Ok $ lens mi, iw)