bae443ee76292034ac7c2009ccc0a1e1e76e2960
[mTask.git] / Devices / mTaskDevice.dcl
1 definition module Devices.mTaskDevice
2
3 from Data.Maybe import :: Maybe
4 import iTasks
5 import Devices.mTaskSerial
6 import Devices.mTaskTCP
7 import Utils.SDS
8 import Tasks.mTaskTask
9 import mTaskInterpret
10 import Generics.gCons
11 import iTasksTTY
12
13 derive class iTask MTaskDevice, MTaskResource, MTaskMSGRecv, MTaskMSGSend, BCShare
14 derive conses MTaskResource, TCPSettings
15 derive consName MTaskResource, TCPSettings
16
17 :: Channels :== ([MTaskMSGRecv], [MTaskMSGSend], Bool)
18
19 :: MTaskResource
20 = TCPDevice TCPSettings
21 | SerialDevice TTYSettings
22
23 :: MTaskDevice =
24 { deviceTask :: Maybe TaskId
25 , deviceError :: Maybe String
26 , deviceChannels :: String
27 , deviceName :: String
28 , deviceState :: BCState
29 , deviceTasks :: [MTaskTask]
30 , deviceData :: MTaskResource
31 , deviceSpec :: Maybe MTaskDeviceSpec
32 , deviceShares :: [MTaskShare]
33 }
34
35 instance == MTaskDevice
36
37 class MTaskDuplex a where
38 synFun :: a (Shared Channels) -> Task ()
39
40 withDevices :: MTaskDevice (MTaskDevice -> MTaskDevice) -> Task [MTaskDevice]
41 //withDevices :: MTaskDevice (MTaskDevice -> MTaskDevice) -> Task ()
42
43 startupDevices :: Task [MTaskDevice]
44 connectDevice :: (MTaskDevice (Shared Channels) -> Task ()) MTaskDevice -> Task Channels
45 manageDevices :: (MTaskDevice (Shared Channels) -> Task ()) [MTaskDevice] -> Task ()
46
47 sendMessages :: [MTaskMSGSend] MTaskDevice -> Task Channels
48 sendMessagesIW :: [MTaskMSGSend] MTaskDevice *IWorld -> *(MaybeError TaskException (), *IWorld)
49
50
51 deviceTaskDelete :: MTaskDevice MTaskTask -> Task ()
52 deviceTaskAcked :: MTaskDevice Int Int -> Task [MTaskDevice]
53 deviceTaskDeleteAcked :: MTaskDevice Int -> Task [MTaskDevice]
54 deviceAddSpec :: MTaskDevice MTaskDeviceSpec -> Task [MTaskDevice]