# List of Blocking vs Non-Blocking Functions

## Non Blocking

No IO necessary

- tecella_debug()
- tecella_debug_default()
- tecella_enumerate_get()
- tecella_initialize_pair()
- tecella_user_config_get()
- tecella_user_config_set()
- tecella_get_lib_props()
- tecella_get_reg_props()
- tecella_get_gain_label()
- tecella_get_source_label()
- tecella_error_message()
- tecella_error_set_callback()
- tecella_diagnostics_get_pass()
- tecella_diagnostics_get_failure()
- tecella_bessel_value2freq()
- tecella_bessel_freq2value()
- tecella_stimulus_set_callback()
- tecella_stimulus_sample_count()
- tecella_stimulus_sample_count_partial()
- tecella_auto_calibrate_get()
- tecella_auto_calibrate_set()
- tecella_auto_calibrate_leak_enable()
- tecella_auto_artifact_decay_start()
- tecella_auto_artifact_enable()
- tecella_auto_artifact_get_capacitance()
- tecella_auto_artifact_get_size()
- tecella_auto_artifact_get()
- tecella_auto_artifact_set()
- tecella_acquire_set_callback()
- tecella_acquire_enable_channel()
- tecella_acquire_set_buffer_size()
- tecella_acquire_samples_available()
- tecella_acquire_i2d_scale()

## Non-Blocking + Queued IO

No immediate IO, but IO is queued in another thread. Can be called in parallel threads without regard to other IO.

- tecella_chan_set_source()
- tecella_chan_get_source()
- tecella_chan_set_gain()
- tecella_chan_get_gain()
- tecella_chan_set_stimulus()
- tecella_chan_get_stimulus()
- tecella_chan_set()
- tecella_chan_get()
- tecella_chan_set_pct()
- tecella_chan_get_pct()
- tecella_chan_set_enable()
- tecella_chan_get_enable()
- tecella_chan_set_bessel()
- tecella_chan_get_bessel()
- tecella_stimulus_zap()
- tecella_acquire_start_stimulus()
- tecella_acquire_start_stimuli()
- tecella_acquire_stop_stimulus()

## Semi-Blocking

Requires a small amount of IO on the scale of ms.

- tecella_enumerate()
- tecella_get_hw_props()
- tecella_finalize()
- tecella_utility_dac_set()
- tecella_utility_trigger_out()
- tecella_utility_set_stimulus()
- tecella_stimulus_set_hold()
- tecella_stimulus_get()
- tecella_acquire_start()

## Semi-Blocking + Queued IO

Some immediate IO on the scale of ms + some queued IO.

- tecella_stimulus_set()

## Blocking

Rrequires IO on the scale of seconds to complete. If calls to these functions overlap with each other or occur after tecella_acquire_start and before tecella_acquire_stop, they will fail.

- tecella_initialize()
- tecella_diagnostics_run()
- tecella_auto_scale()
- tecella_auto_calibrate()
- tecella_auto_offset()
- tecella_auto_comp()
- tecella_auto_artifact_update()

## Blocking

Waits for in-flight IO and acquisition threads to end.

- tecella_acquire_stop()

## Depends

Non-blocking if requested samples are ready, blocking otherwise:

- tecella_acquire_read_d()
- tecella_acquire_read_f()
- tecella_acquire_read_i()