1 implementation module Devices.mTaskDevice
8 import qualified Data.Map as DM
12 import Devices.mTaskSerial
13 import Devices.mTaskTCP
14 import iTasks._Framework.Store
16 from Data.Func import $
18 derive class iTask MTaskDevice, MTaskResource, MTaskMSGRecv, MTaskMSGSend
19 derive conses MTaskResource, TTYSettings, BaudRate, Parity, ByteSize, TCPSettings
20 derive consName MTaskResource, TTYSettings, BaudRate, Parity, ByteSize, TCPSettings
22 channels :: MTaskDevice -> Shared Channels
23 channels d = memoryShare d.deviceChannels ([], [], False)
25 makeDevice :: String MTaskResource -> Task MTaskDevice
26 makeDevice name res = get randomInt @ \rand->{MTaskDevice
27 |deviceChannels=name +++ toString rand
33 getSynFun :: MTaskResource -> ((Shared Channels) -> Task ())
34 getSynFun (TCPDevice t) = synFun t
35 getSynFun (SerialDevice t) = synFun t
37 addDevice :: (Shared [MTaskDevice]) -> Task String
38 addDevice devices = enterChoice "Device type" [] (map consName{|*|} deviceTypes)
39 >&^ \sh->whileUnchanged sh $ \mty->case mty of
40 Nothing = viewInformation "No type selected yet" [] ""
41 Just ty = enterInformation "Name" [] -&&- deviceSettings ty
42 >>= \(name, settings)->makeDevice name settings
43 >>= \dev->appendTopLevelTask 'DM'.newMap True (let ch=channels dev in getSynFun dev.deviceData ch)
44 >>= \tid->upd (\l->[{dev & deviceTask=Just tid}:l]) devices
47 deviceSettings "SerialDevice" = getmTaskSerialDevice
48 deviceSettings "TCPDevice" = getmTaskTCPDevice
50 deviceTypes :: [MTaskResource]
51 deviceTypes = conses{|*|}