#!/usr/bin/env python

import pysimulavr

def main():
    elffile = "main.elf"
    vcdfile = "trace.vcd"

    dman = pysimulavr.DumpManager.Instance()
    dman.SetSingleDeviceApp()

    # get systemclock instance
    sc = pysimulavr.SystemClock.Instance()
    clkper = long(1e9/1.0e6) # period in ns, 1.0 MHz

    print("Create device")
    dev = pysimulavr.AvrFactory.instance().makeDevice("atmega644")
    dev.Load(elffile)
    dev.SetClockFreq(clkper) # clock period in ns!
    sc.Add(dev)

    print("Connect pins: PB1 --> PD2")
    n = pysimulavr.Net()
    n.Add(dev.GetPin("B1"))
    n.Add(dev.GetPin("D2"))

    print("Setup VCD Tracer")
    signals = [ "+ PORTB.B1-Out", "+ PORTD.PIN" ]
    dman.addDumpVCD(vcdfile, "\n".join(signals), "ns", False, False)

    dev.RegisterTerminationSymbol("exit")

    print("Starting simulation...")
    dman.start()
    sc.Run(int(1e8))
    dman.stopApplication()

    now = sc.GetCurrentTime()
    print("Done after {:d} ns ({:.3f} s)".format(now, now/1e9))

if __name__ == "__main__":
    main()
