/* * Copyright (C) 2018 The Android Open Source Project * * 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. */ #ifndef SOUND_TRIGGER_INTF_H #define SOUND_TRIGGER_INTF_H #include #include "tinyalsa/asoundlib.h" /*-------------------- Begin: AHAL-STHAL Interface ---------------------------*/ /* * Maintain the proprietary interface between AHAL and STHAL locally to avoid * the compilation dependency of interface header file from STHAL. */ #define MAKE_HAL_VERSION(maj, min) ((((maj) & 0xff) << 8) | ((min) & 0xff)) #define MAJOR_VERSION(ver) (((ver) & 0xff00) >> 8) #define MINOR_VERSION(ver) ((ver) & 0x00ff) /* Proprietary interface version used for compatibility with STHAL */ #define STHAL_PROP_API_VERSION_1_0 MAKE_HAL_VERSION(1, 0) #define STHAL_PROP_API_CURRENT_VERSION STHAL_PROP_API_VERSION_1_0 #define ST_EVENT_CONFIG_MAX_STR_VALUE 32 #define AUDIO_HAL_NAME_PREFIX "audio.primary" #define SOUND_TRIGGER_PLATFORM "msmnile" #ifdef __LP64__ #define AUDIO_HAL_LIBRARY_PATH "/vendor/lib64/hw" #else #define AUDIO_HAL_LIBRARY_PATH "/vendor/lib/hw" #endif const unsigned int sthal_prop_api_version = STHAL_PROP_API_CURRENT_VERSION; #define SOUND_TRIGGER_SAMPLING_RATE 16000 #define SOUND_TRIGGER_CHANNEL 1 #define SOUND_TRIGGER_PERIOD_COUNT 2 #define SOUND_TRIGGER_PERIOD_DURATION_MSEC 20 #define SOUND_TRIGGER_PERIOD_SIZE (SOUND_TRIGGER_SAMPLING_RATE * \ SOUND_TRIGGER_CHANNEL * \ SOUND_TRIGGER_PERIOD_DURATION_MSEC) / 1000 static struct pcm_config stdev_hotword_pcm_config = { .channels = SOUND_TRIGGER_CHANNEL, .rate = SOUND_TRIGGER_SAMPLING_RATE, .period_size = SOUND_TRIGGER_PERIOD_SIZE, .period_count = SOUND_TRIGGER_PERIOD_COUNT, .format = PCM_FORMAT_S16_LE, }; typedef enum { ST_EVENT_SESSION_REGISTER, ST_EVENT_SESSION_DEREGISTER } sound_trigger_event_type_t; typedef enum { AUDIO_EVENT_CAPTURE_DEVICE_INACTIVE, AUDIO_EVENT_CAPTURE_DEVICE_ACTIVE, AUDIO_EVENT_PLAYBACK_STREAM_INACTIVE, AUDIO_EVENT_PLAYBACK_STREAM_ACTIVE, AUDIO_EVENT_STOP_LAB, AUDIO_EVENT_SSR, AUDIO_EVENT_NUM_ST_SESSIONS, AUDIO_EVENT_READ_SAMPLES, AUDIO_EVENT_DEVICE_CONNECT, AUDIO_EVENT_DEVICE_DISCONNECT, AUDIO_EVENT_SVA_EXEC_MODE, AUDIO_EVENT_SVA_EXEC_MODE_STATUS, AUDIO_EVENT_CAPTURE_STREAM_INACTIVE, AUDIO_EVENT_CAPTURE_STREAM_ACTIVE, } audio_event_type_t; typedef enum { USECASE_TYPE_PCM_PLAYBACK, USECASE_TYPE_PCM_CAPTURE, USECASE_TYPE_VOICE_CALL, USECASE_TYPE_VOIP_CALL, } audio_stream_usecase_type_t; enum ssr_event_status { SND_CARD_STATUS_OFFLINE, SND_CARD_STATUS_ONLINE, CPE_STATUS_OFFLINE, CPE_STATUS_ONLINE, SLPI_STATUS_OFFLINE, SLPI_STATUS_ONLINE }; struct sound_trigger_session_info { void* p_ses; /* opaque pointer to st_session obj */ int capture_handle; struct pcm *pcm; struct pcm_config config; }; struct audio_read_samples_info { struct sound_trigger_session_info *ses_info; void *buf; size_t num_bytes; }; struct audio_hal_usecase { audio_stream_usecase_type_t type; }; struct sound_trigger_event_info { struct sound_trigger_session_info st_ses; }; struct sound_trigger_get_param_data { char *param; int sm_handle; struct str_parms *reply; }; struct sound_trigger_device_info { int device; }; struct audio_event_info { union { enum ssr_event_status status; int value; struct sound_trigger_session_info ses_info; struct audio_read_samples_info aud_info; char str_value[ST_EVENT_CONFIG_MAX_STR_VALUE]; struct audio_hal_usecase usecase; bool audio_ec_ref_enabled; struct sound_trigger_get_param_data st_get_param_data; } u; struct sound_trigger_device_info device_info; }; /* STHAL callback which is called by AHAL */ typedef int (*sound_trigger_hw_call_back_t)(audio_event_type_t, struct audio_event_info*); /* AHAL callback which is called by STHAL */ typedef void (*audio_hw_call_back_t)(sound_trigger_event_type_t, struct sound_trigger_event_info*); /*---------------- End: AHAL-STHAL Interface ----------------------------------*/ #endif /* SOUND_TRIGGER_INTF_H */