working again, externalized some device helper functions and added share updating
[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, BCShare
13 derive conses MTaskResource, TCPSettings
14 derive consName MTaskResource, TCPSettings
15
16 :: Channels :== ([MTaskMSGRecv], [MTaskMSGSend], Bool)
17
18 :: MTaskResource
19 = TCPDevice TCPSettings
20 | SerialDevice TTYSettings
21
22 :: MTaskDevice = {
23 deviceTask :: Maybe TaskId
24 ,deviceChannels :: String
25 ,deviceName :: String
26 ,deviceTasks :: [MTaskTask]
27 ,deviceData :: MTaskResource
28 }
29
30 instance == MTaskDevice
31
32 class MTaskDuplex a where
33 synFun :: a (Shared Channels) -> Task ()
34
35 manageDevices :: (MTaskDevice (Shared Channels) -> Task ()) [MTaskDevice] -> Task ()
36 sendToDevice :: String (Main (ByteCode () Stmt)) (MTaskDevice, MTaskInterval) -> Task ()
37 sendMessages :: [MTaskMSGSend] -> (MTaskDevice -> Task Channels)
38
39 deviceTaskDelete :: MTaskDevice MTaskTask -> Task ()
40 deviceTaskAcked :: MTaskDevice Int -> Task ()
41 deviceTaskDeleteAcked :: MTaskDevice Int -> Task ()