import iTasksTTY
import TTY
import qualified Data.Map as DM
+import qualified Data.List as DL
import Utils.SDS
import Utils.Devices
startupDevices = upd (map reset) deviceStore
where reset d = {d & deviceTask=Nothing, deviceTasks=[], deviceError=Nothing}
+withDevice :: (MTaskDevice -> Task a) String -> Task a | iTask a
+withDevice f s = get deviceStore
+ >>= \ds->case 'DL'.find (\d->d.deviceName == s) ds of
+ Nothing = throw "Device not available"
+ Just d = f d
+
makeDevice :: String MTaskResource -> Task MTaskDevice
makeDevice name res = get randomInt @ \rand->{MTaskDevice
|deviceChannels=name +++ toString rand
withDevices :: MTaskDevice (MTaskDevice -> MTaskDevice) -> Task ()
withDevices a trans = upd (map \b->if (b == a) (trans b) b) deviceStore @! ()
-deviceTaskAcked :: MTaskDevice Int -> Task ()
-deviceTaskAcked dev i
- = withDevices dev (\d->{d&deviceTasks=ackFirst d.deviceTasks})
+deviceTaskAcked :: MTaskDevice Int Int -> Task ()
+deviceTaskAcked dev i mem
+ = withDevices dev (\d->{d
+ &deviceTasks=ackFirst d.deviceTasks
+ ,deviceSpec=Just {fromJust d.deviceSpec & bytesMemory=mem}})
where
ackFirst :: [MTaskTask] -> [MTaskTask]
ackFirst [] = []