import iTasks
import Devices.mTaskSerial
import Devices.mTaskTCP
+import Utils.SDS
+import Tasks.mTaskTask
import mTaskInterpret
import Generics.gCons
import iTasksTTY
-derive class iTask MTaskDevice, MTaskResource, MTaskMSGRecv, MTaskMSGSend
+derive class iTask MTaskDevice, MTaskResource, MTaskMSGRecv, MTaskMSGSend, BCShare
derive conses MTaskResource, TCPSettings
derive consName MTaskResource, TCPSettings
-channels :: MTaskDevice -> Shared Channels
-
:: Channels :== ([MTaskMSGRecv], [MTaskMSGSend], Bool)
:: MTaskResource
= TCPDevice TCPSettings
| SerialDevice TTYSettings
-:: MTaskDevice = {
- deviceTask :: Maybe TaskId
- ,deviceChannels :: String
- ,deviceName :: String
- ,deviceTasks :: [(String, Int)]
- ,deviceData :: MTaskResource
+:: MTaskDevice =
+ { deviceTask :: Maybe TaskId
+ , deviceError :: Maybe String
+ , deviceChannels :: String
+ , deviceName :: String
+ , deviceTasks :: [MTaskTask]
+ , deviceData :: MTaskResource
+ , deviceSpec :: Maybe MTaskDeviceSpec
+ , deviceShares :: [MTaskShare]
}
+instance == MTaskDevice
+
class MTaskDuplex a where
synFun :: a (Shared Channels) -> Task ()
-//makeDevice :: MTaskResource String -> Task MTaskDevice
+withDevice :: (MTaskDevice -> Task a) String -> Task a | iTask a
+
+startupDevices :: Task [MTaskDevice]
+connectDevice :: (MTaskDevice (Shared Channels) -> Task ()) MTaskDevice -> Task ()
+manageDevices :: (MTaskDevice (Shared Channels) -> Task ()) [MTaskDevice] -> Task ()
+
+sendMessages :: [MTaskMSGSend] MTaskDevice -> Task Channels
+sendMessagesIW :: [MTaskMSGSend] MTaskDevice *IWorld -> *(MaybeError TaskException (), *IWorld)
-addDevice :: (Shared [MTaskDevice]) -> Task String
-//addDevice :: (Shared [MTaskDevice]) -> Task MTaskResource
-//addDevice :: (Shared [MTaskDevice]) -> Task ()
+withDevices :: MTaskDevice (MTaskDevice -> MTaskDevice) -> Task ()
-viewDevices :: [MTaskDevice] -> Task ()
+deviceTaskDelete :: MTaskDevice MTaskTask -> Task ()
+deviceTaskAcked :: MTaskDevice Int Int -> Task ()
+deviceTaskDeleteAcked :: MTaskDevice Int -> Task ()
+deviceAddSpec :: MTaskDevice MTaskDeviceSpec -> Task ()