Device Configuration¶
SitePoint GPS devices support multiple operational modes and configuration options to meet different positioning requirements.
This chapter explains device modes, how to select the appropriate mode for your use case, and how to configure device settings.
Device Modes Overview¶
The GPS receiver can operate in five distinct modes, each optimized for specific use cases:
Mode |
Accuracy |
Description |
|---|---|---|
DEVICE_MODE_ROVER |
~2 meters |
Standard rover without corrections. Uses autonomous GPS positioning. |
DEVICE_MODE_ROVER_NTRIP |
~2 cm |
Rover with NTRIP corrections via BLE. Corrections streamed from host application. |
DEVICE_MODE_ROVER_NEAREST |
~2 cm |
Rover with Tripod network corrections. Device connects to nearest base via radio. |
DEVICE_MODE_FIXED_BASE |
N/A |
Fixed base station. Transmits corrections to rovers via radio. |
DEVICE_MODE_FIXED_BASE_BROADCAST |
N/A |
Fixed base with wider broadcast range. Higher power consumption. |
Mode Selection Guidelines¶
DEVICE_MODE_ROVER¶
Use When:
No RTK corrections are available
Accuracy requirements are 2-10 meters
Testing GPS functionality without correction infrastructure
Operating in areas without NTRIP or Tripod coverage
Characteristics:
Lowest power consumption
No external correction data required
Position updates at 8-10 Hz
Solution type: Autonomous GPS (type 1)
Code Example:
bleManager->sendModeChangeCommand(DEVICE_MODE_ROVER);
DEVICE_MODE_ROVER_NTRIP¶
Use When:
Internet connection is available (WiFi, cellular)
NTRIP caster account is available
Host application can stream corrections via BLE
Operating in areas without Tripod coverage
Centimeter-level accuracy is required
Characteristics:
Host application must stream RTCM corrections
Requires active NTRIP connection
Position accuracy: 1-5 cm (RTK fixed)
Correction latency: network-dependent (50-500 ms typical)
Prerequisites:
NTRIP caster account (host, port, mountpoint, credentials)
NTRIPManager configured and connected
RTCM messages queued to BLEManager
Complete Setup Example:
// Step 1: Connect to device
bleManager->connectToDevice("12:34:56:78:9A:BC");
// Step 2: Wait for connection
connect(bleManager, &BLEManager::deviceConnected, [=]() {
// Step 3: Set device to NTRIP rover mode
bleManager->sendModeChangeCommand(DEVICE_MODE_ROVER_NTRIP);
// Step 4: Connect to NTRIP caster
ntripManager->connectToNtrip("rtk.example.com", 2101,
"RTCM3", "user", "pass");
});
// Step 5: Stream corrections to device
connect(ntripManager, &NTRIPManager::rtcmDataReceived,
[=](const QByteArray &rtcmData) {
bleManager->queueRTCMMessage(rtcmData);
});
DEVICE_MODE_ROVER_NEAREST¶
Use When:
Operating within Tripod network coverage
No internet connection is available
Host application does not need to manage corrections
Centimeter-level accuracy is required
Characteristics:
Device automatically connects to nearest Tripod base station
No NTRIP configuration required in host application
Position accuracy: 1-5 cm (RTK fixed)
Correction latency: <100 ms typical (radio link)
Code Example:
// Device handles correction reception automatically
bleManager->sendModeChangeCommand(DEVICE_MODE_ROVER_NEAREST);
// Monitor correction status
connect(bleManager, &BLEManager::statusDataChanged, [=]() {
SqspStatus_t status = bleManager->getStatusData();
if (status.aidingBins & (1 << 4)) {
qDebug() << "Receiving Tripod corrections";
qDebug() << "Correction age:" << status.correctionAge << "ms";
}
});
DEVICE_MODE_FIXED_BASE¶
Use When:
Establishing a local RTK base station
Providing corrections to nearby rovers via Tripod radio
Operating in areas without NTRIP coverage
Baseline distances < 10 km to rovers
Characteristics:
Device position must be surveyed or manually entered
Transmits RTCM corrections via radio
Supports multiple rovers simultaneously
Normal transmit power (10-15 km range typical)
Setup Process:
Place device at known location or survey position
Set device to fixed base mode
Configure base position (if known) or use survey mode
Device begins transmitting corrections
Survey Mode Example:
// Set to fixed base mode with auto-survey
bleManager->sendModeChangeCommand(DEVICE_MODE_FIXED_BASE);
// Monitor survey progress
connect(bleManager, &BLEManager::configDataChanged, [=]() {
SqspLbConfig_t config = bleManager->getConfigData();
qDebug() << "Survey duration:" << config.duration << "seconds";
qDebug() << "Base position:";
qDebug() << " Lat:" << config.latitude;
qDebug() << " Lon:" << config.longitude;
qDebug() << " Height:" << config.hMSL << "m";
// Survey typically runs 60-180 seconds
// Longer survey = better base position accuracy
});
DEVICE_MODE_FIXED_BASE_BROADCAST¶
Use When:
Extended range is required (up to 20-30 km)
Base station has reliable power source
Covering large survey areas
Operating in challenging RF environments
Characteristics:
Higher transmit power than standard fixed base
Increased power consumption (~2x standard base)
Extended range: 20-30 km typical (vs 10-15 km)
Same setup process as DEVICE_MODE_FIXED_BASE
Code Example:
// Use broadcast mode for extended range
bleManager->sendModeChangeCommand(DEVICE_MODE_FIXED_BASE_BROADCAST);
Mode Comparison¶
Mode |
Accuracy |
Corrections |
Power |
Use Case |
|---|---|---|---|---|
ROVER |
2-10 m |
None |
Low |
Basic positioning |
ROVER_NTRIP |
1-5 cm |
Via BLE |
Medium |
Internet available |
ROVER_NEAREST |
1-5 cm |
Via radio |
Medium |
Tripod coverage |
FIXED_BASE |
N/A |
Transmits |
High |
Local base station |
FIXED_BASE_BROADCAST |
N/A |
Transmits |
Very High |
Extended range base |
Configuration Data¶
The device configuration is accessed via the SqspLbConfig_t structure,
which contains base station position and survey information.
Reading Configuration¶
connect(bleManager, &BLEManager::configDataChanged, [=]() {
SqspLbConfig_t config = bleManager->getConfigData();
// Base station position (double precision)
qDebug() << "Latitude:" << config.latitude << "degrees";
qDebug() << "Longitude:" << config.longitude << "degrees";
qDebug() << "Height (WGS84):" << config.height << "m";
qDebug() << "Height (MSL):" << config.hMSL << "m";
// Survey information
qDebug() << "Survey duration:" << config.duration << "seconds";
});
Configuration Fields¶
Field |
Type |
Description |
|---|---|---|
latitude |
double |
Base station latitude in degrees (-90 to +90) |
longitude |
double |
Base station longitude in degrees (-180 to +180) |
height |
double |
Height above WGS84 ellipsoid in meters |
hMSL |
double |
Height above mean sea level in meters |
duration |
int32_t |
Survey duration in seconds (if auto-surveyed) |
Survey Duration Guidelines¶
When using auto-survey mode for base stations, the survey duration affects the accuracy of the determined base position:
Duration |
Base Position Accuracy |
Recommended Use |
|---|---|---|
60 seconds |
~10 cm |
Quick setup, short sessions |
180 seconds |
~5 cm |
Standard surveying |
300+ seconds |
~2-3 cm |
High-accuracy applications |
600+ seconds |
~1-2 cm |
Permanent base stations |
Important: The base station position accuracy directly affects rover positioning accuracy. A 10 cm error in base position causes a 10 cm error in rover position.
Mode Change Timing¶
Understanding when mode changes take effect is important for application logic.
Mode Change Sequence¶
When sendModeChangeCommand() is called:
Command is packaged as SQTP frame
Frame is written to characteristic 0x0105
Device processes command (typically < 100 ms)
Device resets GPS engine and reconfigures
Device begins operating in new mode
Configuration data may be updated (triggers
configDataChanged())
Total time: Typically 1-3 seconds for complete mode change
Monitoring Mode Changes:
bleManager->sendModeChangeCommand(DEVICE_MODE_ROVER_NTRIP);
// Wait for device to settle in new mode
QTimer::singleShot(3000, [=]() {
qDebug() << "Device should be in new mode";
// Check status to verify corrections are active
SqspStatus_t status = bleManager->getStatusData();
if (status.aidingBins & (1 << 4)) {
qDebug() << "RTCM corrections confirmed active";
}
});
Best Practices¶
Mode Selection Strategy¶
Start with DEVICE_MODE_ROVER for initial testing
Verify basic GPS reception before attempting RTK
Ensure good satellite visibility (minimum 8 satellites)
Check HDOP < 2.0 before expecting RTK fix
Monitor correction age (should be < 30 seconds for RTK)
Power Management¶
Mode |
Power Consumption (approximate) |
|---|---|
ROVER |
150-200 mA (baseline) |
ROVER_NTRIP |
200-250 mA (+BLE data transfer) |
ROVER_NEAREST |
250-300 mA (+radio reception) |
FIXED_BASE |
350-450 mA (+radio transmission) |
FIXED_BASE_BROADCAST |
600-800 mA (+high-power transmission) |
Battery Life Considerations:
Rover modes: 8-12 hours typical (2000 mAh battery)
Base modes: 3-6 hours typical (2000 mAh battery)
Broadcast mode: 2-3 hours typical (2000 mAh battery)
Baseline Distance¶
The distance between base station and rover affects positioning accuracy:
Baseline Distance |
Expected Accuracy |
Fix Acquisition Time |
|---|---|---|
< 5 km |
1-2 cm |
10-30 seconds |
5-10 km |
2-3 cm |
30-60 seconds |
10-20 km |
3-5 cm |
60-120 seconds |
20-30 km |
5-10 cm |
120-180 seconds |
> 30 km |
Degraded |
May not achieve RTK fix |
Recommendation: Keep baseline distances < 10 km for optimal performance.
Troubleshooting¶
No RTK Fix¶
Symptoms: Device remains in GPS mode (solution type 1) instead of RTK
Possible Causes:
No corrections received
Check
correctionAgein status dataVerify NTRIP connection is active
Verify RTCM messages are being queued
Corrections too old
Check network latency
Verify NTRIP caster is sending data
Check for RTCM queue overflow
Poor satellite visibility
Check
numSatellites(minimum 8 required)Check HDOP (should be < 2.0)
Ensure clear view of sky
Baseline too long
Check distance to base station
Consider using closer base or network service
Debugging Example:
connect(bleManager, &BLEManager::statusDataChanged, [=]() {
SqspStatus_t status = bleManager->getStatusData();
SqspLla_t lla = bleManager->getLlaData();
qDebug() << "Solution type:" << lla.solutionType;
qDebug() << "Satellites:" << status.numSatellites;
qDebug() << "HDOP:" << status.hdop;
qDebug() << "Correction age:" << status.correctionAge << "ms";
qDebug() << "RTCM active:" << (status.aidingBins & (1 << 4) ? "YES" : "NO");
// RTK fix troubleshooting
if (lla.solutionType != 4) { // Not RTK fixed
if (!(status.aidingBins & (1 << 4))) {
qWarning() << "No RTCM corrections detected";
} else if (status.correctionAge > 30000) {
qWarning() << "Corrections too old";
} else if (status.numSatellites < 8) {
qWarning() << "Insufficient satellites";
} else if (status.hdop > 2.0) {
qWarning() << "Poor satellite geometry";
}
}
});
Frequent Mode Changes¶
Symptoms: Application changes modes frequently or unexpectedly
Possible Causes:
Multiple mode change commands sent
Ensure only one mode change per user action
Add debouncing to UI controls
Mode change during initialization
Wait for
deviceConnected()signal before sending mode changeDelay mode change 1-2 seconds after connection
Prevention Example:
bool modeChangeInProgress = false;
void setDeviceMode(int newMode)
{
if (modeChangeInProgress) {
qWarning() << "Mode change already in progress";
return;
}
modeChangeInProgress = true;
bleManager->sendModeChangeCommand(newMode);
// Clear flag after mode change settles
QTimer::singleShot(3000, [=]() {
modeChangeInProgress = false;
});
}
Next Steps¶
See Programming Guide for complete code examples
Review Theory of Operation for RTK positioning details
Consult API Reference for complete API documentation