diff options
| -rw-r--r-- | include/hardware/audio_amplifier.h | 157 | ||||
| -rw-r--r-- | include/hardware/display_defs.h | 79 | ||||
| -rw-r--r-- | include/hardware/hwcomposer_defs.h | 15 | ||||
| -rw-r--r-- | modules/audio/Android.bp | 13 | ||||
| -rw-r--r-- | modules/audio/audio_amplifier.c | 160 |
5 files changed, 421 insertions, 3 deletions
diff --git a/include/hardware/audio_amplifier.h b/include/hardware/audio_amplifier.h new file mode 100644 index 00000000..26e58a10 --- /dev/null +++ b/include/hardware/audio_amplifier.h @@ -0,0 +1,157 @@ +/* + * Copyright (C) 2015, The CyanogenMod 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 CM_AUDIO_AMPLIFIER_INTERFACE_H +#define CM_AUDIO_AMPLIFIER_INTERFACE_H + +#include <stdint.h> +#include <sys/cdefs.h> +#include <sys/types.h> + +#include <hardware/audio.h> +#include <hardware/hardware.h> + +#include <system/audio.h> + +__BEGIN_DECLS + +#define AMPLIFIER_HARDWARE_MODULE_ID "audio_amplifier" + +#define AMPLIFIER_HARDWARE_INTERFACE "audio_amplifier_hw_if" + +#define AMPLIFIER_MODULE_API_VERSION_0_1 HARDWARE_MODULE_API_VERSION(0, 1) + +#define AMPLIFIER_DEVICE_API_VERSION_1_0 HARDWARE_DEVICE_API_VERSION(1, 0) +#define AMPLIFIER_DEVICE_API_VERSION_2_0 HARDWARE_DEVICE_API_VERSION(2, 0) +#define AMPLIFIER_DEVICE_API_VERSION_2_1 HARDWARE_DEVICE_API_VERSION(2, 1) +#define AMPLIFIER_DEVICE_API_VERSION_CURRENT AMPLIFIER_DEVICE_API_VERSION_2_1 + +struct str_parms; + +typedef struct amplifier_device { + /** + * Common methods of the amplifier device. This *must* be the first member + * of amplifier_device as users of this structure will cast a hw_device_t + * to amplifier_device pointer in contexts where it's known + * the hw_device_t references a amplifier_device. + */ + struct hw_device_t common; + + /** + * Notify amplifier device of current input devices + * + * This function should handle only input devices. + */ + int (*set_input_devices)(struct amplifier_device *device, uint32_t devices); + + /** + * Notify amplifier device of current output devices + * + * This function should handle only output devices. + */ + int (*set_output_devices)(struct amplifier_device *device, uint32_t devices); + + /** + * Notify amplifier device of output device enable/disable + * + * This function should handle only output devices. + */ + int (*enable_output_devices)(struct amplifier_device *device, + uint32_t devices, bool enable); + + /** + * Notify amplifier device of input device enable/disable + * + * This function should handle only input devices. + */ + int (*enable_input_devices)(struct amplifier_device *device, + uint32_t devices, bool enable); + + /** + * Notify amplifier device about current audio mode + */ + int (*set_mode)(struct amplifier_device *device, audio_mode_t mode); + + /** + * Notify amplifier device that an output stream has started + */ + int (*output_stream_start)(struct amplifier_device *device, + struct audio_stream_out *stream, bool offload); + + /** + * Notify amplifier device that an input stream has started + */ + int (*input_stream_start)(struct amplifier_device *device, + struct audio_stream_in *stream); + + /** + * Notify amplifier device that an output stream has stopped + */ + int (*output_stream_standby)(struct amplifier_device *device, + struct audio_stream_out *stream); + + /** + * Notify amplifier device that an input stream has stopped + */ + int (*input_stream_standby)(struct amplifier_device *device, + struct audio_stream_in *stream); + + /** + * set/get audio device parameters. + */ + int (*set_parameters)(struct amplifier_device *device, + struct str_parms *parms); + + /** + * set/get output stream parameters. + */ + int (*out_set_parameters)(struct amplifier_device *device, + struct str_parms *parms); + + /** + * set/get input stream parameters. + */ + int (*in_set_parameters)(struct amplifier_device *device, + struct str_parms *parms); +} amplifier_device_t; + +typedef struct amplifier_module { + /** + * Common methods of the amplifier module. This *must* be the first member + * of amplifier_module as users of this structure will cast a hw_module_t + * to amplifier_module pointer in contexts where it's known + * the hw_module_t references a amplifier_module. + */ + struct hw_module_t common; +} amplifier_module_t; + +/** convenience API for opening and closing a supported device */ + +static inline int amplifier_device_open(const struct hw_module_t *module, + struct amplifier_device **device) +{ + return module->methods->open(module, AMPLIFIER_HARDWARE_INTERFACE, + (struct hw_device_t **) device); +} + +static inline int amplifier_device_close(struct amplifier_device *device) +{ + return device->common.close(&device->common); +} + +__END_DECLS + +#endif // CM_AUDIO_AMPLIFIER_INTERFACE_H diff --git a/include/hardware/display_defs.h b/include/hardware/display_defs.h new file mode 100644 index 00000000..0ec356fe --- /dev/null +++ b/include/hardware/display_defs.h @@ -0,0 +1,79 @@ +/* Copyright (c) 2014-2015, 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. + */ + +#ifndef ANDROID_INCLUDE_DISPLAY_DEFS_H +#define ANDROID_INCLUDE_DISPLAY_DEFS_H + +#include <stdint.h> +#include <sys/cdefs.h> + +#include <hardware/hwcomposer.h> + +__BEGIN_DECLS + +/* Will need to update below enums if hwcomposer_defs.h is updated */ + +/* Extended events for hwc_methods::eventControl() */ +enum { + HWC_EVENT_ORIENTATION = HWC_EVENT_VSYNC + 1 +}; + + +/* Extended hwc_layer_t::compositionType values */ +enum { + /* this layer will be handled in the HWC, using a blit engine */ + HWC_BLIT = 0xFF +}; + +/* Extended hwc_layer_t::flags values + * Flags are set by SurfaceFlinger and read by the HAL + */ +enum { + /* + * HWC_SCREENSHOT_ANIMATOR_LAYER is set by surfaceflinger to indicate + * that this layer is a screenshot animating layer. HWC uses this + * info to disable rotation animation on External Display + */ + HWC_SCREENSHOT_ANIMATOR_LAYER = 0x00000004 +}; + +/* This enum represents different types of 3D mode supported. This definition + * is maintained by HWC and exposed to its clients. + */ +enum { + HWC_S3DMODE_NONE = 0, + HWC_S3DMODE_LR, + HWC_S3DMODE_RL, + HWC_S3DMODE_TB, + HWC_S3DMODE_FP, + HWC_S3DMODE_MAX, +}; + +__END_DECLS + +#endif /* ANDROID_INCLUDE_DISPLAY_DEFS_H*/ diff --git a/include/hardware/hwcomposer_defs.h b/include/hardware/hwcomposer_defs.h index fd373e31..9f22f862 100644 --- a/include/hardware/hwcomposer_defs.h +++ b/include/hardware/hwcomposer_defs.h @@ -261,10 +261,19 @@ enum { enum { HWC_DISPLAY_PRIMARY = 0, HWC_DISPLAY_EXTERNAL = 1, // HDMI, DP, etc. - HWC_DISPLAY_VIRTUAL = 2, - HWC_NUM_PHYSICAL_DISPLAY_TYPES = 2, - HWC_NUM_DISPLAY_TYPES = 3, + HWC_DISPLAY_EXTERNAL_2 = 2, + HWC_DISPLAY_EXTERNAL_3 = 3, + HWC_DISPLAY_EXTERNAL_4 = 4, + + HWC_DISPLAY_BUILTIN_2 = 5, + HWC_DISPLAY_BUILTIN_3 = 6, + HWC_DISPLAY_BUILTIN_4 = 7, + + HWC_DISPLAY_VIRTUAL = 8, + + HWC_NUM_PHYSICAL_DISPLAY_TYPES = 8, + HWC_NUM_DISPLAY_TYPES = 9, }; enum { diff --git a/modules/audio/Android.bp b/modules/audio/Android.bp index a7467c29..940a5366 100644 --- a/modules/audio/Android.bp +++ b/modules/audio/Android.bp @@ -61,3 +61,16 @@ cc_library_shared { ], cflags: ["-Wall", "-Werror", "-Wno-unused-parameter"], } + +// The stub audio amplifier HAL module that can be used as a skeleton for +// new implementations. +cc_library_shared { + name: "audio_amplifier.default", + relative_install_path: "hw", + proprietary: true, + srcs: ["audio_amplifier.c"], + shared_libs: [ + "liblog", + ], + cflags: ["-Wall", "-Werror", "-Wno-unused-parameter"], +} diff --git a/modules/audio/audio_amplifier.c b/modules/audio/audio_amplifier.c new file mode 100644 index 00000000..c0d840f9 --- /dev/null +++ b/modules/audio/audio_amplifier.c @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2015 The CyanogenMod 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. + */ + +#define LOG_TAG "amplifier_default" +//#define LOG_NDEBUG 0 + +#include <stdint.h> +#include <stdlib.h> +#include <sys/types.h> + +#include <cutils/log.h> +#include <cutils/str_parms.h> + +#include <hardware/audio_amplifier.h> +#include <hardware/hardware.h> + +static int amp_set_input_devices(amplifier_device_t *device, uint32_t devices) +{ + return 0; +} + +static int amp_set_output_devices(amplifier_device_t *device, uint32_t devices) +{ + return 0; +} + +static int amp_enable_output_devices(amplifier_device_t *device, + uint32_t devices, bool enable) +{ + return 0; +} + +static int amp_enable_input_devices(amplifier_device_t *device, + uint32_t devices, bool enable) +{ + return 0; +} + +static int amp_set_mode(amplifier_device_t *device, audio_mode_t mode) +{ + return 0; +} + +static int amp_output_stream_start(amplifier_device_t *device, + struct audio_stream_out *stream, bool offload) +{ + return 0; +} + +static int amp_input_stream_start(amplifier_device_t *device, + struct audio_stream_in *stream) +{ + return 0; +} + +static int amp_output_stream_standby(amplifier_device_t *device, + struct audio_stream_out *stream) +{ + return 0; +} + +static int amp_input_stream_standby(amplifier_device_t *device, + struct audio_stream_in *stream) +{ + return 0; +} + +static int amp_set_parameters(struct amplifier_device *device, + struct str_parms *parms) +{ + return 0; +} + +static int amp_out_set_parameters(struct amplifier_device *device, + struct str_parms *parms) +{ + return 0; +} + +static int amp_in_set_parameters(struct amplifier_device *device, + struct str_parms *parms) +{ + return 0; +} + +static int amp_dev_close(hw_device_t *device) +{ + if (device) + free(device); + + return 0; +} + +static int amp_module_open(const hw_module_t *module, const char *name, + hw_device_t **device) +{ + if (strcmp(name, AMPLIFIER_HARDWARE_INTERFACE)) { + ALOGE("%s:%d: %s does not match amplifier hardware interface name\n", + __func__, __LINE__, name); + return -ENODEV; + } + + amplifier_device_t *amp_dev = calloc(1, sizeof(amplifier_device_t)); + if (!amp_dev) { + ALOGE("%s:%d: Unable to allocate memory for amplifier device\n", + __func__, __LINE__); + return -ENOMEM; + } + + amp_dev->common.tag = HARDWARE_DEVICE_TAG; + amp_dev->common.module = (hw_module_t *) module; + amp_dev->common.version = HARDWARE_DEVICE_API_VERSION(1, 0); + amp_dev->common.close = amp_dev_close; + + amp_dev->set_input_devices = amp_set_input_devices; + amp_dev->set_output_devices = amp_set_output_devices; + amp_dev->enable_output_devices = amp_enable_output_devices; + amp_dev->enable_input_devices = amp_enable_input_devices; + amp_dev->set_mode = amp_set_mode; + amp_dev->output_stream_start = amp_output_stream_start; + amp_dev->input_stream_start = amp_input_stream_start; + amp_dev->output_stream_standby = amp_output_stream_standby; + amp_dev->input_stream_standby = amp_input_stream_standby; + amp_dev->set_parameters = amp_set_parameters; + amp_dev->out_set_parameters = amp_out_set_parameters; + amp_dev->in_set_parameters = amp_in_set_parameters; + + *device = (hw_device_t *) amp_dev; + + return 0; +} + +static struct hw_module_methods_t hal_module_methods = { + .open = amp_module_open, +}; + +amplifier_module_t HAL_MODULE_INFO_SYM = { + .common = { + .tag = HARDWARE_MODULE_TAG, + .module_api_version = AMPLIFIER_MODULE_API_VERSION_0_1, + .hal_api_version = HARDWARE_HAL_API_VERSION, + .id = AMPLIFIER_HARDWARE_MODULE_ID, + .name = "Default audio amplifier HAL", + .author = "The CyanogenMod Open Source Project", + .methods = &hal_module_methods, + }, +}; |
