X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bt-api%2Fbt-avrcp.c;h=9c6ba9a30a2b75bb488846266dcca7b742db254e;hb=14e5154772b9411a4941942e24cb600a103efa2e;hp=1d705aa6291a96f2eee0d1f53f6493b279aeb207;hpb=daf38ac977a883b54a3f79b2e937ce8d6e232159;p=platform%2Fcore%2Fconnectivity%2Fbluetooth-frwk.git diff --git a/bt-api/bt-avrcp.c b/bt-api/bt-avrcp.c index 1d705aa..9c6ba9a 100644 --- a/bt-api/bt-avrcp.c +++ b/bt-api/bt-avrcp.c @@ -1,13 +1,11 @@ /* - * bluetooth-frwk - * - * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd. + * Copyright (c) 2011 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 + * 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, @@ -26,6 +24,9 @@ #include "bt-common.h" #include "bt-request-sender.h" #include "bt-event-handler.h" +#ifdef TIZEN_FEATURE_BT_DPM +#include "bt-dpm.h" +#endif BT_EXPORT_API int bluetooth_media_player_init(media_cb_func_ptr callback_ptr, void *user_data) @@ -70,6 +71,13 @@ BT_EXPORT_API int bluetooth_media_player_change_property( BT_CHECK_ENABLED(return); +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + BT_INIT_PARAMS(); BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); @@ -92,6 +100,13 @@ BT_EXPORT_API int bluetooth_media_player_set_properties( BT_CHECK_PARAMETER(setting, return); BT_CHECK_ENABLED(return); +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + BT_INIT_PARAMS(); BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); @@ -114,21 +129,41 @@ BT_EXPORT_API int bluetooth_media_player_change_track( BT_CHECK_PARAMETER(metadata, return); BT_CHECK_ENABLED(return); +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + BT_INIT_PARAMS(); BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); memset(&meta_data, 0x00, sizeof(media_metadata_t)); - if (_bt_copy_utf8_string(meta_data.title, metadata->title, BT_NAME_MAX)) - BT_DBG("Error in copying Title\n"); - if (_bt_copy_utf8_string(meta_data.artist, metadata->artists[0], BT_NAME_MAX)) - BT_DBG("Error in copying Artist\n"); - if (_bt_copy_utf8_string(meta_data.album, metadata->album, BT_NAME_MAX)) - BT_DBG("Error in copying Album\n"); - if (_bt_copy_utf8_string(meta_data.genre, metadata->genres[0], BT_NAME_MAX)) - BT_DBG("Error in copying Genre\n"); + if (_bt_copy_utf8_string(meta_data.title, metadata->title, BT_META_DATA_MAX_LEN)) + BT_ERR("Error in copying Title\n"); + if (_bt_copy_utf8_string(meta_data.artist, metadata->artist, BT_META_DATA_MAX_LEN)) + BT_ERR("Error in copying Artist\n"); + if (_bt_copy_utf8_string(meta_data.album, metadata->album, BT_META_DATA_MAX_LEN)) + BT_ERR("Error in copying Album\n"); + if (_bt_copy_utf8_string(meta_data.genre, metadata->genre, BT_META_DATA_MAX_LEN)) + BT_ERR("Error in copying Genre\n"); + + if (_bt_utf8_validate(meta_data.title) == FALSE) + meta_data.title[0] = '\0'; - meta_data.number = metadata->tracknumber; + if (_bt_utf8_validate(meta_data.artist) == FALSE) + meta_data.artist[0] = '\0'; + + if (_bt_utf8_validate(meta_data.album) == FALSE) + meta_data.album[0] = '\0'; + + if (_bt_utf8_validate(meta_data.genre) == FALSE) + meta_data.genre[0] = '\0'; + + meta_data.total_tracks = metadata->total_tracks; + meta_data.number = metadata->number; meta_data.duration = metadata->duration; g_array_append_vals(in_param1, &meta_data, sizeof(media_metadata_t)); @@ -140,3 +175,380 @@ BT_EXPORT_API int bluetooth_media_player_change_track( return result; } + +BT_EXPORT_API int bluetooth_media_control_init(media_cb_func_ptr callback_ptr, + void *user_data) +{ + int ret; + + /* Register AVRCP events */ + ret = _bt_register_event(BT_AVRCP_CONTROL_EVENT, + (void *)callback_ptr, user_data); + + if (ret != BLUETOOTH_ERROR_NONE && + ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) { + BT_ERR("Fail to init the event handler"); + return ret; + } + + _bt_set_user_data(BT_AVRCP, (void *)callback_ptr, user_data); + + return BLUETOOTH_ERROR_NONE; +} + +BT_EXPORT_API int bluetooth_media_control_deinit(void) +{ + int ret; + + ret = _bt_unregister_event(BT_AVRCP_CONTROL_EVENT); + + if (ret != BLUETOOTH_ERROR_NONE) { + BT_ERR("Fail to deinit the event handler"); + return ret; + } + + _bt_set_user_data(BT_AVRCP, NULL, NULL); + + return BLUETOOTH_ERROR_NONE; +} + +BT_EXPORT_API int bluetooth_media_control_connect( + bluetooth_device_address_t *remote_address) +{ + int result; + bt_user_info_t *user_info; + + BT_CHECK_PARAMETER(remote_address, return); + BT_CHECK_ENABLED(return); + + if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_AVRCP_CONTROL_CONNECT) + == BLUETOOTH_ERROR_PERMISSION_DEINED) { + BT_ERR("Don't have a privilege to use this API"); + return BLUETOOTH_ERROR_PERMISSION_DEINED; + } + +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_ADDRESS, remote_address) == BT_DPM_RESTRICTED) { + BT_ERR("Blacklist device"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } + + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + + user_info = _bt_get_user_data(BT_AVRCP); + retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL); + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, remote_address, + sizeof(bluetooth_device_address_t)); + + result = _bt_send_request_async(BT_BLUEZ_SERVICE, + BT_AVRCP_CONTROL_CONNECT, in_param1, + in_param2, in_param3, in_param4, + user_info->cb, user_info->user_data); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_media_control_disconnect( + bluetooth_device_address_t *remote_address) +{ + int result; + bt_user_info_t *user_info; + + BT_CHECK_PARAMETER(remote_address, return); + BT_CHECK_ENABLED(return); + + if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_AVRCP_CONTROL_DISCONNECT) + == BLUETOOTH_ERROR_PERMISSION_DEINED) { + BT_ERR("Don't have a privilege to use this API"); + return BLUETOOTH_ERROR_PERMISSION_DEINED; + } + + user_info = _bt_get_user_data(BT_AVRCP); + retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL); + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, remote_address, + sizeof(bluetooth_device_address_t)); + + result = _bt_send_request_async(BT_BLUEZ_SERVICE, + BT_AVRCP_CONTROL_DISCONNECT, in_param1, + in_param2, in_param3, in_param4, + user_info->cb, user_info->user_data); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_media_target_connect( + bluetooth_device_address_t *remote_address) +{ + int result; + bt_user_info_t *user_info; + + BT_CHECK_PARAMETER(remote_address, return); + BT_CHECK_ENABLED(return); + + if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_AVRCP_TARGET_CONNECT) + == BLUETOOTH_ERROR_PERMISSION_DEINED) { + BT_ERR("Don't have a privilege to use this API"); + return BLUETOOTH_ERROR_PERMISSION_DEINED; + } + +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + user_info = _bt_get_user_data(BT_AVRCP); + retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL); + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, remote_address, + sizeof(bluetooth_device_address_t)); + + result = _bt_send_request_async(BT_BLUEZ_SERVICE, + BT_AVRCP_TARGET_CONNECT, in_param1, + in_param2, in_param3, in_param4, + user_info->cb, user_info->user_data); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_media_target_disconnect( + bluetooth_device_address_t *remote_address) +{ + int result; + bt_user_info_t *user_info; + + BT_CHECK_PARAMETER(remote_address, return); + BT_CHECK_ENABLED(return); + + if (_bt_check_privilege(BT_CHECK_PRIVILEGE, BT_AVRCP_TARGET_DISCONNECT) + == BLUETOOTH_ERROR_PERMISSION_DEINED) { + BT_ERR("Don't have a privilege to use this API"); + return BLUETOOTH_ERROR_PERMISSION_DEINED; + } + + user_info = _bt_get_user_data(BT_AVRCP); + retv_if(user_info->cb == NULL, BLUETOOTH_ERROR_INTERNAL); + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, remote_address, + sizeof(bluetooth_device_address_t)); + + result = _bt_send_request_async(BT_BLUEZ_SERVICE, + BT_AVRCP_TARGET_DISCONNECT, in_param1, + in_param2, in_param3, in_param4, + user_info->cb, user_info->user_data); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_media_control_command( + media_player_control_cmd type) +{ + int result; + + BT_CHECK_ENABLED(return); + +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, &type, sizeof(int)); + + result = _bt_send_request(BT_BLUEZ_SERVICE, BT_AVRCP_HANDLE_CONTROL, + in_param1, in_param2, in_param3, in_param4, &out_param); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_media_control_command_to_dest( + media_player_control_cmd type, + bluetooth_device_address_t *remote_address) +{ + int result; + + BT_CHECK_ENABLED(return); + +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, &type, sizeof(int)); + g_array_append_vals(in_param2, remote_address, + sizeof(bluetooth_device_address_t)); + + result = _bt_send_request(BT_BLUEZ_SERVICE, BT_AVRCP_HANDLE_CONTROL_TO_DEST, + in_param1, in_param2, in_param3, in_param4, &out_param); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_media_control_set_property( + media_player_property_type type, + unsigned int value) +{ + int result; + + BT_CHECK_ENABLED(return); + +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, &type, sizeof(int)); + g_array_append_vals(in_param2, &value, sizeof(unsigned int)); + + result = _bt_send_request(BT_BLUEZ_SERVICE, + BT_AVRCP_CONTROL_SET_PROPERTY, + in_param1, in_param2, in_param3, + in_param4, &out_param); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_media_control_get_property( + media_player_property_type type, + unsigned int *value) +{ + int result; + + BT_CHECK_PARAMETER(value, return); + BT_CHECK_ENABLED(return); + +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + g_array_append_vals(in_param1, &type, sizeof(int)); + + result = _bt_send_request(BT_BLUEZ_SERVICE, + BT_AVRCP_CONTROL_GET_PROPERTY, + in_param1, in_param2, in_param3, + in_param4, &out_param); + + if (result == BLUETOOTH_ERROR_NONE) + *value = g_array_index(out_param, int, 0); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_media_transport_set_property( + media_transport_property_type type, + unsigned int value) +{ + int result; + + BT_CHECK_ENABLED(return); + +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + g_array_append_vals(in_param1, &type, sizeof(int)); + g_array_append_vals(in_param2, &value, sizeof(unsigned int)); + + result = _bt_send_request(BT_BLUEZ_SERVICE, + BT_AVRCP_TRANSPORT_SET_PROPERTY, + in_param1, in_param2, in_param3, + in_param4, &out_param); + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +} + +BT_EXPORT_API int bluetooth_media_control_get_track_info( + media_metadata_attributes_t *metadata) +{ + int result; + media_metadata_t *meta_data; + + BT_CHECK_PARAMETER(metadata, return); + BT_CHECK_ENABLED(return); + +#ifdef TIZEN_FEATURE_BT_DPM + if (_bt_check_dpm(BT_DPM_AVRCP, NULL) == BT_DPM_RESTRICTED) { + BT_ERR("Not allow to use AVRCP profile"); + return BLUETOOTH_ERROR_DEVICE_POLICY_RESTRICTION; + } +#endif + + BT_INIT_PARAMS(); + BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + result = _bt_send_request(BT_BLUEZ_SERVICE, BT_AVRCP_GET_TRACK_INFO, + in_param1, in_param2, in_param3, in_param4, &out_param); + + meta_data = &g_array_index(out_param, media_metadata_t, 0); + + metadata->title = g_strdup(meta_data->title); + metadata->artist = g_strdup(meta_data->artist); + metadata->album = g_strdup(meta_data->album); + metadata->genre = g_strdup(meta_data->genre); + metadata->total_tracks = meta_data->total_tracks; + metadata->number = meta_data->number; + metadata->duration = (int64_t) meta_data->duration; + + BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param); + + return result; +}