<!-- SPDX-FileCopyrightText: Copyright 2022-2023 Jetperch LLC
SPDX-License-Identifier: Apache-2.0

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. -->

<a id="jsdrv-c-api"></a>

# C API

* [JSDRV API](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md)
  * [`JSDRV_TIMEOUT_MS_ASYNC`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#c.JSDRV_TIMEOUT_MS_ASYNC)
  * [`JSDRV_TIMEOUT_MS_DEFAULT`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#c.JSDRV_TIMEOUT_MS_DEFAULT)
  * [`JSDRV_TIMEOUT_MS_INIT`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#c.JSDRV_TIMEOUT_MS_INIT)
  * [`JSDRV_TIMEOUT_MS_OPEN`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#c.JSDRV_TIMEOUT_MS_OPEN)
  * [`JSDRV_STATISTICS_I128_Q`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#c.JSDRV_STATISTICS_I128_Q)
  * [`JSDRV_VARIABLE_LENGTH_ARRAY`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#c.JSDRV_VARIABLE_LENGTH_ARRAY)
  * [`jsdrv_subscribe_fn`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv418jsdrv_subscribe_fn)
  * [`jsdrv_payload_type_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv420jsdrv_payload_type_e)
    * [`JSDRV_PAYLOAD_TYPE_UNION`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_payload_type_e24JSDRV_PAYLOAD_TYPE_UNIONE)
    * [`JSDRV_PAYLOAD_TYPE_STREAM`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_payload_type_e25JSDRV_PAYLOAD_TYPE_STREAME)
    * [`JSDRV_PAYLOAD_TYPE_STATISTICS`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_payload_type_e29JSDRV_PAYLOAD_TYPE_STATISTICSE)
    * [`JSDRV_PAYLOAD_TYPE_BUFFER_INFO`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_payload_type_e30JSDRV_PAYLOAD_TYPE_BUFFER_INFOE)
    * [`JSDRV_PAYLOAD_TYPE_BUFFER_REQ`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_payload_type_e29JSDRV_PAYLOAD_TYPE_BUFFER_REQE)
    * [`JSDRV_PAYLOAD_TYPE_BUFFER_RSP`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_payload_type_e29JSDRV_PAYLOAD_TYPE_BUFFER_RSPE)
  * [`jsdrv_element_type_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv420jsdrv_element_type_e)
    * [`JSDRV_DATA_TYPE_UNDEFINED`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_element_type_e25JSDRV_DATA_TYPE_UNDEFINEDE)
    * [`JSDRV_DATA_TYPE_INT`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_element_type_e19JSDRV_DATA_TYPE_INTE)
    * [`JSDRV_DATA_TYPE_UINT`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_element_type_e20JSDRV_DATA_TYPE_UINTE)
    * [`JSDRV_DATA_TYPE_FLOAT`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N20jsdrv_element_type_e21JSDRV_DATA_TYPE_FLOATE)
  * [`jsdrv_field_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv413jsdrv_field_e)
    * [`JSDRV_FIELD_UNDEFINED`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N13jsdrv_field_e21JSDRV_FIELD_UNDEFINEDE)
    * [`JSDRV_FIELD_CURRENT`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N13jsdrv_field_e19JSDRV_FIELD_CURRENTE)
    * [`JSDRV_FIELD_VOLTAGE`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N13jsdrv_field_e19JSDRV_FIELD_VOLTAGEE)
    * [`JSDRV_FIELD_POWER`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N13jsdrv_field_e17JSDRV_FIELD_POWERE)
    * [`JSDRV_FIELD_RANGE`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N13jsdrv_field_e17JSDRV_FIELD_RANGEE)
    * [`JSDRV_FIELD_GPI`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N13jsdrv_field_e15JSDRV_FIELD_GPIE)
    * [`JSDRV_FIELD_UART`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N13jsdrv_field_e16JSDRV_FIELD_UARTE)
    * [`JSDRV_FIELD_RAW`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N13jsdrv_field_e15JSDRV_FIELD_RAWE)
  * [`jsdrv_time_type_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv417jsdrv_time_type_e)
    * [`JSDRV_TIME_UTC`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N17jsdrv_time_type_e14JSDRV_TIME_UTCE)
    * [`JSDRV_TIME_SAMPLES`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N17jsdrv_time_type_e18JSDRV_TIME_SAMPLESE)
  * [`jsdrv_buffer_response_type_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv428jsdrv_buffer_response_type_e)
    * [`JSDRV_BUFFER_RESPONSE_SAMPLES`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N28jsdrv_buffer_response_type_e29JSDRV_BUFFER_RESPONSE_SAMPLESE)
    * [`JSDRV_BUFFER_RESPONSE_SUMMARY`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N28jsdrv_buffer_response_type_e29JSDRV_BUFFER_RESPONSE_SUMMARYE)
  * [`jsdrv_subscribe_flag_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv422jsdrv_subscribe_flag_e)
    * [`JSDRV_SFLAG_NONE`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_subscribe_flag_e16JSDRV_SFLAG_NONEE)
    * [`JSDRV_SFLAG_RETAIN`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_subscribe_flag_e18JSDRV_SFLAG_RETAINE)
    * [`JSDRV_SFLAG_PUB`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_subscribe_flag_e15JSDRV_SFLAG_PUBE)
    * [`JSDRV_SFLAG_METADATA_REQ`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_subscribe_flag_e24JSDRV_SFLAG_METADATA_REQE)
    * [`JSDRV_SFLAG_METADATA_RSP`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_subscribe_flag_e24JSDRV_SFLAG_METADATA_RSPE)
    * [`JSDRV_SFLAG_QUERY_REQ`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_subscribe_flag_e21JSDRV_SFLAG_QUERY_REQE)
    * [`JSDRV_SFLAG_QUERY_RSP`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_subscribe_flag_e21JSDRV_SFLAG_QUERY_RSPE)
    * [`JSDRV_SFLAG_RETURN_CODE`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_subscribe_flag_e23JSDRV_SFLAG_RETURN_CODEE)
  * [`jsdrv_device_open_mode_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv424jsdrv_device_open_mode_e)
    * [`JSDRV_DEVICE_OPEN_MODE_DEFAULTS`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N24jsdrv_device_open_mode_e31JSDRV_DEVICE_OPEN_MODE_DEFAULTSE)
    * [`JSDRV_DEVICE_OPEN_MODE_RESUME`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N24jsdrv_device_open_mode_e29JSDRV_DEVICE_OPEN_MODE_RESUMEE)
    * [`JSDRV_DEVICE_OPEN_MODE_RAW`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N24jsdrv_device_open_mode_e26JSDRV_DEVICE_OPEN_MODE_RAWE)
  * [`jsdrv_initialize()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv416jsdrv_initializePP15jsdrv_context_sPK11jsdrv_arg_s8uint32_t)
  * [`jsdrv_finalize()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv414jsdrv_finalizeP15jsdrv_context_s8uint32_t)
  * [`jsdrv_publish()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv413jsdrv_publishP15jsdrv_context_sPKcPK13jsdrv_union_s8uint32_t)
  * [`jsdrv_query()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv411jsdrv_queryP15jsdrv_context_sPKcP13jsdrv_union_s8uint32_t)
  * [`jsdrv_subscribe()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv415jsdrv_subscribeP15jsdrv_context_sPKc7uint8_t18jsdrv_subscribe_fnPv8uint32_t)
  * [`jsdrv_unsubscribe()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv417jsdrv_unsubscribeP15jsdrv_context_sPKc18jsdrv_subscribe_fnPv8uint32_t)
  * [`jsdrv_unsubscribe_all()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv421jsdrv_unsubscribe_allP15jsdrv_context_s18jsdrv_subscribe_fnPv8uint32_t)
  * [`jsdrv_is_driver_thread()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv422jsdrv_is_driver_threadP15jsdrv_context_s)
  * [`jsdrv_open()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv410jsdrv_openP15jsdrv_context_sPKc7int32_t8uint32_t)
  * [`jsdrv_close()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv411jsdrv_closeP15jsdrv_context_sPKc8uint32_t)
  * [`jsdrv_calibration_hash()`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv422jsdrv_calibration_hashPK8uint32_t8uint32_tP8uint32_t)
  * [`jsdrv_stream_signal_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv421jsdrv_stream_signal_s)
    * [`version`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s7versionE)
    * [`rsv1_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s7rsv1_u8E)
    * [`rsv2_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s7rsv2_u8E)
    * [`rsv3_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s7rsv3_u8E)
    * [`rsv4_u32`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s8rsv4_u32E)
    * [`sample_id`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s9sample_idE)
    * [`field_id`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s8field_idE)
    * [`index`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s5indexE)
    * [`element_type`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s12element_typeE)
    * [`element_size_bits`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s17element_size_bitsE)
    * [`element_count`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s13element_countE)
    * [`sample_rate`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s11sample_rateE)
    * [`decimate_factor`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s15decimate_factorE)
    * [`time_map`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s8time_mapE)
    * [`data`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_stream_signal_s4dataE)
  * [`jsdrv_statistics_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv418jsdrv_statistics_s)
    * [`version`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s7versionE)
    * [`rsv1_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s7rsv1_u8E)
    * [`rsv2_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s7rsv2_u8E)
    * [`decimate_factor`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s15decimate_factorE)
    * [`block_sample_count`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s18block_sample_countE)
    * [`sample_freq`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s11sample_freqE)
    * [`decimate_factor32`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s17decimate_factor32E)
    * [`block_sample_id`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s15block_sample_idE)
    * [`accum_sample_id`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s15accum_sample_idE)
    * [`i_avg`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5i_avgE)
    * [`i_std`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5i_stdE)
    * [`i_min`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5i_minE)
    * [`i_max`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5i_maxE)
    * [`v_avg`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5v_avgE)
    * [`v_std`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5v_stdE)
    * [`v_min`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5v_minE)
    * [`v_max`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5v_maxE)
    * [`p_avg`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5p_avgE)
    * [`p_std`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5p_stdE)
    * [`p_min`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5p_minE)
    * [`p_max`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s5p_maxE)
    * [`charge_f64`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s10charge_f64E)
    * [`energy_f64`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s10energy_f64E)
    * [`charge_i128`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s11charge_i128E)
    * [`energy_i128`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s11energy_i128E)
    * [`time_map`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N18jsdrv_statistics_s8time_mapE)
  * [`jsdrv_time_range_utc_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv422jsdrv_time_range_utc_s)
    * [`start`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_time_range_utc_s5startE)
    * [`end`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_time_range_utc_s3endE)
    * [`length`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_time_range_utc_s6lengthE)
  * [`jsdrv_time_range_samples_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv426jsdrv_time_range_samples_s)
    * [`start`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N26jsdrv_time_range_samples_s5startE)
    * [`end`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N26jsdrv_time_range_samples_s3endE)
    * [`length`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N26jsdrv_time_range_samples_s6lengthE)
  * [`jsdrv_buffer_info_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv419jsdrv_buffer_info_s)
    * [`version`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s7versionE)
    * [`rsv1_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s7rsv1_u8E)
    * [`rsv2_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s7rsv2_u8E)
    * [`rsv3_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s7rsv3_u8E)
    * [`field_id`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s8field_idE)
    * [`index`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s5indexE)
    * [`element_type`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s12element_typeE)
    * [`element_size_bits`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s17element_size_bitsE)
    * [`topic`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s5topicE)
    * [`size_in_utc`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s11size_in_utcE)
    * [`size_in_samples`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s15size_in_samplesE)
    * [`time_range_utc`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s14time_range_utcE)
    * [`time_range_samples`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s18time_range_samplesE)
    * [`time_map`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s8time_mapE)
    * [`decimate_factor`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s15decimate_factorE)
    * [`tmap`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N19jsdrv_buffer_info_s4tmapE)
  * [`jsdrv_buffer_request_time_range_u`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv433jsdrv_buffer_request_time_range_u)
    * [`utc`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N33jsdrv_buffer_request_time_range_u3utcE)
    * [`samples`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N33jsdrv_buffer_request_time_range_u7samplesE)
  * [`jsdrv_buffer_request_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv422jsdrv_buffer_request_s)
    * [`version`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_buffer_request_s7versionE)
    * [`time_type`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_buffer_request_s9time_typeE)
    * [`rsv1_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_buffer_request_s7rsv1_u8E)
    * [`rsv2_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_buffer_request_s7rsv2_u8E)
    * [`rsv3_u32`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_buffer_request_s8rsv3_u32E)
    * [`rsp_topic`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_buffer_request_s9rsp_topicE)
    * [`rsp_id`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N22jsdrv_buffer_request_s6rsp_idE)
  * [`jsdrv_summary_entry_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv421jsdrv_summary_entry_s)
    * [`avg`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_summary_entry_s3avgE)
    * [`std`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_summary_entry_sStE)
    * [`min`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_summary_entry_s3minE)
    * [`max`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N21jsdrv_summary_entry_s3maxE)
  * [`jsdrv_buffer_response_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv423jsdrv_buffer_response_s)
    * [`version`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N23jsdrv_buffer_response_s7versionE)
    * [`response_type`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N23jsdrv_buffer_response_s13response_typeE)
    * [`rsv1_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N23jsdrv_buffer_response_s7rsv1_u8E)
    * [`rsv2_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N23jsdrv_buffer_response_s7rsv2_u8E)
    * [`rsv3_u32`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N23jsdrv_buffer_response_s8rsv3_u32E)
    * [`rsp_id`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N23jsdrv_buffer_response_s6rsp_idE)
    * [`info`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N23jsdrv_buffer_response_s4infoE)
    * [`data`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N23jsdrv_buffer_response_s4dataE)
  * [`jsdrv_arg_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv411jsdrv_arg_s)
    * [`topic`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N11jsdrv_arg_s5topicE)
    * [`value`](https://docs.joulescope.com/en/software/joulescope_driver/h_jsdrv.md#_CPPv4N11jsdrv_arg_s5valueE)
* [C-String utility functions](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md)
  * [`jsdrv_cstr_array_copy`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#c.jsdrv_cstr_array_copy)
  * [`jsdrv_cstr_copy()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv415jsdrv_cstr_copyPcPKc6size_t)
  * [`jsdrv_cstr_join()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv415jsdrv_cstr_joinPcPKcPKc6size_t)
  * [`jsdrv_cstr_casecmp()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv418jsdrv_cstr_casecmpPKcPKc)
  * [`jsdrv_cstr_starts_with()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv422jsdrv_cstr_starts_withPKcPKc)
  * [`jsdrv_cstr_ends_with()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv420jsdrv_cstr_ends_withPKcPKc)
  * [`jsdrv_cstr_to_u32()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv417jsdrv_cstr_to_u32PKcP8uint32_t)
  * [`jsdrv_cstr_to_i32()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv417jsdrv_cstr_to_i32PKcP7int32_t)
  * [`jsdrv_cstr_to_i32s()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv418jsdrv_cstr_to_i32sPKc7int32_tP7int32_t)
  * [`jsdrv_cstr_to_u64()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv417jsdrv_cstr_to_u64PKcP8uint64_t)
  * [`jsdrv_cstr_to_i64()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv417jsdrv_cstr_to_i64PKcP7int64_t)
  * [`jsdrv_cstr_to_f32()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv417jsdrv_cstr_to_f32PKcPf)
  * [`jsdrv_u32_to_cstr()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv417jsdrv_u32_to_cstr8uint32_tPc6size_t)
  * [`jsdrv_cstr_toupper()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv418jsdrv_cstr_toupperPc)
  * [`jsdrv_cstr_to_index()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv419jsdrv_cstr_to_indexPKcPPCKcP7int32_t)
  * [`jsdrv_cstr_to_bool()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv418jsdrv_cstr_to_boolPKcPb)
  * [`jsdrv_cstr_hex_to_u4()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv420jsdrv_cstr_hex_to_u4c)
  * [`jsdrv_cstr_u4_to_hex()`](https://docs.joulescope.com/en/software/joulescope_driver/h_cstr.md#_CPPv420jsdrv_cstr_u4_to_hex7uint8_t)
* [Error codes](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md)
  * [`JSDRV_SUCCESS`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#c.JSDRV_SUCCESS)
  * [`jsdrv_error_code_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv418jsdrv_error_code_e)
    * [`JSDRV_ERROR_SUCCESS`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e19JSDRV_ERROR_SUCCESSE)
    * [`JSDRV_ERROR_UNSPECIFIED`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e23JSDRV_ERROR_UNSPECIFIEDE)
    * [`JSDRV_ERROR_NOT_ENOUGH_MEMORY`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e29JSDRV_ERROR_NOT_ENOUGH_MEMORYE)
    * [`JSDRV_ERROR_NOT_SUPPORTED`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e25JSDRV_ERROR_NOT_SUPPORTEDE)
    * [`JSDRV_ERROR_IO`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e14JSDRV_ERROR_IOE)
    * [`JSDRV_ERROR_PARAMETER_INVALID`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e29JSDRV_ERROR_PARAMETER_INVALIDE)
    * [`JSDRV_ERROR_INVALID_RETURN_CONDITION`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e36JSDRV_ERROR_INVALID_RETURN_CONDITIONE)
    * [`JSDRV_ERROR_INVALID_CONTEXT`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e27JSDRV_ERROR_INVALID_CONTEXTE)
    * [`JSDRV_ERROR_INVALID_MESSAGE_LENGTH`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e34JSDRV_ERROR_INVALID_MESSAGE_LENGTHE)
    * [`JSDRV_ERROR_MESSAGE_INTEGRITY`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e29JSDRV_ERROR_MESSAGE_INTEGRITYE)
    * [`JSDRV_ERROR_SYNTAX_ERROR`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e24JSDRV_ERROR_SYNTAX_ERRORE)
    * [`JSDRV_ERROR_TIMED_OUT`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e21JSDRV_ERROR_TIMED_OUTE)
    * [`JSDRV_ERROR_FULL`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e16JSDRV_ERROR_FULLE)
    * [`JSDRV_ERROR_EMPTY`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e17JSDRV_ERROR_EMPTYE)
    * [`JSDRV_ERROR_TOO_SMALL`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e21JSDRV_ERROR_TOO_SMALLE)
    * [`JSDRV_ERROR_TOO_BIG`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e19JSDRV_ERROR_TOO_BIGE)
    * [`JSDRV_ERROR_NOT_FOUND`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e21JSDRV_ERROR_NOT_FOUNDE)
    * [`JSDRV_ERROR_ALREADY_EXISTS`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e26JSDRV_ERROR_ALREADY_EXISTSE)
    * [`JSDRV_ERROR_PERMISSIONS`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e23JSDRV_ERROR_PERMISSIONSE)
    * [`JSDRV_ERROR_BUSY`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e16JSDRV_ERROR_BUSYE)
    * [`JSDRV_ERROR_UNAVAILABLE`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e23JSDRV_ERROR_UNAVAILABLEE)
    * [`JSDRV_ERROR_IN_USE`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e18JSDRV_ERROR_IN_USEE)
    * [`JSDRV_ERROR_CLOSED`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e18JSDRV_ERROR_CLOSEDE)
    * [`JSDRV_ERROR_SEQUENCE`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e20JSDRV_ERROR_SEQUENCEE)
    * [`JSDRV_ERROR_ABORTED`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e19JSDRV_ERROR_ABORTEDE)
    * [`JSDRV_ERROR_SYNCHRONIZATION`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv4N18jsdrv_error_code_e27JSDRV_ERROR_SYNCHRONIZATIONE)
  * [`jsdrv_error_code_name()`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv421jsdrv_error_code_name7int32_t)
  * [`jsdrv_error_code_description()`](https://docs.joulescope.com/en/software/joulescope_driver/h_error_code.md#_CPPv428jsdrv_error_code_description7int32_t)
* [Metadata handling](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md)
  * [`jsdrv_meta_flag_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#_CPPv417jsdrv_meta_flag_e)
    * [`JSDRV_META_FLAG_RO`](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#_CPPv4N17jsdrv_meta_flag_e18JSDRV_META_FLAG_ROE)
    * [`JSDRV_META_FLAG_HIDE`](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#_CPPv4N17jsdrv_meta_flag_e20JSDRV_META_FLAG_HIDEE)
    * [`JSDRV_META_FLAG_DEV`](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#_CPPv4N17jsdrv_meta_flag_e19JSDRV_META_FLAG_DEVE)
  * [`jsdrv_meta_syntax_check()`](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#_CPPv423jsdrv_meta_syntax_checkPKc)
  * [`jsdrv_meta_dtype()`](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#_CPPv416jsdrv_meta_dtypePKcP7uint8_t)
  * [`jsdrv_meta_default()`](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#_CPPv418jsdrv_meta_defaultPKcP13jsdrv_union_s)
  * [`jsdrv_meta_value()`](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#_CPPv416jsdrv_meta_valuePKcP13jsdrv_union_s)
  * [`jsdrv_meta_flags()`](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#_CPPv416jsdrv_meta_flagsPKcP8uint32_t)
  * [Host-side metadata](https://docs.joulescope.com/en/software/joulescope_driver/h_meta.md#host-side-metadata)
* [Time representation and functions](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md)
  * [`JSDRV_TIME_Q`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_Q)
  * [`JSDRV_TIME_MAX`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_MAX)
  * [`JSDRV_TIME_MIN`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_MIN)
  * [`JSDRV_TIME_EPOCH_UNIX_OFFSET_SECONDS`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_EPOCH_UNIX_OFFSET_SECONDS)
  * [`JSDRV_TIME_SECOND`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_SECOND)
  * [`JSDRV_FRACT_MASK`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_FRACT_MASK)
  * [`JSDRV_TIME_MILLISECOND`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_MILLISECOND)
  * [`JSDRV_TIME_MICROSECOND`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_MICROSECOND)
  * [`JSDRV_TIME_NANOSECOND`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_NANOSECOND)
  * [`JSDRV_TIME_MINUTE`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_MINUTE)
  * [`JSDRV_TIME_HOUR`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_HOUR)
  * [`JSDRV_TIME_DAY`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_DAY)
  * [`JSDRV_TIME_WEEK`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_WEEK)
  * [`JSDRV_TIME_MONTH`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_MONTH)
  * [`JSDRV_TIME_YEAR`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_YEAR)
  * [`JSDRV_TIME_TO_F64`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_TO_F64)
  * [`JSDRV_TIME_TO_F32`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_TO_F32)
  * [`JSDRV_TIME_TO_SECONDS`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_TO_SECONDS)
  * [`JSDRV_TIME_TO_MILLISECONDS`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_TO_MILLISECONDS)
  * [`JSDRV_TIME_TO_MICROSECONDS`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_TO_MICROSECONDS)
  * [`JSDRV_TIME_TO_NANOSECONDS`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_TO_NANOSECONDS)
  * [`JSDRV_SECONDS_TO_TIME`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_SECONDS_TO_TIME)
  * [`JSDRV_MILLISECONDS_TO_TIME`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_MILLISECONDS_TO_TIME)
  * [`JSDRV_MICROSECONDS_TO_TIME`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_MICROSECONDS_TO_TIME)
  * [`JSDRV_NANOSECONDS_TO_TIME`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_NANOSECONDS_TO_TIME)
  * [`JSDRV_TIME_STRING_LENGTH`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#c.JSDRV_TIME_STRING_LENGTH)
  * [`JSDRV_F64_TO_TIME()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv417JSDRV_F64_TO_TIMEd)
  * [`JSDRV_F32_TO_TIME()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv417JSDRV_F32_TO_TIMEf)
  * [`JSDRV_TIME_TO_COUNTER()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv421JSDRV_TIME_TO_COUNTER7int64_t8uint64_t)
  * [`JSDRV_TIME_TO_COUNTER_RZERO()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv427JSDRV_TIME_TO_COUNTER_RZERO7int64_t8uint64_t)
  * [`JSDRV_TIME_TO_COUNTER_RINF()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv426JSDRV_TIME_TO_COUNTER_RINF7int64_t8uint64_t)
  * [`JSDRV_COUNTER_TO_TIME()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv421JSDRV_COUNTER_TO_TIME8uint64_t8uint64_t)
  * [`JSDRV_TIME_ABS()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv414JSDRV_TIME_ABS7int64_t)
  * [`jsdrv_time_min()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv414jsdrv_time_min7int64_t7int64_t)
  * [`jsdrv_time_max()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv414jsdrv_time_max7int64_t7int64_t)
  * [`jsdrv_time_to_str()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv417jsdrv_time_to_str7int64_tPc6size_t)
  * [`jsdrv_time_from_counter()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv423jsdrv_time_from_counterPK16jsdrv_time_map_s8uint64_t)
  * [`jsdrv_time_to_counter()`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv421jsdrv_time_to_counterPK16jsdrv_time_map_s7int64_t)
  * [`jsdrv_time_map_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv416jsdrv_time_map_s)
    * [`offset_time`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv4N16jsdrv_time_map_s11offset_timeE)
    * [`offset_counter`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv4N16jsdrv_time_map_s14offset_counterE)
    * [`counter_rate`](https://docs.joulescope.com/en/software/joulescope_driver/h_time.md#_CPPv4N16jsdrv_time_map_s12counter_rateE)
* [Topic string utility functions](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md)
  * [`JSDRV_TOPIC_INIT`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#c.JSDRV_TOPIC_INIT)
  * [`jsdrv_topic_clear()`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv417jsdrv_topic_clearP13jsdrv_topic_s)
  * [`jsdrv_topic_truncate()`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv420jsdrv_topic_truncateP13jsdrv_topic_s7uint8_t)
  * [`jsdrv_topic_append()`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv418jsdrv_topic_appendP13jsdrv_topic_sPKc)
  * [`jsdrv_topic_remove()`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv418jsdrv_topic_removeP13jsdrv_topic_s)
  * [`jsdrv_topic_set()`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv415jsdrv_topic_setP13jsdrv_topic_sPKc)
  * [`jsdrv_topic_suffix_add()`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv422jsdrv_topic_suffix_addP13jsdrv_topic_sc)
  * [`jsdrv_topic_suffix_remove()`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv425jsdrv_topic_suffix_removeP13jsdrv_topic_s)
  * [`jsdrv_topic_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv413jsdrv_topic_s)
    * [`topic`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv4N13jsdrv_topic_s5topicE)
    * [`length`](https://docs.joulescope.com/en/software/joulescope_driver/h_topic.md#_CPPv4N13jsdrv_topic_s6lengthE)
* [Union value type](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md)
  * [`jsdrv_union_null`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_null)
  * [`jsdrv_union_null_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_null_r)
  * [`jsdrv_union_f32`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_f32)
  * [`jsdrv_union_f32_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_f32_r)
  * [`jsdrv_union_f64`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_f64)
  * [`jsdrv_union_f64_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_f64_r)
  * [`jsdrv_union_u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_u8)
  * [`jsdrv_union_u8_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_u8_r)
  * [`jsdrv_union_u16`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_u16)
  * [`jsdrv_union_u16_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_u16_r)
  * [`jsdrv_union_u32`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_u32)
  * [`jsdrv_union_u32_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_u32_r)
  * [`jsdrv_union_u64`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_u64)
  * [`jsdrv_union_u64_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_u64_r)
  * [`jsdrv_union_i8`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_i8)
  * [`jsdrv_union_i8_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_i8_r)
  * [`jsdrv_union_i16`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_i16)
  * [`jsdrv_union_i16_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_i16_r)
  * [`jsdrv_union_i32`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_i32)
  * [`jsdrv_union_i32_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_i32_r)
  * [`jsdrv_union_i64`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_i64)
  * [`jsdrv_union_i64_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_i64_r)
  * [`jsdrv_union_str`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_str)
  * [`jsdrv_union_cstr`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_cstr)
  * [`jsdrv_union_cstr_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_cstr_r)
  * [`jsdrv_union_json`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_json)
  * [`jsdrv_union_cjson`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_cjson)
  * [`jsdrv_union_cjson_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_cjson_r)
  * [`jsdrv_union_bin`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_bin)
  * [`jsdrv_union_cbin`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_cbin)
  * [`jsdrv_union_cbin_r`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#c.jsdrv_union_cbin_r)
  * [`jsdrv_union_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv413jsdrv_union_e)
    * [`JSDRV_UNION_NULL`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e16JSDRV_UNION_NULLE)
    * [`JSDRV_UNION_STR`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_STRE)
    * [`JSDRV_UNION_JSON`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e16JSDRV_UNION_JSONE)
    * [`JSDRV_UNION_BIN`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_BINE)
    * [`JSDRV_UNION_STDMSG`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e18JSDRV_UNION_STDMSGE)
    * [`JSDRV_UNION_FRAME`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e17JSDRV_UNION_FRAMEE)
    * [`JSDRV_UNION_F32`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_F32E)
    * [`JSDRV_UNION_F64`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_F64E)
    * [`JSDRV_UNION_U8`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e14JSDRV_UNION_U8E)
    * [`JSDRV_UNION_U16`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_U16E)
    * [`JSDRV_UNION_U32`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_U32E)
    * [`JSDRV_UNION_U64`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_U64E)
    * [`JSDRV_UNION_I8`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e14JSDRV_UNION_I8E)
    * [`JSDRV_UNION_I16`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_I16E)
    * [`JSDRV_UNION_I32`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_I32E)
    * [`JSDRV_UNION_I64`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_e15JSDRV_UNION_I64E)
  * [`jsdrv_union_flag_e`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv418jsdrv_union_flag_e)
    * [`JSDRV_UNION_FLAG_NONE`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N18jsdrv_union_flag_e21JSDRV_UNION_FLAG_NONEE)
    * [`JSDRV_UNION_FLAG_RETAIN`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N18jsdrv_union_flag_e23JSDRV_UNION_FLAG_RETAINE)
    * [`JSDRV_UNION_FLAG_CONST`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N18jsdrv_union_flag_e22JSDRV_UNION_FLAG_CONSTE)
    * [`JSDRV_UNION_FLAG_HEAP_MEMORY`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N18jsdrv_union_flag_e28JSDRV_UNION_FLAG_HEAP_MEMORYE)
  * [`jsdrv_union_eq()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv414jsdrv_union_eqPK13jsdrv_union_sPK13jsdrv_union_s)
  * [`jsdrv_union_eq_exact()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv420jsdrv_union_eq_exactPK13jsdrv_union_sPK13jsdrv_union_s)
  * [`jsdrv_union_equiv()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv417jsdrv_union_equivPK13jsdrv_union_sPK13jsdrv_union_s)
  * [`jsdrv_union_widen()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv417jsdrv_union_widenP13jsdrv_union_s)
  * [`jsdrv_union_as_type()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv419jsdrv_union_as_typeP13jsdrv_union_s7uint8_t)
  * [`jsdrv_union_to_bool()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv419jsdrv_union_to_boolPK13jsdrv_union_sPb)
  * [`jsdrv_union_is_type_ptr()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv423jsdrv_union_is_type_ptrPK13jsdrv_union_s)
  * [`jsdrv_union_type_to_str()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv423jsdrv_union_type_to_str7uint8_t)
  * [`jsdrv_union_value_to_str()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv424jsdrv_union_value_to_strPK13jsdrv_union_sPc8uint32_t8uint32_t)
  * [`jsdrv_union_copy()`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv416jsdrv_union_copyP13jsdrv_union_sPK13jsdrv_union_sPv6size_t)
  * [`jsdrv_union_inner_u`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv419jsdrv_union_inner_u)
    * [`str`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3strE)
    * [`bin`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3binE)
    * [`f32`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3f32E)
    * [`f64`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3f64E)
    * [`u8`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u2u8E)
    * [`u16`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3u16E)
    * [`u32`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3u32E)
    * [`u64`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3u64E)
    * [`i8`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u2i8E)
    * [`i16`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3i16E)
    * [`i32`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3i32E)
    * [`i64`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N19jsdrv_union_inner_u3i64E)
  * [`jsdrv_union_s`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv413jsdrv_union_s)
    * [`type`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_s4typeE)
    * [`flags`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_s5flagsE)
    * [`op`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_s2opE)
    * [`app`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_s3appE)
    * [`size`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_s4sizeE)
    * [`value`](https://docs.joulescope.com/en/software/joulescope_driver/h_union.md#_CPPv4N13jsdrv_union_s5valueE)
