MMRADIO_SET_STATE(radio, MM_RADIO_STATE_NULL);
+ /* initialize resource manager */
+ ret = mmradio_resource_manager_init(&(radio->resource_manager), radio);
+ if (ret) {
+ MMRADIO_LOG_ERROR("failed to initialize resource manager\n");
+ return MM_ERROR_RADIO_INTERNAL;
+ }
+
#ifdef TIZEN_FEATURE_SOUND_FOCUS
/* register to audio focus */
ret = mmradio_sound_focus_register(&radio->sound_focus,
}
#endif
+ ret = mmradio_resource_manager_deinit(&radio->resource_manager);
+ if (ret) {
+ MMRADIO_LOG_ERROR("failed to initialize resource manager\n");
+ return MM_ERROR_RADIO_INTERNAL;
+ }
+
MMRADIO_LOG_FLEAVE();
return MM_ERROR_NONE;
MMRADIO_SLOG_DEBUG("now tune to frequency : %d\n", radio->freq);
+ ret = mmradio_resource_manager_prepare(&radio->resource_manager, MM_RADIO_RESOURCE_TYPE_RADIO);
+ if (ret != MM_ERROR_NONE) {
+ MMRADIO_LOG_ERROR("resource manager prepare 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);
+ return ret;
+ }
+
#ifdef TIZEN_FEATURE_SOUND_FOCUS
if (radio->sound_focus.handle > 0) {
ret = mmradio_acquire_sound_focus(&radio->sound_focus);
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();
/* 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 (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("resource manager unprepare fail");
+ }
+ }
+
#ifdef TIZEN_FEATURE_SOUND_FOCUS
if (radio->sound_focus.handle > 0) {
ret = mmradio_release_sound_focus(&radio->sound_focus);
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) {
+ msg_type = MM_MESSAGE_STATE_INTERRUPTED;
+ msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
+ MMRADIO_POST_MSG(radio, msg_type, &msg);
} else {
msg_type = MM_MESSAGE_STATE_CHANGED;
MMRADIO_POST_MSG(radio, msg_type, &msg);
}
#else
- msg_type = MM_MESSAGE_STATE_CHANGED;
- MMRADIO_POST_MSG(radio, msg_type, &msg);
+ if (radio->resource_manager.by_rm_cb) {
+ msg_type = MM_MESSAGE_STATE_INTERRUPTED;
+ msg.state.code = MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT;
+ MMRADIO_POST_MSG(radio, msg_type, &msg);
+ } else {
+ msg_type = MM_MESSAGE_STATE_CHANGED;
+ MMRADIO_POST_MSG(radio, msg_type, &msg);
+ }
+
#endif
MMRADIO_LOG_FLEAVE();