2012-09-18-HAP T32API for .NET - readme.txt

Copyright (C) Lauterbach GmbH

TRACE32 Remote Application Programming Interface for .NET


Currently there is no explicit documentation for the .NET API.
Please refer to the VB and C# source code and included comments.

The usage of the .NET Remote API is very similar to the C API,
please refer to the C API manual pdf/api_remote.pdf.

-----

.NET API contents:
Directory "dotnet"
readme.txt          This file
release.txt         Release history
dotnet.sln          VS2010 Solution File

Directory "dotnet\t32apinet"
Source files for the .NET version of the TRACE32 API DLL "t32apinet.dll"
t32apinet.vcxproj   VS2010 C/C++ project file
t32.h               TRACE32 API Header File (unmanaged C/C++)
hlinknet.c          link layer (unmanaged C/C++)
hremote.c           apdu layer (unmanaged C/C++)
resource.h          empty file (auto-generated)
t32apidll.c         DLL main module (unmanaged C/C++)
t32apinet.cpp       .NET wrapper for hremote.c
t32apinet.h         namespace include file
t32apinet.rc        resource file
t32icon.ico         Lauterbach TRACE32 icon file
AssemblyInfo.cpp    assembly information (auto-generated)

Directory "dotnet\vbtest"
vbtest.vbproj       VS2010 VB.NET project file
t32apitest.vb       VisualBasic.NET test for t32apinet.dll

Directory "dotnet\cstest"
cstest.csproj       VS2010 C# project file
t32apitest.cs       C# test for t32apinet.dll

Directory "dotnet\t32m51demo"
t32start-sim.cmd    Simulator start batch file      <- PLEASE ADAPT YOUR PATH NAMES
config-sim.t32      Simulator configuration file    <- PLEASE ADAPT YOUR PATH NAMES
keil.bat            Lauterbach Sieve demo compile commands
sieve.c             Lauterbach Sieve demo source file
sieve.om2           Sieve demo OMF2 file for 8051 simulator
simdemo.cmm         T32API demo script for simulator
startup.a51         Lauterbach Sieve demo startup source file
t32start-tgt.cmd    Target (ARM) start batch file   <- PLEASE ADAPT YOUR PATH NAMES
config-tgt.t32      Target (ETH) configuration file <- PLEASE ADAPT YOUR PATH NAMES

-----

To use the provided solution/project, 
 - open the dotnet.sln solution file in VS2010
For the T32API demonstration
 - start TRACE32 for 8051 simulator and ARM target debugger
 - single-step debug in VS2010 or run the demo

-----

Known issues:
- "Bundled TAP access" is not implemented

-----

Output of a sample run (file t32apitestlog.txt):

**** T32 API test ********************
T32.GetChannelSize() returns 144
T32.GetChannelDefaults(chan1)
T32.SetChannel(chan1)
T32.Config (1st) returns 0
T32.Config (2nd) returns 0
T32.Config (3rd) returns 0
T32.GetChannelDefaults(chan2)
T32.SetChannel(chan2)
T32.Config (4th) returns 0
T32.Config (5th) returns 0
T32.Config (6th) returns 0
##### Simulator demo ##### using first connection
T32.SetChannel(chan1)
T32.Init() returns 0
T32.Ping() returns 0
T32.Cmd('AREA') returns 0
T32.Attach(T32API.Device.ICD) returns 0
T32.Cmd('SYStem.Up') returns 0
T32.EvalGet(evres) returns 0 value is 0
T32.GetMessage(msg, typ) returns 0 msg='remote PING received', typ=32
T32.GetPracticeState(pstate) returns 0 pstate=0
T32.GetState(state) returns 0 state=2
T32.GetCpuInfo(4 params) returns 0 cpu='M8051EW', fpu=0, endian=0 aux=0
Emulator memory mapping detection (acc= 0 indicates no mapping)
T32.GetRam(out astart, out aend, out acc=1) returns 0 start= 0x00b5522c, end= 0x00360032, acc=0
T32.GetRam(out astart, out aend, out acc=2) returns 0 start= 0x00000000, end= 0x00360032, acc=0
T32.ResetCPU() returns 0
T32.ReadMemory(0x0400,1, buffer, 0x80) returns 0
    0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    0x0070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Preparing Buffer with random data. TestLength = 0x80
    0x0000 35 C1 2A 01 B8 D9 36 E9 71 B9 9F CE 61 CD 06 B1
    0x0010 15 20 AA 24 63 D4 C3 CA E3 A7 C7 1D 89 DE ED B9
    0x0020 13 C5 CC 44 05 9E B5 BD EE 25 ED 33 4D F0 B5 0C
    0x0030 B3 FA 8C 19 50 11 B0 60 FD 5F 1C 11 11 18 60 91
    0x0040 CA E4 BA 9A 00 C0 AC 75 6A EB 34 3D E6 8F 7C F1
    0x0050 F1 BA 69 8D 52 D4 69 01 15 6C 46 A4 81 A4 AB D5
    0x0060 C4 5C 67 67 35 1A 0C F2 4E 16 AE 63 DC 72 79 6D
    0x0070 E2 29 1E 56 AE D1 3E F5 7B B9 85 92 79 07 F2 C4
T32.WriteMemory(0x0400,1, buffer, 0x80) returns 0
Buffer Cleared to ZERO
T32.ReadMemory(0x0400,1, buffer, 0x80) returns 0
    0x0000 35 C1 2A 01 B8 D9 36 E9 71 B9 9F CE 61 CD 06 B1
    0x0010 15 20 AA 24 63 D4 C3 CA E3 A7 C7 1D 89 DE ED B9
    0x0020 13 C5 CC 44 05 9E B5 BD EE 25 ED 33 4D F0 B5 0C
    0x0030 B3 FA 8C 19 50 11 B0 60 FD 5F 1C 11 11 18 60 91
    0x0040 CA E4 BA 9A 00 C0 AC 75 6A EB 34 3D E6 8F 7C F1
    0x0050 F1 BA 69 8D 52 D4 69 01 15 6C 46 A4 81 A4 AB D5
    0x0060 C4 5C 67 67 35 1A 0C F2 4E 16 AE 63 DC 72 79 6D
    0x0070 E2 29 1E 56 AE D1 3E F5 7B B9 85 92 79 07 F2 C4
T32.ReadRegister(0xFFFF, 0, out RegisterFile) returns 0
    0x0000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0008 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0018 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0020 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0028 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0030 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0038 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Random data written into RegisterFile buffer
    0x0000 00004035 00005DA9 00007881 00008AAD 00002834 0000153F 0000BD59 0000D85A
    0x0008 0000AF27 00007669 0000402D 00003CA6 0000255E 000005E3 000023C8 0000A240
    0x0010 0000F37D 0000D86E 0000C247 0000586F 000086E3 000055B9 0000275B 0000F2B5
    0x0018 00001DB1 0000716D 0000EC31 00007B37 00009457 0000793E 00007892 000046E1
    0x0020 000022B0 0000EA6A 000023E4 00007FD7 0000FABF 0000EEE4 000045F8 0000CDD0
    0x0028 00006CB1 0000461B 0000A761 00003904 00009236 0000021B 0000D14E 000075D6
    0x0030 00009693 0000E3BB 00009F9A 0000A209 00004524 00009B58 00003E36 0000EA7A
    0x0038 0000364D 000085CA 00006CFC 0000B6C5 0000290D 00004222 00004403 000035E8
T32.WriteRegister(0xFFFF, 0, RegisterFile) returns 0
T32.ReadRegister(0xFFFF, 0, out RegisterFile) returns 0
    0x0000 00000035 000000A9 00000081 000000AD 00000034 0000003F 00000059 0000005A
    0x0008 00000000 00000000 0000402D 00003CA6 0000255E 000005E3 000023C8 0000A240
    0x0010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0018 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0020 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0028 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0030 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    0x0038 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
T32.ReadPP(pp) returns 0 Program Pointer= 0x0
T32.Cmd('Break.RESet') returns 0
T32.WriteBreakpoint(0x101f, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x101f, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1003, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1007, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x101c, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1014, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1014, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1000, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1012, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x101e, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x101d, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1008, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1015, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x101d, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x100c, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1003, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1014, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x100e, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x101c, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1016, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x101b, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x101a, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1000, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1010, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1015, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1007, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1009, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x100e, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1010, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1011, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1014, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.WriteBreakpoint(0x1005, T32API.MemoryClass.Program, T32API.BreakpointType.Program, 1) returns 0
T32.ReadBreakpoint(0x1000, T32API.MemoryClass.Program, BPlist, 32) returns 0
    BPlist    0 : Address 0x1000 : read = 0x0001
    BPlist    1 : Address 0x1001 : read = 0x0000
    BPlist    2 : Address 0x1002 : read = 0x0000
    BPlist    3 : Address 0x1003 : read = 0x0001
    BPlist    4 : Address 0x1004 : read = 0x0000
    BPlist    5 : Address 0x1005 : read = 0x0001
    BPlist    6 : Address 0x1006 : read = 0x0000
    BPlist    7 : Address 0x1007 : read = 0x0001
    BPlist    8 : Address 0x1008 : read = 0x0001
    BPlist    9 : Address 0x1009 : read = 0x0001
    BPlist   10 : Address 0x100a : read = 0x0000
    BPlist   11 : Address 0x100b : read = 0x0000
    BPlist   12 : Address 0x100c : read = 0x0001
    BPlist   13 : Address 0x100d : read = 0x0000
    BPlist   14 : Address 0x100e : read = 0x0001
    BPlist   15 : Address 0x100f : read = 0x0000
    BPlist   16 : Address 0x1010 : read = 0x0001
    BPlist   17 : Address 0x1011 : read = 0x0001
    BPlist   18 : Address 0x1012 : read = 0x0001
    BPlist   19 : Address 0x1013 : read = 0x0000
    BPlist   20 : Address 0x1014 : read = 0x0001
    BPlist   21 : Address 0x1015 : read = 0x0001
    BPlist   22 : Address 0x1016 : read = 0x0001
    BPlist   23 : Address 0x1017 : read = 0x0000
    BPlist   24 : Address 0x1018 : read = 0x0000
    BPlist   25 : Address 0x1019 : read = 0x0000
    BPlist   26 : Address 0x101a : read = 0x0001
    BPlist   27 : Address 0x101b : read = 0x0001
    BPlist   28 : Address 0x101c : read = 0x0001
    BPlist   29 : Address 0x101d : read = 0x0001
    BPlist   30 : Address 0x101e : read = 0x0001
    BPlist   31 : Address 0x101f : read = 0x0001
T32.Cmd('DO simdemo.cmm') returns 0
T32.GetPracticeState(out pstate) returns 0 pstate=1
    ...waiting 50 ms for PRACTICE script to finish...
T32.GetPracticeState(out pstate) returns 0 pstate=1
    ...waiting 50 ms for PRACTICE script to finish...
T32.GetPracticeState(out pstate) returns 0 pstate=1
    ...waiting 50 ms for PRACTICE script to finish...
T32.GetPracticeState(out pstate) returns 0 pstate=0
    ...OK (Script finished after 3 cycles)
T32.GetSource(0x8800, out sname, out sline) returns 0  sname='SIEVE.C', sline=423
T32.Cmd('Break.RESet') returns 0
T32.Cmd('Break.Set \423') returns 0
T32.GetState(out state) returns 0 state=2
T32.Go() returns 0
T32.GetState(out state) returns 0 state=3
    ...waiting 10 ms for Target to stop on breakpoint...
T32.GetState(out state) returns 0 state=2
    ...OK (Target stopped after 1 cycles)
T32.SetMode(T32API.DisplayMode.Hll) returns 0
T32.GetTriggerMessage(out msg) returns 0  msg=''
T32.GetSelectedSource(out sname, out sline) returns 0  sname='', sline=0
T32.StepMode(T32API.SteppingMode.StepOver | T32API.SteppingMode.HllStep) returns 0
T32.Cmd('Break.RESet') returns 0
T32.Cmd('Break.Set SIEVE\12') returns 0
T32.Go() returns 0
T32.GetState(out state) returns 0 state=3
    ...waiting 10 ms for Target to stop on breakpoint...
T32.GetState(out state) returns 0 state=2
    ...OK (Target stopped after 1 cycles)
T32.Step() returns 0
T32.Exit() returns 0
##### Real-Target demo ##### using second connection
T32.SetChannel(chan2)
T32.Init() returns 0
T32.Ping() returns 0
T32.Cmd('AREA') returns 0
T32.Attach(T32API.Device.ICD) returns 0
T32.Cmd('SYStem.CPU ARM1176JZF') returns 0
T32.Cmd('SYStem.Up') returns 0
T32.GetCpuInfo(4 params) returns 0 cpu='ARM1176JZF', fpu=0, endian=1 aux=122
T32.GetRam(out astart, out aend, out acc=1) returns 0 start= 0x00000000, end= 0x757e0708, acc=0
T32.GetRam(out astart, out aend, out acc=2) returns 0 start= 0x0, end= 0x757e0708, acc=0
T32.TAPAccessDirect(tah, 8, ref cmd, out ibits) returns 0 reset_state = 1
--- Get IDCODE, Method A: raw shifts
T32.TAPAccessShiftRaw(tah, 9, ref tmssig, ref Nothing, out Nothing, T32API.ShiftRawOptions.None) returns 0
T32.TAPAccessShiftRaw(tah, 96, ref Nothing, ref Nothing, out ibits, T32API.ShiftRawOptions.TMS_0) returns 0
   >tmssig:
    0x0000 5F 00
   <ibits:
    0x0000 FF FF FF FF FF FF FF FF FF FF FF FF
--- Get IDCODE, Method B: use ShiftDR function
T32.TAPAccessShiftRaw(tah, 7, ref tmssig, ref Nothing, out Nothing, (int)T32API.ShiftRawOptions.None) returns 0
T32.TAPAccessShiftDR(tah, 96, ref obits, out ibits) returns 0
   >obits:
    0x0000 55 AA 57 AA 59 AA 5B AA 5D AA 5F AA
   <ibits:
    0x0000 FF FF FF FF FF FF FF FF FF FF FF FF
--- Get IDCODE, Method A: raw shifts
T32.TAPAccessShiftRaw(tah, 9, ref tmssig, ref Nothing, out Nothing, T32API.ShiftRawOptions.None) returns 0
T32.TAPAccessShiftRaw(tah, 96, ref Nothing, ref Nothing, out ibits, T32API.ShiftRawOptions.TMS_0) returns 0
   <ibits:
    0x0000 2F C0 95 3B 00 00 00 00 00 00 00 00
--- Get IDCODE, Method C: raw Shifts without explicit pattern data
T32.TAPAccessShiftRaw(tah, 5, ref Nothing, ref Nothing, out Nothing, (int)T32API.ShiftRawOptions.TMS_1) returns 0
T32.TAPAccessShiftRaw(tah, 1, ref Nothing, ref Nothing, out Nothing, (int)T32API.ShiftRawOptions.TMS_0) returns 0
T32.TAPAccessShiftRaw(tah, 1, ref Nothing, ref Nothing, out Nothing, (int)T32API.ShiftRawOptions.TMS_1) returns 0
T32.TAPAccessShiftRaw(tah, 2, ref Nothing, ref Nothing, out Nothing, (int)T32API.ShiftRawOptions.TMS_0) returns 0
T32.TAPAccessShiftRaw(tah, 96, ref Nothing, ref Nothing, out ibits, (int)T32API.ShiftRawOptions.TMS_0) returns 0
   <ibits:
    0x0000 FF FF FF FF FF FF FF FF FF FF FF FF
--- Get IDCODE, Method A: raw shifts
T32.TAPAccessShiftRaw(tah, 9, ref tmssig, ref Nothing, out Nothing, T32API.ShiftRawOptions.None) returns 0
T32.TAPAccessShiftRaw(tah, 96, ref Nothing, ref Nothing, out ibits, T32API.ShiftRawOptions.TMS_0) returns 0
   <ibits:
    0x0000 2F C0 95 3B 00 00 00 00 00 00 00 00
T32.TAPAccessRelease() returns 0
T32.Cmd('SYStem.Down') returns 0
T32.Exit() returns 0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#EOF#