Reliability and Power Consumption
The reliability mode passed to hubble_sat_packet_send() and
hubble_sat_packet_pass_send() controls how many times the SDK asks the
platform radio port to send the same packet and how far apart those
transmissions are spaced. It is the primary trade-off between delivery
probability and energy use.
Reliability Modes
Mode |
Baseline transmissions |
Interval |
Intended use |
|---|---|---|---|
|
1 |
0 seconds |
Testing or externally managed retries |
|
8 |
20 seconds |
Default balance of reliability and power |
|
16 |
10 seconds |
Higher reliability with higher energy cost |
For modes with retries, the SDK may add extra transmissions to compensate for estimated clock drift since the last time synchronization. See Clock Drift Compensation for the drift model and how to configure it.
Choosing a Mode
Satellite reliability and power consumption are directly related. More retries increase the chance that a satellite receives the packet, but they keep the radio active for longer and increase total energy use.
Use these guidelines when selecting a mode:
Use
HUBBLE_SAT_RELIABILITY_NONEonly for testing, lab validation, or applications that implement their own scheduling and retry policy.Use
HUBBLE_SAT_RELIABILITY_NORMALas the default production setting.Use
HUBBLE_SAT_RELIABILITY_HIGHwhen delivery probability is more important than energy consumption.Use pass prediction to avoid transmitting when a satellite is unlikely to be visible.
Keep time synchronized to minimize drift-compensation retries.
Avoid very short continuous-transmission intervals on battery-powered devices.
For battery-powered products, the most power-efficient design is usually a
pass-predicted workflow: sleep or use low-power BLE between passes, wake before
pass.start, transmit with the lowest reliability mode that meets the product
delivery requirement, then return to the low-power state.
Pass-Adaptive Transmission
hubble_sat_packet_pass_send() sends a packet using a
hubble_sat_pass_info window instead of the fixed baselines in the
table above. Rather than always transmitting the mode’s baseline number of
times, it derives the retry count from pass.duration so the packet is
retransmitted as many times as will fit while the satellite is overhead.
struct hubble_sat_pass_info pass;
err = hubble_sat_next_pass_region_get(hubble_time_get(), ®ion, &pass);
if (err != 0) {
return err;
}
err = hubble_sat_packet_pass_send(&packet, HUBBLE_SAT_RELIABILITY_NORMAL,
&pass);
if (err != 0) {
return err;
}
Required for a region pass. A pass obtained from
hubble_sat_next_pass_region_get()has no single point of reference the fixed baselines were tuned for, sohubble_sat_packet_send()has no way to fit its retries to that window. Usehubble_sat_packet_pass_send()whenever the pass came from a region query.Also usable for a single-point pass. A pass from
hubble_sat_next_pass_get()works too — in that casehubble_sat_packet_pass_send()is a drop-in alternative tohubble_sat_packet_send()that adapts retries to that specific pass’s duration instead of using the mode’s fixed baseline.``HUBBLE_SAT_RELIABILITY_NONE`` is invalid. This function requires a mode that retries (
HUBBLE_SAT_RELIABILITY_NORMALorHUBBLE_SAT_RELIABILITY_HIGH); passingHUBBLE_SAT_RELIABILITY_NONE, a NULLpacket, or a NULLpassreturns-EINVAL.
See Pass Prediction for how to obtain a
hubble_sat_pass_info.