refactoors
[mTask.git] / mTaskInterpret.dcl
index f0795e1..3e7513f 100644 (file)
@@ -11,7 +11,7 @@ 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
@@ -23,8 +23,10 @@ from Generics.gCons import class gCons, generic conses, generic consName, generi
 :: MTaskMSGSend
        = MTTask MTaskInterval String
        | MTTaskDel Int
-       | MTSds Int String
-       | MTUpd Int String
+       | MTShutdown
+       | MTSds Int BCValue
+       | MTUpd Int BCValue
+       | MTSpec
 
 :: MTaskInterval
        = OneShot
@@ -32,14 +34,18 @@ from Generics.gCons import class gCons, generic conses, generic consName, generi
        | OnInterrupt Int
 
 :: MTaskDeviceSpec =
-               {haveLed :: Bool
-               ,haveAio :: Bool
-               ,haveDio :: Bool
-               ,maxTask :: Int //Should be number of bytes reserved in total for shares, tasks and functions
-               ,maxSDS  :: Int
+               {haveLed     :: Bool
+               ,haveAio     :: Bool
+               ,haveDio     :: Bool
+               ,aPins       :: Int
+               ,dPins       :: Int
+               ,stackSize   :: Int
+               ,bytesMemory :: Int
        }
 
-:: BCValue = E.e: BCValue e & mTaskType e
+:: BCValue = E.e: BCValue e & mTaskType, TC e
+
+instance == BCValue
 
 instance toString MTaskInterval
 instance toString MTaskMSGRecv
@@ -54,9 +60,9 @@ decode :: String -> MTaskMSGRecv
 //     | BCPush String
        | BCPop
        //SDS functions
-       | BCSdsStore Int
-       | BCSdsFetch Int
-       | BCSdsPublish Int
+       | BCSdsStore BCShare
+       | BCSdsFetch BCShare
+       | BCSdsPublish BCShare
        //Unary ops
        | BCNot
        //Binary Int ops
@@ -67,6 +73,7 @@ decode :: String -> MTaskMSGRecv
        //Binary Bool ops
        | BCAnd
        | BCOr
+       //Binary ops
        | BCEq
        | BCNeq
        | BCLes
@@ -91,7 +98,8 @@ decode :: String -> MTaskMSGRecv
        | BCAnalogWrite Pin
        | BCDigitalRead Pin
        | BCDigitalWrite Pin
-       | BCTest AnalogPin
+       //Return
+       | BCReturn
 
 derive gPrint BCValue, MTaskDeviceSpec
 derive consIndex BCValue
@@ -110,15 +118,15 @@ derive gEq BCValue
 
 :: ByteCode a p = BC (RWS () [BC] BCState ())
 
-:: BCShare = {
-               sdsi :: Int,
-               sdspub :: Bool,
-               sdsval :: BCValue
+:: BCShare =
+       { sdsi :: Int
+       , sdsval :: BCValue
+       , sdsname :: String
        }
 
 :: BCState = {
-               freshl :: [Int],
-               freshs :: [Int],
+               freshl :: Int,
+               freshs :: Int,
                sdss :: [BCShare]
        }
 instance zero BCState
@@ -136,6 +144,8 @@ 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
@@ -143,14 +153,15 @@ 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 sdspub 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)