4 * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
24 #include "tizen-audio-internal.h"
25 #include "tizen-audio-impl.h"
27 audio_return_e _audio_pcm_init(audio_hal_s *ah)
29 AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
35 audio_return_e _audio_pcm_deinit(audio_hal_s *ah)
37 AUDIO_RETURN_VAL_IF_FAIL(ah, AUDIO_ERR_PARAMETER);
42 audio_return_e audio_pcm_open(void *audio_handle, const char *card, const char *device, uint32_t direction, void *sample_spec,
43 uint32_t period_size, uint32_t periods, void **pcm_handle)
45 audio_return_e audio_ret = AUDIO_RET_OK;
47 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
48 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
49 AUDIO_RETURN_VAL_IF_FAIL(sample_spec, AUDIO_ERR_PARAMETER);
50 AUDIO_RETURN_VAL_IF_FAIL((period_size > 0), AUDIO_ERR_PARAMETER);
51 AUDIO_RETURN_VAL_IF_FAIL((periods > 0), AUDIO_ERR_PARAMETER);
53 if ((audio_ret = _pcm_open(card, device, direction, sample_spec, period_size, periods, pcm_handle)))
56 AUDIO_LOG_INFO("Opening PCM handle %p", *pcm_handle);
61 audio_return_e audio_pcm_start(void *audio_handle, void *pcm_handle)
63 audio_return_e audio_ret = AUDIO_RET_OK;
65 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
66 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
68 audio_ret = _pcm_start(pcm_handle);
73 audio_return_e audio_pcm_stop(void *audio_handle, void *pcm_handle)
75 audio_return_e audio_ret = AUDIO_RET_OK;
77 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
78 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
80 audio_ret = _pcm_stop(pcm_handle);
85 audio_return_e audio_pcm_close(void *audio_handle, void *pcm_handle)
87 audio_return_e audio_ret = AUDIO_RET_OK;
89 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
90 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
92 if ((audio_ret = _pcm_close(pcm_handle)))
97 AUDIO_LOG_INFO("PCM handle close success");
102 audio_return_e audio_pcm_avail(void *audio_handle, void *pcm_handle, uint32_t *avail)
104 audio_return_e audio_ret = AUDIO_RET_OK;
106 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
107 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
108 AUDIO_RETURN_VAL_IF_FAIL(avail, AUDIO_ERR_PARAMETER);
110 audio_ret = _pcm_avail(pcm_handle, avail);
115 audio_return_e audio_pcm_write(void *audio_handle, void *pcm_handle, const void *buffer, uint32_t frames)
117 audio_return_e audio_ret = AUDIO_RET_OK;
119 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
120 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
122 audio_ret = _pcm_write(pcm_handle, buffer, frames);
127 audio_return_e audio_pcm_read(void *audio_handle, void *pcm_handle, void *buffer, uint32_t frames)
129 audio_return_e audio_ret = AUDIO_RET_OK;
131 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
132 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
134 audio_ret = _pcm_read(pcm_handle, buffer, frames);
139 audio_return_e audio_pcm_get_fd(void *audio_handle, void *pcm_handle, int *fd)
141 audio_return_e audio_ret = AUDIO_RET_OK;
143 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
144 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
145 AUDIO_RETURN_VAL_IF_FAIL(fd, AUDIO_ERR_PARAMETER);
147 audio_ret = _pcm_get_fd(pcm_handle, fd);
152 audio_return_e audio_pcm_recover(void *audio_handle, void *pcm_handle, int revents)
154 audio_return_e audio_ret = AUDIO_RET_OK;
156 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
157 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
159 audio_ret = _pcm_recover(pcm_handle, revents);
164 audio_return_e audio_pcm_get_params(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t *period_size, uint32_t *periods)
166 audio_return_e audio_ret = AUDIO_RET_OK;
168 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
169 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
170 AUDIO_RETURN_VAL_IF_FAIL(sample_spec, AUDIO_ERR_PARAMETER);
171 AUDIO_RETURN_VAL_IF_FAIL(period_size, AUDIO_ERR_PARAMETER);
172 AUDIO_RETURN_VAL_IF_FAIL(periods, AUDIO_ERR_PARAMETER);
174 audio_ret = _pcm_get_params(pcm_handle, direction, sample_spec, period_size, periods);
179 audio_return_e audio_pcm_set_params(void *audio_handle, void *pcm_handle, uint32_t direction, void *sample_spec, uint32_t period_size, uint32_t periods)
181 audio_return_e audio_ret = AUDIO_RET_OK;
183 AUDIO_RETURN_VAL_IF_FAIL(audio_handle, AUDIO_ERR_PARAMETER);
184 AUDIO_RETURN_VAL_IF_FAIL(pcm_handle, AUDIO_ERR_PARAMETER);
185 AUDIO_RETURN_VAL_IF_FAIL(sample_spec, AUDIO_ERR_PARAMETER);
186 AUDIO_RETURN_VAL_IF_FAIL(period_size, AUDIO_ERR_PARAMETER);
187 AUDIO_RETURN_VAL_IF_FAIL(periods, AUDIO_ERR_PARAMETER);
189 audio_ret = _pcm_set_params(pcm_handle, direction, sample_spec, period_size, periods);