Change timeout to ADT and start supporting interrupts
[mTask.git] / mTaskInterpret.dcl
index 0cf8ef3..2701fcf 100644 (file)
@@ -6,16 +6,26 @@ from Data.Monoid import class Semigroup, class Monoid
 import mTask
 
 :: MTaskMSGRecv
 import mTask
 
 :: MTaskMSGRecv
-       = MTPub Int String
+       = MTTaskAck Int
+       | MTTaskDelAck Int
+       | MTSDSAck Int
+       | MTSDSDelAck Int
+       | MTPub Int String
        | MTMessage String
        | MTMessage String
-       | MTTaskAdded Int
        | MTEmpty
 
 :: MTaskMSGSend
        | MTEmpty
 
 :: MTaskMSGSend
-       = MTSds Int String
-       | MTTask Int String
+       = MTTask MTaskInterval String
+       | MTTaskDel Int
+       | MTSds Int String
        | MTUpd Int String
 
        | MTUpd Int String
 
+:: MTaskInterval
+       = OneShot
+       | OnInterval Int
+       | OnInterrupt Int
+
+instance toString MTaskInterval
 instance toString MTaskMSGRecv
 instance toString MTaskMSGSend
 encode :: MTaskMSGSend -> String
 instance toString MTaskMSGRecv
 instance toString MTaskMSGSend
 encode :: MTaskMSGSend -> String
@@ -50,6 +60,9 @@ decode :: String -> MTaskMSGRecv
        | BCJmp Int
        | BCJmpT Int
        | BCJmpF Int
        | BCJmp Int
        | BCJmpT Int
        | BCJmpF Int
+       //UserLED
+       | BCLedOn [Char]
+       | BCLedOff [Char]
        //Serial
        | BCSerialAvail
        | BCSerialPrint
        //Serial
        | BCSerialAvail
        | BCSerialPrint
@@ -81,12 +94,15 @@ instance toByteCode Char
 instance toByteCode String
 instance toByteCode Long
 instance toByteCode Button
 instance toByteCode String
 instance toByteCode Long
 instance toByteCode Button
+instance toByteCode UserLED
+//instance toByteCode MTaskInterval
 
 instance toChar Pin
 instance arith ByteCode
 instance boolExpr ByteCode
 instance analogIO ByteCode
 instance digitalIO ByteCode
 
 instance toChar Pin
 instance arith ByteCode
 instance boolExpr ByteCode
 instance analogIO ByteCode
 instance digitalIO ByteCode
+instance userLed ByteCode
 //instance If ByteCode Stmt Stmt Stmt
 //instance If ByteCode e Stmt Stmt
 //instance If ByteCode Stmt e Stmt
 //instance If ByteCode Stmt Stmt Stmt
 //instance If ByteCode e Stmt Stmt
 //instance If ByteCode Stmt e Stmt
@@ -99,11 +115,9 @@ instance assign ByteCode
 instance seq ByteCode
 instance serial ByteCode
 
 instance seq ByteCode
 instance serial ByteCode
 
-//pub :: (ByteCode a b) -> ByteCode a b
-
-toMessages :: Int (String, BCState) -> ([MTaskMSGSend], BCState)
+toMessages :: MTaskInterval (String, BCState) -> ([MTaskMSGSend], BCState)
 toSDSUpdate :: Int Int -> [MTaskMSGSend]
 
 toByteVal :: BC -> [Char]
 toReadableByteCode :: (ByteCode a b) -> (String, BCState)
 toSDSUpdate :: Int Int -> [MTaskMSGSend]
 
 toByteVal :: BC -> [Char]
 toReadableByteCode :: (ByteCode a b) -> (String, BCState)
-toRealByteCode :: (ByteCode a b) -> (String, BCState)
+toRealByteCode :: (ByteCode a b) BCState -> (String, BCState)