17acd10809c1f611d48ae49bfa71ea18849d479c
[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, MTaskDeviceSpec, 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 , deviceTasks :: [MTaskTask]
29 , deviceData :: MTaskResource
30 , deviceSpec :: Maybe MTaskDeviceSpec
31 }
32
33 instance == MTaskDevice
34
35 class MTaskDuplex a where
36 synFun :: a (Shared Channels) -> Task ()
37
38 startupDevices :: Task [MTaskDevice]
39 connectDevice :: (MTaskDevice (Shared Channels) -> Task ()) MTaskDevice -> Task ()
40 manageDevices :: (MTaskDevice (Shared Channels) -> Task ()) [MTaskDevice] -> Task ()
41 sendToDevice :: String (Main (ByteCode () Stmt)) (MTaskDevice, MTaskInterval) -> Task ()
42 sendMessages :: [MTaskMSGSend] -> (MTaskDevice -> Task Channels)
43
44 deviceTaskDelete :: MTaskDevice MTaskTask -> Task ()
45 deviceTaskAcked :: MTaskDevice Int -> Task ()
46 deviceTaskDeleteAcked :: MTaskDevice Int -> Task ()
47 deviceAddSpec :: MTaskDevice MTaskDeviceSpec -> Task ()