/*
 * Copyright 2018 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef INCLUDE_ALSA_CONFORMANCE_THREAD_H_
#define INCLUDE_ALSA_CONFORMANCE_THREAD_H_

/* Create device thread object. */
struct dev_thread *dev_thread_create();

/* Destroy device thread object. */
void dev_thread_destroy(struct dev_thread *thread);

/* Set stream type of device, input or output. */
void dev_thread_set_stream(struct dev_thread *thread, snd_pcm_stream_t stream);

/* Set name of device. */
void dev_thread_set_dev_name(struct dev_thread *thread, const char *name);

/* Set channels of device. */
void dev_thread_set_channels(struct dev_thread *thread, unsigned int channels);

/* Set format of device. */
void dev_thread_set_format(struct dev_thread *thread, snd_pcm_format_t format);

/* Set format of device from format string. */
void dev_thread_set_format_from_str(struct dev_thread *thread,
				    const char *format_str);

/* Set rate of device. */
void dev_thread_set_rate(struct dev_thread *thread, unsigned int rate);

/* Set period size of device. */
void dev_thread_set_period_size(struct dev_thread *thread,
				snd_pcm_uframes_t period_size);
/* Set block size for each write. */
void dev_thread_set_block_size(struct dev_thread *thread, unsigned int size);

/* Set duration of stream. */
void dev_thread_set_duration(struct dev_thread *thread, double duration);

/* Open device and initialize params. */
void dev_thread_open_device(struct dev_thread *thread);

/* Close device. */
void dev_thread_close_device(struct dev_thread *thread);

/* Set hw and sw params. */
void dev_thread_set_params(struct dev_thread *thread);

/* Set iterations. */
void dev_thread_set_iterations(struct dev_thread *thread, int iterations);

/* Run device thread with set iterations. */
void *dev_thread_run_iterations(void *arg);

/* Print device information. */
void dev_thread_print_device_information(struct dev_thread *thread);

/* Print device params after setting is completed. */
void dev_thread_print_params(struct dev_thread *thread);

/* Print result of device thread. */
void dev_thread_print_result(struct dev_thread *thread);

/* Set merge threshould_t. */
void dev_thread_set_merge_threshold_t(struct dev_thread *thread,
				      double merge_threshold);

#endif /* INCLUDE_ALSA_CONFORMANCE_THREAD_H_ */
