Merge branch 'master' into tizen_2.1
[platform/core/connectivity/bluetooth-frwk.git] / bt-api / bt-avrcp.c
1 /*
2  * bluetooth-frwk
3  *
4  * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5  *
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
9  *
10  *              http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  */
19
20 #include <string.h>
21
22 #include "bluetooth-api.h"
23 #include "bluetooth-media-control.h"
24 #include "bt-internal-types.h"
25
26 #include "bt-common.h"
27 #include "bt-request-sender.h"
28 #include "bt-event-handler.h"
29
30 BT_EXPORT_API int bluetooth_media_player_init(media_cb_func_ptr callback_ptr,
31                                                 void *user_data)
32 {
33         int ret;
34
35         /* Register AVRCP events */
36         ret = _bt_register_event(BT_AVRCP_EVENT , (void *)callback_ptr, user_data);
37
38         if (ret != BLUETOOTH_ERROR_NONE &&
39              ret != BLUETOOTH_ERROR_ALREADY_INITIALIZED) {
40                 BT_ERR("Fail to init the event handler");
41                 return ret;
42         }
43
44         _bt_set_user_data(BT_AVRCP, (void *)callback_ptr, user_data);
45
46         return BLUETOOTH_ERROR_NONE;
47 }
48
49 BT_EXPORT_API int bluetooth_media_player_deinit(void)
50 {
51         int ret;
52
53         ret = _bt_unregister_event(BT_AVRCP_EVENT);
54
55         if (ret != BLUETOOTH_ERROR_NONE) {
56                 BT_ERR("Fail to deinit the event handler");
57                 return ret;
58         }
59
60         _bt_set_user_data(BT_AVRCP, NULL, NULL);
61
62         return BLUETOOTH_ERROR_NONE;
63 }
64
65 BT_EXPORT_API int bluetooth_media_player_change_property(
66                         media_player_property_type type,
67                         unsigned int value)
68 {
69         int result;
70
71         BT_CHECK_ENABLED(return);
72
73         BT_INIT_PARAMS();
74         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
75
76         g_array_append_vals(in_param1, &type, sizeof(int));
77         g_array_append_vals(in_param2, &value, sizeof(unsigned int));
78
79         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_AVRCP_SET_PROPERTY,
80                 in_param1, in_param2, in_param3, in_param4, &out_param);
81
82         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
83
84         return result;
85 }
86
87 BT_EXPORT_API int bluetooth_media_player_set_properties(
88                         media_player_settings_t *setting)
89 {
90         int result;
91
92         BT_CHECK_PARAMETER(setting, return);
93         BT_CHECK_ENABLED(return);
94
95         BT_INIT_PARAMS();
96         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
97
98         g_array_append_vals(in_param1, setting, sizeof(media_player_settings_t));
99
100         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_AVRCP_SET_PROPERTIES,
101                 in_param1, in_param2, in_param3, in_param4, &out_param);
102
103         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
104
105         return result;
106 }
107
108 BT_EXPORT_API int bluetooth_media_player_change_track(
109                 media_metadata_attributes_t *metadata)
110 {
111         int result;
112         media_metadata_t meta_data;
113
114         BT_CHECK_PARAMETER(metadata, return);
115         BT_CHECK_ENABLED(return);
116
117         BT_INIT_PARAMS();
118         BT_ALLOC_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
119
120         memset(&meta_data, 0x00, sizeof(media_metadata_t));
121
122         if (_bt_copy_utf8_string(meta_data.title, metadata->title, BT_NAME_MAX))
123                 BT_DBG("Error in copying Title\n");
124         if (_bt_copy_utf8_string(meta_data.artist, metadata->artist, BT_NAME_MAX))
125                 BT_DBG("Error in copying Artist\n");
126         if (_bt_copy_utf8_string(meta_data.album, metadata->album, BT_NAME_MAX))
127                 BT_DBG("Error in copying Album\n");
128         if (_bt_copy_utf8_string(meta_data.genre, metadata->genre, BT_NAME_MAX))
129                 BT_DBG("Error in copying Genre\n");
130
131         meta_data.total_tracks = metadata->total_tracks;
132         meta_data.number = metadata->number;
133         meta_data.duration = metadata->duration;
134
135         g_array_append_vals(in_param1, &meta_data, sizeof(media_metadata_t));
136
137         result = _bt_send_request(BT_BLUEZ_SERVICE, BT_AVRCP_SET_TRACK_INFO,
138                 in_param1, in_param2, in_param3, in_param4, &out_param);
139
140         BT_FREE_PARAMS(in_param1, in_param2, in_param3, in_param4, out_param);
141
142         return result;
143 }
144