Revise APIs
[platform/adaptation/spreadtrum/audio-hal-sc7727.git] / tizen-audio.h
1 #ifndef footizenaudiofoo
2 #define footizenaudiofoo
3
4 /*
5  * audio-hal
6  *
7  * Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  * http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  */
22
23 #include <stdint.h>
24
25 /* Error code */
26 #define AUDIO_IS_ERROR(ret)             (ret < 0)
27 typedef enum audio_return {
28     AUDIO_RET_OK                        = 0,
29     AUDIO_ERR_UNDEFINED                 = (int32_t)0x80001000,
30     AUDIO_ERR_RESOURCE                  = (int32_t)0x80001001,
31     AUDIO_ERR_PARAMETER                 = (int32_t)0x80001002,
32     AUDIO_ERR_IOCTL                     = (int32_t)0x80001003,
33     AUDIO_ERR_INVALID_STATE             = (int32_t)0x80001004,
34     AUDIO_ERR_INTERNAL                  = (int32_t)0x80001005,
35
36     AUDIO_ERR_NOT_IMPLEMENTED           = (int32_t)0x80001100,
37 } audio_return_t ;
38
39 typedef enum audio_direction {
40     AUDIO_DIRECTION_IN,                 /**< Capture */
41     AUDIO_DIRECTION_OUT,                /**< Playback */
42 } audio_direction_t;
43
44 typedef struct device_info {
45     const char *type;
46     uint32_t direction;
47     uint32_t id;
48 } device_info_t;
49
50 typedef struct audio_volume_info {
51     const char *type;
52     const char *gain;
53     uint32_t direction;
54 } audio_volume_info_t ;
55
56 typedef struct audio_route_info {
57     const char *role;
58     device_info_t *device_infos;
59     uint32_t num_of_devices;
60 } audio_route_info_t;
61
62 typedef struct audio_route_option {
63     const char *role;
64     const char *name;
65     int32_t value;
66 } audio_route_option_t;
67
68 typedef struct audio_stream_info {
69     const char *role;
70     uint32_t direction;
71     uint32_t idx;
72 } audio_stream_info_t ;
73
74 typedef void (*message_cb)(const char *name, int value, void *user_data);
75
76 /* Overall */
77 typedef struct audio_interface {
78     /* Initialization & de-initialization */
79     audio_return_t (*init)(void **audio_handle);
80     audio_return_t (*deinit)(void *audio_handle);
81     /* Volume */
82     audio_return_t (*get_volume_level_max)(void *audio_handle, audio_volume_info_t *info, uint32_t *level);
83     audio_return_t (*get_volume_level)(void *audio_handle, audio_volume_info_t *info, uint32_t *level);
84     audio_return_t (*set_volume_level)(void *audio_handle, audio_volume_info_t *info, uint32_t level);
85     audio_return_t (*get_volume_value)(void *audio_handle, audio_volume_info_t *info, uint32_t level, double *value);
86     audio_return_t (*get_volume_mute)(void *audio_handle, audio_volume_info_t *info, uint32_t *mute);
87     audio_return_t (*set_volume_mute)(void *audio_handle, audio_volume_info_t *info, uint32_t mute);
88     /* Routing */
89     audio_return_t (*update_route)(void *audio_handle, audio_route_info_t *info);
90     audio_return_t (*update_route_option)(void *audio_handle, audio_route_option_t *option);
91     /* Stream */
92     audio_return_t (*notify_stream_connection_changed)(void *audio_handle, audio_stream_info_t *info, uint32_t is_connected);
93     /* Buffer attribute */
94     audio_return_t (*get_buffer_attr)(void *audio_handle, uint32_t direction, const char *latency, uint32_t samplerate, int format, uint32_t channels,
95                                       uint32_t *maxlength, uint32_t *tlength, uint32_t *prebuf, uint32_t* minreq, uint32_t *fragsize);
96     /* PCM device */
97     audio_return_t (*pcm_open)(void *audio_handle, void **pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods);
98     audio_return_t (*pcm_start)(void *audio_handle, void *pcm_handle);
99     audio_return_t (*pcm_stop)(void *audio_handle, void *pcm_handle);
100     audio_return_t (*pcm_close)(void *audio_handle, void *pcm_handle);
101     audio_return_t (*pcm_avail)(void *audio_handle, void *pcm_handle, uint32_t *avail);
102     audio_return_t (*pcm_write)(void *audio_handle, void *pcm_handle, const void *buffer, uint32_t frames);
103     audio_return_t (*pcm_read)(void *audio_handle, void *pcm_handle, void *buffer, uint32_t frames);
104     audio_return_t (*pcm_get_fd)(void *audio_handle, void *pcm_handle, int *fd);
105     audio_return_t (*pcm_recover)(void *audio_handle, void *pcm_handle, int revents);
106     audio_return_t (*pcm_get_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void **sample_spec, uint32_t *period_size, uint32_t *periods);
107     audio_return_t (*pcm_set_params)(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods);
108     /* Message callback */
109     audio_return_t (*add_message_cb)(void *audio_handle, message_cb callback, void *user_data);
110     audio_return_t (*remove_message_cb)(void *audio_handle, message_cb callback);
111 } audio_interface_t;
112
113 audio_return_t audio_init(void **audio_handle);
114 audio_return_t audio_deinit(void *audio_handle);
115 audio_return_t audio_get_volume_level_max(void *audio_handle, audio_volume_info_t *info, uint32_t *level);
116 audio_return_t audio_get_volume_level(void *audio_handle, audio_volume_info_t *info, uint32_t *level);
117 audio_return_t audio_set_volume_level(void *audio_handle, audio_volume_info_t *info, uint32_t level);
118 audio_return_t audio_get_volume_value(void *audio_handle, audio_volume_info_t *info, uint32_t level, double *value);
119 audio_return_t audio_get_volume_mute(void *audio_handle, audio_volume_info_t *info, uint32_t *mute);
120 audio_return_t audio_set_volume_mute(void *audio_handle, audio_volume_info_t *info, uint32_t mute);
121 audio_return_t audio_update_route(void *audio_handle, audio_route_info_t *info);
122 audio_return_t audio_update_route_option(void *audio_handle, audio_route_option_t *option);
123 audio_return_t audio_notify_stream_connection_changed(void *audio_handle, audio_stream_info_t *info, uint32_t is_connected);
124 audio_return_t audio_get_buffer_attr(void *audio_handle, uint32_t direction, const char *latency, uint32_t samplerate, int format, uint32_t channels,
125                                      uint32_t *maxlength, uint32_t *tlength, uint32_t *prebuf, uint32_t* minreq, uint32_t *fragsize);
126 audio_return_t audio_pcm_open(void *audio_handle, void **pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods);
127 audio_return_t audio_pcm_start(void *audio_handle, void *pcm_handle);
128 audio_return_t audio_pcm_stop(void *audio_handle, void *pcm_handle);
129 audio_return_t audio_pcm_close(void *audio_handle, void *pcm_handle);
130 audio_return_t audio_pcm_avail(void *audio_handle, void *pcm_handle, uint32_t *avail);
131 audio_return_t audio_pcm_write(void *audio_handle, void *pcm_handle, const void *buffer, uint32_t frames);
132 audio_return_t audio_pcm_read(void *audio_handle, void *pcm_handle, void *buffer, uint32_t frames);
133 audio_return_t audio_pcm_get_fd(void *audio_handle, void *pcm_handle, int *fd);
134 audio_return_t audio_pcm_recover(void *audio_handle, void *pcm_handle, int revents);
135 audio_return_t audio_pcm_get_params(void *audio_handle, void *pcm_handle, uint32_t direction, void **sample_spec, uint32_t *period_size, uint32_t *periods);
136 audio_return_t audio_pcm_set_params(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods);
137 audio_return_t audio_add_message_cb(void *audio_handle, message_cb callback, void *user_data);
138 audio_return_t audio_remove_message_cb(void *audio_handle, message_cb callback);
139 #endif