Ex11_Alarm1P

em.examples.basic/Ex11_Alarm1P.em
import em from '@$$emscript'
export const $U = em.$declare('MODULE')

import * as AlarmMgr from '@em.utils/AlarmMgr.em'
import * as BoardC from '@$distro/BoardC.em'
import * as FiberMgr from '@em.utils/FiberMgr.em'
import * as TimeTypes from '@em.utils/TimeTypes.em'

export const AppLed = $delegate(BoardC.AppLed)

let alarm = $config<AlarmMgr.Obj>()
let blinkF = $config<FiberMgr.Obj>()

export namespace em$meta {
    export function em$construct() {
        blinkF.$$ = FiberMgr.em$meta.create($cb(blinkFB))
        alarm.$$ = AlarmMgr.em$meta.create(blinkF.$$)
    }
}

var counter = <u32>0

export function em$run() {
    blinkF.$$.$$.post()
    FiberMgr.run()
}

function blinkFB(a: arg_t) {
    em.$['%%c']
    AppLed.$$.wink(100)  // 100 ms
    counter += 1
    let msecs = (counter & 0x1) != 0 ? 2_000 : 750
    alarm.$$.$$.wakeup(TimeTypes.Secs24p8_initMsecs(msecs))
}