6a717f068eb0f8aaacebcf9e73e230e1e969da2f
[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 Tasks.mTaskTask
8 import mTaskInterpret
9 import Generics.gCons
10 import iTasksTTY
11
12 derive class iTask MTaskDevice, MTaskResource, MTaskMSGRecv, MTaskMSGSend
13 derive conses MTaskResource, TCPSettings
14 derive consName MTaskResource, TCPSettings
15
16 channels :: MTaskDevice -> Shared Channels
17
18 :: Channels :== ([MTaskMSGRecv], [MTaskMSGSend], Bool)
19
20 :: MTaskResource
21 = TCPDevice TCPSettings
22 | SerialDevice TTYSettings
23
24 :: MTaskDevice = {
25 deviceTask :: Maybe TaskId
26 ,deviceChannels :: String
27 ,deviceName :: String
28 ,deviceTasks :: [MTaskTask]
29 ,deviceData :: MTaskResource
30 }
31
32 instance == MTaskDevice
33
34 class MTaskDuplex a where
35 synFun :: a (Shared Channels) -> Task ()
36
37 manageDevices :: (MTaskDevice (Shared Channels) -> Task ()) [MTaskDevice] -> Task ()
38 sendToDevice :: String (Main (ByteCode () Stmt)) (MTaskDevice, MTaskInterval) -> Task ()
39
40 deviceTaskDelete :: MTaskDevice MTaskTask -> Task ()
41 deviceTaskAcked :: MTaskDevice Int -> Task ()
42 deviceTaskDeleteAcked :: MTaskDevice Int -> Task ()