/* * Copyright (c) 2017, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * Neither the name of The Linux Foundation nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include /* effect generic definations */ enum { EFFECT_BASSBOOST = 0, EFFECT_VIRTUALIZER, EFFECT_EQUALIZER, EFFECT_VISUALIZER, EFFECT_REVERB, EFFECT_AUDIOSPHERE, EFFECT_MAX }; extern const char *effect_str[EFFECT_MAX]; /* defination of effect thread entries and data structures */ typedef void* (*thread_func_t)(void *); extern thread_func_t effect_thread_funcs[EFFECT_MAX]; void *bassboost_thread_func(void*); // thread main of bassboost effect void *virtualizer_thread_func(void*); // thread main of virtualizer effect void *equalizer_thread_func(void*); // thread main of equalizer effect void *visualizer_thread_func(void*); // thread main of visualizer effect void *reverb_thread_func(void*); // thread main of reverb effect void *command_thread_func(void*); // thread main of effect command void *asphere_thread_func(void*); // thread main of audiosphere effect typedef struct thread_data { pthread_t effect_thread; pthread_attr_t attr; pthread_mutex_t mutex; pthread_cond_t loop_cond; audio_io_handle_t io_handle; int who_am_i; volatile bool exit; int cmd; uint32_t cmd_code; uint32_t cmd_size; void *cmd_data; uint32_t *reply_size; void *reply_data; int default_value; bool default_flag; } thread_data_t; typedef struct cmd_data { pthread_t cmd_thread; pthread_attr_t attr; volatile bool exit; thread_data_t **fx_data_ptr; } cmd_data_t; /* effect thread manipulate operations */ extern thread_data_t *create_effect_thread(int, thread_func_t); extern void notify_effect_command(thread_data_t *, int, uint32_t, uint32_t, void *); extern void destroy_effect_thread(thread_data_t *); enum { EFFECT_LOAD_LIB = 1, EFFECT_GET_DESC, EFFECT_CREATE, EFFECT_CMD, EFFECT_PROC, EFFECT_RELEASE, EFFECT_UNLOAD_LIB, EFFECT_EXIT }; enum { TTY_INVALID = 0, TTY_ENABLE, TTY_DISABLE, TTY_BB_SET_STRENGTH, TTY_VT_SET_STRENGTH, TTY_EQ_SET_PRESET, TTY_EQ_SET_CUSTOM, TTY_RB_SET_PRESET, TTY_ASPHERE_SET_STRENGTH, }; /* user prompt definations */ #define TTY_CMD_MAX 4 typedef struct cmd_def { char *cmd_str; uint32_t cmd_id; char *cmd_prompt; } cmd_def_t; int get_key_from_name(int, const char *); char *get_prompt_from_name(int, const char *); bool is_valid_input(char *);