Trimble Installation Manager
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:
- Download and run TIM.
- TIM first displays the device serial number.
- 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.
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:
ISsiPowerISsiSensorPropertiesISsiServiceInfo
Total station–specific interfaces include:
ISsiTargetsISsiMeasurementISsiSearch
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.
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:
- 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 insideTask.Runto integrate smoothly with modern async UI (MVVM) patterns.