Trimble Trimble
Trimble Precision SDK

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.

  1. Create Create a new .NET 4.8 C# solution/project.
  2. 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.
  3. References Folder structure illustration

    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).

  4. Drivers

    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.

  5. Load Driver

    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
    }
    
  6. 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.