Get Started - go to homepage
Get Started logo

Get Started

Trimble Installation Manager

Trimble Installation Manager partial UI

TPSDK is delivered through the Trimble Installation Manager (TIM) when the PC has a valid developer license.

Without a developer license, TPSDK will not appear in TIM.

To request or renew a license:

  1. Download and run TIM.
  2. TIM first displays the device serial number.
  3. It then shows the TPSDK installation options once a license is associated.

When TIM is running, copy the serial and email it via send an inquiry.

If you do not have a configured email client, contact TPSDK admin directly: tpsdk_admin@trimble.com.


Sample Applications

After installation you can start immediately. The best entry point is the SSI sample application—it maps the interfaces in TPSDK one‑to‑one.

SSI sample application screenshot

Each instrument type (or platform) exposes a defined feature set via interfaces. Entry‑level instruments expose fewer; high‑end instruments expose more.

Typical generic interfaces include:

  • ISsiPower
  • ISsiSensorProperties
  • ISsiServiceInfo

Total station–specific interfaces include:

  • ISsiTargets
  • ISsiMeasurement
  • ISsiSearch

The sample application shows how SDK components interact. Interface availability is determined at runtime—there is no hardcoded master list. The supported interface list is known only after a successful connection.

Beyond the samples, the documentation provides conceptual topics (measurement reduction, antenna phase center, prism constants, PPM handling, licensing model, etc.).


First Solution

Creating your first Microsoft Visual Studio solution using TPSDK is straightforward.

Visual Studio project screenshot

Create

Create a new .NET 4.8 C# solution/project.

Add

Add the required TPSDK interface assemblies and supporting files. TPSDK mixes managed and native code, so you must both reference assemblies and preserve file layout.

References

Interface DLLs are typically found under:

  • \Bin\*.dll
  • \Windows\Bin\*.dll

For simplicity, create a libs folder in your solution and copy the DLLs there (e.g., libs\ssi\bin).

A non‑comprehensive list:

Folder structure illustration
  • Trimble.Contracts
  • Trimble.Ssi.Components.Core
  • Trimble.Ssi.Core
  • Trimble.Ssi.Interfaces
  • Trimble.Ssi.DriverManagement.Windows
  • Trimble.Ssi.Interfaces.Gnss
  • Trimble.Ssi.Interfaces.TotalStation
  • Trimble.Ssi.Interfaces.Scanner
  • Trimble.Ssi.Interfaces.Vision
  • Trimble.Licensing.Windows
  • LicensingV2Win
  • LicensingV2WinCLRBridge

File

Copy native driver files. Create a drivers folder alongside your build output and copy everything from \Windows\Drivers\*.* into it.

Retain the existing internal structure (x64, x86). These folders contain native binaries that managed proxy drivers load dynamically.

Create

Create a DriverManager, load the driver for the instrument family you intend to control, then create a sensor instance.

For example, to control a Trimble R12 load: Trimble.Ssi.Driver.CarpoBased.Driver.RSeries.Windows.dll

For a Trimble S Series load: Trimble.Ssi.Driver.CarpoBased.Driver.SSeries.Windows.dll

Once loaded successfully you can create a _sensor.

IDriverManager driverManager = new DriverManager(IsvDetails.Developer);
try
{
    var driverDir = Path.Combine(Directory.GetCurrentDirectory(), "..", "..", "..", "lib", "ssi", "Trimble.Ssi.Driver.CarpoBased.Driver.SSeries.Windows.dll");
    var driverAssembly = Assembly.LoadFrom(driverDir);
    driverManager.RegisterDriverAssembly(driverAssembly);
    var drivers = driverManager.ListAvailableDrivers();
    var driverInfo = drivers.FirstOrDefault();
    var driver = driverManager.CreateDriver(driverInfo);
    _sensor = driver.CreateSensor();
}
catch (Exception)
{
    throw; // Bubble up for centralized handling/logging
}

Connect

Connect using the simplest supported transport—USB for most S Series instruments (no parameters required). More advanced examples (Bluetooth, radio) are documented separately.

if (_sensor.IsSupported(ConnectionType.Usb))
{
    var settings = new ConnectionSettings(ConnectionType.Usb);
    try
    {
        await Task.Run(() => _sensor.Connect(settings));
        Initialize();
        return true;
    }
    catch (Exception ex)
    {
        exceptionCallback(ex);
    }
}

Synchronous vs Asynchronous Most SDK functions are available in synchronous form. Earlier .NET versions (< 4.5) rely on the APM (Begin / End) pattern. You > can wrap synchronous calls inside Task.Run to integrate smoothly with modern async UI (MVVM) patterns.