summaryrefslogtreecommitdiff
path: root/cras/src/server/test_iodev.c
diff options
context:
space:
mode:
Diffstat (limited to 'cras/src/server/test_iodev.c')
-rw-r--r--cras/src/server/test_iodev.c267
1 files changed, 0 insertions, 267 deletions
diff --git a/cras/src/server/test_iodev.c b/cras/src/server/test_iodev.c
deleted file mode 100644
index cb7d5f3a..00000000
--- a/cras/src/server/test_iodev.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/* Copyright (c) 2014 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.
- */
-
-#include <sys/ioctl.h>
-#include <pthread.h>
-#include <sys/param.h>
-#include <syslog.h>
-
-#include "audio_thread.h"
-#include "byte_buffer.h"
-#include "cras_audio_area.h"
-#include "cras_config.h"
-#include "cras_iodev.h"
-#include "cras_iodev_list.h"
-#include "cras_types.h"
-#include "cras_util.h"
-#include "test_iodev.h"
-#include "utlist.h"
-
-#define TEST_BUFFER_SIZE (16 * 1024)
-
-static size_t test_supported_rates[] = { 16000, 0 };
-
-static size_t test_supported_channel_counts[] = { 1, 0 };
-
-static snd_pcm_format_t test_supported_formats[] = { SND_PCM_FORMAT_S16_LE, 0 };
-
-struct test_iodev {
- struct cras_iodev base;
- int fd;
- struct byte_buffer *audbuff;
- unsigned int fmt_bytes;
-};
-
-/*
- * iodev callbacks.
- */
-
-static int frames_queued(const struct cras_iodev *iodev,
- struct timespec *tstamp)
-{
- struct test_iodev *testio = (struct test_iodev *)iodev;
- int available;
-
- if (testio->fd < 0)
- return 0;
- ioctl(testio->fd, FIONREAD, &available);
- clock_gettime(CLOCK_MONOTONIC_RAW, tstamp);
- return available / testio->fmt_bytes;
-}
-
-static int delay_frames(const struct cras_iodev *iodev)
-{
- return 0;
-}
-
-static int close_dev(struct cras_iodev *iodev)
-{
- struct test_iodev *testio = (struct test_iodev *)iodev;
-
- byte_buffer_destroy(&testio->audbuff);
- testio->audbuff = NULL;
- cras_iodev_free_audio_area(iodev);
- return 0;
-}
-
-static int configure_dev(struct cras_iodev *iodev)
-{
- struct test_iodev *testio = (struct test_iodev *)iodev;
-
- if (iodev->format == NULL)
- return -EINVAL;
-
- cras_iodev_init_audio_area(iodev, iodev->format->num_channels);
- testio->fmt_bytes = cras_get_format_bytes(iodev->format);
- testio->audbuff =
- byte_buffer_create(TEST_BUFFER_SIZE * testio->fmt_bytes);
-
- return 0;
-}
-
-static int get_buffer(struct cras_iodev *iodev, struct cras_audio_area **area,
- unsigned *frames)
-{
- struct test_iodev *testio = (struct test_iodev *)iodev;
- unsigned int readable;
- uint8_t *buff;
-
- buff = buf_read_pointer_size(testio->audbuff, &readable);
- *frames = MIN(*frames, readable);
-
- iodev->area->frames = *frames;
- cras_audio_area_config_buf_pointers(iodev->area, iodev->format, buff);
- *area = iodev->area;
- return 0;
-}
-
-static int put_buffer(struct cras_iodev *iodev, unsigned frames)
-{
- struct test_iodev *testio = (struct test_iodev *)iodev;
-
- /* Input */
- buf_increment_read(testio->audbuff,
- (size_t)frames * (size_t)testio->fmt_bytes);
-
- return 0;
-}
-
-static int get_buffer_fd_read(struct cras_iodev *iodev,
- struct cras_audio_area **area, unsigned *frames)
-{
- struct test_iodev *testio = (struct test_iodev *)iodev;
- int nread;
- uint8_t *write_ptr;
- unsigned int avail;
-
- if (testio->fd < 0) {
- *frames = 0;
- return 0;
- }
-
- write_ptr = buf_write_pointer_size(testio->audbuff, &avail);
- avail = MIN(avail, *frames * testio->fmt_bytes);
- nread = read(testio->fd, write_ptr, avail);
- if (nread <= 0) {
- *frames = 0;
- audio_thread_rm_callback(testio->fd);
- close(testio->fd);
- testio->fd = -1;
- return 0;
- }
- buf_increment_write(testio->audbuff, nread);
- *frames = nread / testio->fmt_bytes;
- iodev->area->frames = *frames;
- cras_audio_area_config_buf_pointers(iodev->area, iodev->format,
- write_ptr);
- *area = iodev->area;
- return nread;
-}
-
-static void update_active_node(struct cras_iodev *iodev, unsigned node_idx,
- unsigned dev_enabled)
-{
-}
-
-static void play_file_as_hotword(struct test_iodev *testio, const char *path)
-{
- if (testio->fd >= 0) {
- /* Remove audio thread callback from main thread. */
- audio_thread_rm_callback_sync(
- cras_iodev_list_get_audio_thread(), testio->fd);
- close(testio->fd);
- }
-
- testio->fd = open(path, O_RDONLY);
- buf_reset(testio->audbuff);
-}
-
-/*
- * Exported Interface.
- */
-
-struct cras_iodev *test_iodev_create(enum CRAS_STREAM_DIRECTION direction,
- enum TEST_IODEV_TYPE type)
-{
- struct test_iodev *testio;
- struct cras_iodev *iodev;
- struct cras_ionode *node;
-
- if (direction != CRAS_STREAM_INPUT || type != TEST_IODEV_HOTWORD)
- return NULL;
-
- testio = calloc(1, sizeof(*testio));
- if (testio == NULL)
- return NULL;
- iodev = &testio->base;
- iodev->direction = direction;
- testio->fd = -1;
-
- iodev->supported_rates = test_supported_rates;
- iodev->supported_channel_counts = test_supported_channel_counts;
- iodev->supported_formats = test_supported_formats;
- iodev->buffer_size = TEST_BUFFER_SIZE;
-
- iodev->configure_dev = configure_dev;
- iodev->close_dev = close_dev;
- iodev->frames_queued = frames_queued;
- iodev->delay_frames = delay_frames;
- if (type == TEST_IODEV_HOTWORD)
- iodev->get_buffer = get_buffer_fd_read;
- else
- iodev->get_buffer = get_buffer;
- iodev->put_buffer = put_buffer;
- iodev->update_active_node = update_active_node;
-
- /*
- * Record max supported channels into cras_iodev_info.
- * The value is the max of test_supported_channel_counts.
- */
- iodev->info.max_supported_channels = 1;
-
- /* Create an empty ionode */
- node = (struct cras_ionode *)calloc(1, sizeof(*node));
- node->dev = iodev;
- node->plugged = 1;
- if (type == TEST_IODEV_HOTWORD)
- node->type = CRAS_NODE_TYPE_HOTWORD;
- else
- node->type = CRAS_NODE_TYPE_UNKNOWN;
- node->volume = 100;
- node->software_volume_needed = 0;
- node->ui_gain_scaler = 1.0f;
- strcpy(node->name, "(default)");
- cras_iodev_add_node(iodev, node);
- cras_iodev_set_active_node(iodev, node);
-
- /* Finally add it to the appropriate iodev list. */
- snprintf(iodev->info.name, ARRAY_SIZE(iodev->info.name), "Tester");
- iodev->info.name[ARRAY_SIZE(iodev->info.name) - 1] = '\0';
- cras_iodev_list_add_input(iodev);
-
- return iodev;
-}
-
-void test_iodev_destroy(struct cras_iodev *iodev)
-{
- struct test_iodev *testio = (struct test_iodev *)iodev;
-
- cras_iodev_list_rm_input(iodev);
- free(iodev->active_node);
- cras_iodev_free_resources(iodev);
- free(testio);
-}
-
-unsigned int test_iodev_add_samples(struct test_iodev *testio, uint8_t *samples,
- unsigned int count)
-{
- unsigned int avail;
- uint8_t *write_ptr;
-
- write_ptr = buf_write_pointer_size(testio->audbuff, &avail);
- count = MIN(count, avail);
- memcpy(write_ptr, samples, (size_t)count * (size_t)testio->fmt_bytes);
- buf_increment_write(testio->audbuff,
- (size_t)count * (size_t)testio->fmt_bytes);
- return count;
-}
-
-void test_iodev_command(struct cras_iodev *iodev,
- enum CRAS_TEST_IODEV_CMD command, unsigned int data_len,
- const uint8_t *data)
-{
- struct test_iodev *testio = (struct test_iodev *)iodev;
-
- if (!cras_iodev_is_open(iodev))
- return;
-
- switch (command) {
- case TEST_IODEV_CMD_HOTWORD_TRIGGER:
- play_file_as_hotword(testio, (char *)data);
- break;
- default:
- break;
- }
-}