Commit 6d9fac3d authored by Mart Lubbers's avatar Mart Lubbers
Browse files

Merge branch 'master' of gitlab.science.ru.nl:mlubbers/mTask

parents d3e42838 2847f84d
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ MT_REMOVE :== UInt8 ((2^8) - 1)
:: BCInterpret a :== StateT BCState (WriterT [BCInstr] Identity) a

tell` :: [BCInstr] -> BCInterpret a
setRate :: Bool (TimingInterval (StateT BCState (WriterT [BCInstr] Identity))) -> BCInterpret a

:: BCState =
	{ bcs_mainexpr     :: [BCInstr]
+16 −3
Original line number Diff line number Diff line
@@ -74,9 +74,18 @@ freshlabel = getState >>= \s=:{bcs_freshlabel=(JL i)}->
freshsds :: BCInterpret Int
freshsds = gets \s->length s.bcs_sdses

setRate :: Bool (TimingInterval (StateT BCState (WriterT [BCInstr] Identity))) -> BCInterpret a
setRate rl Default        = pure undef
setRate rl (BeforeMs u)   = tell` [BCPush $ fromString $ toByteCode{|*|} 0] >>| u >>| tell` [BCTuneRateMs]
setRate rl (BeforeSec u)  = tell` [BCPush $ fromString $ toByteCode{|*|} 0] >>| u >>| tell` [BCTuneRateSec]
setRate rl (ExactMs t)    = tell` if rl [BCMkTask BCRateLimit] [] >>| t >>| t >>| tell` [BCTuneRateMs]
setRate rl (ExactSec t)   = tell` if rl [BCMkTask BCRateLimit] [] >>| t >>| t >>| tell` [BCTuneRateSec]
setRate rl (RangeMs u l)  = tell` if rl [BCMkTask BCRateLimit] [] >>| u >>| l >>| tell` [BCTuneRateMs]
setRate rl (RangeSec u l) = tell` if rl [BCMkTask BCRateLimit] [] >>| u >>| l >>| tell` [BCTuneRateSec]

instance aio (StateT BCState (WriterT [BCInstr] Identity))
where
	readA p = p >>| tell` [BCMkTask BCReadA]
	readA` i p = p >>| tell` [BCMkTask BCReadA] >>| setRate True i
	writeA p v = p >>| v >>| tell` [BCMkTask BCWriteA]

instance expr (StateT BCState (WriterT [BCInstr] Identity))
@@ -113,6 +122,7 @@ where

instance dio v (StateT BCState (WriterT [BCInstr] Identity))
where
	readD` i p = p >>| tell` [BCMkTask BCReadD] >>| setRate True i
	readD p = p >>| tell` [BCMkTask BCReadD]
	writeD p v = p >>| v >>| tell` [BCMkTask BCWriteD]

@@ -126,7 +136,7 @@ where

instance rpeat (StateT BCState (WriterT [BCInstr] Identity))
where
	rpeat m = m >>| tell` [BCMkTask BCRepeat]
	rpeatEvery i m = m >>| tell` [BCMkTask BCRepeat] >>| setRate False i

instance rtrn (StateT BCState (WriterT [BCInstr] Identity))
where
@@ -141,7 +151,10 @@ where
				    (t In e) = def sds
				in e.main
		}
	getSds f = f >>= \(Sds i)-> tell` [BCMkTask (BCSdsGet (fromInt i))]
	getSds` ti f 
		= f
		>>= \(Sds i)-> tell` [BCMkTask (BCSdsGet (fromInt i))]
		>>| setRate True ti
	setSds f v = f >>= \(Sds i)->v >>| tell`
		(  map BCMkTask (bcstable $ toByteWidth $ unpack v)
		++ [BCMkTask (BCSdsSet (fromInt i))])
+12 −7
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ import Data.List => qualified group
import Data.Map => qualified union, difference, find, updateAt, get
import Data.Map.GenJSON
import Data.Tuple
import Data.UInt
import iTasks

import mTask.Interpret.ByteCodeEncoding
@@ -170,6 +171,10 @@ liftmTaskWithOptions opts task (MTDevice dev sdsupdates channels)
				, peripherals    = hardware
				, shares         = {i\\i<-shares}
				, instructions   = BCIs {i\\i<-instructions}
				, status         = MTUnevaluated
				, execution_min  = UInt32 0
				, execution_max  = UInt32 0
				, lastrun        = UInt32 0
				}) channels]
		//Wait for task ack
		>>- \_->watch taskView
+4 −0
Original line number Diff line number Diff line
@@ -59,6 +59,8 @@ instance toString JumpLabel
	| BCStepArg UInt16 UInt8
	//Task node creation
	| BCMkTask BCTaskType
	//Task node refinement
	| BCTuneRateMs | BCTuneRateSec
	//Task value ops
	| BCIsStable | BCIsUnstable | BCIsNoValue | BCIsValue
	//Stack ops
@@ -101,6 +103,8 @@ instance toString JumpLabel
	| BCSeqStable ArgWidth | BCSeqUnstable ArgWidth
	//Sds ops
	| BCSdsGet SdsId | BCSdsSet SdsId | BCSdsUpd SdsId JumpLabel
	// Rate limiter
	| BCRateLimit
	////Peripherals
	//DHT
	| BCDHTTemp UInt8 | BCDHTHumid UInt8
+20 −11
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ from iTasks.Internal.Generic.Visualization import generic gText, :: TextFormat
from Data.GenEq import generic gEq
from Text.GenJSON import generic JSONEncode, generic JSONDecode, :: JSONNode

from Data.UInt import :: UInt8, :: UInt16
from Data.UInt import :: UInt8, :: UInt16, :: UInt32
from iTasks.WF.Definition import :: TaskValue
from mTask.Interpret.Instructions import :: BCInstr, :: BCInstrs
from mTask.Interpret.Specification import :: MTDeviceSpec
@@ -40,9 +40,18 @@ from mTask.Interpret.VoidPointer import :: VoidPointer
	, shares        :: {BCShareSpec}
	, peripherals   :: {BCPeripheral}
	, instructions  :: BCInstrs
	, status        :: MTaskEvalStatus
	, execution_min :: UInt32
	, execution_max :: UInt32
	, lastrun       :: UInt32
	}
:: MTaskValueState = MTNoValue | MTUnstable | MTStable | MTRemoved

// MTEvaluated: task tree is evaluated and the previously calculated execution interval is still correct
// MTPurged: task tree is evaluated, but the execution interval needs to be recalculated
// MTUnevaluated: task tree contains unevaluated parts, the execution interval is [0,0]
:: MTaskEvalStatus = MTEvaluated | MTPurged | MTUnevaluated

:: MTMessageFro
	//* taskid
	= MTFTaskAck UInt8
@@ -75,8 +84,8 @@ from mTask.Interpret.VoidPointer import :: VoidPointer
	| MTERTSError
	| MTEUnexpectedDisconnect

derive class iTask MTMessageFro, MTMessageTo, MTException, MTaskValueState
derive gCSerialise MTMessageFro, MTMessageTo, MTException, TaskValue, MTaskValueState
derive gCDeserialise MTMessageFro, MTMessageTo, MTException, TaskValue, MTaskValueState
derive class iTask MTMessageFro, MTMessageTo, MTException, MTaskValueState, MTaskEvalStatus
derive gCSerialise MTMessageFro, MTMessageTo, MTException, TaskValue, MTaskValueState, MTaskEvalStatus
derive gCDeserialise MTMessageFro, MTMessageTo, MTException, TaskValue, MTaskValueState, MTaskEvalStatus

instance toString MTException
Loading