To ensure long-term stability in continuous-monitoring environments, the NexatomTT hardware continually monitors its own health (uptime, sync clock lock status, FPGA thermals, FIFO buffer underruns).
Use callbacks or the supported request/getter API to observe available health fields. Configuration dumps are bounded versioned responses; inspect their reported/copied counts instead of assuming they contain every hardware register.
| Function | Parameters (In/Out) | Returns | Description |
|---|---|---|---|
nexatom_tt_enable_telemetry |
[In] nexatom_tt_handle device[In] bool enable |
nexatom_error_code_t |
Arms or disarms the periodic generation of telemetry packets from the FPGA. |
nexatom_tt_set_telemetry_mode |
[In] nexatom_tt_handle device[In] uint8_t mode |
nexatom_error_code_t |
1 = Manual on-request only. 2 = Periodic automatic transmission. |
nexatom_tt_request_telemetry |
[In] nexatom_tt_handle device |
nexatom_error_code_t |
Manually triggers the FPGA to emit a single telemetry payload. |
nexatom_tt_get_telemetry |
[In] nexatom_tt_handle device[Out] nexatom_telemetry_data_t* telemetry |
nexatom_error_code_t |
Legacy request/wait getter returning the fixed telemetry record. |
nexatom_tt_get_telemetry_view_v1 |
[In] nexatom_tt_handle device[In/Out] nexatom_tt_telemetry_view_v1_t* telemetry |
nexatom_error_code_t |
Reads the latest cached versioned view; initialize size/version and inspect field availability. Does not itself request a new sample. |
nexatom_tt_request_config_dump |
[In] nexatom_tt_handle device |
nexatom_error_code_t |
Requests the runtime’s defined configuration-register dump. The legacy callback copies at most 128 records; use the versioned view for the full supported response and check its record count. |
nexatom_telemetry_data_tThe telemetry struct tracks critical hardware lifecycle statuses. It is populated either via polling (nexatom_tt_get_telemetry) or the async callback registered in Section 7.8.
| Field | Type | Description |
|---|---|---|
device_serial |
uint32_t |
Numeric instrument serial from telemetry. It is unrelated to the FT601 USB serial and is what automatic reconnection compares; boards are selected by connection_id. |
firmware_version |
uint16_t |
Running firmware version. |
hardware_revision |
uint16_t |
PCB hardware revision identifier. |
sequence_number |
uint16_t |
TELM sequence number; wraps and must be interpreted with freshness/session identity. |
telemetry_version |
uint8_t |
TELM packet version identifier. |
active_channels_mask |
uint8_t |
Legacy activity/status mask, not a substitute for the profile’s public-channel authority. |
uptime_seconds |
uint32_t |
Number of seconds the FPGA has been powered on. |
system_status_word |
uint32_t |
Legacy status prefix, not the full common-runtime status payload or output-mode readback. |
mode_status_word |
uint32_t |
Full 32-bit mode status register (bits [23:16] carry system error copy). |
histogram_errors_word |
uint32_t |
Flags for dropped packets, saturated FIFOs, or histogram engine errors. |
temperature_raw |
uint16_t |
Raw FPGA die temperature sensor readout. |
calibration_metadata |
uint8_t |
Calibration status bits from the FPGA. |
temp_status_flags |
uint8_t |
Temperature status flags (independent of calibration control). |
active_channels |
uint64_t |
Extended container for decoded activity bits; its width does not authorize 64 channels. |
current_mode |
uint8_t |
Raw current-mode byte from system status. |
sync_clock_requested |
bool |
True if the host asked the PLL to lock to the 10MHz reference. |
sync_clock_active |
bool |
True if the external sync path is actually selected by the FPGA. |
sync_clock_locked |
bool |
Critical Flag: True if the external 10MHz reference is valid and successfully phase-locked. |
error_flags |
uint8_t |
8-bit aggregated error status. |
system_status |
uint8_t |
8-bit system state summary. |
_padding_sync |
uint8_t[2] |
Alignment padding. |
temperature_celsius |
float |
Device temperature in degrees Celsius (converted from temperature_raw). |
nexatom_config_dump_data_tUsed purely for debug, this struct is delivered exclusively via the configuration dump callback (Section 7.8). It contains raw 32-bit register addresses and their currently active values.
| Field | Type | Description |
|---|---|---|
version |
uint32_t |
Config dump protocol version. |
register_count |
uint32_t |
Hardware-reported total register pair count. |
copied_register_count |
uint32_t |
The number of valid registers actually present in the registers array. |
reserved |
uint32_t |
Reserved for future use. |
registers |
struct[128] |
Array of { uint32_t address; uint32_t value; } pairs detailing the raw FPGA configuration memory. Max 128 entries (NEXATOM_CONFIG_DUMP_MAX_REGISTERS). |
nexatom_telemetry_data_t health_status;
// Fragment: the authorized profile supports legacy telemetry.
// This getter owns its request/wait; do not add a guessed USB sleep.
if (nexatom_tt_get_telemetry(my_device, &health_status) == 0) {
printf("Device Uptime: %u seconds\n", health_status.uptime_seconds);
printf("FPGA Temperature: %.1f °C\n", health_status.temperature_celsius);
// Check if our external 10MHz master clock is locked securely
if (health_status.sync_clock_requested && !health_status.sync_clock_locked) {
printf("WARNING: External 10MHz Reference is NOT locked!\n");
}
}
For request-based polling call nexatom_tt_request_telemetry and observe a later versioned callback/view. Periodic reporting is output-dependent: current common runtime requires processed output, while explicit supported requests can respond in quiet mode. Do not start acquisition merely to obtain telemetry. Absent version-specific fields are unknown; the current-mode/status bytes must not be reinterpreted as output selection or calibration completion.
Use nexatom_tt_set_config_dump_view_callback_v1 for the versioned configuration view. DTC-capable profiles additionally expose nexatom_tt_apply_dtc_output_v1, nexatom_tt_get_dtc_status_v1, nexatom_tt_set_dtc_global_enable_v1 and nexatom_tt_clear_dtc_status_v1; initialize the matching records and inspect apply rejection/status rather than treating a request as applied. These functions do not establish DTC support on an otherwise unsupported profile.
When the instrument’s on-board data buffer fills, or its data transport hits a protocol error, the instrument stops the measurement, resets its data path and stays idle. It records each stop in complete_error_flags_word of the telemetry view (valid with NEXATOM_TT_TELEMETRY_VIEW_HAS_COMPLETE_STATUS):
| Mask | Meaning |
|---|---|
NEXATOM_TT_TELEMETRY_VIEW_ERROR_GLOBAL_EXPORTER_FATAL (bit 8) |
Set while any stop is recorded (ORed with the record). |
NEXATOM_TT_TELEMETRY_VIEW_ERROR_TRANSPORT_STOP_COUNT_MASK (bits 23..16), _SHIFT 16 |
Number of stops; saturates at 255. |
NEXATOM_TT_TELEMETRY_VIEW_ERROR_DDR_PROTOCOL_STOP (bit 24) |
At least one stop was caused by a protocol error rather than a full buffer. |
The record is sticky: it clears only with the peripheral reset (nexatom_tt_reset_peripherals(), SYSTEM_CONTROL bit 1). The SDK reports the word and does not restart the measurement; the application decides what to do.
// Fragment: view is a nexatom_tt_telemetry_view_v1_t read with nexatom_tt_get_telemetry_view_v1().
if (view.validity_flags & NEXATOM_TT_TELEMETRY_VIEW_HAS_COMPLETE_STATUS) {
uint32_t word = view.complete_error_flags_word;
unsigned stops = (unsigned)((word & NEXATOM_TT_TELEMETRY_VIEW_ERROR_TRANSPORT_STOP_COUNT_MASK)
>> NEXATOM_TT_TELEMETRY_VIEW_ERROR_TRANSPORT_STOP_COUNT_SHIFT);
if (stops > 0) {
printf("Measurement stopped by the instrument %u time(s)%s\n", stops,
(word & NEXATOM_TT_TELEMETRY_VIEW_ERROR_DDR_PROTOCOL_STOP) ? " (protocol error)" : "");
}
}