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
:: MTaskMSGSend
= MTTask MTaskInterval String
| MTTaskDel Int
- | MTSds Int String
- | MTUpd Int String
+ | MTShutdown
+ | MTSds Int BCValue
+ | MTUpd Int BCValue
| MTSpec
:: MTaskInterval
| 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
// | BCPush String
| BCPop
//SDS functions
- | BCSdsStore Int
- | BCSdsFetch Int
- | BCSdsPublish Int
+ | BCSdsStore BCShare
+ | BCSdsFetch BCShare
+ | BCSdsPublish BCShare
//Unary ops
| BCNot
//Binary Int ops
//Binary Bool ops
| BCAnd
| BCOr
+ //Binary ops
| BCEq
| BCNeq
| BCLes
| BCAnalogWrite Pin
| BCDigitalRead Pin
| BCDigitalWrite Pin
- | BCTest AnalogPin
+ //Return
+ | BCReturn
derive gPrint BCValue, MTaskDeviceSpec
derive consIndex 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
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 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)