definition module Devices.mTaskDevice from Data.Maybe import :: Maybe 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, BCShare derive conses MTaskResource, TCPSettings derive consName MTaskResource, TCPSettings :: Channels :== ([MTaskMSGRecv], [MTaskMSGSend], Bool) :: MTaskResource = TCPDevice TCPSettings | SerialDevice TTYSettings :: MTaskDevice = { deviceTask :: Maybe TaskId , deviceError :: Maybe String , deviceChannels :: String , deviceName :: String , deviceState :: BCState , deviceTasks :: [MTaskTask] , deviceData :: MTaskResource , deviceSpec :: Maybe MTaskDeviceSpec , deviceShares :: [MTaskShare] } instance == MTaskDevice class MTaskDuplex a where synFun :: a (Shared Channels) -> Task () startupDevices :: Task [MTaskDevice] connectDevice :: (MTaskDevice (Shared Channels) -> Task ()) MTaskDevice -> Task Channels manageDevices :: (MTaskDevice (Shared Channels) -> Task ()) -> Task () sendMessages :: [MTaskMSGSend] MTaskDevice -> Task Channels sendMessagesIW :: [MTaskMSGSend] MTaskDevice *IWorld -> *(MaybeError TaskException (), *IWorld) deviceTaskDelete :: MTaskDevice MTaskTask -> Task () deviceTaskAcked :: MTaskDevice Int Int -> Task MTaskDevice deviceTaskDeleteAcked :: MTaskDevice Int -> Task MTaskDevice deviceAddSpec :: MTaskDevice MTaskDeviceSpec -> Task MTaskDevice deviceShare :: MTaskDevice -> Shared MTaskDevice