--- /dev/null
+/*
+ * HAL (Hardware Abstract Layer) interface API for Audio
+ *
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ *
+ * 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 __HAL_AUDIO_INTERFACE_1__
+#define __HAL_AUDIO_INTERFACE_1__
+
+#include <stdint.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file hal-audio.h
+ * @brief This file contains the Audio Hardware Abstraction Layer Interfaces.
+ */
+
+/**
+ * @addtogroup TIZEN_AUDIO_HAL_MODULE
+ * @{
+ */
+
+/**
+ * @brief Enumeration for return codes.
+ * @since_tizen 6.5
+ */
+typedef enum audio_return {
+ AUDIO_RET_OK = 0,
+ AUDIO_ERR_UNDEFINED = (int32_t)0x80001000,
+ AUDIO_ERR_RESOURCE = (int32_t)0x80001001,
+ AUDIO_ERR_PARAMETER = (int32_t)0x80001002,
+ AUDIO_ERR_IOCTL = (int32_t)0x80001003,
+ AUDIO_ERR_INVALID_STATE = (int32_t)0x80001004,
+ AUDIO_ERR_INTERNAL = (int32_t)0x80001005,
+ /* add new enumerator here */
+ AUDIO_ERR_NOT_IMPLEMENTED = (int32_t)0x80001100,
+} audio_return_e;
+
+/**
+ * @brief Enumeration for audio direction.
+ * @since_tizen 6.5
+ */
+typedef enum audio_direction {
+ AUDIO_DIRECTION_IN, /**< Capture */
+ AUDIO_DIRECTION_OUT, /**< Playback */
+} audio_direction_e;
+
+/**
+ * @brief Enumeration for audio state.
+ * @since_tizen 9.0
+ */
+typedef enum audio_state {
+ AUDIO_STATE_OPEN,
+ AUDIO_STATE_SETUP,
+ AUDIO_STATE_PREPARED,
+ AUDIO_STATE_RUNNING,
+ AUDIO_STATE_XRUN, /* playback:underrun, capture:overrun */
+ AUDIO_STATE_DRAINING,
+ AUDIO_STATE_PAUSED,
+ AUDIO_STATE_SUSPENDED,
+ AUDIO_STATE_DISCONNECTED,
+ AUDIO_STATE_UNKNOWN,
+} audio_state_e;
+
+/**
+ * @brief Device information including type, direction and id.
+ * @since_tizen 6.5
+ */
+typedef struct device_info {
+ const char *type;
+ uint32_t direction;
+ uint32_t id;
+} device_info_s;
+
+/**
+ * @brief Volume information including type, gain and direction.
+ * @since_tizen 6.5
+ */
+typedef struct audio_volume_info {
+ const char *type;
+ const char *gain;
+ uint32_t direction;
+} audio_volume_info_s;
+
+/**
+ * @brief Route information including role and device.
+ * @since_tizen 6.5
+ */
+typedef struct audio_route_info {
+ const char *role;
+ device_info_s *device_infos;
+ uint32_t num_of_devices;
+} audio_route_info_s;
+
+/**
+ * @brief Route option including role, name and value.
+ * @since_tizen 6.5
+ */
+typedef struct audio_route_option {
+ const char *role;
+ const char *name;
+ int32_t value;
+} audio_route_option_s;
+
+/**
+ * @brief Stream information including role, direction and index.
+ * @since_tizen 6.5
+ */
+typedef struct audio_stream_info {
+ const char *role;
+ uint32_t direction;
+ uint32_t idx;
+} audio_stream_info_s;
+
+/**
+ * @brief Ducking information including target role, duration and ratio.
+ * @since_tizen 6.5
+ */
+typedef struct audio_ducking_info {
+ const char *target_role;
+ uint32_t duration;
+ double ratio;
+} audio_ducking_info_s;
+
+/**
+ * @brief Called when audio hal implementation needs to send a message.
+ * @since_tizen 6.5
+ * @param[in] name The message name
+ * @param[in] value The message value
+ * @param[in] user_data The user data passed from the callback registration function
+ *
+ * @see audio_add_message_cb()
+ * @see audio_remove_message_cb()
+ */
+typedef void (*message_cb)(const char *name, int value, void *user_data);
+
+typedef struct _hal_backend_media_audio_funcs {
+ /* Initialization & de-initialization */
+ audio_return_e (*init)(void **audio_handle);
+ audio_return_e (*deinit)(void *audio_handle);
+ /* Volume */
+ audio_return_e (*get_volume_level_max)(void *audio_handle, audio_volume_info_s *info, uint32_t *level);
+ audio_return_e (*get_volume_level)(void *audio_handle, audio_volume_info_s *info, uint32_t *level);
+ audio_return_e (*set_volume_level)(void *audio_handle, audio_volume_info_s *info, uint32_t level);
+ audio_return_e (*get_volume_value)(void *audio_handle, audio_volume_info_s *info, uint32_t level, double *value);
+ audio_return_e (*get_volume_mute)(void *audio_handle, audio_volume_info_s *info, uint32_t *mute);
+ audio_return_e (*set_volume_mute)(void *audio_handle, audio_volume_info_s *info, uint32_t mute);
+ audio_return_e (*set_volume_ratio)(void *audio_handle, audio_stream_info_s *info, double ratio);
+ audio_return_e (*notify_ducking_activation_changed)(void *audio_handle, audio_ducking_info_s *info, uint32_t is_activated); /* optional */
+ /* Routing */
+ audio_return_e (*update_route)(void *audio_handle, audio_route_info_s *info);
+ audio_return_e (*update_route_option)(void *audio_handle, audio_route_option_s *option);
+ /* Stream */
+ audio_return_e (*notify_stream_connection_changed)(void *audio_handle, audio_stream_info_s *info, uint32_t is_connected);
+ /* PCM */
+ audio_return_e (*pcm_open)(void *audio_handle, const char *card, const char *device, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods, void **pcm_handle);
+ audio_return_e (*pcm_start)(void *audio_handle, void *pcm_handle);
+ audio_return_e (*pcm_stop)(void *audio_handle, void *pcm_handle);
+ audio_return_e (*pcm_close)(void *audio_handle, void *pcm_handle);
+ audio_return_e (*pcm_avail)(void *audio_handle, void *pcm_handle, uint32_t *avail);
+ audio_return_e (*pcm_write)(void *audio_handle, void *pcm_handle, const void *buffer, uint32_t frames);
+ audio_return_e (*pcm_read)(void *audio_handle, void *pcm_handle, void *buffer, uint32_t frames);
+ audio_return_e (*pcm_get_fd)(void *audio_handle, void *pcm_handle, int *fd);
+ audio_return_e (*pcm_recover)(void *audio_handle, void *pcm_handle, int revents);
+ audio_return_e (*pcm_get_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t *period_size, uint32_t *periods);
+ audio_return_e (*pcm_set_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods);
+
+ audio_return_e (*pcm_avail_delay)(void *audio_handle, void *pcm_handle, int32_t *avail, int32_t *delay);
+ audio_return_e (*pcm_mmap_begin)(void *audio_handle, void *pcm_handle, void **areas, uint32_t *offset, uint32_t *frames, void **ptr);
+ audio_return_e (*pcm_mmap_commit)(void *audio_handle, void *pcm_handle, uint32_t offset, uint32_t frames);
+ audio_return_e (*pcm_get_state)(void *audio_handle, void *pcm_handle, audio_state_e *state);
+
+ /* Message callback */
+ audio_return_e (*add_message_cb)(void *audio_handle, message_cb callback, void *user_data);
+ audio_return_e (*remove_message_cb)(void *audio_handle, message_cb callback);
+} hal_backend_audio_funcs;
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __HAL_AUDIO_INTERFACE_1__ */
+
#ifndef __HAL_AUDIO_INTERFACE__
#define __HAL_AUDIO_INTERFACE__
-#include <stdint.h>
+#include <hal-audio-interface-1.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @file hal-audio.h
- * @brief This file contains the Audio Hardware Abstraction Layer Interfaces.
- */
-
-/**
- * @addtogroup TIZEN_AUDIO_HAL_MODULE
- * @{
- */
-
-/**
- * @brief Enumeration for return codes.
- * @since_tizen 6.5
- */
-typedef enum audio_return {
- AUDIO_RET_OK = 0,
- AUDIO_ERR_UNDEFINED = (int32_t)0x80001000,
- AUDIO_ERR_RESOURCE = (int32_t)0x80001001,
- AUDIO_ERR_PARAMETER = (int32_t)0x80001002,
- AUDIO_ERR_IOCTL = (int32_t)0x80001003,
- AUDIO_ERR_INVALID_STATE = (int32_t)0x80001004,
- AUDIO_ERR_INTERNAL = (int32_t)0x80001005,
- /* add new enumerator here */
- AUDIO_ERR_NOT_IMPLEMENTED = (int32_t)0x80001100,
-} audio_return_e;
-
-/**
- * @brief Enumeration for audio direction.
- * @since_tizen 6.5
- */
-typedef enum audio_direction {
- AUDIO_DIRECTION_IN, /**< Capture */
- AUDIO_DIRECTION_OUT, /**< Playback */
-} audio_direction_e;
-
-/**
- * @brief Enumeration for audio state.
- * @since_tizen 9.0
- */
-typedef enum audio_state {
- AUDIO_STATE_OPEN,
- AUDIO_STATE_SETUP,
- AUDIO_STATE_PREPARED,
- AUDIO_STATE_RUNNING,
- AUDIO_STATE_XRUN, /* playback:underrun, capture:overrun */
- AUDIO_STATE_DRAINING,
- AUDIO_STATE_PAUSED,
- AUDIO_STATE_SUSPENDED,
- AUDIO_STATE_DISCONNECTED,
- AUDIO_STATE_UNKNOWN,
-} audio_state_e;
-
-/**
- * @brief Device information including type, direction and id.
- * @since_tizen 6.5
- */
-typedef struct device_info {
- const char *type;
- uint32_t direction;
- uint32_t id;
-} device_info_s;
-
-/**
- * @brief Volume information including type, gain and direction.
- * @since_tizen 6.5
- */
-typedef struct audio_volume_info {
- const char *type;
- const char *gain;
- uint32_t direction;
-} audio_volume_info_s;
-
-/**
- * @brief Route information including role and device.
- * @since_tizen 6.5
- */
-typedef struct audio_route_info {
- const char *role;
- device_info_s *device_infos;
- uint32_t num_of_devices;
-} audio_route_info_s;
-
-/**
- * @brief Route option including role, name and value.
- * @since_tizen 6.5
- */
-typedef struct audio_route_option {
- const char *role;
- const char *name;
- int32_t value;
-} audio_route_option_s;
-
-/**
- * @brief Stream information including role, direction and index.
- * @since_tizen 6.5
- */
-typedef struct audio_stream_info {
- const char *role;
- uint32_t direction;
- uint32_t idx;
-} audio_stream_info_s;
-
-/**
- * @brief Ducking information including target role, duration and ratio.
- * @since_tizen 6.5
- */
-typedef struct audio_ducking_info {
- const char *target_role;
- uint32_t duration;
- double ratio;
-} audio_ducking_info_s;
-
-/**
- * @brief Called when audio hal implementation needs to send a message.
- * @since_tizen 6.5
- * @param[in] name The message name
- * @param[in] value The message value
- * @param[in] user_data The user data passed from the callback registration function
- *
- * @see audio_add_message_cb()
- * @see audio_remove_message_cb()
- */
-typedef void (*message_cb)(const char *name, int value, void *user_data);
-
-typedef struct _hal_backend_media_audio_funcs {
- /* Initialization & de-initialization */
- audio_return_e (*init)(void **audio_handle);
- audio_return_e (*deinit)(void *audio_handle);
- /* Volume */
- audio_return_e (*get_volume_level_max)(void *audio_handle, audio_volume_info_s *info, uint32_t *level);
- audio_return_e (*get_volume_level)(void *audio_handle, audio_volume_info_s *info, uint32_t *level);
- audio_return_e (*set_volume_level)(void *audio_handle, audio_volume_info_s *info, uint32_t level);
- audio_return_e (*get_volume_value)(void *audio_handle, audio_volume_info_s *info, uint32_t level, double *value);
- audio_return_e (*get_volume_mute)(void *audio_handle, audio_volume_info_s *info, uint32_t *mute);
- audio_return_e (*set_volume_mute)(void *audio_handle, audio_volume_info_s *info, uint32_t mute);
- audio_return_e (*set_volume_ratio)(void *audio_handle, audio_stream_info_s *info, double ratio);
- audio_return_e (*notify_ducking_activation_changed)(void *audio_handle, audio_ducking_info_s *info, uint32_t is_activated); /* optional */
- /* Routing */
- audio_return_e (*update_route)(void *audio_handle, audio_route_info_s *info);
- audio_return_e (*update_route_option)(void *audio_handle, audio_route_option_s *option);
- /* Stream */
- audio_return_e (*notify_stream_connection_changed)(void *audio_handle, audio_stream_info_s *info, uint32_t is_connected);
- /* PCM */
- audio_return_e (*pcm_open)(void *audio_handle, const char *card, const char *device, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods, void **pcm_handle);
- audio_return_e (*pcm_start)(void *audio_handle, void *pcm_handle);
- audio_return_e (*pcm_stop)(void *audio_handle, void *pcm_handle);
- audio_return_e (*pcm_close)(void *audio_handle, void *pcm_handle);
- audio_return_e (*pcm_avail)(void *audio_handle, void *pcm_handle, uint32_t *avail);
- audio_return_e (*pcm_write)(void *audio_handle, void *pcm_handle, const void *buffer, uint32_t frames);
- audio_return_e (*pcm_read)(void *audio_handle, void *pcm_handle, void *buffer, uint32_t frames);
- audio_return_e (*pcm_get_fd)(void *audio_handle, void *pcm_handle, int *fd);
- audio_return_e (*pcm_recover)(void *audio_handle, void *pcm_handle, int revents);
- audio_return_e (*pcm_get_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t *period_size, uint32_t *periods);
- audio_return_e (*pcm_set_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods);
-
- audio_return_e (*pcm_avail_delay)(void *audio_handle, void *pcm_handle, int32_t *avail, int32_t *delay);
- audio_return_e (*pcm_mmap_begin)(void *audio_handle, void *pcm_handle, void **areas, uint32_t *offset, uint32_t *frames, void **ptr);
- audio_return_e (*pcm_mmap_commit)(void *audio_handle, void *pcm_handle, uint32_t offset, uint32_t frames);
- audio_return_e (*pcm_get_state)(void *audio_handle, void *pcm_handle, audio_state_e *state);
-
- /* Message callback */
- audio_return_e (*add_message_cb)(void *audio_handle, message_cb callback, void *user_data);
- audio_return_e (*remove_message_cb)(void *audio_handle, message_cb callback);
-} hal_backend_audio_funcs;
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
#endif /* __HAL_AUDIO_INTERFACE__ */