"""
This script demonstrates usage of trace with isystem.connect API.
"""
from __future__ import print_function
import os
import time
import isystem.connect as ic
def initTarget(cmgr):
debugCtrl = ic.CDebugFacade(cmgr)
debugCtrl.download()
debugCtrl.runUntilFunction("main")
debugCtrl.waitUntilStopped()
return debugCtrl
def recordTrace(debugCtrl, traceDoc):
traceDoc.removeTrigger('testTraceTrigger')
triggerIdx = traceDoc.createTrigger('testTraceTrigger')
traceDoc.select(triggerIdx)
traceCfgWizard = ic.CTraceConfigWizard.createCodeExecTrigger('test_fibonacci')
traceDoc.applyTriggerWizard(traceCfgWizard, triggerIdx)
traceDoc.setTriggerOption(triggerIdx, 'HW.Recorder.BufferSize', '1 MB')
print('Target is running, trace_doc is recording data...')
traceDoc.start()
debugCtrl.run()
time.sleep(1)
debugCtrl.stop()
print('Target stopped, loading trace data...')
traceDoc.waitUntilLoaded()
def recordTraceAdvanced(debugCtrl, traceDoc):
traceDoc.removeTrigger('testTraceTrigger')
triggerIdx = traceDoc.createTrigger('testTraceTrigger')
traceDoc.select(triggerIdx)
traceCfgWizard = ic.CTraceConfigWizard.createImmediateTrigger()
traceCfgWizard.setRecordingContent(ic.CTraceConfigWizard.ERecordProgramFlow,
'test_fibonacci',
'test_fibonacci',
ic.CTraceConfigWizard.EReadWrite)
traceDoc.applyTriggerWizard(traceCfgWizard, triggerIdx)
traceDoc.setTriggerOption(triggerIdx, 'HW.Recorder.BufferSize', '1 MB')
print('Target is running, trace_doc is recording data...')
traceDoc.start()
debugCtrl.run()
time.sleep(3)
debugCtrl.stop()
print('Target stopped, loading trace data...')
traceDoc.waitUntilLoaded()
def exportTrace(traceDoc):
exportCfg = ic.CTraceExportConfig()
print(exportCfg.toString())
print('-------------------------\nWriting export file in XML format with default settings:\n')
formatter = ic.CTraceXMLExportFormat()
exportCfg.setFileName('traceSample-default.xml') \
.setFormatter(formatter)
traceDoc.exportData(exportCfg)
print('-------------------------\nWriting export file in binary format with full contents:\n')
formatter = ic.CTraceBinExportFormat()
formatter.setTraceItemFlags(0)
formatter.setHeader(True) \
.setHeaderVersion(ic.CTraceBinExportFormat.EHeaderVer2) \
.addTraceItem(ic.CTraceBinExportFormat.EPresenceFlagsItem) \
.addTraceItem(ic.CTraceBinExportFormat.EDataItem) \
.addTraceItem(ic.CTraceBinExportFormat.EAddressItem) \
.addTraceItem(ic.CTraceBinExportFormat.EMemAreaItem) \
.addTraceItem(ic.CTraceBinExportFormat.ETimeStampItem) \
.addTraceItem(ic.CTraceBinExportFormat.ETraceSourceIdItem) \
.addTraceItem(ic.CTraceBinExportFormat.EBusStatusItem) \
.addTraceItem(ic.CTraceBinExportFormat.ESampleIndexItem) \
.addTraceItem(ic.CTraceBinExportFormat.EOCDItem) \
.addTraceItem(ic.CTraceBinExportFormat.EAUXItem)
exportCfg.setFileName('traceSample-full.bin') \
.setFormatter(formatter)
startTime = time.time()
traceDoc.exportData(exportCfg)
print('t[s] = ', time.time() - startTime, ' ', exportCfg.getFileName())
print('-------------------------\nWriting export file in XML format with '
+ 'customized settings (same info as bin export):\n')
formatter = ic.CTraceXMLExportFormat()
formatter.setIndex(True) \
.setTime(True) \
.setTraceSourceId(True) \
.setAddress(True) \
.setMemArea(True) \
.setData(True) \
.setDasm(True) \
.setDasmData(False) \
.setDasmAddress(False) \
.setFunction(False) \
.setLabel(False) \
.setActivity(False) \
.setBusStatus(False)
exportCfg.setFileName('traceSample-customized.xml') \
.setFormatter(formatter)
startTime = time.time()
traceDoc.exportData(exportCfg)
print('t[s] = ', time.time() - startTime, ' ', exportCfg.getFileName())
def parse(trace_doc: ic.CTraceController):
binTraceData = ic.CTraceData.createInstance(trace_doc,
'traceSample-full.bin',
-12000, -11000,
True)
warnings = binTraceData.getParserWarnings()
if warnings:
print('WARNING(S) (bin): ', warnings)
binExportFromFile = binTraceData.getBinaryExportConfig()
print('header version: ', binExportFromFile.getHeaderVersionAsStr())
print('is data: ', binExportFromFile.isTraceItem(ic.CTraceBinExportFormat.EDataItem))
print('is address: ', binExportFromFile.isTraceItem(ic.CTraceBinExportFormat.EAddressItem))
print('is mem area: ', binExportFromFile.isTraceItem(ic.CTraceBinExportFormat.EMemAreaItem))
print('is time: ', binExportFromFile.isTraceItem(ic.CTraceBinExportFormat.ETimeStampItem))
print('is source ID: ', binExportFromFile.isTraceItem(ic.CTraceBinExportFormat.ETraceSourceIdItem))
print('is bus status: ', binExportFromFile.isTraceItem(ic.CTraceBinExportFormat.EBusStatusItem))
print('is index: ', binExportFromFile.isTraceItem(ic.CTraceBinExportFormat.ESampleIndexItem))
print('is OCD: ', binExportFromFile.isTraceItem(ic.CTraceBinExportFormat.EOCDItem))
print('is AUX: ', binExportFromFile.isTraceItem(ic.CTraceBinExportFormat.EAUXItem))
binIter = binTraceData.getTimelineIterator()
print("Binary export:")
while binIter.hasNext():
binEvent = binIter.next()
print(binEvent.toString(), '\n')
binTraceData.closeParser()
print("\n\n\n---------------------------------------------------\n\nXML export:\n")
xmlTraceData = ic.CTraceData.createInstance(trace_doc,
'traceSample-default.xml',
11000, 12000,
False)
warnings = xmlTraceData.getParserWarnings()
if warnings:
print('WARNING(S) (bin): ', warnings)
xmlIter = xmlTraceData.getTimelineIterator()
while xmlIter.hasNext():
xmlEvent = xmlIter.next()
print(xmlEvent.toString(), '\n')
xmlTraceData.closeParser()
def printStatus(doc):
status = doc.getStatus()
print('Status after tracing:')
print('Was there an error?', status.isErrorInBuffer())
print('Was there a buffer overrun?', status.isBufferOverrun())
print('Was there a recording error?', status.isRecordingError())
print('Was there an error?', status.isError() )
print('Full status:')
print(status.toString())
if __name__ == '__main__':
winidea_id = ''
print('isystem.connect version: ' + ic.getModuleVersion())
cmgr = ic.ConnectionMgr()
cmgr.connect(ic.CConnectionConfig().instanceId(winidea_id))
debugCtrl = initTarget(cmgr)
traceDoc = ic.CTraceController(cmgr, 'sample_trace.trd', 'w')
recordTrace(debugCtrl, traceDoc)
exportTrace(traceDoc)
parse(traceDoc)
printStatus(traceDoc)
print("Recording trace with custom range setting...")
recordTraceAdvanced(debugCtrl, traceDoc)
exportCfg = ic.CTraceExportConfig()
exportCfg.setFileName('traceAdvanced.xml')
traceDoc.exportData(exportCfg)