blob: c5574280792e7cf76970dcf409f5eb77032c0e1c [file] [log] [blame]
/*
* Copyright (c) 2019-2021, 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.
*
* Changes from Qualcomm Innovation Center are provided under the following license:
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
/** \file pal_defs.h
* \brief struture, enum constant defintions of the
* PAL(Platform Audio Layer).
*
* This file contains macros, constants, or global variables
* exposed to the client of PAL(Platform Audio Layer).
*/
#ifndef PAL_DEFS_H
#define PAL_DEFS_H
#include <stdint.h>
#include <stdlib.h>
#include <stdbool.h>
#ifdef __cplusplus
#include <map>
#include <string>
extern "C" {
#endif
#define MIXER_PATH_MAX_LENGTH 100
#define PAL_MAX_CHANNELS_SUPPORTED 64
#define MAX_KEYWORD_SUPPORTED 8
/** Audio stream handle */
typedef uint64_t pal_stream_handle_t;
/** Sound Trigger handle */
typedef uint64_t pal_st_handle_t;
/** PAL Audio format enumeration */
typedef enum {
PAL_AUDIO_FMT_DEFAULT_PCM = 0x1, /**< PCM*/
PAL_AUDIO_FMT_PCM_S16_LE = PAL_AUDIO_FMT_DEFAULT_PCM, /**< 16 bit little endian PCM*/
PAL_AUDIO_FMT_DEFAULT_COMPRESSED = 0x2, /**< Default Compressed*/
PAL_AUDIO_FMT_MP3 = PAL_AUDIO_FMT_DEFAULT_COMPRESSED,
PAL_AUDIO_FMT_AAC = 0x3,
PAL_AUDIO_FMT_AAC_ADTS = 0x4,
PAL_AUDIO_FMT_AAC_ADIF = 0x5,
PAL_AUDIO_FMT_AAC_LATM = 0x6,
PAL_AUDIO_FMT_WMA_STD = 0x7,
PAL_AUDIO_FMT_ALAC = 0x8,
PAL_AUDIO_FMT_APE = 0x9,
PAL_AUDIO_FMT_WMA_PRO = 0xA,
PAL_AUDIO_FMT_FLAC = 0xB,
PAL_AUDIO_FMT_FLAC_OGG = 0xC,
PAL_AUDIO_FMT_VORBIS = 0xD,
PAL_AUDIO_FMT_AMR_NB = 0xE,
PAL_AUDIO_FMT_AMR_WB = 0xF,
PAL_AUDIO_FMT_AMR_WB_PLUS = 0x10,
PAL_AUDIO_FMT_EVRC = 0x11,
PAL_AUDIO_FMT_G711 = 0x12,
PAL_AUDIO_FMT_QCELP = 0x13,
PAL_AUDIO_FMT_PCM_S8 = 0x14, /**< 8 Bit PCM*/
PAL_AUDIO_FMT_PCM_S24_3LE = 0x15, /**<24 bit packed little endian PCM*/
PAL_AUDIO_FMT_PCM_S24_LE = 0x16, /**<24bit in 32bit word (LSB aligned) little endian PCM*/
PAL_AUDIO_FMT_PCM_S32_LE = 0x17, /**< 32bit little endian PCM*/
PAL_AUDIO_FMT_NON_PCM = 0xE0000000, /* Internal Constant used for Non PCM format identification */
PAL_AUDIO_FMT_COMPRESSED_RANGE_BEGIN = 0xF0000000, /* Reserved for beginning of compressed codecs */
PAL_AUDIO_FMT_COMPRESSED_EXTENDED_RANGE_BEGIN = 0xF0000F00, /* Reserved for beginning of 3rd party codecs */
PAL_AUDIO_FMT_COMPRESSED_EXTENDED_RANGE_END = 0xF0000FFF, /* Reserved for beginning of 3rd party codecs */
PAL_AUDIO_FMT_COMPRESSED_RANGE_END = PAL_AUDIO_FMT_COMPRESSED_EXTENDED_RANGE_END /* Reserved for beginning of 3rd party codecs */
} pal_audio_fmt_t;
#define PCM_24_BIT_PACKED (0x6u)
#define PCM_32_BIT (0x3u)
#define PCM_16_BIT (0x1u)
#define SAMPLE_RATE_192000 192000
#ifdef __cplusplus
static const std::map<std::string, pal_audio_fmt_t> PalAudioFormatMap
{
{ "PCM", PAL_AUDIO_FMT_PCM_S16_LE},
{ "PCM_S8", PAL_AUDIO_FMT_PCM_S8},
{ "PCM_S16_LE", PAL_AUDIO_FMT_PCM_S16_LE},
{ "PCM_S24_3LE", PAL_AUDIO_FMT_PCM_S24_3LE},
{ "PCM_S24_LE", PAL_AUDIO_FMT_PCM_S24_LE},
{ "PCM_S32_LE", PAL_AUDIO_FMT_PCM_S32_LE},
{ "MP3", PAL_AUDIO_FMT_MP3},
{ "AAC", PAL_AUDIO_FMT_AAC},
{ "AAC_ADTS", PAL_AUDIO_FMT_AAC_ADTS},
{ "AAC_ADIF", PAL_AUDIO_FMT_AAC_ADIF},
{ "AAC_LATM", PAL_AUDIO_FMT_AAC_LATM},
{ "WMA_STD", PAL_AUDIO_FMT_WMA_STD},
{ "ALAC", PAL_AUDIO_FMT_ALAC},
{ "APE", PAL_AUDIO_FMT_APE},
{ "WMA_PRO", PAL_AUDIO_FMT_WMA_PRO},
{ "FLAC", PAL_AUDIO_FMT_FLAC},
{ "FLAC_OGG", PAL_AUDIO_FMT_FLAC_OGG},
{ "VORBIS", PAL_AUDIO_FMT_VORBIS},
{ "AMR_NB", PAL_AUDIO_FMT_AMR_NB},
{ "AMR_WB", PAL_AUDIO_FMT_AMR_WB},
{ "AMR_WB_PLUS", PAL_AUDIO_FMT_AMR_WB_PLUS},
{ "EVRC", PAL_AUDIO_FMT_EVRC},
{ "G711", PAL_AUDIO_FMT_G711},
{ "QCELP", PAL_AUDIO_FMT_QCELP}
};
#endif
struct aac_enc_cfg {
uint16_t aac_enc_mode; /**< AAC encoder mode */
uint16_t aac_fmt_flag; /**< AAC format flag */
};
struct pal_snd_enc_aac {
uint32_t aac_bit_rate;
struct aac_enc_cfg enc_cfg;
};
struct pal_snd_dec_aac {
uint16_t audio_obj_type;
uint16_t pce_bits_size;
};
struct pal_snd_dec_wma {
uint32_t fmt_tag;
uint32_t super_block_align;
uint32_t bits_per_sample;
uint32_t channelmask;
uint32_t encodeopt;
uint32_t encodeopt1;
uint32_t encodeopt2;
uint32_t avg_bit_rate;
};
struct pal_snd_dec_alac {
uint32_t frame_length;
uint8_t compatible_version;
uint8_t bit_depth;
uint8_t pb;
uint8_t mb;
uint8_t kb;
uint8_t num_channels;
uint16_t max_run;
uint32_t max_frame_bytes;
uint32_t avg_bit_rate;
uint32_t sample_rate;
uint32_t channel_layout_tag;
};
struct pal_snd_dec_ape {
uint16_t compatible_version;
uint16_t compression_level;
uint32_t format_flags;
uint32_t blocks_per_frame;
uint32_t final_frame_blocks;
uint32_t total_frames;
uint16_t bits_per_sample;
uint16_t num_channels;
uint32_t sample_rate;
uint32_t seek_table_present;
};
struct pal_snd_dec_flac {
uint16_t sample_size;
uint16_t min_blk_size;
uint16_t max_blk_size;
uint16_t min_frame_size;
uint16_t max_frame_size;
};
struct pal_snd_dec_vorbis {
uint32_t bit_stream_fmt;
};
typedef struct pal_key_value_pair_s {
uint32_t key; /**< key */
uint32_t value; /**< value */
} pal_key_value_pair_t;
typedef struct pal_key_vector_s {
size_t num_tkvs; /**< number of key value pairs */
pal_key_value_pair_t kvp[]; /**< vector of key value pairs */
} pal_key_vector_t;
typedef enum {
PARAM_NONTKV,
PARAM_TKV,
} pal_param_type_t;
typedef struct pal_effect_custom_payload_s {
uint32_t paramId;
uint32_t data[];
} pal_effect_custom_payload_t;
typedef struct effect_pal_payload_s {
pal_param_type_t isTKV; /* payload type: 0->non-tkv 1->tkv*/
uint32_t tag;
uint32_t payloadSize;
uint32_t payload[]; /* TKV uses pal_key_vector_t, while nonTKV uses pal_effect_custom_payload_t */
} effect_pal_payload_t;
/* Type of Modes for Speaker Protection */
typedef enum {
PAL_SP_MODE_DYNAMIC_CAL = 1,
PAL_SP_MODE_FACTORY_TEST,
PAL_SP_MODE_V_VALIDATION,
} pal_spkr_prot_mode;
/* Payload For ID: PAL_PARAM_ID_SP_MODE
* Description : Values for Speaker protection modes
*/
typedef struct pal_spkr_prot_payload {
uint32_t spkrHeatupTime; /* Wait time in mili seconds to heat up the
* speaker before collecting statistics */
uint32_t operationModeRunTime; /* Time period in milli seconds when
* statistics are collected */
pal_spkr_prot_mode operationMode;/* Type of mode for which request is raised */
} pal_spkr_prot_payload;
typedef enum {
GEF_PARAM_READ = 0,
GEF_PARAM_WRITE,
} gef_param_rw_t;
/** Audio parameter data*/
typedef union {
struct pal_snd_dec_aac aac_dec;
struct pal_snd_dec_wma wma_dec;
struct pal_snd_dec_alac alac_dec;
struct pal_snd_dec_ape ape_dec;
struct pal_snd_dec_flac flac_dec;
struct pal_snd_dec_vorbis vorbis_dec;
} pal_snd_dec_t;
/** Audio encoder parameter data*/
typedef union {
struct pal_snd_enc_aac aac_enc;
} pal_snd_enc_t;
/** Audio parameter data*/
typedef struct pal_param_payload_s {
uint32_t payload_size;
uint8_t payload[];
} pal_param_payload;
typedef struct gef_payload_s {
pal_key_vector_t *graph;
bool persist;
effect_pal_payload_t data;
} gef_payload_t;
/** Audio channel map enumeration*/
typedef enum {
PAL_CHMAP_CHANNEL_FL = 1, /**< Front right channel. */
PAL_CHMAP_CHANNEL_FR = 2, /**< Front center channel. */
PAL_CHMAP_CHANNEL_C = 3, /**< Left surround channel. */
PAL_CHMAP_CHANNEL_LS = 4, /** Right surround channel. */
PAL_CHMAP_CHANNEL_RS = 5, /** Low frequency effect channel. */
PAL_CHMAP_CHANNEL_LFE = 6, /** Center surround channel; */
PAL_CHMAP_CHANNEL_RC = 7, /**< rear center channel. */
PAL_CHMAP_CHANNEL_CB = PAL_CHMAP_CHANNEL_RC, /**< center back channel. */
PAL_CHMAP_CHANNEL_LB = 8, /**< rear left channel. */
PAL_CHMAP_CHANNEL_RB = 9, /**< rear right channel. */
PAL_CHMAP_CHANNEL_TS = 10, /**< Top surround channel. */
PAL_CHMAP_CHANNEL_CVH = 11, /**< Center vertical height channel.*/
PAL_CHMAP_CHANNEL_TFC = PAL_CHMAP_CHANNEL_CVH, /**< Top front center channel. */
PAL_CHMAP_CHANNEL_MS = 12, /**< Mono surround channel. */
PAL_CHMAP_CHANNEL_FLC = 13, /**< Front left of center channel. */
PAL_CHMAP_CHANNEL_FRC = 14, /**< Front right of center channel. */
PAL_CHMAP_CHANNEL_RLC = 15, /**< Rear left of center channel. */
PAL_CHMAP_CHANNEL_RRC = 16, /**< Rear right of center channel. */
PAL_CHMAP_CHANNEL_LFE2 = 17, /**< Secondary low frequency effect channel. */
PAL_CHMAP_CHANNEL_SL = 18, /**< Side left channel. */
PAL_CHMAP_CHANNEL_SR = 19, /**< Side right channel. */
PAL_CHMAP_CHANNEL_TFL = 20, /**< Top front left channel. */
PAL_CHMAP_CHANNEL_LVH = PAL_CHMAP_CHANNEL_TFL, /**< Right vertical height channel */
PAL_CHMAP_CHANNEL_TFR = 21, /**< Top front right channel. */
PAL_CHMAP_CHANNEL_RVH = PAL_CHMAP_CHANNEL_TFR, /**< Right vertical height channel. */
PAL_CHMAP_CHANNEL_TC = 22, /**< Top center channel. */
PAL_CHMAP_CHANNEL_TBL = 23, /**< Top back left channel. */
PAL_CHMAP_CHANNEL_TBR = 24, /**< Top back right channel. */
PAL_CHMAP_CHANNEL_TSL = 25, /**< Top side left channel. */
PAL_CHMAP_CHANNEL_TSR = 26, /**< Top side right channel. */
PAL_CHMAP_CHANNEL_TBC = 27, /**< Top back center channel. */
PAL_CHMAP_CHANNEL_BFC = 28, /**< Bottom front center channel. */
PAL_CHMAP_CHANNEL_BFL = 29, /**< Bottom front left channel. */
PAL_CHMAP_CHANNEL_BFR = 30, /**< Bottom front right channel. */
PAL_CHMAP_CHANNEL_LW = 31, /**< Left wide channel. */
PAL_CHMAP_CHANNEL_RW = 32, /**< Right wide channel. */
PAL_CHMAP_CHANNEL_LSD = 33, /**< Left side direct channel. */
PAL_CHMAP_CHANNEL_RSD = 34, /**< Left side direct channel. */
} pal_channel_map;
/** Audio channel info data structure */
struct pal_channel_info {
uint16_t channels; /**< number of channels*/
uint8_t ch_map[PAL_MAX_CHANNELS_SUPPORTED]; /**< ch_map value per channel. */
};
/** Audio stream direction enumeration */
typedef enum {
PAL_AUDIO_OUTPUT = 0x1, /**< playback usecases*/
PAL_AUDIO_INPUT = 0x2, /**< capture/voice activation usecases*/
PAL_AUDIO_INPUT_OUTPUT = 0x3, /**< transcode usecases*/
} pal_stream_direction_t;
/** Audio Voip TX Effect enumeration */
typedef enum {
PAL_AUDIO_EFFECT_NONE = 0x0, /**< No audio effect ie., EC_OFF_NS_OFF*/
PAL_AUDIO_EFFECT_EC = 0x1, /**< Echo Cancellation ie., EC_ON_NS_OFF*/
PAL_AUDIO_EFFECT_NS = 0x2, /**< Noise Suppression ie., NS_ON_EC_OFF*/
PAL_AUDIO_EFFECT_ECNS = 0x3, /**< EC + NS*/
} pal_audio_effect_t;
/** Audio stream types */
typedef enum {
PAL_STREAM_LOW_LATENCY = 1, /**< :low latency, higher power*/
PAL_STREAM_DEEP_BUFFER = 2, /**< :low power, higher latency*/
PAL_STREAM_COMPRESSED = 3, /**< :compresssed audio*/
PAL_STREAM_VOIP = 4, /**< :pcm voip audio*/
PAL_STREAM_VOIP_RX = 5, /**< :pcm voip audio downlink*/
PAL_STREAM_VOIP_TX = 6, /**< :pcm voip audio uplink*/
PAL_STREAM_VOICE_CALL_MUSIC = 7, /**< :incall music */
PAL_STREAM_GENERIC = 8, /**< :generic playback audio*/
PAL_STREAM_RAW = 9, /**< pcm no post processing*/
PAL_STREAM_VOICE_RECOGNITION = 10, /**< voice recognition*/
PAL_STREAM_VOICE_CALL_RECORD = 11, /**< incall record */
PAL_STREAM_VOICE_CALL_TX = 12, /**< incall record, uplink */
PAL_STREAM_VOICE_CALL_RX_TX = 13, /**< incall record, uplink & Downlink */
PAL_STREAM_VOICE_CALL = 14, /**< voice call */
PAL_STREAM_LOOPBACK = 15, /**< loopback */
PAL_STREAM_TRANSCODE = 16, /**< audio transcode */
PAL_STREAM_VOICE_UI = 17, /**< voice ui */
PAL_STREAM_PCM_OFFLOAD = 18, /**< pcm offload audio */
PAL_STREAM_ULTRA_LOW_LATENCY = 19, /**< pcm ULL audio */
PAL_STREAM_PROXY = 20, /**< pcm proxy audio */
PAL_STREAM_NON_TUNNEL = 21, /**< NT Mode session */
PAL_STREAM_HAPTICS = 22, /**< Haptics Stream */
PAL_STREAM_ACD = 23, /**< ACD Stream */
PAL_STREAM_CONTEXT_PROXY = 24, /**< Context Proxy Stream */
PAL_STREAM_SENSOR_PCM_DATA = 25, /**< Sensor Pcm Data Stream */
PAL_STREAM_ULTRASOUND = 26, /**< Ultrasound Proximity detection */
PAL_STREAM_MAX, /**< max stream types - add new ones above */
} pal_stream_type_t;
/** Audio devices available for enabling streams */
typedef enum {
//OUTPUT DEVICES
PAL_DEVICE_OUT_MIN = 0,
PAL_DEVICE_NONE = 1, /**< for transcode usecases*/
PAL_DEVICE_OUT_HANDSET = 2,
PAL_DEVICE_OUT_SPEAKER = 3,
PAL_DEVICE_OUT_WIRED_HEADSET = 4,
PAL_DEVICE_OUT_WIRED_HEADPHONE = 5, /**< Wired headphones without mic*/
PAL_DEVICE_OUT_LINE = 6,
PAL_DEVICE_OUT_BLUETOOTH_SCO = 7,
PAL_DEVICE_OUT_BLUETOOTH_A2DP = 8,
PAL_DEVICE_OUT_AUX_DIGITAL = 9,
PAL_DEVICE_OUT_HDMI = 10,
PAL_DEVICE_OUT_USB_DEVICE = 11,
PAL_DEVICE_OUT_USB_HEADSET = 12,
PAL_DEVICE_OUT_SPDIF = 13,
PAL_DEVICE_OUT_FM = 14,
PAL_DEVICE_OUT_AUX_LINE = 15,
PAL_DEVICE_OUT_PROXY = 16,
PAL_DEVICE_OUT_AUX_DIGITAL_1 = 17,
PAL_DEVICE_OUT_HEARING_AID = 18,
PAL_DEVICE_OUT_HAPTICS_DEVICE = 19,
PAL_DEVICE_OUT_ULTRASOUND = 20,
// Add new OUT devices here, increment MAX and MIN below when you do so
PAL_DEVICE_OUT_MAX = 21,
//INPUT DEVICES
PAL_DEVICE_IN_MIN = PAL_DEVICE_OUT_MAX,
PAL_DEVICE_IN_HANDSET_MIC = PAL_DEVICE_IN_MIN +1,
PAL_DEVICE_IN_SPEAKER_MIC = PAL_DEVICE_IN_MIN + 2,
PAL_DEVICE_IN_BLUETOOTH_SCO_HEADSET = PAL_DEVICE_IN_MIN + 3,
PAL_DEVICE_IN_WIRED_HEADSET = PAL_DEVICE_IN_MIN + 4,
PAL_DEVICE_IN_AUX_DIGITAL = PAL_DEVICE_IN_MIN + 5,
PAL_DEVICE_IN_HDMI = PAL_DEVICE_IN_MIN + 6,
PAL_DEVICE_IN_USB_ACCESSORY = PAL_DEVICE_IN_MIN + 7,
PAL_DEVICE_IN_USB_DEVICE = PAL_DEVICE_IN_MIN + 8,
PAL_DEVICE_IN_USB_HEADSET = PAL_DEVICE_IN_MIN + 9,
PAL_DEVICE_IN_FM_TUNER = PAL_DEVICE_IN_MIN + 10,
PAL_DEVICE_IN_LINE = PAL_DEVICE_IN_MIN + 11,
PAL_DEVICE_IN_SPDIF = PAL_DEVICE_IN_MIN + 12,
PAL_DEVICE_IN_PROXY = PAL_DEVICE_IN_MIN + 13,
PAL_DEVICE_IN_HANDSET_VA_MIC = PAL_DEVICE_IN_MIN + 14,
PAL_DEVICE_IN_BLUETOOTH_A2DP = PAL_DEVICE_IN_MIN + 15,
PAL_DEVICE_IN_HEADSET_VA_MIC = PAL_DEVICE_IN_MIN + 16,
PAL_DEVICE_IN_VI_FEEDBACK = PAL_DEVICE_IN_MIN + 17,
PAL_DEVICE_IN_TELEPHONY_RX = PAL_DEVICE_IN_MIN + 18,
PAL_DEVICE_IN_ULTRASOUND_MIC = PAL_DEVICE_IN_MIN +19,
PAL_DEVICE_IN_EXT_EC_REF = PAL_DEVICE_IN_MIN + 20,
PAL_DEVICE_IN_ECHO_REF = PAL_DEVICE_IN_MIN + 21,
// Add new IN devices here, increment MAX and MIN below when you do so
PAL_DEVICE_IN_MAX = PAL_DEVICE_IN_MIN + 22,
} pal_device_id_t;
typedef enum {
VOICEMMODE1 = 0x11C05000,
VOICEMMODE2 = 0x11DC5000,
VOICELBMMODE1 = 0x12006000,
VOICELBMMODE2 = 0x121C6000,
} pal_VSID_t;
typedef enum {
PAL_STREAM_LOOPBACK_PCM,
PAL_STREAM_LOOPBACK_HFP_RX,
PAL_STREAM_LOOPBACK_HFP_TX,
PAL_STREAM_LOOPBACK_COMPRESS,
PAL_STREAM_LOOPBACK_FM,
PAL_STREAM_LOOPBACK_KARAOKE,
} pal_stream_loopback_type_t;
typedef enum {
PAL_STREAM_PROXY_TX_VISUALIZER,
PAL_STREAM_PROXY_TX_WFD,
PAL_STREAM_PROXY_TX_TELEPHONY_RX,
} pal_stream_proxy_tx_type_t;
#ifdef __cplusplus
static const std::map<std::string, pal_device_id_t> deviceIdLUT {
{std::string{ "PAL_DEVICE_OUT_MIN" }, PAL_DEVICE_OUT_MIN},
{std::string{ "PAL_DEVICE_NONE" }, PAL_DEVICE_NONE},
{std::string{ "PAL_DEVICE_OUT_HANDSET" }, PAL_DEVICE_OUT_HANDSET},
{std::string{ "PAL_DEVICE_OUT_SPEAKER" }, PAL_DEVICE_OUT_SPEAKER},
{std::string{ "PAL_DEVICE_OUT_WIRED_HEADSET" }, PAL_DEVICE_OUT_WIRED_HEADSET},
{std::string{ "PAL_DEVICE_OUT_WIRED_HEADPHONE" }, PAL_DEVICE_OUT_WIRED_HEADPHONE},
{std::string{ "PAL_DEVICE_OUT_LINE" }, PAL_DEVICE_OUT_LINE},
{std::string{ "PAL_DEVICE_OUT_BLUETOOTH_SCO" }, PAL_DEVICE_OUT_BLUETOOTH_SCO},
{std::string{ "PAL_DEVICE_OUT_BLUETOOTH_A2DP" }, PAL_DEVICE_OUT_BLUETOOTH_A2DP},
{std::string{ "PAL_DEVICE_OUT_AUX_DIGITAL" }, PAL_DEVICE_OUT_AUX_DIGITAL},
{std::string{ "PAL_DEVICE_OUT_HDMI" }, PAL_DEVICE_OUT_HDMI},
{std::string{ "PAL_DEVICE_OUT_USB_DEVICE" }, PAL_DEVICE_OUT_USB_DEVICE},
{std::string{ "PAL_DEVICE_OUT_USB_HEADSET" }, PAL_DEVICE_OUT_USB_HEADSET},
{std::string{ "PAL_DEVICE_OUT_SPDIF" }, PAL_DEVICE_OUT_SPDIF},
{std::string{ "PAL_DEVICE_OUT_FM" }, PAL_DEVICE_OUT_FM},
{std::string{ "PAL_DEVICE_OUT_AUX_LINE" }, PAL_DEVICE_OUT_AUX_LINE},
{std::string{ "PAL_DEVICE_OUT_PROXY" }, PAL_DEVICE_OUT_PROXY},
{std::string{ "PAL_DEVICE_OUT_AUX_DIGITAL_1" }, PAL_DEVICE_OUT_AUX_DIGITAL_1},
{std::string{ "PAL_DEVICE_OUT_HEARING_AID" }, PAL_DEVICE_OUT_HEARING_AID},
{std::string{ "PAL_DEVICE_OUT_HAPTICS_DEVICE" }, PAL_DEVICE_OUT_HAPTICS_DEVICE},
{std::string{ "PAL_DEVICE_OUT_ULTRASOUND" }, PAL_DEVICE_OUT_ULTRASOUND},
{std::string{ "PAL_DEVICE_OUT_MAX" }, PAL_DEVICE_OUT_MAX},
{std::string{ "PAL_DEVICE_IN_HANDSET_MIC" }, PAL_DEVICE_IN_HANDSET_MIC},
{std::string{ "PAL_DEVICE_IN_SPEAKER_MIC" }, PAL_DEVICE_IN_SPEAKER_MIC},
{std::string{ "PAL_DEVICE_IN_BLUETOOTH_SCO_HEADSET" }, PAL_DEVICE_IN_BLUETOOTH_SCO_HEADSET},
{std::string{ "PAL_DEVICE_IN_WIRED_HEADSET" }, PAL_DEVICE_IN_WIRED_HEADSET},
{std::string{ "PAL_DEVICE_IN_AUX_DIGITAL" }, PAL_DEVICE_IN_AUX_DIGITAL},
{std::string{ "PAL_DEVICE_IN_HDMI" }, PAL_DEVICE_IN_HDMI},
{std::string{ "PAL_DEVICE_IN_USB_ACCESSORY" }, PAL_DEVICE_IN_USB_ACCESSORY},
{std::string{ "PAL_DEVICE_IN_USB_DEVICE" }, PAL_DEVICE_IN_USB_DEVICE},
{std::string{ "PAL_DEVICE_IN_USB_HEADSET" }, PAL_DEVICE_IN_USB_HEADSET},
{std::string{ "PAL_DEVICE_IN_FM_TUNER" }, PAL_DEVICE_IN_FM_TUNER},
{std::string{ "PAL_DEVICE_IN_LINE" }, PAL_DEVICE_IN_LINE},
{std::string{ "PAL_DEVICE_IN_SPDIF" }, PAL_DEVICE_IN_SPDIF},
{std::string{ "PAL_DEVICE_IN_PROXY" }, PAL_DEVICE_IN_PROXY},
{std::string{ "PAL_DEVICE_IN_HANDSET_VA_MIC" }, PAL_DEVICE_IN_HANDSET_VA_MIC},
{std::string{ "PAL_DEVICE_IN_BLUETOOTH_A2DP" }, PAL_DEVICE_IN_BLUETOOTH_A2DP},
{std::string{ "PAL_DEVICE_IN_HEADSET_VA_MIC" }, PAL_DEVICE_IN_HEADSET_VA_MIC},
{std::string{ "PAL_DEVICE_IN_VI_FEEDBACK" }, PAL_DEVICE_IN_VI_FEEDBACK},
{std::string{ "PAL_DEVICE_IN_TELEPHONY_RX" }, PAL_DEVICE_IN_TELEPHONY_RX},
{std::string{ "PAL_DEVICE_IN_ULTRASOUND_MIC" }, PAL_DEVICE_IN_ULTRASOUND_MIC},
{std::string{ "PAL_DEVICE_IN_EXT_EC_REF" }, PAL_DEVICE_IN_EXT_EC_REF},
#ifdef EC_REF_CAPTURE_ENABLED
{std::string{ "PAL_DEVICE_IN_ECHO_REF" }, PAL_DEVICE_IN_ECHO_REF},
#endif
};
//reverse mapping
static const std::map<uint32_t, std::string> deviceNameLUT {
{PAL_DEVICE_OUT_MIN, std::string{"PAL_DEVICE_OUT_MIN"}},
{PAL_DEVICE_NONE, std::string{"PAL_DEVICE_NONE"}},
{PAL_DEVICE_OUT_HANDSET, std::string{"PAL_DEVICE_OUT_HANDSET"}},
{PAL_DEVICE_OUT_SPEAKER, std::string{"PAL_DEVICE_OUT_SPEAKER"}},
{PAL_DEVICE_OUT_WIRED_HEADSET, std::string{"PAL_DEVICE_OUT_WIRED_HEADSET"}},
{PAL_DEVICE_OUT_WIRED_HEADPHONE, std::string{"PAL_DEVICE_OUT_WIRED_HEADPHONE"}},
{PAL_DEVICE_OUT_LINE, std::string{"PAL_DEVICE_OUT_LINE"}},
{PAL_DEVICE_OUT_BLUETOOTH_SCO, std::string{"PAL_DEVICE_OUT_BLUETOOTH_SCO"}},
{PAL_DEVICE_OUT_BLUETOOTH_A2DP, std::string{"PAL_DEVICE_OUT_BLUETOOTH_A2DP"}},
{PAL_DEVICE_OUT_AUX_DIGITAL, std::string{"PAL_DEVICE_OUT_AUX_DIGITAL"}},
{PAL_DEVICE_OUT_HDMI, std::string{"PAL_DEVICE_OUT_HDMI"}},
{PAL_DEVICE_OUT_USB_DEVICE, std::string{"PAL_DEVICE_OUT_USB_DEVICE"}},
{PAL_DEVICE_OUT_USB_HEADSET, std::string{"PAL_DEVICE_OUT_USB_HEADSET"}},
{PAL_DEVICE_OUT_SPDIF, std::string{"PAL_DEVICE_OUT_SPDIF"}},
{PAL_DEVICE_OUT_FM, std::string{"PAL_DEVICE_OUT_FM"}},
{PAL_DEVICE_OUT_AUX_LINE, std::string{"PAL_DEVICE_OUT_AUX_LINE"}},
{PAL_DEVICE_OUT_PROXY, std::string{"PAL_DEVICE_OUT_PROXY"}},
{PAL_DEVICE_OUT_AUX_DIGITAL_1, std::string{"PAL_DEVICE_OUT_AUX_DIGITAL_1"}},
{PAL_DEVICE_OUT_HEARING_AID, std::string{"PAL_DEVICE_OUT_HEARING_AID"}},
{PAL_DEVICE_OUT_HAPTICS_DEVICE, std::string{"PAL_DEVICE_OUT_HAPTICS_DEVICE"}},
{PAL_DEVICE_OUT_ULTRASOUND, std::string{"PAL_DEVICE_OUT_ULTRASOUND"}},
{PAL_DEVICE_OUT_MAX, std::string{"PAL_DEVICE_OUT_MAX"}},
{PAL_DEVICE_IN_HANDSET_MIC, std::string{"PAL_DEVICE_IN_HANDSET_MIC"}},
{PAL_DEVICE_IN_SPEAKER_MIC, std::string{"PAL_DEVICE_IN_SPEAKER_MIC"}},
{PAL_DEVICE_IN_BLUETOOTH_SCO_HEADSET, std::string{"PAL_DEVICE_IN_BLUETOOTH_SCO_HEADSET"}},
{PAL_DEVICE_IN_WIRED_HEADSET, std::string{"PAL_DEVICE_IN_WIRED_HEADSET"}},
{PAL_DEVICE_IN_AUX_DIGITAL, std::string{"PAL_DEVICE_IN_AUX_DIGITAL"}},
{PAL_DEVICE_IN_HDMI, std::string{"PAL_DEVICE_IN_HDMI"}},
{PAL_DEVICE_IN_USB_ACCESSORY, std::string{"PAL_DEVICE_IN_USB_ACCESSORY"}},
{PAL_DEVICE_IN_USB_DEVICE, std::string{"PAL_DEVICE_IN_USB_DEVICE"}},
{PAL_DEVICE_IN_USB_HEADSET, std::string{"PAL_DEVICE_IN_USB_HEADSET"}},
{PAL_DEVICE_IN_FM_TUNER, std::string{"PAL_DEVICE_IN_FM_TUNER"}},
{PAL_DEVICE_IN_LINE, std::string{"PAL_DEVICE_IN_LINE"}},
{PAL_DEVICE_IN_SPDIF, std::string{"PAL_DEVICE_IN_SPDIF"}},
{PAL_DEVICE_IN_PROXY, std::string{"PAL_DEVICE_IN_PROXY"}},
{PAL_DEVICE_IN_HANDSET_VA_MIC, std::string{"PAL_DEVICE_IN_HANDSET_VA_MIC"}},
{PAL_DEVICE_IN_BLUETOOTH_A2DP, std::string{"PAL_DEVICE_IN_BLUETOOTH_A2DP"}},
{PAL_DEVICE_IN_HEADSET_VA_MIC, std::string{"PAL_DEVICE_IN_HEADSET_VA_MIC"}},
{PAL_DEVICE_IN_VI_FEEDBACK, std::string{"PAL_DEVICE_IN_VI_FEEDBACK"}},
{PAL_DEVICE_IN_TELEPHONY_RX, std::string{"PAL_DEVICE_IN_TELEPHONY_RX"}},
{PAL_DEVICE_IN_ULTRASOUND_MIC, std::string{"PAL_DEVICE_IN_ULTRASOUND_MIC"}},
{PAL_DEVICE_IN_EXT_EC_REF, std::string{"PAL_DEVICE_IN_EXT_EC_REF"}},
#ifdef EC_REF_CAPTURE_ENABLED
{PAL_DEVICE_IN_ECHO_REF, std::string{"PAL_DEVICE_IN_ECHO_REF"}},
#endif
};
const std::map<std::string, uint32_t> usecaseIdLUT {
{std::string{ "PAL_STREAM_LOW_LATENCY" }, PAL_STREAM_LOW_LATENCY},
{std::string{ "PAL_STREAM_DEEP_BUFFER" }, PAL_STREAM_DEEP_BUFFER},
{std::string{ "PAL_STREAM_COMPRESSED" }, PAL_STREAM_COMPRESSED},
{std::string{ "PAL_STREAM_VOIP" }, PAL_STREAM_VOIP},
{std::string{ "PAL_STREAM_VOIP_RX" }, PAL_STREAM_VOIP_RX},
{std::string{ "PAL_STREAM_VOIP_TX" }, PAL_STREAM_VOIP_TX},
{std::string{ "PAL_STREAM_VOICE_CALL_MUSIC" }, PAL_STREAM_VOICE_CALL_MUSIC},
{std::string{ "PAL_STREAM_GENERIC" }, PAL_STREAM_GENERIC},
{std::string{ "PAL_STREAM_RAW" }, PAL_STREAM_RAW},
{std::string{ "PAL_STREAM_VOICE_RECOGNITION" }, PAL_STREAM_VOICE_RECOGNITION},
{std::string{ "PAL_STREAM_VOICE_CALL_RECORD" }, PAL_STREAM_VOICE_CALL_RECORD},
{std::string{ "PAL_STREAM_VOICE_CALL_TX" }, PAL_STREAM_VOICE_CALL_TX},
{std::string{ "PAL_STREAM_VOICE_CALL_RX_TX" }, PAL_STREAM_VOICE_CALL_RX_TX},
{std::string{ "PAL_STREAM_VOICE_CALL" }, PAL_STREAM_VOICE_CALL},
{std::string{ "PAL_STREAM_LOOPBACK" }, PAL_STREAM_LOOPBACK},
{std::string{ "PAL_STREAM_TRANSCODE" }, PAL_STREAM_TRANSCODE},
{std::string{ "PAL_STREAM_VOICE_UI" }, PAL_STREAM_VOICE_UI},
{std::string{ "PAL_STREAM_PCM_OFFLOAD" }, PAL_STREAM_PCM_OFFLOAD},
{std::string{ "PAL_STREAM_ULTRA_LOW_LATENCY" }, PAL_STREAM_ULTRA_LOW_LATENCY},
{std::string{ "PAL_STREAM_PROXY" }, PAL_STREAM_PROXY},
{std::string{ "PAL_STREAM_NON_TUNNEL" }, PAL_STREAM_NON_TUNNEL},
{std::string{ "PAL_STREAM_HAPTICS" }, PAL_STREAM_HAPTICS},
{std::string{ "PAL_STREAM_ACD" }, PAL_STREAM_ACD},
{std::string{ "PAL_STREAM_ULTRASOUND" }, PAL_STREAM_ULTRASOUND},
{std::string{ "PAL_STREAM_SENSOR_PCM_DATA" }, PAL_STREAM_SENSOR_PCM_DATA},
};
/* Update the reverse mapping as well when new stream is added */
const std::map<uint32_t, std::string> streamNameLUT {
{PAL_STREAM_LOW_LATENCY, std::string{ "PAL_STREAM_LOW_LATENCY" } },
{PAL_STREAM_DEEP_BUFFER, std::string{ "PAL_STREAM_DEEP_BUFFER" } },
{PAL_STREAM_COMPRESSED, std::string{ "PAL_STREAM_COMPRESSED" } },
{PAL_STREAM_VOIP, std::string{ "PAL_STREAM_VOIP" } },
{PAL_STREAM_VOIP_RX, std::string{ "PAL_STREAM_VOIP_RX" } },
{PAL_STREAM_VOIP_TX, std::string{ "PAL_STREAM_VOIP_TX" } },
{PAL_STREAM_VOICE_CALL_MUSIC, std::string{ "PAL_STREAM_VOICE_CALL_MUSIC" } },
{PAL_STREAM_GENERIC, std::string{ "PAL_STREAM_GENERIC" } },
{PAL_STREAM_RAW, std::string{ "PAL_STREAM_RAW" } },
{PAL_STREAM_VOICE_RECOGNITION, std::string{ "PAL_STREAM_VOICE_RECOGNITION" } },
{PAL_STREAM_VOICE_CALL_RECORD, std::string{ "PAL_STREAM_VOICE_CALL_RECORD" } },
{PAL_STREAM_VOICE_CALL_TX, std::string{ "PAL_STREAM_VOICE_CALL_TX" } },
{PAL_STREAM_VOICE_CALL_RX_TX, std::string{ "PAL_STREAM_VOICE_CALL_RX_TX" } },
{PAL_STREAM_VOICE_CALL, std::string{ "PAL_STREAM_VOICE_CALL" } },
{PAL_STREAM_LOOPBACK, std::string{ "PAL_STREAM_LOOPBACK" } },
{PAL_STREAM_TRANSCODE, std::string{ "PAL_STREAM_TRANSCODE" } },
{PAL_STREAM_VOICE_UI, std::string{ "PAL_STREAM_VOICE_UI" } },
{PAL_STREAM_PCM_OFFLOAD, std::string{ "PAL_STREAM_PCM_OFFLOAD" } },
{PAL_STREAM_ULTRA_LOW_LATENCY, std::string{ "PAL_STREAM_ULTRA_LOW_LATENCY" } },
{PAL_STREAM_PROXY, std::string{ "PAL_STREAM_PROXY" } },
{PAL_STREAM_NON_TUNNEL, std::string{ "PAL_STREAM_NON_TUNNEL" } },
{PAL_STREAM_HAPTICS, std::string{ "PAL_STREAM_HAPTICS" } },
{PAL_STREAM_ACD, std::string{ "PAL_STREAM_ACD" } },
{PAL_STREAM_ULTRASOUND, std::string{ "PAL_STREAM_ULTRASOUND" } },
{PAL_STREAM_SENSOR_PCM_DATA, std::string{ "PAL_STREAM_SENSOR_PCM_DATA" } },
};
const std::map<uint32_t, std::string> vsidLUT {
{VOICEMMODE1, std::string{ "VOICEMMODE1" } },
{VOICEMMODE2, std::string{ "VOICEMMODE2" } },
{VOICELBMMODE1, std::string{ "VOICELBMMODE1" } },
{VOICELBMMODE2, std::string{ "VOICELBMMODE2" } },
};
const std::map<uint32_t, std::string> loopbackLUT {
{PAL_STREAM_LOOPBACK_PCM, std::string{ "PAL_STREAM_LOOPBACK_PCM" } },
{PAL_STREAM_LOOPBACK_HFP_RX, std::string{ "PAL_STREAM_LOOPBACK_HFP_RX" } },
{PAL_STREAM_LOOPBACK_HFP_TX, std::string{ "PAL_STREAM_LOOPBACK_HFP_TX" } },
{PAL_STREAM_LOOPBACK_COMPRESS, std::string{ "PAL_STREAM_LOOPBACK_COMPRESS" } },
{PAL_STREAM_LOOPBACK_FM, std::string{ "PAL_STREAM_LOOPBACK_FM" } },
{PAL_STREAM_LOOPBACK_KARAOKE, std::string{ "PAL_STREAM_LOOPBACK_KARAOKE" }},
};
#endif
/* type of asynchronous write callback events. Mutually exclusive */
typedef enum {
PAL_STREAM_CBK_EVENT_WRITE_READY, /* non blocking write completed */
PAL_STREAM_CBK_EVENT_DRAIN_READY, /* drain completed */
PAL_STREAM_CBK_EVENT_PARTIAL_DRAIN_READY, /* partial drain completed */
PAL_STREAM_CBK_EVENT_READ_DONE, /* stream hit some error, let AF take action */
PAL_STREAM_CBK_EVENT_ERROR, /* stream hit some error, let AF take action */
} pal_stream_callback_event_t;
/* type of global callback events. */
typedef enum {
PAL_SND_CARD_STATE,
} pal_global_callback_event_t;
struct pal_stream_info {
int64_t version; /** version of structure*/
int64_t size; /** size of structure*/
int64_t duration_us; /** duration in microseconds, -1 if unknown */
bool has_video; /** optional, true if stream is tied to a video stream */
bool is_streaming; /** true if streaming, false if local playback */
int32_t loopback_type; /** used only if stream_type is LOOPBACK. One of the */
/** enums defined in enum pal_stream_loopback_type */
int32_t tx_proxy_type; /** enums defined in enum pal_stream_proxy_tx_types */
//pal_audio_attributes_t usage; /** Not sure if we make use of this */
};
typedef enum {
INCALL_RECORD_VOICE_UPLINK = 1,
INCALL_RECORD_VOICE_DOWNLINK,
INCALL_RECORD_VOICE_UPLINK_DOWNLINK,
} pal_incall_record_direction;
struct pal_voice_record_info {
int64_t version; /** version of structure*/
int64_t size; /** size of structure*/
pal_incall_record_direction record_direction; /** use direction enum to indicate content to be record */
};
struct pal_voice_call_info {
uint32_t VSID;
uint32_t tty_mode;
};
typedef enum {
PAL_TTY_OFF = 0,
PAL_TTY_HCO = 1,
PAL_TTY_VCO = 2,
PAL_TTY_FULL = 3,
} pal_tty_t;
typedef union {
struct pal_stream_info opt_stream_info; /* optional */
struct pal_voice_record_info voice_rec_info; /* mandatory */
struct pal_voice_call_info voice_call_info; /* manatory for voice call*/
} pal_stream_info_t;
/** Media configuraiton */
struct pal_media_config {
uint32_t sample_rate; /**< sample rate */
uint32_t bit_width; /**< bit width */
pal_audio_fmt_t aud_fmt_id; /**< audio format id*/
struct pal_channel_info ch_info; /**< channel info */
};
/** Android Media configuraiton */
/* dynamic media config for plugin devices, +1 so that the last entry is always 0 */
#define MAX_SUPPORTED_CHANNEL_MASKS (2 * 8)
#define MAX_SUPPORTED_FORMATS 15
#define MAX_SUPPORTED_SAMPLE_RATES 7
typedef struct dynamic_media_config {
uint32_t sample_rate[MAX_SUPPORTED_SAMPLE_RATES+1]; /**< sample rate */
uint32_t format[MAX_SUPPORTED_FORMATS+1]; /**< format */
uint32_t mask[MAX_SUPPORTED_CHANNEL_MASKS + 1]; /**< channel mask */
bool jack_status; /**< input/output jack status*/
} dynamic_media_config_t;
/** Available stream flags of an audio session*/
typedef enum {
PAL_STREAM_FLAG_TIMESTAMP = 0x1, /**< Enable time stamps associated to audio buffers */
PAL_STREAM_FLAG_NON_BLOCKING = 0x2, /**< Stream IO operations are non blocking */
PAL_STREAM_FLAG_MMAP = 0x4, /**< Stream Mode should be in MMAP*/
PAL_STREAM_FLAG_MMAP_NO_IRQ = 0x8, /**< Stream Mode should be No IRQ */
PAL_STREAM_FLAG_EXTERN_MEM = 0x10, /**< Shared memory buffers allocated by client*/
PAL_STREAM_FLAG_SRCM_INBAND = 0x20, /**< MediaFormat change event inband with data buffers*/
PAL_STREAM_FLAG_EOF = 0x40, /**< MediaFormat change event inband with data buffers*/
} pal_stream_flags_t;
#define PAL_STREAM_FLAG_NON_BLOCKING_MASK 0x2
#define PAL_STREAM_FLAG_MMAP_MASK 0x4
#define PAL_STREAM_FLAG_MMAP_NO_IRQ_MASK 0x8
/**< PAL stream attributes to be specified, used in pal_stream_open cmd */
struct pal_stream_attributes {
pal_stream_type_t type; /**< stream type */
pal_stream_info_t info; /**< stream info */
pal_stream_flags_t flags; /**< stream flags */
pal_stream_direction_t direction; /**< direction of the streams */
struct pal_media_config in_media_config; /**< media config of the input audio samples */
struct pal_media_config out_media_config; /**< media config of the output audio samples */
bool isComboHeadsetActive;
};
/**< Key value pair to identify the topology of a usecase from default */
struct modifier_kv {
uint32_t key;
uint32_t value;
};
/** Metadata flags */
enum {
PAL_META_DATA_FLAGS_NONE = 0,
};
/** metadata flags, can be OR'able */
typedef uint32_t pal_meta_data_flags_t;
typedef struct pal_extern_alloc_buff_info{
int alloc_handle;/**< unique memory handle identifying extern mem allocation */
uint32_t alloc_size; /**< size of external allocation */
uint32_t offset; /**< offset of buffer within extern allocation */
} pal_extern_alloc_buff_info_t;
/** PAL buffer structure used for reading/writing buffers from/to the stream */
struct pal_buffer {
uint8_t *buffer; /**< buffer pointer */
size_t size; /**< number of bytes */
size_t offset; /**< offset in buffer from where valid byte starts */
struct timespec *ts; /**< timestmap */
uint32_t flags; /**< flags */
size_t metadata_size; /**< size of metadata buffer in bytes */
uint8_t *metadata; /**< metadata buffer. Can contain multiple metadata*/
pal_extern_alloc_buff_info_t alloc_info; /**< holds info for extern buff */
};
/** pal_mmap_buffer flags */
enum {
PAL_MMMAP_BUFF_FLAGS_NONE = 0,
/**
* Only set this flag if applications can access the audio buffer memory
* shared with the backend (usually DSP) _without_ security issue.
*
* Setting this flag also implies that Binder will allow passing the shared memory FD
* to applications.
*
* That usually implies that the kernel will prevent any access to the
* memory surrounding the audio buffer as it could lead to a security breach.
*
* For example, a "/dev/snd/" file descriptor generally is not shareable,
* but an "anon_inode:dmabuffer" file descriptor is shareable.
* See also Linux kernel's dma_buf.
*
*/
PAL_MMMAP_BUFF_FLAGS_APP_SHAREABLE = 1,
};
/** pal_mmap_buffer flags, can be OR'able */
typedef uint32_t pal_mmap_buffer_flags_t;
/** PAL buffer structure used for reading/writing buffers from/to the stream */
struct pal_mmap_buffer {
void* buffer; /**< base address of mmap memory buffer,
for use by local proces only */
int32_t fd; /**< fd for mmap memory buffer */
uint32_t buffer_size_frames; /**< total buffer size in frames */
uint32_t burst_size_frames; /**< transfer size granularity in frames */
pal_mmap_buffer_flags_t flags; /**< Attributes describing the buffer. */
};
/**
* Mmap buffer read/write position returned by GetMmapPosition.
* note\ Used by streams opened in mmap mode.
*/
struct pal_mmap_position {
int64_t time_nanoseconds; /**< timestamp in ns, CLOCK_MONOTONIC */
int32_t position_frames; /**< increasing 32 bit frame count reset when stop()
is called */
};
/** channel mask and volume pair */
struct pal_channel_vol_kv {
uint32_t channel_mask; /**< channel mask */
float vol; /**< gain of the channel mask */
};
/** Volume data strucutre defintion used as argument for volume command */
struct pal_volume_data {
uint32_t no_of_volpair; /**< no of volume pairs*/
struct pal_channel_vol_kv volume_pair[]; /**< channel mask and volume pair */
};
struct pal_time_us {
uint32_t value_lsw; /** Lower 32 bits of 64 bit time value in microseconds */
uint32_t value_msw; /** Upper 32 bits of 64 bit time value in microseconds */
};
/** Timestamp strucutre defintion used as argument for
* gettimestamp api */
struct pal_session_time {
struct pal_time_us session_time; /** Value of the current session time in microseconds */
struct pal_time_us absolute_time; /** Value of the absolute time in microseconds */
struct pal_time_us timestamp; /** Value of the last processed time stamp in microseconds */
};
/** EVENT configurations data strucutre defintion used as
* argument for mute command */
//typedef union {
//} pal_event_cfg_t;
/** event id of the event generated*/
typedef uint32_t pal_event_id;
typedef enum {
/** request notification when all accumlated data has be
* drained.*/
PAL_DRAIN,
/** request notification when drain completes shortly before all
* accumlated data of the current track has been played out */
PAL_DRAIN_PARTIAL,
} pal_drain_type_t;
typedef enum {
PAL_PARAM_ID_LOAD_SOUND_MODEL = 0,
PAL_PARAM_ID_RECOGNITION_CONFIG = 1,
PAL_PARAM_ID_ECNS_ON_OFF = 2,
PAL_PARAM_ID_DIRECTION_OF_ARRIVAL = 3,
PAL_PARAM_ID_UIEFFECT = 4,
PAL_PARAM_ID_STOP_BUFFERING = 5,
PAL_PARAM_ID_CODEC_CONFIGURATION = 6,
/* Non-Stream Specific Parameters*/
PAL_PARAM_ID_DEVICE_CONNECTION = 7,
PAL_PARAM_ID_SCREEN_STATE = 8,
PAL_PARAM_ID_CHARGING_STATE = 9,
PAL_PARAM_ID_DEVICE_ROTATION = 10,
PAL_PARAM_ID_BT_SCO = 11,
PAL_PARAM_ID_BT_SCO_WB = 12,
PAL_PARAM_ID_BT_SCO_SWB = 13,
PAL_PARAM_ID_BT_A2DP_RECONFIG = 14,
PAL_PARAM_ID_BT_A2DP_RECONFIG_SUPPORTED = 15,
PAL_PARAM_ID_BT_A2DP_SUSPENDED = 16,
PAL_PARAM_ID_BT_A2DP_TWS_CONFIG = 17,
PAL_PARAM_ID_BT_A2DP_ENCODER_LATENCY = 18,
PAL_PARAM_ID_DEVICE_CAPABILITY = 19,
PAL_PARAM_ID_GET_SOUND_TRIGGER_PROPERTIES = 20,
PAL_PARAM_ID_TTY_MODE = 21,
PAL_PARAM_ID_VOLUME_BOOST = 22,
PAL_PARAM_ID_SLOW_TALK = 23,
PAL_PARAM_ID_SPEAKER_RAS = 24,
PAL_PARAM_ID_SP_MODE = 25,
PAL_PARAM_ID_GAIN_LVL_MAP = 26,
PAL_PARAM_ID_GAIN_LVL_CAL = 27,
PAL_PARAM_ID_GAPLESS_MDATA = 28,
PAL_PARAM_ID_HD_VOICE = 29,
PAL_PARAM_ID_WAKEUP_ENGINE_CONFIG = 30,
PAL_PARAM_ID_WAKEUP_BUFFERING_CONFIG = 31,
PAL_PARAM_ID_WAKEUP_ENGINE_RESET = 32,
PAL_PARAM_ID_WAKEUP_MODULE_VERSION = 33,
PAL_PARAM_ID_WAKEUP_CUSTOM_CONFIG = 34,
PAL_PARAM_ID_UNLOAD_SOUND_MODEL = 35,
PAL_PARAM_ID_MODULE_CONFIG = 36, /*Clients directly configure DSP modules*/
PAL_PARAM_ID_BT_A2DP_LC3_CONFIG = 37,
PAL_PARAM_ID_PROXY_CHANNEL_CONFIG = 38,
PAL_PARAM_ID_CONTEXT_LIST = 39,
PAL_PARAM_ID_HAPTICS_INTENSITY = 40,
PAL_PARAM_ID_HAPTICS_VOLUME = 41,
PAL_PARAM_ID_BT_A2DP_DECODER_LATENCY = 42,
PAL_PARAM_ID_CUSTOM_CONFIGURATION = 43,
PAL_PARAM_ID_KW_TRANSFER_LATENCY = 44,
PAL_PARAM_ID_BT_A2DP_FORCE_SWITCH = 45,
PAL_PARAM_ID_BT_SCO_LC3 = 46,
PAL_PARAM_ID_DEVICE_MUTE = 47,
PAL_PARAM_ID_UPD_REGISTER_FOR_EVENTS = 48,
PAL_PARAM_ID_SP_GET_CAL = 49,
PAL_PARAM_ID_BT_A2DP_CAPTURE_SUSPENDED = 50,
PAL_PARAM_ID_SNDCARD_STATE = 51,
PAL_PARAM_ID_HIFI_PCM_FILTER = 52,
PAL_PARAM_ID_CHARGER_STATE = 53,
PAL_PARAM_ID_BT_SCO_NREC = 54,
PAL_PARAM_ID_VOLUME_USING_SET_PARAM = 55,
PAL_PARAM_ID_UHQA_FLAG = 56,
PAL_PARAM_ID_STREAM_ATTRIBUTES = 57,
PAL_PARAM_ID_SET_UPD_DUTY_CYCLE = 58,
PAL_PARAM_ID_MSPP_LINEAR_GAIN = 59,
PAL_PARAM_ID_SET_SOURCE_METADATA = 60,
PAL_PARAM_ID_SET_SINK_METADATA = 61,
PAL_PARAM_ID_ULTRASOUND_RAMPDOWN = 62,
PAL_PARAM_ID_VOLUME_CTRL_RAMP = 63,
PAL_PARAM_ID_SVA_WAKEUP_MODULE_VERSION = 64,
PAL_PARAM_ID_GAIN_USING_SET_PARAM = 65,
PAL_PARAM_ID_HAPTICS_CNFG = 66,
PAL_PARAM_ID_WAKEUP_ENGINE_PER_MODEL_RESET = 67,
PAL_PARAM_ID_RECONFIG_ENCODER = 68,
PAL_PARAM_ID_VUI_SET_META_DATA = 69,
PAL_PARAM_ID_VUI_GET_META_DATA = 70,
PAL_PARAM_ID_VUI_CAPTURE_META_DATA = 71,
PAL_PARAM_ID_TIMESTRETCH_PARAMS = 72,
PAL_PARAM_ID_LATENCY_MODE = 73,
PAL_PARAM_ID_PROXY_RECORD_SESSION = 74,
} pal_param_id_type_t;
/** HDMI/DP */
// START: MST ==================================================
#define MAX_CONTROLLERS 1
#define MAX_STREAMS_PER_CONTROLLER 2
// END: MST ==================================================
/** Audio parameter data*/
typedef struct pal_param_proxy_channel_config {
uint32_t num_proxy_channels;
} pal_param_proxy_channel_config_t;
struct pal_param_context_list {
uint32_t num_contexts;
uint32_t context_id[]; /* list of num_contexts context_id */
};
struct pal_param_disp_port_config_params {
int controller;
int stream;
};
struct pal_usb_device_address {
int card_id;
int device_num;
};
typedef union {
struct pal_param_disp_port_config_params dp_config;
struct pal_usb_device_address usb_addr;
} pal_device_config_t;
struct pal_amp_db_and_gain_table {
float amp;
float db;
uint32_t level;
};
struct pal_vol_ctrl_ramp_param {
uint32_t ramp_period_ms;
};
/* Payload For ID: PAL_PARAM_ID_DEVICE_CONNECTION
* Description : Device Connection
*/
typedef struct pal_param_device_connection {
pal_device_id_t id;
bool connection_state;
pal_device_config_t device_config;
} pal_param_device_connection_t;
/* Payload For ID: PAL_PARAM_ID_GAIN_LVL_MAP
* Description : get gain level mapping
*/
typedef struct pal_param_gain_lvl_map {
struct pal_amp_db_and_gain_table *mapping_tbl;
int table_size;
int filled_size;
} pal_param_gain_lvl_map_t;
/* Payload For ID: PAL_PARAM_ID_GAIN_LVL_CAL
* Description : set gain level calibration
*/
typedef struct pal_param_gain_lvl_cal {
int level;
} pal_param_gain_lvl_cal_t;
/* Payload For ID: PAL_PARAM_ID_DEVICE_CAPABILITY
* Description : get Device Capability
*/
typedef struct pal_param_device_capability {
pal_device_id_t id;
struct pal_usb_device_address addr;
bool is_playback;
struct dynamic_media_config *config;
} pal_param_device_capability_t;
/* Payload For ID: PAL_PARAM_ID_SCREEN_STATE
* Description : Screen State
*/
typedef struct pal_param_screen_state {
bool screen_state;
} pal_param_screen_state_t;
/* Payload For ID: PAL_PARAM_ID_CHARGING_STATE
* Description : Charging State
*/
typedef struct pal_param_charging_state {
bool charging_state;
} pal_param_charging_state_t;
/* Payload For ID: PAL_PARAM_ID_CHARGER_STATE
* Description : Charger State
*/
typedef struct pal_param_charger_state {
bool is_charger_online;
bool is_concurrent_boost_enable;
} pal_param_charger_state_t;
/*
* Used to identify the swapping type
*/
typedef enum {
PAL_SPEAKER_ROTATION_LR, /* Default position. It will be set when device
* is at angle 0, 90 or 180 degree.
*/
PAL_SPEAKER_ROTATION_RL /* This will be set if device is rotated by 270
* degree
*/
} pal_speaker_rotation_type;
/* Payload For ID: PAL_PARAM_ID_DEVICE_ROTATION
* Description : Device Rotation
*/
typedef struct pal_param_device_rotation {
pal_speaker_rotation_type rotation_type;
} pal_param_device_rotation_t;
/* Payload For ID: PAL_PARAM_ID_UHQA_FLAG
* Description : use to enable/disable USB high quality audio from userend
*/
typedef struct pal_param_uhqa_state {
bool uhqa_state;
} pal_param_uhqa_t;
/* Payload For ID: PAL_PARAM_ID_BT_SCO*
* Description : BT SCO related device parameters
*/
static const char* lc3_reserved_params[] = {
"StreamMap",
"Codec",
"FrameDuration",
"rxconfig_index",
"txconfig_index",
"version",
"Blocks_forSDU",
"vendor",
};
enum {
LC3_STREAM_MAP_BIT = 0x1,
LC3_CODEC_BIT = 0x1 << 1,
LC3_FRAME_DURATION_BIT = 0x1 << 2,
LC3_RXCFG_IDX_BIT = 0x1 << 3,
LC3_TXCFG_IDX_BIT = 0x1 << 4,
LC3_VERSION_BIT = 0x1 << 5,
LC3_BLOCKS_FORSDU_BIT = 0x1 << 6,
LC3_VENDOR_BIT = 0x1 << 7,
LC3_BIT_ALL = LC3_STREAM_MAP_BIT |
LC3_CODEC_BIT |
LC3_FRAME_DURATION_BIT |
LC3_RXCFG_IDX_BIT |
LC3_TXCFG_IDX_BIT |
LC3_VERSION_BIT |
LC3_BLOCKS_FORSDU_BIT |
LC3_VENDOR_BIT,
LC3_BIT_MASK = LC3_BIT_ALL & ~LC3_FRAME_DURATION_BIT, // frame duration is optional
LC3_BIT_VALID = LC3_BIT_MASK,
};
/* max length of streamMap string, up to 16 stream id supported */
#define PAL_LC3_MAX_STRING_LEN 200
typedef struct btsco_lc3_cfg {
uint32_t fields_map;
uint32_t rxconfig_index;
uint32_t txconfig_index;
uint32_t api_version;
uint32_t frame_duration;
uint32_t num_blocks;
char streamMap[PAL_LC3_MAX_STRING_LEN];
char vendor[PAL_LC3_MAX_STRING_LEN];
} btsco_lc3_cfg_t;
typedef struct pal_param_btsco {
bool bt_sco_on;
bool bt_wb_speech_enabled;
bool bt_sco_nrec;
int bt_swb_speech_mode;
bool bt_lc3_speech_enabled;
btsco_lc3_cfg_t lc3_cfg;
} pal_param_btsco_t;
/* Payload For ID: PAL_PARAM_ID_BT_A2DP*
* Description : A2DP related device setParameters
*/
typedef struct pal_param_bta2dp {
int32_t reconfig_supported;
bool reconfig;
bool a2dp_suspended;
bool a2dp_capture_suspended;
bool is_tws_mono_mode_on;
bool is_lc3_mono_mode_on;
bool is_force_switch;
uint32_t latency;
} pal_param_bta2dp_t;
typedef struct pal_param_upd_event_detection {
bool register_status;
} pal_param_upd_event_detection_t;
typedef struct pal_bt_tws_payload_s {
bool isTwsMonoModeOn;
uint32_t codecFormat;
} pal_bt_tws_payload;
/* Payload For Custom Config
* Description : Used by PAL client to customize
* the device related information.
*/
#define PAL_MAX_CUSTOM_KEY_SIZE 128
typedef struct pal_device_custom_config {
char custom_key[PAL_MAX_CUSTOM_KEY_SIZE];
} pal_device_custom_config_t;
typedef struct pal_bt_lc3_payload_s {
bool isLC3MonoModeOn;
} pal_bt_lc3_payload;
typedef struct pal_param_haptics_intensity {
int intensity;
} pal_param_haptics_intensity_t;
/**< PAL device */
struct pal_device {
pal_device_id_t id; /**< device id */
struct pal_media_config config; /**< media config of the device */
struct pal_usb_device_address address;
pal_device_custom_config_t custom_config; /**< Optional */
};
/**
* Maps the modules instance id to module id for a single module
*/
struct module_info {
uint32_t module_id; /**< module id */
uint32_t module_iid; /**< globally unique module instance id */
};
/**
* Structure mapping the tag_id to module info (mid and miid)
*/
struct pal_tag_module_mapping {
uint32_t tag_id; /**< tag id of the module */
uint32_t num_modules; /**< number of modules matching the tag_id */
struct module_info mod_list[]; /**< module list */
};
/**
* Used to return tags and module info data to client given a graph key vector
*/
struct pal_tag_module_info {
/**< number of tags */
uint32_t num_tags;
/**< variable payload of type struct pal_tag_module_mapping*/
uint8_t pal_tag_module_list[];
};
#define PAL_SOUND_TRIGGER_MAX_STRING_LEN 64 /* max length of strings in properties or descriptor structs */
#define PAL_SOUND_TRIGGER_MAX_LOCALE_LEN 6 /* max length of locale string. e.g en_US */
#define PAL_SOUND_TRIGGER_MAX_USERS 10 /* max number of concurrent users */
#define PAL_SOUND_TRIGGER_MAX_PHRASES 10 /* max number of concurrent phrases */
#define PAL_RECOGNITION_MODE_VOICE_TRIGGER 0x1 /* simple voice trigger */
#define PAL_RECOGNITION_MODE_USER_IDENTIFICATION 0x2 /* trigger only if one user in model identified */
#define PAL_RECOGNITION_MODE_USER_AUTHENTICATION 0x4 /* trigger only if one user in mode authenticated */
#define PAL_RECOGNITION_MODE_GENERIC_TRIGGER 0x8 /* generic sound trigger */
#define PAL_RECOGNITION_STATUS_SUCCESS 0
#define PAL_RECOGNITION_STATUS_ABORT 1
#define PAL_RECOGNITION_STATUS_FAILURE 2
#define PAL_RECOGNITION_STATUS_GET_STATE_RESPONSE 3 /* Indicates that the recognition event is in
response to a state request and was not
triggered by a real DSP recognition */
/** used to identify the sound model type for the session */
typedef enum {
PAL_SOUND_MODEL_TYPE_UNKNOWN = -1, /* use for unspecified sound model type */
PAL_SOUND_MODEL_TYPE_KEYPHRASE = 0, /* use for key phrase sound models */
PAL_SOUND_MODEL_TYPE_GENERIC = 1 /* use for all models other than keyphrase */
} pal_st_sound_model_type_t;
struct st_uuid {
uint32_t timeLow;
uint16_t timeMid;
uint16_t timeHiAndVersion;
uint16_t clockSeq;
uint8_t node[6];
};
/**
* sound trigger implementation descriptor read by the framework via get_properties().
* Used by SoundTrigger service to report to applications and manage concurrency and policy.
*/
struct pal_st_properties {
int8_t implementor[PAL_SOUND_TRIGGER_MAX_STRING_LEN]; /* implementor name */
int8_t description[PAL_SOUND_TRIGGER_MAX_STRING_LEN]; /* implementation description */
uint32_t version; /* implementation version */
struct st_uuid uuid; /* unique implementation ID.
Must change with version each version */
uint32_t max_sound_models; /* maximum number of concurrent sound models
loaded */
uint32_t max_key_phrases; /* maximum number of key phrases */
uint32_t max_users; /* maximum number of concurrent users detected */
uint32_t recognition_modes; /* all supported modes.
e.g PAL_RECOGNITION_MODE_VOICE_TRIGGER */
bool capture_transition; /* supports seamless transition from detection
to capture */
uint32_t max_buffer_ms; /* maximum buffering capacity in ms if
capture_transition is true*/
bool concurrent_capture; /* supports capture by other use cases while
detection is active */
bool trigger_in_event; /* returns the trigger capture in event */
uint32_t power_consumption_mw; /* Rated power consumption when detection is active
with TDB silence/sound/speech ratio */
};
/** sound model structure passed in by ST Client during pal_st_load_sound_model() */
struct pal_st_sound_model {
pal_st_sound_model_type_t type; /* model type. e.g. PAL_SOUND_MODEL_TYPE_KEYPHRASE */
struct st_uuid uuid; /* unique sound model ID. */
struct st_uuid vendor_uuid; /* unique vendor ID. Identifies the engine the
sound model was build for */
uint32_t data_size; /* size of opaque model data */
uint32_t data_offset; /* offset of opaque data start from head of struct
e.g sizeof struct pal_st_sound_model) */
};
/** key phrase descriptor */
struct pal_st_phrase {
uint32_t id; /**< keyphrase ID */
uint32_t recognition_mode; /**< recognition modes supported by this key phrase */
uint32_t num_users; /**< number of users in the key phrase */
uint32_t users[PAL_SOUND_TRIGGER_MAX_USERS]; /**< users ids: (not uid_t but sound trigger
specific IDs */
char locale[PAL_SOUND_TRIGGER_MAX_LOCALE_LEN]; /**< locale - JAVA Locale style (e.g. en_US) */
char text[PAL_SOUND_TRIGGER_MAX_STRING_LEN]; /**< phrase text in UTF-8 format. */
};
/**
* Specialized sound model for key phrase detection.
* Proprietary representation of key phrases in binary data must match information indicated
* by phrases field use this when not sending
*/
struct pal_st_phrase_sound_model {
struct pal_st_sound_model common; /** common sound model */
uint32_t num_phrases; /** number of key phrases in model */
struct pal_st_phrase phrases[PAL_SOUND_TRIGGER_MAX_PHRASES];
};
struct pal_st_confidence_level {
uint32_t user_id; /* user ID */
uint32_t level; /* confidence level in percent (0 - 100).
- min level for recognition configuration
- detected level for recognition event */
};
/** Specialized recognition event for key phrase detection */
struct pal_st_phrase_recognition_extra {
uint32_t id; /* keyphrase ID */
uint32_t recognition_modes; /* recognition modes used for this keyphrase */
uint32_t confidence_level; /* confidence level for mode RECOGNITION_MODE_VOICE_TRIGGER */
uint32_t num_levels; /* number of user confidence levels */
struct pal_st_confidence_level levels[PAL_SOUND_TRIGGER_MAX_USERS];
};
struct pal_st_recognition_event {
int32_t status; /**< recognition status e.g.
RECOGNITION_STATUS_SUCCESS */
pal_st_sound_model_type_t type; /**< event type, same as sound model type.
e.g. SOUND_MODEL_TYPE_KEYPHRASE */
pal_st_handle_t *st_handle; /**< handle of sound trigger session */
bool capture_available; /**< it is possible to capture audio from this
utterance buffered by the
implementation */
int32_t capture_session; /**< audio session ID. framework use */
int32_t capture_delay_ms; /**< delay in ms between end of model
detection and start of audio available
for capture. A negative value is possible
(e.g. if key phrase is also available for
capture */
int32_t capture_preamble_ms; /**< duration in ms of audio captured
before the start of the trigger.
0 if none. */
bool trigger_in_data; /**< the opaque data is the capture of
the trigger sound */
struct pal_media_config media_config; /**< media format of either the trigger in
event data or to use for capture of the
rest of the utterance */
uint32_t data_size; /**< size of opaque event data */
uint32_t data_offset; /**< offset of opaque data start from start of
this struct (e.g sizeof struct
sound_trigger_phrase_recognition_event) */
};
typedef void(*pal_st_recognition_callback_t)(struct pal_st_recognition_event *event,
uint8_t *cookie);
/* Payload for pal_st_start_recognition() */
struct pal_st_recognition_config {
int32_t capture_handle; /**< IO handle that will be used for capture.
N/A if capture_requested is false */
uint32_t capture_device; /**< input device requested for detection capture */
bool capture_requested; /**< capture and buffer audio for this recognition
instance */
uint32_t num_phrases; /**< number of key phrases recognition extras */
struct pal_st_phrase_recognition_extra phrases[PAL_SOUND_TRIGGER_MAX_PHRASES];
/**< configuration for each key phrase */
pal_st_recognition_callback_t callback; /**< callback for recognition events */
uint8_t * cookie; /**< cookie set from client*/
uint32_t data_size; /**< size of opaque capture configuration data */
uint32_t data_offset; /**< offset of opaque data start from start of this struct
(e.g sizeof struct sound_trigger_recognition_config) */
};
struct pal_st_phrase_recognition_event {
struct pal_st_recognition_event common;
uint32_t num_phrases;
struct pal_st_phrase_recognition_extra phrase_extras[PAL_SOUND_TRIGGER_MAX_PHRASES];
};
struct pal_st_generic_recognition_event {
struct pal_st_recognition_event common;
};
struct detection_engine_config_voice_wakeup {
uint16_t mode;
uint16_t custom_payload_size;
uint8_t num_active_models;
uint8_t reserved;
uint8_t confidence_levels[PAL_SOUND_TRIGGER_MAX_USERS];
uint8_t keyword_user_enables[PAL_SOUND_TRIGGER_MAX_USERS];
};
struct detection_engine_config_stage1_pdk {
uint16_t mode;
uint16_t custom_payload_size;
uint32_t model_id;
uint32_t num_keywords;
uint32_t confidence_levels[MAX_KEYWORD_SUPPORTED];
};
struct detection_engine_multi_model_buffering_config {
uint32_t model_id;
uint32_t hist_buffer_duration_in_ms;
uint32_t pre_roll_duration_in_ms;
};
struct ffv_doa_tracking_monitor_t
{
int16_t target_angle_L16[2];
int16_t interf_angle_L16[2];
int8_t polarActivityGUI[360];
};
struct __attribute__((__packed__)) version_arch_payload {
unsigned int version;
char arch[64];
};
struct pal_compr_gapless_mdata {
uint32_t encoderDelay;
uint32_t encoderPadding;
};
typedef struct pal_device_mute_t {
pal_stream_direction_t dir;
bool mute;
}pal_device_mute_t;
/**
* Event payload passed to client with PAL_STREAM_CBK_EVENT_READ_DONE and
* PAL_STREAM_CBK_EVENT_WRITE_READY events
*/
struct pal_event_read_write_done_payload {
uint32_t tag; /**< tag that was used to read/write this buffer */
uint32_t status; /**< data buffer status as defined in ar_osal_error.h */
uint32_t md_status; /**< meta-data status as defined in ar_osal_error.h */
struct pal_buffer buff; /**< buffer that was passed to pal_stream_read/pal_stream_write */
};
/** @brief Callback function prototype to be given for
* pal_open_stream.
*
* \param[in] stream_handle - stream handle associated with the
* callback event.
* \param[in] event_id - event id of the event raised on the
* stream.
* \param[in] event_data - event_data specific to the event
* raised.
* \param[in] cookie - cookie speificied in the
* pal_stream_open()
*/
typedef int32_t (*pal_stream_callback)(pal_stream_handle_t *stream_handle,
uint32_t event_id, uint32_t *event_data,
uint32_t event_data_size,
uint64_t cookie);
/** @brief Callback function prototype to be given for
* pal_register_callback.
*
* \param[in] event_id - event id of the event raised on the
* stream.
* \param[in] event_data - event_data specific to the event
* raised.
* \param[in] cookie - cookie specified in the
* pal_register_global_callback.
*/
typedef int32_t (*pal_global_callback)(uint32_t event_id, uint32_t *event_data, uint64_t cookie);
/** Sound card state */
typedef enum card_status_t {
CARD_STATUS_OFFLINE = 0,
CARD_STATUS_ONLINE,
CARD_STATUS_NONE,
} card_status_t;
typedef struct pal_buffer_config {
size_t buf_count; /**< number of buffers*/
size_t buf_size; /**< This would be the size of each buffer*/
size_t max_metadata_size; /** < max metadata size associated with each buffer*/
} pal_buffer_config_t;
#define PAL_GENERIC_PLATFORM_DELAY (29*1000LL)
#define PAL_DEEP_BUFFER_PLATFORM_DELAY (29*1000LL)
#define PAL_PCM_OFFLOAD_PLATFORM_DELAY (30*1000LL)
#define PAL_LOW_LATENCY_PLATFORM_DELAY (13*1000LL)
#define PAL_MMAP_PLATFORM_DELAY (3*1000LL)
#define PAL_ULL_PLATFORM_DELAY (4*1000LL)
#define PAL_VOIP_PLATFORM_DELAY (29*1000LL)
#define PAL_GENERIC_OUTPUT_PERIOD_DURATION 40
#define PAL_DEEP_BUFFER_OUTPUT_PERIOD_DURATION 40
#define PAL_PCM_OFFLOAD_OUTPUT_PERIOD_DURATION 80
#define PAL_LOW_LATENCY_OUTPUT_PERIOD_DURATION 5
#define PAL_VOIP_OUTPUT_PERIOD_DURATION 20
#define PAL_GENERIC_PLAYBACK_PERIOD_COUNT 2
#define PAL_DEEP_BUFFER_PLAYBACK_PERIOD_COUNT 2
#define PAL_PCM_OFFLOAD_PLAYBACK_PERIOD_COUNT 2
#define PAL_LOW_LATENCY_PLAYBACK_PERIOD_COUNT 2
#define PAL_VOIP_PLAYBACK_PERIOD_COUNT 2
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /*PAL_DEFS_H*/