import TTY
import qualified Data.Map as DM
import Utils.SDS
+import Utils.Devices
import GenBimap
import Devices.mTaskSerial
instance == MTaskDevice where
(==) a b = a.deviceChannels == b.deviceChannels
-channels :: MTaskDevice -> Shared Channels
-channels d = memoryShare d.deviceChannels ([], [], False)
-
makeDevice :: String MTaskResource -> Task MTaskDevice
makeDevice name res = get randomInt @ \rand->{MTaskDevice
|deviceChannels=name +++ toString rand
>>= \(msgs, st1)->set st1 bcStateStore @ toSDSRecords
>>= \sdss->set sdss sdsStore//MTaskShareaddToSDSShare
>>| makeShares sdss
- >>| sendMessage device msgs
+ >>| sendMessages msgs device
>>| makeTask wta -1
>>= withDevices device o addTask
@! ()
addTask :: MTaskTask MTaskDevice -> MTaskDevice
addTask task device = {device & deviceTasks=[task:device.deviceTasks]}
-sendMessage :: MTaskDevice [MTaskMSGSend] -> Task ()
-sendMessage dev msgs = upd (\(r,s,ss)->(r,msgs++s,ss)) (channels dev) @! ()
+sendMessages :: [MTaskMSGSend] -> (MTaskDevice -> Task Channels)
+sendMessages msgs = upd (\(r,s,ss)->(r,msgs++s,ss)) o channels
withDevices :: MTaskDevice (MTaskDevice -> MTaskDevice) -> Task ()
withDevices a trans = upd (map \b->if (b == a) (trans b) b) deviceStore @! ()
[{t & ident=i}:ts] [t:ackFirst ts]
deviceTaskDelete :: MTaskDevice MTaskTask -> Task ()
-deviceTaskDelete dev task = sendMessage dev [MTTaskDel task.ident]
+deviceTaskDelete dev task = sendMessages [MTTaskDel task.ident] dev @! ()
deviceTaskDeleteAcked :: MTaskDevice Int -> Task ()
deviceTaskDeleteAcked d i = withDevices d $ deleteTask