[MediaController] Changed pinvoke function (#1023)
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia.Remoting / Interop / Interop.MediaControllerClient.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
4  * Licensed under the Apache License, Version 2.0 (the License);
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an AS IS BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 using System;
18 using System.Runtime.InteropServices;
19 using Tizen.Applications;
20 using Tizen.Multimedia.Remoting;
21
22 internal static partial class Interop
23 {
24     internal static partial class MediaControllerClient
25     {
26         #region Callback delegate
27         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
28         internal delegate bool ActivatedServerCallback(string serverName, IntPtr userData);
29
30
31         // Updated callbacks
32         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
33         internal delegate void ServerUpdatedCallback(string serverName, MediaControllerNativeServerState serverState,
34             IntPtr userData);
35
36         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
37         internal delegate void PlaybackUpdatedCallback(string serverName, IntPtr playback, IntPtr userData);
38
39         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
40         internal delegate void ShuffleModeUpdatedCallback(string serverName, MediaControllerNativeShuffleMode shuffleMode,
41             IntPtr userData);
42
43         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
44         internal delegate void RepeatModeUpdatedCallback(string serverName, MediaControllerNativeRepeatMode repeatMode,
45             IntPtr userData);
46
47         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
48         internal delegate void DisplayModeUpdatedCallback(string serverName, MediaControlNativeDisplayMode isEnabned, IntPtr userData);
49
50         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
51         internal delegate void DisplayRotationUpdatedCallback(string serverName, MediaControlNativeDisplayRotation isEnabned, IntPtr userData);
52
53         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
54         internal delegate void BoolAttributeUpdatedCallback(string serverName, bool isEnabled, IntPtr userData);
55
56
57         // Capability updated callbacks
58         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
59         internal delegate void PlaybackCapabilityUpdatedCallback(string serverName, IntPtr capaHandle, IntPtr userData);
60
61         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
62         internal delegate void CategoryAttributeCapabilityUpdatedCallback(string serverName, uint updatedItem,
63             IntPtr userData);
64
65         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
66         internal delegate void SimpleCapabilityUpdatedCallback(string serverName, MediaControlNativeCapabilityCategory category,
67             MediaControlCapabilitySupport support, IntPtr userData);
68
69
70         // Command callbacks
71         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
72         internal delegate void CommandCompletedCallback(string serverName, string requestId, MediaControllerError result,
73             IntPtr bundleHandle, IntPtr userData);
74
75         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
76         internal delegate void CustomCommandReceivedCallback(string serverName, string requestId, string customEvent, IntPtr bundleHandle, IntPtr userData);
77         #endregion Callback delegate
78
79
80         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_create")]
81         internal static extern MediaControllerError Create(out MediaControllerClientHandle handle);
82
83         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy")]
84         internal static extern MediaControllerError Destroy(IntPtr handle);
85
86         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy_playback")]
87         internal static extern MediaControllerError DestroyPlayback(IntPtr playback);
88
89         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_foreach_server")]
90         internal static extern MediaControllerError ForeachActivatedServer(MediaControllerClientHandle handle,
91             ActivatedServerCallback callback, IntPtr userData);
92
93
94         #region Get information
95         // Playback information
96         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_playback_info")]
97         internal static extern MediaControllerError GetServerPlaybackHandle(MediaControllerClientHandle handle,
98             string serverName, out IntPtr playback);
99
100         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_state")]
101         internal static extern MediaControllerError GetPlaybackState(IntPtr playbackHandle, out MediaControllerNativePlaybackState state);
102
103         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_position")]
104         internal static extern MediaControllerError GetPlaybackPosition(IntPtr playbackHandle, out ulong position);
105
106         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_age_rating")]
107         internal static extern MediaControllerError GetAgeRating(IntPtr playbackHandle, out int rating);
108
109         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_content_type")]
110         internal static extern MediaControllerError GetPlaybackContentType(IntPtr playbackHandle,
111             out MediaControlContentType type);
112
113         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_latest_server_info")]
114         internal static extern MediaControllerError GetLatestServer(MediaControllerClientHandle handle,
115             out IntPtr serverName, out MediaControllerNativeServerState serverState);
116
117         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_shuffle_mode")]
118         internal static extern MediaControllerError GetServerShuffleMode(MediaControllerClientHandle handle,
119             string serverName, out MediaControllerNativeShuffleMode mode);
120
121         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_repeat_mode")]
122         internal static extern MediaControllerError GetServerRepeatMode(MediaControllerClientHandle handle,
123             string serverName, out MediaControllerNativeRepeatMode mode);
124
125         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_icon")]
126         internal static extern MediaControllerError GetServerIcon(MediaControllerClientHandle clientHandle,
127             string serverName, out string uri);
128
129         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_subtitles_enabled")]
130         internal static extern MediaControllerError IsSubtitleEnabled(MediaControllerClientHandle clientHandle,
131             string serverName, out bool isEnabled);
132
133         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_360_mode_enabled")]
134         internal static extern MediaControllerError IsMode360Enabled(MediaControllerClientHandle clientHandle,
135             string serverName, out bool isEnabled);
136
137         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_display_mode")]
138         internal static extern MediaControllerError GetDisplayMode(MediaControllerClientHandle clientHandle,
139             string serverName, out MediaControlNativeDisplayMode mode);
140
141         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_display_rotation")]
142         internal static extern MediaControllerError GetDisplayRotation(MediaControllerClientHandle clientHandle,
143             string serverName, out MediaControlNativeDisplayRotation mode);
144         #endregion Get information
145
146
147         #region Updated callback
148         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_server_updated_cb")]
149         internal static extern MediaControllerError SetServerUpdatedCb(MediaControllerClientHandle handle,
150             ServerUpdatedCallback callback, IntPtr userData = default(IntPtr));
151
152         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_server_updated_cb")]
153         internal static extern MediaControllerError UnsetServerUpdatedCb(MediaControllerClientHandle handle);
154
155         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playback_updated_cb")]
156         internal static extern MediaControllerError SetPlaybackUpdatedCb(MediaControllerClientHandle handle,
157             PlaybackUpdatedCallback callback, IntPtr userData = default(IntPtr));
158
159         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_updated_cb")]
160         internal static extern MediaControllerError UnsetPlaybackUpdatedCb(MediaControllerClientHandle handle);
161
162         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_shuffle_mode_updated_cb")]
163         internal static extern MediaControllerError SetShuffleModeUpdatedCb(MediaControllerClientHandle handle,
164             ShuffleModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
165
166         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_shuffle_mode_updated_cb")]
167         internal static extern MediaControllerError UnsetShuffleModeUpdatedCb(MediaControllerClientHandle handle);
168
169         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_repeat_mode_updated_cb")]
170         internal static extern MediaControllerError SetRepeatModeUpdatedCb(MediaControllerClientHandle handle,
171             RepeatModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
172
173         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_repeat_mode_updated_cb")]
174         internal static extern MediaControllerError UnsetRepeatModeUpdatedCb(MediaControllerClientHandle handle);
175
176         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_subtitles_updated_cb")]
177         internal static extern MediaControllerError SetSubtitleUpdatedCb(MediaControllerClientHandle handle,
178             BoolAttributeUpdatedCallback callback, IntPtr userData = default(IntPtr));
179
180         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_360_mode_updated_cb")]
181         internal static extern MediaControllerError SetMode360UpdatedCb(MediaControllerClientHandle handle,
182             BoolAttributeUpdatedCallback callback, IntPtr userData = default(IntPtr));
183
184         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_display_mode_updated_cb")]
185         internal static extern MediaControllerError SetDisplayModeUpdatedCb(MediaControllerClientHandle handle,
186             DisplayModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
187
188         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_display_rotation_updated_cb")]
189         internal static extern MediaControllerError SetDisplayRotationUpdatedCb(MediaControllerClientHandle handle,
190             DisplayRotationUpdatedCallback callback, IntPtr userData = default(IntPtr));
191         #endregion Updated callback
192
193
194         #region Capability
195         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_playback_ability")]
196         internal static extern MediaControllerError GetPlaybackCapabilityHandle(MediaControllerClientHandle clientHandle,
197             string serverName, out IntPtr capaHandle);
198
199         [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_action_is_supported")]
200         internal static extern MediaControllerError GetPlaybackCapability(IntPtr capaHandle,
201             MediaControllerNativePlaybackAction action, out MediaControlCapabilitySupport support);
202
203         [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_ability_destroy")]
204         internal static extern MediaControllerError DestroyCapability(IntPtr capaHandle);
205
206         [DllImport(Libraries.MediaController, EntryPoint = "mc_playback_ability_clone")]
207         internal static extern MediaControllerError CloneCapability(IntPtr capaSrcHandle, out IntPtr capaDstHandle);
208
209         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_display_mode_ability")]
210         internal static extern MediaControllerError GetDisplayModeCapability(MediaControllerClientHandle clientHandle,
211             string serverName, out uint support);
212
213         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_display_rotation_ability")]
214         internal static extern MediaControllerError GetDisplayRotationCapability(MediaControllerClientHandle clientHandle,
215             string serverName, out uint support);
216
217         // Common
218         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_ability_support")]
219         internal static extern MediaControllerError GetSimpleCapability(MediaControllerClientHandle clientHandle,
220             string serverName, MediaControlNativeCapabilityCategory category, out MediaControlCapabilitySupport type);
221         #endregion Capability
222
223
224         #region Capability updated callback
225         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playback_ability_updated_cb")]
226         internal static extern MediaControllerError SetPlaybackCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
227             PlaybackCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
228
229         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_ability_updated_cb")]
230         internal static extern MediaControllerError UnsetPlaybackCapabilityUpdatedCb(MediaControllerClientHandle clientHandle);
231
232         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_display_mode_ability_updated_cb")]
233         internal static extern MediaControllerError SetDisplayModeCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
234             CategoryAttributeCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
235
236         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_display_rotation_ability_updated_cb")]
237         internal static extern MediaControllerError SetDisplayRotationCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
238             CategoryAttributeCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
239
240         // Common
241         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_ability_support_updated_cb")]
242         internal static extern MediaControllerError SetCategoryCapabilityUpdatedCb(MediaControllerClientHandle clientHandle,
243             SimpleCapabilityUpdatedCallback callback, IntPtr userData = default(IntPtr));
244         #endregion Capability updated callback
245
246
247         #region Search
248         [DllImport(Libraries.MediaController, EntryPoint = "mc_search_create")]
249         internal static extern MediaControllerError CreateSearchHandle(out IntPtr searchHandle);
250
251         [DllImport(Libraries.MediaController, EntryPoint = "mc_search_set_condition")]
252         internal static extern MediaControllerError SetSearchCondition(IntPtr searchHandle,
253             MediaControlContentType type, MediaControlSearchCategory category, string keyword, IntPtr bundle);
254
255         [DllImport(Libraries.MediaController, EntryPoint = "mc_search_set_condition")]
256         internal static extern MediaControllerError SetSearchConditionBundle(IntPtr searchHandle,
257             MediaControlContentType type, MediaControlSearchCategory category, string keyword, SafeBundleHandle bundle);
258
259         [DllImport(Libraries.MediaController, EntryPoint = "mc_search_destroy")]
260         internal static extern MediaControllerError DestroySearchHandle(IntPtr searchHandle);
261         #endregion Search
262
263
264         #region Command
265         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_action_cmd")]
266         internal static extern MediaControllerError SendPlaybackActionCommand(MediaControllerClientHandle handle,
267             string serverName, MediaControllerNativePlaybackAction action, out string requestId);
268
269         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_action_cmd")]
270         internal static extern MediaControllerError SendPlaybackActionCommandWithoutReqId(MediaControllerClientHandle handle,
271             string serverName, MediaControllerNativePlaybackAction action, string requestId = default(string));
272
273         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_position_cmd")]
274         internal static extern MediaControllerError SendPlaybackPositionCommand(MediaControllerClientHandle handle,
275             string serverName, ulong playbackPosition, out string requestId);
276
277         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_shuffle_mode_cmd")]
278         internal static extern MediaControllerError SendShuffleModeCommand(MediaControllerClientHandle handle,
279             string serverName, MediaControllerNativeShuffleMode mode, out string requestId);
280
281         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_repeat_mode_cmd")]
282         internal static extern MediaControllerError SendRepeatModeCommand(MediaControllerClientHandle handle,
283             string serverName, MediaControllerNativeRepeatMode mode, out string requestId);
284
285         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playlist_cmd")]
286         internal static extern MediaControllerError SendPlaylistCommand(MediaControllerClientHandle handle,
287             string serverName, string playlistName, string index, MediaControllerNativePlaybackAction mode,
288             ulong position, out string requestId);
289
290         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_search_cmd")]
291         internal static extern MediaControllerError SendSearchCommand(MediaControllerClientHandle handle,
292             string serverName, IntPtr searchHandle, out string requestId);
293
294         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_subtitles_cmd")]
295         internal static extern MediaControllerError SendSubtitleModeCommand(MediaControllerClientHandle handle,
296             string serverName, bool isEnabled, out string requestId);
297
298         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_360_mode_cmd")]
299         internal static extern MediaControllerError SendMode360Command(MediaControllerClientHandle handle,
300             string serverName, bool isEnabled, out string requestId);
301
302         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_display_mode_cmd")]
303         internal static extern MediaControllerError SendDisplayModeCommand(MediaControllerClientHandle handle,
304             string serverName, MediaControlNativeDisplayMode mode, out string requestId);
305
306         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_display_rotation_cmd")]
307         internal static extern MediaControllerError SendDisplayRotationCommand(MediaControllerClientHandle handle,
308             string serverName, MediaControlNativeDisplayRotation mode, out string requestId);
309
310         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
311         internal static extern MediaControllerError SendCustomCommandBundle(MediaControllerClientHandle handle,
312             string serverName, string command, SafeBundleHandle bundleHandle, out string requestId);
313
314         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
315         internal static extern MediaControllerError SendCustomCommand(MediaControllerClientHandle handle,
316             string serverName, string command, IntPtr bundleHandle, out string requestId);
317
318         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_cmd_reply_received_cb")]
319         internal static extern MediaControllerError SetCommandCompletedCb(MediaControllerClientHandle handle,
320             CommandCompletedCallback callback, IntPtr userData = default(IntPtr));
321
322         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_cmd_reply_received_cb")]
323         internal static extern MediaControllerError UnsetCommandCompletedCb(MediaControllerClientHandle handle);
324         #endregion Command
325
326
327         #region Event
328         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_custom_event_received_cb")]
329         internal static extern MediaControllerError SetCustomEventCb(MediaControllerClientHandle handle,
330             CustomCommandReceivedCallback callback, IntPtr userData = default(IntPtr));
331
332         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_custom_event_received_cb")]
333         internal static extern MediaControllerError UnsetCustomEventCb(MediaControllerClientHandle handle);
334
335         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_event_reply")]
336         internal static extern MediaControllerError SendCustomEventReply(MediaControllerClientHandle handle,
337             string serverName, string requestId, int result, IntPtr bundleHandle);
338         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_event_reply")]
339         internal static extern MediaControllerError SendCustomEventReplyBundle(MediaControllerClientHandle handle,
340             string serverName, string requestId, int result, SafeBundleHandle bundleHandle);
341         #endregion Event
342     }
343
344     internal class MediaControllerClientHandle : SafeHandle
345     {
346         protected MediaControllerClientHandle() : base(IntPtr.Zero, true)
347         {
348         }
349
350         public override bool IsInvalid => handle == IntPtr.Zero;
351
352         protected override bool ReleaseHandle()
353         {
354             var ret = MediaControllerClient.Destroy(handle);
355             if (ret != MediaControllerError.None)
356             {
357                 Tizen.Log.Debug(GetType().FullName, $"Failed to release native {GetType().Name}");
358                 return false;
359             }
360
361             return true;
362         }
363     }
364 }