Add support for HAL_MODULE_AUDIO v1.0 interface 99/313199/4 accepted/tizen/unified/20240727.112733 accepted/tizen/unified/dev/20240730.010505 accepted/tizen/unified/x/20240729.014301
authorChanwoo Choi <cw00.choi@samsung.com>
Thu, 20 Jun 2024 04:45:22 +0000 (13:45 +0900)
committerJaechul Lee <jcsing.lee@samsung.com>
Wed, 17 Jul 2024 01:42:02 +0000 (10:42 +0900)
HAL_MODULE_AUDIO will support the multiple version of HAL interface.
So that v1.0 is first supported version of HAL_MODULE_AUDIO.
hal-audio-interface-1.h contains v1.0 HAL interface.

Change-Id: If7048a56cd889777db49c80c7b85acb31b83d843
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
include/hal-audio-interface-1.h [new file with mode: 0644]
include/hal-audio-interface.h

diff --git a/include/hal-audio-interface-1.h b/include/hal-audio-interface-1.h
new file mode 100644 (file)
index 0000000..354f954
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * 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__ */
+
index 34de538e6236a2f2ef283bebd2162a99d72a5306..107b4c01136a8a33632793443e3d6d4f5eecc8fd 100644 (file)
 #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__ */