4 * Copyright (c) 2000 - 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.
20 /*===========================================================================================
24 ========================================================================================== */
29 #include <mm_message.h>
31 #ifdef TIZEN_FEATURE_RADIO_HAL
32 #include "mm_radio_priv_hal.h"
34 #include "mm_radio_priv.h"
36 #include "mm_radio_utils.h"
39 /*===========================================================================================
41 | LOCAL DEFINITIONS AND DECLARATIONS FOR MODULE |
43 ========================================================================================== */
45 /*---------------------------------------------------------------------------
46 | GLOBAL CONSTANT DEFINITIONS: |
47 ---------------------------------------------------------------------------*/
49 /*---------------------------------------------------------------------------
50 | IMPORTED VARIABLE DECLARATIONS: |
51 ---------------------------------------------------------------------------*/
53 /*---------------------------------------------------------------------------
54 | IMPORTED FUNCTION DECLARATIONS: |
55 ---------------------------------------------------------------------------*/
57 /*---------------------------------------------------------------------------
59 ---------------------------------------------------------------------------*/
61 /*---------------------------------------------------------------------------
62 | LOCAL CONSTANT DEFINITIONS: |
63 ---------------------------------------------------------------------------*/
65 /*---------------------------------------------------------------------------
66 | LOCAL DATA TYPE DEFINITIONS: |
67 ---------------------------------------------------------------------------*/
69 /*---------------------------------------------------------------------------
70 | GLOBAL VARIABLE DEFINITIONS: |
71 ---------------------------------------------------------------------------*/
73 /*---------------------------------------------------------------------------
74 | LOCAL VARIABLE DEFINITIONS: |
75 ---------------------------------------------------------------------------*/
77 /*---------------------------------------------------------------------------
78 | LOCAL FUNCTION PROTOTYPES: |
79 ---------------------------------------------------------------------------*/
81 /*===========================================================================
83 | FUNCTION DEFINITIONS |
85 ========================================================================== */
87 int mm_radio_create(MMHandleType *hradio)
89 int result = MM_ERROR_NONE;
90 mm_radio_t *new_radio = NULL;
94 return_val_if_fail(hradio, MM_ERROR_RADIO_NOT_INITIALIZED);
96 /* alloc radio structure */
97 new_radio = (mm_radio_t *)malloc(sizeof(mm_radio_t));
99 debug_critical("cannot allocate memory for radio\n");
102 memset(new_radio, 0, sizeof(mm_radio_t));
104 /* internal creation stuffs */
105 result = _mmradio_create_radio(new_radio);
107 if (result != MM_ERROR_NONE) {
108 debug_error("radio creation failed\n");
112 *hradio = (MMHandleType)new_radio;
114 MMRADIO_LOG_FLEAVE();
121 MMRADIO_FREEIF(new_radio);
123 *hradio = (MMHandleType)0;
125 MMRADIO_LOG_FLEAVE();
127 /* FIXIT : need to specify more error case */
131 int mm_radio_destroy(MMHandleType hradio)
133 int result = MM_ERROR_NONE;
134 mm_radio_t *radio = (mm_radio_t *)hradio;
136 MMRADIO_LOG_FENTER();
138 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
140 result = _mmradio_destroy(radio);
142 if (result != MM_ERROR_NONE)
143 debug_error("failed to destroy radio\n");
146 MMRADIO_FREEIF(radio);
148 MMRADIO_LOG_FLEAVE();
153 int mm_radio_realize(MMHandleType hradio)
155 int result = MM_ERROR_NONE;
156 mm_radio_t *radio = (mm_radio_t *)hradio;
158 MMRADIO_LOG_FENTER();
160 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
162 MMRADIO_CMD_LOCK(radio);
164 result = _mmradio_realize(radio);
166 MMRADIO_CMD_UNLOCK(radio);
168 MMRADIO_LOG_FLEAVE();
173 int mm_radio_unrealize(MMHandleType hradio)
175 int result = MM_ERROR_NONE;
176 mm_radio_t *radio = (mm_radio_t *)hradio;
177 MMRadioStateType state = 0;
179 MMRADIO_LOG_FENTER();
181 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
183 mm_radio_get_state((hradio), &state);
184 MMRADIO_LOG_DEBUG("mm_radio_unrealize state: %d\n", state);
186 if (state == MM_RADIO_STATE_SCANNING)
187 mm_radio_scan_stop(hradio);
189 MMRADIO_CMD_LOCK(radio);
191 result = _mmradio_unrealize(radio);
193 MMRADIO_CMD_UNLOCK(radio);
195 MMRADIO_LOG_FLEAVE();
200 int mm_radio_set_message_callback(MMHandleType hradio, MMMessageCallback callback, void *user_param)
202 int result = MM_ERROR_NONE;
203 mm_radio_t *radio = (mm_radio_t *)hradio;
205 MMRADIO_LOG_FENTER();
207 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
209 MMRADIO_CMD_LOCK(radio);
211 result = _mmradio_set_message_callback(radio, callback, user_param);
213 MMRADIO_CMD_UNLOCK(radio);
215 MMRADIO_LOG_FLEAVE();
220 int mm_radio_get_state(MMHandleType hradio, MMRadioStateType *pState)
222 int result = MM_ERROR_NONE;
223 mm_radio_t *radio = (mm_radio_t *)hradio;
226 MMRADIO_LOG_FENTER();
228 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
229 return_val_if_fail(pState, MM_ERROR_COMMON_INVALID_ARGUMENT);
231 MMRADIO_CMD_LOCK(radio);
233 result = _mmradio_get_state(radio, &state);
237 MMRADIO_CMD_UNLOCK(radio);
239 MMRADIO_LOG_FLEAVE();
244 int mm_radio_start(MMHandleType hradio)
246 int result = MM_ERROR_NONE;
247 mm_radio_t *radio = (mm_radio_t *)hradio;
249 MMRADIO_LOG_FENTER();
251 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
253 MMRADIO_CMD_LOCK(radio);
255 result = _mmradio_start(radio);
257 MMRADIO_CMD_UNLOCK(radio);
259 MMRADIO_LOG_FLEAVE();
264 int mm_radio_stop(MMHandleType hradio)
266 int result = MM_ERROR_NONE;
267 mm_radio_t *radio = (mm_radio_t *)hradio;
269 MMRADIO_LOG_FENTER();
271 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
273 MMRADIO_CMD_LOCK(radio);
275 result = _mmradio_stop(radio);
277 MMRADIO_CMD_UNLOCK(radio);
279 MMRADIO_LOG_FLEAVE();
284 int mm_radio_seek(MMHandleType hradio, MMRadioSeekDirectionType direction)
286 int result = MM_ERROR_NONE;
287 mm_radio_t *radio = (mm_radio_t *)hradio;
289 MMRADIO_LOG_FENTER();
291 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
292 return_val_if_fail(direction >= MM_RADIO_SEEK_UP && direction <= MM_RADIO_SEEK_DOWN, MM_ERROR_INVALID_ARGUMENT);
294 MMRADIO_CMD_LOCK(radio);
296 radio->seek_direction = direction;
298 result = _mmradio_seek(radio, direction);
300 MMRADIO_CMD_UNLOCK(radio);
302 MMRADIO_LOG_FLEAVE();
307 int mm_radio_set_frequency(MMHandleType hradio, int freq)
309 int result = MM_ERROR_NONE;
310 mm_radio_t *radio = (mm_radio_t *)hradio;
312 MMRADIO_LOG_FENTER();
314 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
316 MMRADIO_CMD_LOCK(radio);
318 result = _mmradio_set_frequency(radio, freq);
320 MMRADIO_CMD_UNLOCK(radio);
322 MMRADIO_LOG_FLEAVE();
327 int mm_radio_get_frequency(MMHandleType hradio, int *pFreq)
329 int result = MM_ERROR_NONE;
330 mm_radio_t *radio = (mm_radio_t *)hradio;
333 MMRADIO_LOG_FENTER();
335 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
336 return_val_if_fail(pFreq, MM_ERROR_INVALID_ARGUMENT);
338 MMRADIO_CMD_LOCK(radio);
340 result = _mmradio_get_frequency(radio, &freq);
344 MMRADIO_CMD_UNLOCK(radio);
346 MMRADIO_LOG_FLEAVE();
351 int mm_radio_scan_start(MMHandleType hradio)
353 int result = MM_ERROR_NONE;
354 mm_radio_t *radio = (mm_radio_t *)hradio;
356 MMRADIO_LOG_FENTER();
358 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
360 MMRADIO_CMD_LOCK(radio);
362 result = _mmradio_start_scan(radio);
364 MMRADIO_CMD_UNLOCK(radio);
366 MMRADIO_LOG_FLEAVE();
371 int mm_radio_scan_stop(MMHandleType hradio)
373 int result = MM_ERROR_NONE;
374 mm_radio_t *radio = (mm_radio_t *)hradio;
376 MMRADIO_LOG_FENTER();
378 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
380 MMRADIO_CMD_LOCK(radio);
382 result = _mmradio_stop_scan(radio);
384 MMRADIO_CMD_UNLOCK(radio);
386 MMRADIO_LOG_FLEAVE();
391 int mm_radio_set_mute(MMHandleType hradio, bool muted)
393 int result = MM_ERROR_NONE;
394 mm_radio_t *radio = (mm_radio_t *)hradio;
396 MMRADIO_LOG_FENTER();
398 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
400 MMRADIO_CMD_LOCK(radio);
403 result = _mmradio_mute(radio);
405 result = _mmradio_unmute(radio);
407 MMRADIO_CMD_UNLOCK(radio);
409 MMRADIO_LOG_FLEAVE();
414 int mm_radio_get_signal_strength(MMHandleType hradio, int *value)
416 return_val_if_fail(hradio, MM_ERROR_RADIO_NOT_INITIALIZED);
417 return_val_if_fail(value, MM_ERROR_INVALID_ARGUMENT);
419 MMRADIO_LOG_FENTER();
421 int ret = MM_ERROR_NONE;
423 mm_radio_t *radio = (mm_radio_t *)hradio;
425 MMRADIO_CMD_LOCK(radio);
427 ret = _mm_radio_get_signal_strength(radio, value);
429 MMRADIO_CMD_UNLOCK(radio);
431 MMRADIO_LOG_INFO("signal strength = %d\n", *value);
432 MMRADIO_LOG_FLEAVE();
437 int mm_radio_get_region_type(MMHandleType hradio, MMRadioRegionType *type)
439 MMRADIO_LOG_FENTER();
440 return_val_if_fail(hradio, MM_ERROR_RADIO_NOT_INITIALIZED);
441 return_val_if_fail(type, MM_ERROR_INVALID_ARGUMENT);
443 int result = MM_ERROR_NONE;
444 mm_radio_t *radio = (mm_radio_t *)hradio;
445 MMRadioRegionType cur_type = MM_RADIO_REGION_GROUP_NONE;
447 result = _mmradio_get_region_type(radio, &cur_type);
449 if (result == MM_ERROR_NONE)
452 MMRADIO_LOG_FLEAVE();
456 int mm_radio_get_region_frequency_range(MMHandleType hradio, unsigned int *min, unsigned int *max)
458 MMRADIO_LOG_FENTER();
460 return_val_if_fail(hradio, MM_ERROR_RADIO_NOT_INITIALIZED);
461 return_val_if_fail(min && max, MM_ERROR_INVALID_ARGUMENT);
463 int result = MM_ERROR_NONE;
464 mm_radio_t *radio = (mm_radio_t *)hradio;
465 unsigned int min_freq = 0;
466 unsigned int max_freq = 0;
468 result = _mmradio_get_region_frequency_range(radio, &min_freq, &max_freq);
470 if (result == MM_ERROR_NONE) {
475 MMRADIO_LOG_FLEAVE();
479 int mm_radio_get_channel_spacing(MMHandleType hradio, int *channel_spacing)
481 MMRADIO_LOG_FENTER();
483 return_val_if_fail(hradio, MM_ERROR_RADIO_NOT_INITIALIZED);
484 return_val_if_fail(channel_spacing, MM_ERROR_INVALID_ARGUMENT);
486 int result = MM_ERROR_NONE;
487 mm_radio_t *radio = (mm_radio_t *)hradio;
488 unsigned int ch_spacing = 0;
490 result = _mmradio_get_channel_spacing(radio, &ch_spacing);
492 if (result == MM_ERROR_NONE)
493 *channel_spacing = ch_spacing;
495 MMRADIO_LOG_FLEAVE();
499 int mm_radio_set_volume(MMHandleType hradio, float volume)
501 int result = MM_ERROR_NONE;
502 mm_radio_t *radio = (mm_radio_t *)hradio;
504 MMRADIO_LOG_FENTER();
506 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
508 MMRADIO_CMD_LOCK(radio);
510 result = _mmradio_set_volume(radio, volume);
512 MMRADIO_CMD_UNLOCK(radio);
514 MMRADIO_LOG_FLEAVE();
519 int mm_radio_get_volume(MMHandleType hradio, float *pVolume)
521 int result = MM_ERROR_NONE;
522 mm_radio_t *radio = (mm_radio_t *)hradio;
525 MMRADIO_LOG_FENTER();
527 return_val_if_fail(radio, MM_ERROR_RADIO_NOT_INITIALIZED);
528 return_val_if_fail(pVolume, MM_ERROR_INVALID_ARGUMENT);
530 MMRADIO_CMD_LOCK(radio);
532 result = _mmradio_get_volume(radio, &volume);
533 if (result == MM_ERROR_NONE)
536 MMRADIO_CMD_UNLOCK(radio);
538 MMRADIO_LOG_FLEAVE();