add return statement and todo
[mTask.git] / mTaskInterpret.dcl
index a6b7b61..8f4bd40 100644 (file)
@@ -11,25 +11,34 @@ from GenPrint import generic gPrint
 from Generics.gCons import class gCons, generic conses, generic consName, generic consIndex, generic consNum
 
 :: MTaskMSGRecv
-       = MTTaskAck Int
+       = MTTaskAck Int Int
        | MTTaskDelAck Int
        | MTSDSAck Int
        | MTSDSDelAck Int
-       | MTPub Int String
+       | MTPub Int BCValue
        | MTMessage String
+       | MTDevSpec MTaskDeviceSpec
        | MTEmpty
 
 :: MTaskMSGSend
        = MTTask MTaskInterval String
        | MTTaskDel Int
-       | MTSds Int String
-       | MTUpd Int String
+       | MTSds Int BCValue
+       | MTUpd Int BCValue
+       | MTSpec
 
 :: MTaskInterval
        = OneShot
        | OnInterval Int
        | OnInterrupt Int
 
+:: MTaskDeviceSpec =
+               {haveLed :: Bool
+               ,haveAio :: Bool
+               ,haveDio :: Bool
+               ,bytesMemory :: Int
+       }
+
 :: BCValue = E.e: BCValue e & mTaskType e
 
 instance toString MTaskInterval
@@ -82,16 +91,17 @@ decode :: String -> MTaskMSGRecv
        | BCAnalogWrite Pin
        | BCDigitalRead Pin
        | BCDigitalWrite Pin
-       | BCTest AnalogPin
+       //Return
+       | BCReturn
 
-derive gPrint BCValue
+derive gPrint BCValue, MTaskDeviceSpec
 derive consIndex BCValue
 derive consName BCValue
 derive conses BCValue
 derive consNum BCValue
 
 derive class gCons Long, UserLED, Button, AnalogPin, DigitalPin, PinMode, Pin
-derive class iTask UserLED, Long, Pin, Button, AnalogPin, DigitalPin, PinMode
+derive class iTask UserLED, Long, Pin, Button, AnalogPin, DigitalPin, PinMode, MTaskDeviceSpec
 derive gEditor BCValue
 derive gText BCValue
 derive JSONEncode BCValue
@@ -119,11 +129,10 @@ class fromByteCode a :: String -> a
 class mTaskType a | toByteCode, fromByteCode, iTask, TC a
 
 instance toByteCode Int, Bool, Char, Long, String, Button, UserLED, BCValue
-instance fromByteCode Int, Bool, Char, Long, String, Button, UserLED
+instance fromByteCode Int, Bool, Char, Long, String, Button, UserLED, BCValue
 instance toByteCode MTaskInterval
-instance fromByteCode MTaskInterval
+instance fromByteCode MTaskInterval, MTaskDeviceSpec
 
-instance toChar Pin
 instance arith ByteCode
 instance boolExpr ByteCode
 instance analogIO ByteCode
@@ -135,14 +144,14 @@ instance If ByteCode Stmt e Stmt
 instance If ByteCode x y Stmt
 instance IF ByteCode
 instance noOp ByteCode
+instance retrn ByteCode
 
 instance sds ByteCode
 instance assign ByteCode
 instance seq ByteCode
 instance serial ByteCode
 
-toMessages :: MTaskInterval (String, BCState) -> ([MTaskMSGSend], BCState)
-toSDSUpdate :: Int Int -> [MTaskMSGSend]
+toMessages :: MTaskInterval (Main (ByteCode a b)) BCState -> ([MTaskMSGSend], BCState)
 
 toByteVal :: BC -> String
 toReadableByteCode :: (ByteCode a b) BCState -> (String, BCState)