added debug statements, dynamic allocation is working for tasks
[mTask.git] / mTaskInterpret.dcl
index a6b7b61..7ddff19 100644 (file)
@@ -15,21 +15,31 @@ from Generics.gCons import class gCons, generic conses, generic consName, generi
        | 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
+       | 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
+               ,maxTask :: Int //Should be number of bytes reserved in total for shares, tasks and functions
+               ,maxSDS  :: Int
+       }
+
 :: BCValue = E.e: BCValue e & mTaskType e
 
 instance toString MTaskInterval
 :: BCValue = E.e: BCValue e & mTaskType e
 
 instance toString MTaskInterval
@@ -84,14 +94,14 @@ decode :: String -> MTaskMSGRecv
        | BCDigitalWrite Pin
        | BCTest AnalogPin
 
        | BCDigitalWrite Pin
        | BCTest AnalogPin
 
-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
@@ -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
 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 arith ByteCode
 instance boolExpr ByteCode
 instance analogIO ByteCode
@@ -141,8 +150,7 @@ instance assign ByteCode
 instance seq ByteCode
 instance serial 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)