updates
[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
14 derive conses MTaskResource, TCPSettings
15 derive consName MTaskResource, TCPSettings
16
17
18 channels :: MTaskDevice -> Shared Channels
19 :: Channels :== ([MTaskMSGRecv], [MTaskMSGSend], Bool)
20
21 :: MTaskResource
22 = TCPDevice TCPSettings
23 | SerialDevice TTYSettings
24
25 :: MTaskDevice = {
26 deviceTask :: Maybe TaskId
27 ,deviceError :: Maybe String
28 ,deviceChannels :: String
29 ,deviceName :: String
30 ,deviceTasks :: [MTaskTask]
31 ,deviceData :: MTaskResource
32 }
33
34 instance == MTaskDevice
35
36 class MTaskDuplex a where
37 synFun :: a (Shared Channels) -> Task ()
38
39 startupDevices :: Task [MTaskDevice]
40 connectDevice :: (MTaskDevice (Shared Channels) -> Task ()) MTaskDevice -> Task ()
41 manageDevices :: (MTaskDevice (Shared Channels) -> Task ()) [MTaskDevice] -> Task ()
42 sendToDevice :: String (Main (ByteCode () Stmt)) (MTaskDevice, MTaskInterval) -> Task ()
43
44 deviceTaskDelete :: MTaskDevice MTaskTask -> Task ()
45 deviceTaskAcked :: MTaskDevice Int -> Task ()
46 deviceTaskDeleteAcked :: MTaskDevice Int -> Task ()