update
[mTask.git] / mTaskInterpret.dcl
index d104b02..99a3533 100644 (file)
@@ -11,25 +11,35 @@ from GenPrint import generic gPrint
 from Generics.gCons import class gCons, generic conses, generic consName, generic consIndex, generic consNum
 
 :: MTaskMSGRecv
 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
        | MTTaskDelAck Int
        | MTSDSAck Int
        | MTSDSDelAck Int
-       | MTPub Int String
+       | MTPub Int BCValue
        | MTMessage String
        | MTMessage String
+       | MTDevSpec MTaskDeviceSpec
        | MTEmpty
 
 :: MTaskMSGSend
        = MTTask MTaskInterval String
        | MTTaskDel Int
        | MTEmpty
 
 :: MTaskMSGSend
        = MTTask MTaskInterval String
        | MTTaskDel Int
-       | MTSds Int String
-       | MTUpd Int String
+       | MTShutdown
+       | MTSds Int BCValue
+       | MTUpd Int BCValue
+       | MTSpec
 
 :: MTaskInterval
        = OneShot
        | OnInterval Int
        | OnInterrupt Int
 
 
 :: 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
 :: BCValue = E.e: BCValue e & mTaskType e
 
 instance toString MTaskInterval
@@ -45,9 +55,9 @@ decode :: String -> MTaskMSGRecv
 //     | BCPush String
        | BCPop
        //SDS functions
 //     | BCPush String
        | BCPop
        //SDS functions
-       | BCSdsStore Int
-       | BCSdsFetch Int
-       | BCSdsPublish Int
+       | BCSdsStore BCShare
+       | BCSdsFetch BCShare
+       | BCSdsPublish BCShare
        //Unary ops
        | BCNot
        //Binary Int ops
        //Unary ops
        | BCNot
        //Binary Int ops
@@ -58,6 +68,7 @@ decode :: String -> MTaskMSGRecv
        //Binary Bool ops
        | BCAnd
        | BCOr
        //Binary Bool ops
        | BCAnd
        | BCOr
+       //Binary ops
        | BCEq
        | BCNeq
        | BCLes
        | BCEq
        | BCNeq
        | BCLes
@@ -82,16 +93,17 @@ decode :: String -> MTaskMSGRecv
        | BCAnalogWrite Pin
        | BCDigitalRead Pin
        | BCDigitalWrite Pin
        | 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 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
 derive gEditor BCValue
 derive gText BCValue
 derive JSONEncode BCValue
@@ -103,9 +115,7 @@ derive gEq BCValue
 
 :: BCShare = {
                sdsi :: Int,
 
 :: BCShare = {
                sdsi :: Int,
-               sdspub :: Bool,
-               sdsval :: Dynamic,
-               sdsbc :: String
+               sdsval :: BCValue
        }
 
 :: BCState = {
        }
 
 :: BCState = {
@@ -120,15 +130,16 @@ class fromByteCode a :: String -> a
 class mTaskType a | toByteCode, fromByteCode, iTask, TC a
 
 instance toByteCode Int, Bool, Char, Long, String, Button, UserLED, BCValue
 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 toByteCode MTaskInterval
-instance fromByteCode MTaskInterval
+instance fromByteCode MTaskInterval, MTaskDeviceSpec
 
 
-instance toChar Pin
 instance arith ByteCode
 instance boolExpr ByteCode
 instance analogIO ByteCode
 instance digitalIO ByteCode
 instance arith ByteCode
 instance boolExpr ByteCode
 instance analogIO ByteCode
 instance digitalIO ByteCode
+instance aIO ByteCode
+instance dIO ByteCode
 instance userLed ByteCode
 instance If ByteCode Stmt Stmt Stmt
 instance If ByteCode e Stmt Stmt
 instance userLed ByteCode
 instance If ByteCode Stmt Stmt Stmt
 instance If ByteCode e Stmt Stmt
@@ -136,14 +147,14 @@ instance If ByteCode Stmt e Stmt
 instance If ByteCode x y Stmt
 instance IF ByteCode
 instance noOp ByteCode
 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
 
 
 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)
 
 toByteVal :: BC -> String
 toReadableByteCode :: (ByteCode a b) BCState -> (String, BCState)