mm-resource-manager integration patch 27/160027/1 accepted/tizen/unified/20171123.065756 submit/tizen/20171117.022846 submit/tizen/20171117.070221
authorGilbok Lee <gilbok.lee@samsung.com>
Tue, 14 Nov 2017 07:16:23 +0000 (16:16 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Tue, 14 Nov 2017 07:16:23 +0000 (16:16 +0900)
[Version] 0.2.23
[Profile] Mobile, Wearable
[Issue Type] Refactoring

Change-Id: I226a07597d4a17e0b5d41054a07d4df8e558862b

configure.ac
packaging/libmm-radio.spec
src/Makefile.am
src/include/mm_radio_priv.h [changed mode: 0644->0755]
src/include/mm_radio_priv_hal.h [changed mode: 0644->0755]
src/include/mm_radio_resource.h [deleted file]
src/mm_radio_priv_emulator.c
src/mm_radio_priv_hal.c
src/mm_radio_resource.c [deleted file]

index ab1c1e11ae135b17aa39677ed33ccab6c10a9bd6..516032937d0182c20111cd850a0bf40876807d63 100755 (executable)
@@ -38,13 +38,9 @@ PKG_CHECK_MODULES(MMCOMMON, mm-common)
 AC_SUBST(MMCOMMON_CFLAGS)
 AC_SUBST(MMCOMMON_LIBS)
 
-PKG_CHECK_MODULES(MURPHY_RESOURCE, murphy-resource)
-AC_SUBST(MURPHY_RESOURCE_CFLAGS)
-AC_SUBST(MURPHY_RESOURCE_LIBS)
-
-PKG_CHECK_MODULES(MURPHY_GLIB, murphy-glib)
-AC_SUBST(MURPHY_GLIB_CFLAGS)
-AC_SUBST(MURPHY_GLIB_LIBS)
+PKG_CHECK_MODULES(MM_RESOURCE_MANAGER, mm-resource-manager)
+AC_SUBST(MM_RESOURCE_MANAGER_CFLAGS)
+AC_SUBST(MM_RESOURCE_MANAGER_LIBS)
 
 PKG_CHECK_MODULES(DLOG, dlog)
 AC_SUBST(DLOG_CFLAGS)
index 60476927f13f8fb2293265504acd342d7bc9d0b7..f7e8b46b3a8cdb5a7fb3b35d1d5d79246bed197f 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       libmm-radio
 Summary:    Multimedia Framework Radio Library
-Version:    0.2.32
+Version:    0.2.33
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0
@@ -15,8 +15,7 @@ BuildRequires:  pkgconfig(capi-media-sound-manager)
 BuildRequires:  pkgconfig(gstreamer-1.0)
 BuildRequires:  pkgconfig(gstreamer-plugins-base-1.0)
 %endif
-BuildRequires:  pkgconfig(murphy-resource)
-BuildRequires:  pkgconfig(murphy-glib)
+BuildRequires:  pkgconfig(mm-resource-manager)
 
 %description
 Description: Multimedia Framework Radio Library
index 8118ed23d7a5a63522347aa74aef545d09d23a19..a8399098196cc4266b5a926f2f53b073438778b9 100755 (executable)
@@ -3,20 +3,17 @@ lib_LTLIBRARIES = libmmfradio.la
 includelibmmfradiodir = $(includedir)/mmf
 includelibmmfradio_HEADERS = include/mm_radio.h
 
-libmmfradio_la_SOURCES = mm_radio.c \
-                        mm_radio_resource.c
+libmmfradio_la_SOURCES = mm_radio.c
 
 libmmfradio_la_CFLAGS = -I. -I./include \
                        $(GTHREAD_CFLAGS) \
                        $(MMCOMMON_CFLAGS) \
-                       $(MURPHY_RESOURCE_CFLAGS) \
-                       $(MURPHY_GLIB_CFLAGS) \
+                       $(MM_RESOURCE_MANAGER_CFLAGS) \
                        $(DLOG_CFLAGS)
 
 libmmfradio_la_LIBADD = $(GTHREAD_LIBS) \
                        $(MMCOMMON_LIBS) \
-                       $(MURPHY_RESOURCE_LIBS) \
-                       $(MURPHY_GLIB_LIBS) \
+                       $(MM_RESOURCE_MANAGER_LIBS) \
                        $(DLOG_LIBS)
 
 
old mode 100644 (file)
new mode 100755 (executable)
index f45faac..f6ad141
@@ -32,6 +32,7 @@
 
 #include <mm_types.h>
 #include <mm_message.h>
+#include <media/mm_resource_manager.h>
 
 #ifdef TIZEN_FEATURE_SOUND_FOCUS
 #include "mm_radio_sound_focus.h"
@@ -39,7 +40,6 @@
 
 #include "mm_radio.h"
 #include "mm_radio_utils.h"
-#include "mm_radio_resource.h"
 #include <linux/videodev2.h>
 
 #include <gst/gst.h>
@@ -191,7 +191,10 @@ typedef struct {
 #ifdef USE_GST_PIPELINE
        mm_radio_gstreamer_s* pGstreamer_s;
 #endif
-       mm_radio_resource_manager resource_manager;
+       mm_resource_manager_h resource_manager;
+       mm_resource_manager_res_h radio_resource;
+       int interrupted_by_resource_conflict;
+
        unsigned int subs_id;
        float local_volume;
 
old mode 100644 (file)
new mode 100755 (executable)
index 67bcf82..437a40e
@@ -32,6 +32,7 @@
 
 #include <mm_types.h>
 #include <mm_message.h>
+#include <media/mm_resource_manager.h>
 
 #ifdef TIZEN_FEATURE_SOUND_FOCUS
 #include "mm_radio_sound_focus.h"
@@ -42,7 +43,6 @@
 #include <media/sound_manager_internal.h>
 #endif
 
-#include "mm_radio_resource.h"
 #include "mm_radio.h"
 #include "mm_radio_utils.h"
 #include "radio_hal_interface.h"
@@ -194,7 +194,9 @@ typedef struct {
 
        mm_radio_hal_interface *hal_inf;
 
-       mm_radio_resource_manager resource_manager;
+       mm_resource_manager_h resource_manager;
+       mm_resource_manager_res_h radio_resource;
+       int interrupted_by_resource_conflict;
 
 } mm_radio_t;
 
diff --git a/src/include/mm_radio_resource.h b/src/include/mm_radio_resource.h
deleted file mode 100644 (file)
index 534757f..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * mm_radio_resource.h
- *
- * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Heechul Jeon <heechul.jeon@samsung.com>
- *
- * 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 __MM_RADIO_RESOURCE_H__
-#define __MM_RADIO_RESOURCE_H__
-
-#include <murphy/plugins/resource-native/libmurphy-resource/resource-api.h>
-#include <glib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define __MMRADIO_RESOURCE_WAIT_TIME   3
-
-#define MMRADIO_GET_RESOURCE_LOCK(rm)  (&((mm_radio_resource_manager *)rm)->lock)
-#define MMRADIO_RESOURCE_LOCK(rm)      (g_mutex_lock(MMRADIO_GET_RESOURCE_LOCK(rm)))
-#define MMRADIO_RESOURCE_UNLOCK(rm)    (g_mutex_unlock(MMRADIO_GET_RESOURCE_LOCK(rm)))
-
-#define MMRADIO_GET_RESOURCE_COND(rm)  (&((mm_radio_resource_manager *)rm)->cond)
-#define MMRADIO_RESOURCE_WAIT(rm)      g_cond_wait(MMRADIO_GET_RESOURCE_COND(rm), MMRADIO_GET_RESOURCE_LOCK(rm)
-#define MMRADIO_RESOURCE_WAIT_UNTIL(rm, end_time) \
-       g_cond_wait_until(MMRADIO_GET_RESOURCE_COND(rm), MMRADIO_GET_RESOURCE_LOCK(rm), end_time)
-#define MMRADIO_RESOURCE_SIGNAL(rm)    g_cond_signal(MMRADIO_GET_RESOURCE_COND(rm));
-
-
-typedef enum {
-       MM_RADIO_RESOURCE_TYPE_RADIO,
-       MM_RADIO_RESOURCE_MAX
-} mm_radio_resource_type_e;
-
-typedef enum {
-       MM_RADIO_RESOURCE_STATE_NONE,
-       MM_RADIO_RESOURCE_STATE_INITIALIZED,
-       MM_RADIO_RESOURCE_STATE_PREPARED,
-       MM_RADIO_RESOURCE_STATE_ACQUIRED,
-       MM_RADIO_RESOURCE_STATE_MAX,
-} mm_radio_resource_state_e;
-
-typedef struct {
-       mrp_mainloop_t *mloop;
-       mrp_res_context_t *context;
-       mrp_res_resource_set_t *rset;
-       mm_radio_resource_state_e state;
-       GCond cond;
-       GMutex lock;
-       void *user_data;
-       bool is_connected;
-       bool by_rm_cb;
-} mm_radio_resource_manager;
-
-int mmradio_resource_manager_init(mm_radio_resource_manager *resource_manager, void *user_data);
-int mmradio_resource_manager_deinit(mm_radio_resource_manager *resource_manager);
-int mmradio_resource_manager_prepare(mm_radio_resource_manager *resource_manager, mm_radio_resource_type_e resource_type);
-int mmradio_resource_manager_unprepare(mm_radio_resource_manager *resource_manager);
-int mmradio_resource_manager_acquire(mm_radio_resource_manager *resource_manager);
-int mmradio_resource_manager_release(mm_radio_resource_manager *resource_manager);
-int mmradio_resource_manager_get_state(mm_radio_resource_manager *resource_manager, mm_radio_resource_state_e *state);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __MM_RADIO_RESOURCE_H__ */
index 1fcd7aeaeb0864a84bc33dc3dd48e5cc6b161604..d79c12cafc75c9b91eb0662fa7a4f9c7fed5fc9a 100755 (executable)
@@ -137,6 +137,8 @@ static bool __is_tunable_frequency(mm_radio_t * radio, int freq);
 static int __mmradio_set_deemphasis(mm_radio_t * radio);
 static int __mmradio_set_band_range(mm_radio_t * radio);
 static int __mmradio_get_wave_num(mm_radio_t * radio);
+static int __resource_release_cb(mm_resource_manager_h rm,
+       mm_resource_manager_res_h res, void *user_data);
 #ifdef TIZEN_FEATURE_SOUND_FOCUS
 static void __mmradio_sound_focus_cb(int id, mm_sound_focus_type_e focus_type,
        mm_sound_focus_state_e focus_state, const char *reason_for_change, int option,
@@ -240,9 +242,10 @@ int _mmradio_create_radio(mm_radio_t * radio)
        MMRADIO_SET_STATE(radio, MM_RADIO_STATE_NULL);
 
        /* initialize resource manager */
-       ret = mmradio_resource_manager_init(&(radio->resource_manager), radio);
+       ret = mm_resource_manager_create(MM_RESOURCE_MANAGER_APP_CLASS_MEDIA,
+                       __resource_release_cb, radio, &radio->resource_manager);
        if (ret) {
-               MMRADIO_LOG_ERROR("failed to initialize resource manager");
+               MMRADIO_LOG_ERROR("failed to create resource manager");
                return MM_ERROR_RADIO_INTERNAL;
        }
 
@@ -357,6 +360,8 @@ int _mmradio_unrealize(mm_radio_t * radio)
 
 int _mmradio_destroy(mm_radio_t * radio)
 {
+       int ret = MM_ERROR_NONE;
+
        MMRADIO_LOG_FENTER();
 
        MMRADIO_CHECK_INSTANCE(radio);
@@ -365,7 +370,6 @@ int _mmradio_destroy(mm_radio_t * radio)
        _mmradio_unrealize(radio);
 
 #ifdef TIZEN_FEATURE_SOUND_FOCUS
-       int ret = 0;
        ret = mmradio_sound_focus_deregister(&radio->sound_focus);
        if (ret) {
                MMRADIO_LOG_ERROR("failed to deregister sound focus");
@@ -373,9 +377,9 @@ int _mmradio_destroy(mm_radio_t * radio)
        }
 #endif
 
-       ret = mmradio_resource_manager_deinit(&radio->resource_manager);
+       ret = mm_resource_manager_destroy(radio->resource_manager);
        if (ret) {
-               MMRADIO_LOG_ERROR("failed to deinitialize resource manager");
+               MMRADIO_LOG_ERROR("failed to destroy resource manager");
                return MM_ERROR_RADIO_INTERNAL;
        }
 
@@ -590,16 +594,21 @@ int _mmradio_start(mm_radio_t * radio)
 
        MMRADIO_SLOG_DEBUG("now tune to frequency : %d", radio->freq);
 
-       ret = mmradio_resource_manager_prepare(&radio->resource_manager, MM_RADIO_RESOURCE_TYPE_RADIO);
-       if (ret != MM_ERROR_NONE) {
-               MMRADIO_LOG_ERROR("failed to prepare resource manager");
+       ret = mm_resource_manager_mark_for_acquire(radio->resource_manager,
+               MM_RESOURCE_MANAGER_RES_TYPE_RADIO,
+               MM_RESOURCE_MANAGER_RES_VOLUME_FULL, &radio->radio_resource);
+       if (ret != MM_RESOURCE_MANAGER_ERROR_NONE) {
+               MMRADIO_LOG_ERROR("resource manager mark for acquire fail");
                return MM_ERROR_RADIO_INTERNAL;
        }
 
-       ret = mmradio_resource_manager_acquire(&radio->resource_manager);
-       if (ret != MM_ERROR_NONE) {
-               MMRADIO_LOG_ERROR("failed to acquire resource manager");
-               mmradio_resource_manager_unprepare(&radio->resource_manager);
+       radio->interrupted_by_resource_conflict = FALSE;
+       ret = mm_resource_manager_commit(radio->resource_manager);
+       if (ret != MM_RESOURCE_MANAGER_ERROR_NONE) {
+               MMRADIO_LOG_ERROR("failed to commit resource manager");
+               mm_resource_manager_mark_for_release(radio->resource_manager,
+                       radio->radio_resource);
+               radio->radio_resource = NULL;
                return ret;
        }
 
@@ -663,7 +672,6 @@ int _mmradio_start(mm_radio_t * radio)
 int _mmradio_stop(mm_radio_t * radio)
 {
        int ret = MM_ERROR_NONE;
-       mm_radio_resource_state_e resource_state = MM_RADIO_RESOURCE_STATE_NONE;
 
        MMRADIO_LOG_FENTER();
 
@@ -673,23 +681,19 @@ int _mmradio_stop(mm_radio_t * radio)
        /*  if( _mmradio_mute(radio) != MM_ERROR_NONE) */
        /*      return MM_ERROR_RADIO_NOT_INITIALIZED; */
 
-       if (!radio->resource_manager.by_rm_cb && /* is being released */
-               mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
-               if (resource_state == MM_RADIO_RESOURCE_STATE_ACQUIRED) {
-                       ret = mmradio_resource_manager_release(&radio->resource_manager);
-                       if (ret != MM_ERROR_NONE) {
-                               MMRADIO_LOG_ERROR("failed to release resource, ret(0x%x)", ret);
-                               return ret;
-                       }
+       if (!radio->interrupted_by_resource_conflict && /* is being released */
+                       radio->radio_resource != NULL) {
+               ret = mm_resource_manager_mark_for_release(radio->resource_manager,
+                               radio->radio_resource);
+               radio->radio_resource = NULL;
+               if (ret != MM_RESOURCE_MANAGER_ERROR_NONE) {
+                       MMRADIO_LOG_ERROR("failed to mark resource for release, ret(0x%x)", ret);
+                       return ret;
                }
-       }
 
-       if (mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
-               if (resource_state == MM_RADIO_RESOURCE_STATE_PREPARED) {
-                       ret = mmradio_resource_manager_unprepare(&radio->resource_manager);
-                       if (ret != MM_ERROR_NONE)
-                               MMRADIO_LOG_ERROR("failed to unprepare resource manager");
-               }
+               ret = mm_resource_manager_commit(radio->resource_manager);
+               if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
+                       MMRADIO_LOG_ERROR("resource manager commit fail");
        }
 
 #ifdef TIZEN_FEATURE_SOUND_FOCUS
@@ -1320,7 +1324,7 @@ static bool __mmradio_set_state(mm_radio_t * radio, int new_state)
                msg.state.code = radio->sound_focus.event_src;
                MMRADIO_POST_MSG(radio, msg_type, &msg);
                radio->sound_focus.by_focus_cb = false;
-       } else if (radio->resource_manager.by_rm_cb) {
+       } else if (radio->interrupted_by_resource_conflict) {
                msg_type = MM_MESSAGE_STATE_INTERRUPTED;
                msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
                MMRADIO_POST_MSG(radio, msg_type, &msg);
@@ -1329,7 +1333,7 @@ static bool __mmradio_set_state(mm_radio_t * radio, int new_state)
                MMRADIO_POST_MSG(radio, msg_type, &msg);
        }
 #else
-       if (radio->resource_manager.by_rm_cb) {
+       if (radio->interrupted_by_resource_conflict) {
                 msg_type = MM_MESSAGE_STATE_INTERRUPTED;
                 msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
                 MMRADIO_POST_MSG(radio, msg_type, &msg);
@@ -1541,6 +1545,35 @@ static int __mmradio_get_wave_num(mm_radio_t * radio)
        return val;
 }
 
+static int __resource_release_cb(mm_resource_manager_h rm,
+       mm_resource_manager_res_h res, void *user_data)
+{
+       mm_radio_t *radio = NULL;
+
+       MMRADIO_LOG_FENTER();
+
+       if (!user_data) {
+               MMRADIO_LOG_ERROR("user_data is null");
+               return FALSE;
+       }
+
+       radio = (mm_radio_t *)user_data;
+       radio->radio_resource = NULL;
+
+       MMRADIO_LOG_DEBUG("radio resource conflict so, resource will be freed by _mmradio_stop");
+
+       radio->interrupted_by_resource_conflict = TRUE;
+
+       MMRADIO_CMD_LOCK(radio);
+       if (_mmradio_stop(radio) != MM_ERROR_NONE)
+               MMRADIO_LOG_ERROR("failed to stop radio");
+       MMRADIO_CMD_UNLOCK(radio);
+
+       MMRADIO_LOG_FLEAVE();
+
+       return FALSE;
+}
+
 int _mmradio_set_volume(mm_radio_t *radio, float volume)
 {
        MMRADIO_LOG_FENTER();
index 18493a94ae810f6f993d1faf7dd1cc1b63abc48a..511c74bbc4809c157cd5f55ec8b3e183dd83346d 100755 (executable)
@@ -135,6 +135,8 @@ static void __mmradio_sound_focus_watch_cb(int id, mm_sound_focus_type_e focus_t
 
 static void __mmradio_volume_changed_cb(volume_type_t type, unsigned int volume, void *user_data);
 static int __mmradio_set_media_volume(mm_radio_t *radio, unsigned int level);
+static int __resource_release_cb(mm_resource_manager_h rm,
+       mm_resource_manager_res_h res, void *user_data);
 
 int _mmradio_apply_region(mm_radio_t *radio, MMRadioRegionType region, bool update)
 {
@@ -210,9 +212,10 @@ int _mmradio_create_radio(mm_radio_t *radio)
        MMRADIO_SET_STATE(radio, MM_RADIO_STATE_NULL);
 
        /* initialize resource manager */
-       ret = mmradio_resource_manager_init(&(radio->resource_manager), radio);
+       ret = mm_resource_manager_create(MM_RESOURCE_MANAGER_APP_CLASS_MEDIA,
+                       __resource_release_cb, radio, &radio->resource_manager);
        if (ret) {
-               MMRADIO_LOG_ERROR("failed to initialize resource manager");
+               MMRADIO_LOG_ERROR("failed to create resource manager");
                return MM_ERROR_RADIO_INTERNAL;
        }
 
@@ -382,9 +385,9 @@ int _mmradio_destroy(mm_radio_t *radio)
        }
 #endif
 
-       ret = mmradio_resource_manager_deinit(&radio->resource_manager);
+       ret = mm_resource_manager_destroy(radio->resource_manager);
        if (ret) {
-               MMRADIO_LOG_ERROR("failed to deinitialize resource manager");
+               MMRADIO_LOG_ERROR("failed to destroy resource manager");
                return MM_ERROR_RADIO_INTERNAL;
        }
 
@@ -577,17 +580,24 @@ int _mmradio_start(mm_radio_t *radio)
 #endif
 
        if (!radio->is_ready) {
-               ret = mmradio_resource_manager_prepare(&radio->resource_manager, MM_RADIO_RESOURCE_TYPE_RADIO);
-               if (ret != MM_ERROR_NONE) {
-                       MMRADIO_LOG_ERROR("failed to prepare resource manager");
+               ret = mm_resource_manager_mark_for_acquire(radio->resource_manager,
+                       MM_RESOURCE_MANAGER_RES_TYPE_RADIO,
+                       MM_RESOURCE_MANAGER_RES_VOLUME_FULL, &radio->radio_resource);
+               if (ret != MM_RESOURCE_MANAGER_ERROR_NONE) {
+                       MMRADIO_LOG_ERROR("resource manager mark for acquire fail");
                        return MM_ERROR_RADIO_INTERNAL;
                }
-               ret = mmradio_resource_manager_acquire(&radio->resource_manager);
-               if (ret != MM_ERROR_NONE) {
-                       MMRADIO_LOG_ERROR("failed to acquire resource manager");
-                       mmradio_resource_manager_unprepare(&radio->resource_manager);
+
+               radio->interrupted_by_resource_conflict = FALSE;
+               ret = mm_resource_manager_commit(radio->resource_manager);
+               if (ret != MM_RESOURCE_MANAGER_ERROR_NONE) {
+                       MMRADIO_LOG_ERROR("failed to commit resource manager");
+                       mm_resource_manager_mark_for_release(radio->resource_manager,
+                               radio->radio_resource);
+                       radio->radio_resource = NULL;
                        return ret;
                }
+
                ret = radio_hal_prepare(radio->hal_inf);
                if (ret == MM_ERROR_NOT_SUPPORT_API) {
                        MMRADIO_LOG_WARNING("radio_hal_prepare is not supported");
@@ -662,7 +672,6 @@ error2:
 int _mmradio_stop(mm_radio_t *radio)
 {
        int ret = MM_ERROR_NONE;
-       mm_radio_resource_state_e resource_state = MM_RADIO_RESOURCE_STATE_NONE;
 
        MMRADIO_LOG_FENTER();
 
@@ -707,23 +716,19 @@ int _mmradio_stop(mm_radio_t *radio)
 
        radio->is_ready = FALSE;
 
-       if (!radio->resource_manager.by_rm_cb && /* is being released */
-               mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
-               if (resource_state == MM_RADIO_RESOURCE_STATE_ACQUIRED) {
-                       ret = mmradio_resource_manager_release(&radio->resource_manager);
-                       if (ret != MM_ERROR_NONE) {
-                               MMRADIO_LOG_ERROR("failed to release resource, ret(0x%x)", ret);
-                               return ret;
-                       }
+       if (!radio->interrupted_by_resource_conflict && /* is being released */
+                       radio->radio_resource != NULL) {
+               ret = mm_resource_manager_mark_for_release(radio->resource_manager,
+                               radio->radio_resource);
+               radio->radio_resource = NULL;
+               if (ret != MM_RESOURCE_MANAGER_ERROR_NONE) {
+                       MMRADIO_LOG_ERROR("failed to mark resource for release, ret(0x%x)", ret);
+                       return ret;
                }
-       }
 
-       if (mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
-               if (resource_state == MM_RADIO_RESOURCE_STATE_PREPARED) {
-                       ret = mmradio_resource_manager_unprepare(&radio->resource_manager);
-                       if (ret != MM_ERROR_NONE)
-                               MMRADIO_LOG_ERROR("failed to unprepare resource manager");
-               }
+               ret = mm_resource_manager_commit(radio->resource_manager);
+               if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
+                       MMRADIO_LOG_ERROR("resource manager commit fail");
        }
 
 #ifdef TIZEN_FEATURE_SOUND_FOCUS
@@ -843,15 +848,21 @@ int _mmradio_start_scan(mm_radio_t *radio)
        radio->stop_scan = false;
 
        if (!radio->is_ready) {
-               ret = mmradio_resource_manager_prepare(&radio->resource_manager, MM_RADIO_RESOURCE_TYPE_RADIO);
-               if (ret != MM_ERROR_NONE) {
-                       MMRADIO_LOG_ERROR("failed to prepare resource manager");
+               ret = mm_resource_manager_mark_for_acquire(radio->resource_manager,
+                       MM_RESOURCE_MANAGER_RES_TYPE_RADIO,
+                       MM_RESOURCE_MANAGER_RES_VOLUME_FULL, &radio->radio_resource);
+               if (ret != MM_RESOURCE_MANAGER_ERROR_NONE) {
+                       MMRADIO_LOG_ERROR("resource manager mark for acquire fail");
                        return MM_ERROR_RADIO_INTERNAL;
                }
-               ret = mmradio_resource_manager_acquire(&radio->resource_manager);
-               if (ret != MM_ERROR_NONE) {
-                       MMRADIO_LOG_ERROR("failed to acquire resource manager");
-                       mmradio_resource_manager_unprepare(&radio->resource_manager);
+
+               radio->interrupted_by_resource_conflict = FALSE;
+               ret = mm_resource_manager_commit(radio->resource_manager);
+               if (ret != MM_RESOURCE_MANAGER_ERROR_NONE) {
+                       MMRADIO_LOG_ERROR("failed to commit resource manager");
+                       mm_resource_manager_mark_for_release(radio->resource_manager,
+                               radio->radio_resource);
+                       radio->radio_resource = NULL;
                        return ret;
                }
 
@@ -951,7 +962,6 @@ void __mmradio_scan_thread(mm_radio_t *radio)
 {
        int ret = MM_ERROR_NONE;
        int prev_freq = 0;
-       mm_radio_resource_state_e resource_state = MM_RADIO_RESOURCE_STATE_NONE;
 
        MMRADIO_LOG_FENTER();
        MMRADIO_CHECK_INSTANCE_RETURN_VOID(radio);
@@ -1066,22 +1076,18 @@ FINISHED_ERR:
 
                radio->is_ready = FALSE;
 
-               if (!radio->resource_manager.by_rm_cb && /* is being released */
-                       mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
-                       if (resource_state == MM_RADIO_RESOURCE_STATE_ACQUIRED) {
-                               ret = mmradio_resource_manager_release(&radio->resource_manager);
-                               if (ret != MM_ERROR_NONE)
-                                       MMRADIO_LOG_ERROR("failed to release resource, ret(0x%x)", ret);
-                       }
+               if (!radio->interrupted_by_resource_conflict && /* is being released */
+                               radio->radio_resource != NULL) {
+                       ret = mm_resource_manager_mark_for_release(radio->resource_manager,
+                                       radio->radio_resource);
+                       radio->radio_resource = NULL;
+                       if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
+                               MMRADIO_LOG_ERROR("failed to mark resource for release, ret(0x%x)", ret);
                }
 
-               if (mmradio_resource_manager_get_state(&radio->resource_manager, &resource_state) == MM_ERROR_NONE) {
-                       if (resource_state == MM_RADIO_RESOURCE_STATE_PREPARED) {
-                               ret = mmradio_resource_manager_unprepare(&radio->resource_manager);
-                               if (ret != MM_ERROR_NONE)
-                                       MMRADIO_LOG_ERROR("failed to unprepare resource manager");
-                       }
-               }
+               ret = mm_resource_manager_commit(radio->resource_manager);
+               if (ret != MM_RESOURCE_MANAGER_ERROR_NONE)
+                       MMRADIO_LOG_ERROR("resource manager commit fail");
 
                MMRADIO_SET_STATE(radio, MM_RADIO_STATE_READY);
        }
@@ -1400,7 +1406,7 @@ static bool __mmradio_set_state(mm_radio_t *radio, int new_state)
                msg_type = MM_MESSAGE_STATE_INTERRUPTED;
                msg.state.code = radio->sound_focus.event_src;
                MMRADIO_POST_MSG(radio, msg_type, &msg);
-       } else if (radio->resource_manager.by_rm_cb) {
+       } else if (radio->interrupted_by_resource_conflict) {
                msg_type = MM_MESSAGE_STATE_INTERRUPTED;
                msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
                MMRADIO_POST_MSG(radio, msg_type, &msg);
@@ -1409,7 +1415,7 @@ static bool __mmradio_set_state(mm_radio_t *radio, int new_state)
                MMRADIO_POST_MSG(radio, msg_type, &msg);
        }
 #else
-       if (radio->resource_manager.by_rm_cb) {
+       if (radio->interrupted_by_resource_conflict) {
                 msg_type = MM_MESSAGE_STATE_INTERRUPTED;
                 msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
                 MMRADIO_POST_MSG(radio, msg_type, &msg);
@@ -1680,3 +1686,31 @@ static int __mmradio_set_media_volume(mm_radio_t *radio, unsigned int level)
        return ret;
 }
 
+static int __resource_release_cb(mm_resource_manager_h rm,
+       mm_resource_manager_res_h res, void *user_data)
+{
+       mm_radio_t *radio = NULL;
+
+       MMRADIO_LOG_FENTER();
+
+       if (!user_data) {
+               MMRADIO_LOG_ERROR("user_data is null");
+               return FALSE;
+       }
+
+       radio = (mm_radio_t *)user_data;
+       radio->radio_resource = NULL;
+
+       MMRADIO_LOG_DEBUG("radio resource conflict so, resource will be freed by _mmradio_stop");
+
+       radio->interrupted_by_resource_conflict = TRUE;
+
+       MMRADIO_CMD_LOCK(radio);
+       if (_mmradio_stop(radio) != MM_ERROR_NONE)
+               MMRADIO_LOG_ERROR("failed to stop radio");
+       MMRADIO_CMD_UNLOCK(radio);
+
+       MMRADIO_LOG_FLEAVE();
+
+       return FALSE;
+}
diff --git a/src/mm_radio_resource.c b/src/mm_radio_resource.c
deleted file mode 100644 (file)
index e87f8fa..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-/*
- * mm_radio_resource.c
- *
- * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * 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.
- *
- */
-
-#include "mm_radio_utils.h"
-#ifdef TIZEN_FEATURE_RADIO_HAL
-#include "mm_radio_priv_hal.h"
-#else
-#include "mm_radio_priv.h"
-#endif
-#include "mm_radio_resource.h"
-#include <murphy/common/glib-glue.h>
-
-#define MMRADIO_RESOURCE_TIMEOUT 5
-#define MRP_APP_CLASS_FOR_RADIO   "media"
-#define MRP_RESOURCE_TYPE_MANDATORY TRUE
-#define MRP_RESOURCE_TYPE_EXCLUSIVE FALSE
-
-const char* mm_radio_resource_str[MM_RADIO_RESOURCE_MAX] = {
-       "radio"
-};
-
-#define MMRADIO_CHECK_RESOURCE_MANAGER_INSTANCE(x_radio_resource_manager) \
-do { \
-       if (!x_radio_resource_manager) { \
-               MMRADIO_LOG_ERROR("no resource manager instance"); \
-               return MM_ERROR_INVALID_ARGUMENT; \
-       } \
-} while (0);
-
-#define MMRADIO_CHECK_CONNECTION_RESOURCE_MANAGER(x_radio_resource_manager) \
-do { \
-       if (!x_radio_resource_manager) { \
-               MMRADIO_LOG_ERROR("no resource manager instance"); \
-               return MM_ERROR_INVALID_ARGUMENT; \
-       } else { \
-               if (!x_radio_resource_manager->is_connected) { \
-                       MMRADIO_LOG_ERROR("not connected to resource server yet"); \
-                       return MM_ERROR_RESOURCE_NOT_INITIALIZED; \
-               } \
-       } \
-} while (0);
-
-static char *_mmrdio_resource_state_to_str(mrp_res_resource_state_t st)
-{
-       char *state = "unknown";
-       switch (st) {
-       case MRP_RES_RESOURCE_ACQUIRED:
-               state = "acquired";
-               break;
-       case MRP_RES_RESOURCE_LOST:
-               state = "lost";
-               break;
-       case MRP_RES_RESOURCE_AVAILABLE:
-               state = "available";
-               break;
-       case MRP_RES_RESOURCE_PENDING:
-               state = "pending";
-               break;
-       case MRP_RES_RESOURCE_ABOUT_TO_LOOSE:
-               state = "about to loose";
-               break;
-       }
-       return state;
-}
-
-static void __mmradio_resource_state_callback(mrp_res_context_t *context, mrp_res_error_t err, void *user_data)
-{
-
-       int i = 0;
-       const mrp_res_resource_set_t *rset;
-       mrp_res_resource_t *resource;
-       mm_radio_t *radio = NULL;
-
-       MMRADIO_LOG_FENTER();
-
-       if (user_data == NULL) {
-               MMRADIO_LOG_ERROR(" - user data is null\n");
-               return;
-       }
-       radio = (mm_radio_t *)user_data;
-       if (err != MRP_RES_ERROR_NONE) {
-               MMRADIO_LOG_ERROR(" - error message received from Murphy, for the radio(%p), err(0x%x)", radio, err);
-               return;
-       }
-
-       switch (context->state) {
-       case MRP_RES_CONNECTED:
-               MMRADIO_LOG_DEBUG(" - connected to Murphy");
-               if ((rset = mrp_res_list_resources(context)) != NULL) {
-                       mrp_res_string_array_t *resource_names;
-                       resource_names = mrp_res_list_resource_names(rset);
-                       if (!resource_names) {
-                               MMRADIO_LOG_ERROR(" - no resources available");
-                               return;
-                       }
-                       for (i = 0; i < resource_names->num_strings; i++) {
-                               resource = mrp_res_get_resource_by_name(rset, resource_names->strings[i]);
-                               if (resource)
-                                       MMRADIO_LOG_DEBUG(" - available resource: %s", resource->name);
-                       }
-                       mrp_res_free_string_array(resource_names);
-               }
-               radio->resource_manager.is_connected = true;
-               break;
-       case MRP_RES_DISCONNECTED:
-               MMRADIO_LOG_DEBUG(" - disconnected from Murphy");
-               if (radio->resource_manager.rset) {
-                       mrp_res_delete_resource_set(radio->resource_manager.rset);
-                       radio->resource_manager.rset = NULL;
-               }
-               mrp_res_destroy(radio->resource_manager.context);
-               radio->resource_manager.context = NULL;
-               radio->resource_manager.is_connected = false;
-               break;
-       }
-
-       MMRADIO_LOG_FLEAVE();
-}
-
-static void __mmradio_rset_state_callback(mrp_res_context_t *cx, const mrp_res_resource_set_t *rs, void *user_data)
-{
-       int i = 0;
-       mm_radio_t *radio = (mm_radio_t *)user_data;
-       mrp_res_resource_t *res;
-
-       MMRADIO_LOG_FENTER();
-
-       MMRADIO_RESOURCE_LOCK(&radio->resource_manager);
-
-       if (!mrp_res_equal_resource_set(rs, radio->resource_manager.rset)) {
-               MMRADIO_LOG_WARNING("- resource set(%p) is not same as this radio handle's(%p)", rs, radio->resource_manager.rset);
-               MMRADIO_RESOURCE_UNLOCK(&radio->resource_manager);
-               return;
-       }
-
-       MMRADIO_LOG_DEBUG(" - resource set state of radio(%p) is changed to [%s]",
-               radio, _mmrdio_resource_state_to_str(rs->state));
-       for (i = 0; i < MM_RADIO_RESOURCE_MAX; i++) {
-               res = mrp_res_get_resource_by_name(rs, mm_radio_resource_str[i]);
-               if (res == NULL)
-                       MMRADIO_LOG_WARNING(" -- %s not present in resource set", mm_radio_resource_str[i]);
-               else
-                       MMRADIO_LOG_DEBUG(" -- resource name [%s] -> [%s]", res->name,
-                       _mmrdio_resource_state_to_str(res->state));
-       }
-
-       mrp_res_delete_resource_set(radio->resource_manager.rset);
-       radio->resource_manager.rset = mrp_res_copy_resource_set(rs);
-
-       if (rs->state == MRP_RES_RESOURCE_ACQUIRED) {
-               MMRADIO_LOG_DEBUG(" - resource set is acquired");
-               radio->resource_manager.state = MM_RADIO_RESOURCE_STATE_ACQUIRED;
-               MMRADIO_RESOURCE_SIGNAL(&radio->resource_manager);
-       } else if ((radio->resource_manager.state >= MM_RADIO_RESOURCE_STATE_ACQUIRED) &&
-                          (rs->state == MRP_RES_RESOURCE_AVAILABLE)) {
-               MMRADIO_LOG_DEBUG(" - resource set is released");
-               radio->resource_manager.state = MM_RADIO_RESOURCE_STATE_PREPARED;
-               MMRADIO_RESOURCE_SIGNAL(&radio->resource_manager);
-
-               /* mm radio was unrealized by resource conflict. */
-               if (radio->resource_manager.by_rm_cb == true) {
-                       MMRADIO_LOG_DEBUG(" - delete resource set ");
-                       if (radio->resource_manager.rset) {
-                               mrp_res_delete_resource_set(radio->resource_manager.rset);
-                               radio->resource_manager.rset = NULL;
-                       }
-                       radio->resource_manager.state = MM_RADIO_RESOURCE_STATE_INITIALIZED;
-                       radio->resource_manager.by_rm_cb = false;
-               }
-       }
-
-       MMRADIO_RESOURCE_UNLOCK(&radio->resource_manager);
-
-       MMRADIO_LOG_FLEAVE();
-}
-
-static void __mmradio_mrp_resource_release_cb(mrp_res_context_t *cx, const mrp_res_resource_set_t *rs, void *user_data)
-{
-       int i = 0;
-       int result = MM_ERROR_NONE;
-       mm_radio_t *radio = NULL;
-       mrp_res_resource_t *res;
-       gboolean resource_released = FALSE;
-
-       MMRADIO_LOG_FENTER();
-
-       if (user_data == NULL) {
-               MMRADIO_LOG_ERROR("- user_data is null");
-               return;
-       }
-
-       radio = (mm_radio_t *)user_data;
-
-       if (!mrp_res_equal_resource_set(rs, radio->resource_manager.rset)) {
-               MMRADIO_LOG_WARNING("- resource set(%p) is not same as this radio handle's(%p)", rs, radio->resource_manager.rset);
-               return;
-       }
-
-       MMRADIO_LOG_DEBUG(" - resource set state of radio(%p) is changed to [%s]", radio,
-               _mmrdio_resource_state_to_str(rs->state));
-       for (i = 0; i < MM_RADIO_RESOURCE_MAX; i++) {
-               res = mrp_res_get_resource_by_name(rs, mm_radio_resource_str[i]);
-               if (res == NULL) {
-                       MMRADIO_LOG_WARNING(" -- %s not present in resource set", mm_radio_resource_str[i]);
-               } else {
-                       MMRADIO_LOG_DEBUG(" -- resource name [%s] -> [%s]", res->name,
-                               _mmrdio_resource_state_to_str(res->state));
-                       if (res->state == MRP_RES_RESOURCE_ABOUT_TO_LOOSE)
-                               resource_released = TRUE;
-               }
-       }
-
-       if (resource_released) {
-               MMRADIO_LOG_DEBUG("radio resource conflict so, resource will be freed by _mmradio_stop");
-
-               radio->resource_manager.by_rm_cb = true;
-
-               MMRADIO_CMD_LOCK(radio);
-               result = _mmradio_stop(radio);
-               if (result != MM_ERROR_NONE)
-                       MMRADIO_LOG_ERROR("failed to stop radio");
-               MMRADIO_CMD_UNLOCK(radio);
-
-       } else {
-               MMRADIO_LOG_WARNING("could not find videobin");
-       }
-
-       MMRADIO_LOG_FLEAVE();
-
-       return;
-
-}
-
-static int _mmradio_create_rset(mm_radio_resource_manager *resource_manager)
-{
-       if (resource_manager->rset) {
-               MMRADIO_LOG_ERROR(" - resource set was already created");
-               return MM_ERROR_RESOURCE_INVALID_STATE;
-       }
-
-       resource_manager->rset = mrp_res_create_resource_set(resource_manager->context,
-                               MRP_APP_CLASS_FOR_RADIO, __mmradio_rset_state_callback,
-                               (void*)resource_manager->user_data);
-       if (resource_manager->rset == NULL) {
-               MMRADIO_LOG_ERROR(" - could not create resource set");
-               return MM_ERROR_RESOURCE_INTERNAL;
-       }
-
-       if (!mrp_res_set_autorelease(TRUE, resource_manager->rset))
-               MMRADIO_LOG_WARNING(" - could not set autorelease flag!");
-
-       return MM_ERROR_NONE;
-}
-
-static int _mmradio_include_resource(mm_radio_resource_manager *resource_manager, const char *resource_name)
-{
-       mrp_res_resource_t *resource = NULL;
-       resource = mrp_res_create_resource(resource_manager->rset,
-                               resource_name,
-                               MRP_RESOURCE_TYPE_MANDATORY,
-                               MRP_RESOURCE_TYPE_EXCLUSIVE);
-       if (resource == NULL) {
-               MMRADIO_LOG_ERROR(" - could not include resource[%s]", resource_name);
-               return MM_ERROR_RESOURCE_INTERNAL;
-       }
-
-       MMRADIO_LOG_DEBUG(" - include resource[%s]", resource_name);
-
-       return MM_ERROR_NONE;
-}
-
-static int _mmradio_set_resource_release_cb(mm_radio_resource_manager *resource_manager)
-{
-       int ret = MM_ERROR_NONE;
-       bool mrp_ret = false;
-       MMRADIO_LOG_FENTER();
-
-       if (resource_manager->rset) {
-               mrp_ret = mrp_res_set_release_callback(resource_manager->rset, __mmradio_mrp_resource_release_cb, resource_manager->user_data);
-               if (!mrp_ret) {
-                       MMRADIO_LOG_ERROR(" - could not set release callback");
-                       ret = MM_ERROR_RESOURCE_INTERNAL;
-               }
-       } else {
-               MMRADIO_LOG_ERROR(" - resource set is null");
-               ret = MM_ERROR_RESOURCE_INVALID_STATE;
-       }
-       MMRADIO_LOG_FLEAVE();
-       return ret;
-}
-
-
-int mmradio_resource_manager_init(mm_radio_resource_manager *resource_manager, void *user_data)
-{
-       MMRADIO_LOG_FENTER();
-       MMRADIO_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
-
-       GMainContext *mrp_ctx = g_main_context_new();
-       if (!mrp_ctx) {
-               MMRADIO_LOG_ERROR("- could not create main context for resource manager");
-               return MM_ERROR_RESOURCE_INTERNAL;
-       }
-
-       GMainLoop *mrp_loop = g_main_loop_new(mrp_ctx, TRUE);
-       g_main_context_unref(mrp_ctx);
-       if (!mrp_loop) {
-               MMRADIO_LOG_ERROR("- could not create glib mainloop for resource manager");
-               return MM_ERROR_RESOURCE_INTERNAL;
-       }
-
-       resource_manager->mloop = mrp_mainloop_glib_get(mrp_loop);
-       g_main_loop_unref(mrp_loop);
-
-       if (resource_manager->mloop) {
-               resource_manager->context = mrp_res_create(resource_manager->mloop, __mmradio_resource_state_callback, user_data);
-               if (resource_manager->context == NULL) {
-                       MMRADIO_LOG_ERROR(" - could not get context for resource manager");
-                       mrp_mainloop_destroy(resource_manager->mloop);
-                       resource_manager->mloop = NULL;
-                       return MM_ERROR_RESOURCE_INTERNAL;
-               }
-               resource_manager->user_data = user_data;
-       } else {
-               MMRADIO_LOG_ERROR("- could not get mainloop for resource manager");
-               return MM_ERROR_RESOURCE_INTERNAL;
-       }
-
-       resource_manager->state = MM_RADIO_RESOURCE_STATE_INITIALIZED;
-       g_mutex_init(&resource_manager->lock);
-       g_cond_init(&resource_manager->cond);
-
-       MMRADIO_LOG_FLEAVE();
-
-       return MM_ERROR_NONE;
-
-}
-
-
-int mmradio_resource_manager_prepare(mm_radio_resource_manager *resource_manager, mm_radio_resource_type_e resource_type)
-{
-       int ret = MM_ERROR_NONE;
-       MMRADIO_LOG_FENTER();
-       MMRADIO_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
-       MMRADIO_CHECK_CONNECTION_RESOURCE_MANAGER(resource_manager);
-
-       if (!resource_manager->rset)
-               ret = _mmradio_create_rset(resource_manager);
-
-       if (ret == MM_ERROR_NONE) {
-               switch (resource_type) {
-               case MM_RADIO_RESOURCE_TYPE_RADIO:
-                       ret = _mmradio_include_resource(resource_manager, mm_radio_resource_str[MM_RADIO_RESOURCE_TYPE_RADIO]);
-                       break;
-               default:
-                       MMRADIO_LOG_WARNING("resource type(%d) is worng", resource_type);
-                       break;
-               }
-       }
-
-       resource_manager->state = MM_RADIO_RESOURCE_STATE_PREPARED;
-
-       MMRADIO_LOG_FLEAVE();
-
-       return ret;
-
-}
-
-int mmradio_resource_manager_unprepare(mm_radio_resource_manager *resource_manager)
-{
-       int ret = MM_ERROR_NONE;
-       MMRADIO_LOG_FENTER();
-       MMRADIO_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
-       MMRADIO_CHECK_CONNECTION_RESOURCE_MANAGER(resource_manager);
-
-       if (resource_manager->rset == NULL) {
-               MMRADIO_LOG_ERROR("- could not unprepare for resource_manager, mmradio_resource_manager_prepare() first");
-               ret = MM_ERROR_RESOURCE_INVALID_STATE;
-       } else {
-               MMRADIO_RESOURCE_LOCK(resource_manager);
-               mrp_res_delete_resource_set(resource_manager->rset);
-               resource_manager->rset = NULL;
-               MMRADIO_RESOURCE_UNLOCK(resource_manager);
-       }
-
-       resource_manager->state = MM_RADIO_RESOURCE_STATE_INITIALIZED;
-
-       MMRADIO_LOG_FLEAVE();
-
-       return ret;
-
-}
-
-int mmradio_resource_manager_acquire(mm_radio_resource_manager *resource_manager)
-{
-       int ret = MM_ERROR_NONE;
-       MMRADIO_LOG_FENTER();
-       MMRADIO_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
-       MMRADIO_CHECK_CONNECTION_RESOURCE_MANAGER(resource_manager);
-
-       if (resource_manager->rset == NULL) {
-               MMRADIO_LOG_ERROR("- could not acquire resource, resource set is null\n");
-               ret = MM_ERROR_RESOURCE_INVALID_STATE;
-       } else {
-               ret = _mmradio_set_resource_release_cb(resource_manager);
-               if (ret) {
-                       MMRADIO_LOG_ERROR("- could not set resource release cb, ret(0x%x)", ret);
-                       ret = MM_ERROR_RESOURCE_INTERNAL;
-               } else {
-                       MMRADIO_RESOURCE_LOCK(resource_manager);
-
-                       ret = mrp_res_acquire_resource_set(resource_manager->rset);
-                       if (ret) {
-                               MMRADIO_LOG_ERROR("- could not acquire resource, ret(%d)", ret);
-                               ret = MM_ERROR_RESOURCE_INTERNAL;
-                       } else {
-                               gint64 end_time = g_get_monotonic_time() + MMRADIO_RESOURCE_TIMEOUT * G_TIME_SPAN_SECOND;
-
-                               MMRADIO_LOG_DEBUG("- acquire resource waiting..%p till %lld", resource_manager, end_time);
-
-                               if (!MMRADIO_RESOURCE_WAIT_UNTIL(resource_manager, end_time)) {
-                                       MMRADIO_LOG_ERROR("- could not acquire resource");
-                                       ret = MM_ERROR_RESOURCE_INTERNAL;
-                               } else {
-                                       MMRADIO_LOG_DEBUG("- resources are acquired");
-                               }
-
-                       }
-                       MMRADIO_RESOURCE_UNLOCK(resource_manager);
-               }
-       }
-
-       MMRADIO_LOG_FLEAVE();
-
-       return ret;
-
-}
-
-int mmradio_resource_manager_release(mm_radio_resource_manager *resource_manager)
-{
-       int ret = MM_ERROR_NONE;
-       MMRADIO_LOG_FENTER();
-       MMRADIO_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
-       MMRADIO_CHECK_CONNECTION_RESOURCE_MANAGER(resource_manager);
-
-       if (resource_manager->rset == NULL) {
-               MMRADIO_LOG_ERROR("- could not release resource, resource set is null");
-               ret = MM_ERROR_RESOURCE_INVALID_STATE;
-       } else {
-               if (resource_manager->rset->state != MRP_RES_RESOURCE_ACQUIRED) {
-                       MMRADIO_LOG_ERROR("- could not release resource, resource set state is [%s]",
-                               _mmrdio_resource_state_to_str(resource_manager->rset->state));
-                       ret = MM_ERROR_RESOURCE_INVALID_STATE;
-               } else {
-                       MMRADIO_RESOURCE_LOCK(resource_manager);
-                       ret = mrp_res_release_resource_set(resource_manager->rset);
-                       if (ret) {
-                               MMRADIO_LOG_ERROR("- could not release resource, ret(%d)", ret);
-                               ret = MM_ERROR_RESOURCE_INTERNAL;
-                       } else {
-                               gint64 end_time = g_get_monotonic_time() + MMRADIO_RESOURCE_TIMEOUT * G_TIME_SPAN_SECOND;
-
-                               MMRADIO_LOG_DEBUG("- release resource waiting..%p till %lld", resource_manager, end_time);
-
-                               if (!MMRADIO_RESOURCE_WAIT_UNTIL(resource_manager, end_time))
-                                       MMRADIO_LOG_WARNING("- could not release resource in time");
-                               else
-                                       MMRADIO_LOG_DEBUG("- resources are released\n");
-                       }
-                       MMRADIO_RESOURCE_UNLOCK(resource_manager);
-               }
-       }
-
-       MMRADIO_LOG_FLEAVE();
-
-       return ret;
-}
-
-int mmradio_resource_manager_deinit(mm_radio_resource_manager *resource_manager)
-{
-       MMRADIO_LOG_FENTER();
-       MMRADIO_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
-       MMRADIO_CHECK_CONNECTION_RESOURCE_MANAGER(resource_manager);
-
-       if (resource_manager->rset) {
-               if (resource_manager->rset->state == MRP_RES_RESOURCE_ACQUIRED) {
-                       if (mrp_res_release_resource_set(resource_manager->rset))
-                               MMRADIO_LOG_ERROR("- could not release resource");
-               }
-               mrp_res_delete_resource_set(resource_manager->rset);
-               resource_manager->rset = NULL;
-       }
-
-       if (resource_manager->context) {
-               mrp_res_destroy(resource_manager->context);
-               resource_manager->context = NULL;
-       }
-
-       if (resource_manager->mloop) {
-               mrp_mainloop_quit(resource_manager->mloop, 0);
-               mrp_mainloop_destroy(resource_manager->mloop);
-               resource_manager->mloop = NULL;
-       }
-
-       resource_manager->state = MM_RADIO_RESOURCE_STATE_NONE;
-       g_mutex_clear(&resource_manager->lock);
-       g_cond_clear(&resource_manager->cond);
-
-       MMRADIO_LOG_FLEAVE();
-
-       return MM_ERROR_NONE;
-}
-
-
-int mmradio_resource_manager_get_state(mm_radio_resource_manager *resource_manager, mm_radio_resource_state_e *state)
-{
-
-       MMRADIO_LOG_FENTER();
-       MMRADIO_CHECK_RESOURCE_MANAGER_INSTANCE(resource_manager);
-       MMRADIO_CHECK_ARG(state);
-
-       MMRADIO_LOG_DEBUG("resource_state is %d", resource_manager->state);
-
-       *state = resource_manager->state;
-
-       MMRADIO_LOG_FLEAVE();
-
-       return MM_ERROR_NONE;
-}