becaf42ef9f409f16d5dd4a50a164070f004011a
[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         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
27         internal delegate void ServerUpdatedCallback(string serverName, MediaControllerNativeServerState serverState,
28             IntPtr userData);
29
30         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
31         internal delegate void PlaybackUpdatedCallback(string serverName, IntPtr playback, IntPtr userData);
32
33         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
34         internal delegate void ShuffleModeUpdatedCallback(string serverName, MediaControllerNativeShuffleMode shuffleMode,
35             IntPtr userData);
36
37         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
38         internal delegate void RepeatModeUpdatedCallback(string serverName, MediaControllerNativeRepeatMode repeatMode, IntPtr userData);
39
40         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
41         internal delegate bool ActivatedServerCallback(string serverName, IntPtr userData);
42
43         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
44         internal delegate void CommandCompletedCallback(string serverName, string requestId, MediaControllerError result,
45             IntPtr bundleHandle, IntPtr userData);
46
47
48         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_create")]
49         internal static extern MediaControllerError Create(out MediaControllerClientHandle handle);
50
51         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy")]
52         internal static extern MediaControllerError Destroy(IntPtr handle);
53
54         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_server_updated_cb")]
55         internal static extern MediaControllerError SetServerUpdatedCb(MediaControllerClientHandle handle,
56             ServerUpdatedCallback callback, IntPtr userData = default(IntPtr));
57
58         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_server_updated_cb")]
59         internal static extern MediaControllerError UnsetServerUpdatedCb(MediaControllerClientHandle handle);
60
61         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_playback_updated_cb")]
62         internal static extern MediaControllerError SetPlaybackUpdatedCb(MediaControllerClientHandle handle,
63             PlaybackUpdatedCallback callback, IntPtr userData = default(IntPtr));
64
65         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_updated_cb")]
66         internal static extern MediaControllerError UnsetPlaybackUpdatedCb(MediaControllerClientHandle handle);
67
68         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_shuffle_mode_updated_cb")]
69         internal static extern MediaControllerError SetShuffleModeUpdatedCb(MediaControllerClientHandle handle,
70             ShuffleModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
71
72         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_shuffle_mode_updated_cb")]
73         internal static extern MediaControllerError UnsetShuffleModeUpdatedCb(MediaControllerClientHandle handle);
74
75         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_repeat_mode_updated_cb")]
76         internal static extern MediaControllerError SetRepeatModeUpdatedCb(MediaControllerClientHandle handle,
77             RepeatModeUpdatedCallback callback, IntPtr userData = default(IntPtr));
78
79         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_repeat_mode_updated_cb")]
80         internal static extern MediaControllerError UnsetRepeatModeUpdatedCb(MediaControllerClientHandle handle);
81
82         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_set_cmd_reply_received_cb")]
83         internal static extern MediaControllerError SetCommandCompletedCb(MediaControllerClientHandle handle,
84             CommandCompletedCallback callback, IntPtr userData = default(IntPtr));
85
86         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_cmd_reply_received_cb")]
87         internal static extern MediaControllerError UnsetCommandCompletedCb(MediaControllerClientHandle handle);
88
89         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_state")]
90         internal static extern MediaControllerError GetPlaybackState(IntPtr playback, out MediaControllerNativePlaybackState state);
91
92         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_position")]
93         internal static extern MediaControllerError GetPlaybackPosition(IntPtr playback, out ulong position);
94
95         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy_playback")]
96         internal static extern MediaControllerError DestroyPlayback(IntPtr playback);
97
98         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_latest_server_info")]
99         internal static extern MediaControllerError GetLatestServer(MediaControllerClientHandle handle,
100             out IntPtr serverName, out MediaControllerNativeServerState serverState);
101
102         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_playback_info")]
103         internal static extern MediaControllerError GetServerPlayback(MediaControllerClientHandle handle,
104             string serverName, out IntPtr playback);
105
106         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_shuffle_mode")]
107         internal static extern MediaControllerError GetServerShuffleMode(MediaControllerClientHandle handle,
108             string serverName, out MediaControllerNativeShuffleMode mode);
109
110         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_server_repeat_mode")]
111         internal static extern MediaControllerError GetServerRepeatMode(MediaControllerClientHandle handle,
112             string serverName, out MediaControllerNativeRepeatMode mode);
113
114         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_state_command")]
115         internal static extern MediaControllerError SendPlaybackStateCommand(MediaControllerClientHandle handle,
116             string serverName, MediaControllerNativePlaybackAction command);
117
118         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
119         internal static extern MediaControllerError SendCustomCommandBundle(MediaControllerClientHandle handle,
120             string serverName, string command, SafeBundleHandle bundleHandle, out string requestId);
121
122         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_custom_cmd")]
123         internal static extern MediaControllerError SendCustomCommand(MediaControllerClientHandle handle,
124             string serverName, string command, IntPtr bundleHandle, out string requestId);
125
126         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_action_cmd")]
127         internal static extern MediaControllerError SendPlaybackActionCommand(MediaControllerClientHandle handle,
128             string serverName, MediaControllerNativePlaybackAction action, out string requestId);
129
130         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_position_cmd")]
131         internal static extern MediaControllerError SendPlaybackPositionCommand(MediaControllerClientHandle handle,
132             string serverName, ulong playbackPosition, out string requestId);
133
134         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_shuffle_mode_cmd")]
135         internal static extern MediaControllerError SendShuffleModeCommand(MediaControllerClientHandle handle,
136             string serverName, MediaControllerNativeShuffleMode mode, out string requestId);
137
138         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_repeat_mode_cmd")]
139         internal static extern MediaControllerError SendRepeatModeCommand(MediaControllerClientHandle handle,
140             string serverName, MediaControllerNativeRepeatMode mode, out string requestId);
141
142         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playlist_cmd")]
143         internal static extern MediaControllerError SendPlaylistCommand(MediaControllerClientHandle handle,
144             string serverName, string playlistName, string index, MediaControllerNativePlaybackAction mode,
145             ulong position, out string requestId);
146
147         [DllImport(Libraries.MediaController, EntryPoint = "mc_client_foreach_server")]
148         internal static extern MediaControllerError ForeachActivatedServer(MediaControllerClientHandle handle,
149             ActivatedServerCallback callback, IntPtr userData);
150     }
151
152     internal class MediaControllerClientHandle : SafeHandle
153     {
154         protected MediaControllerClientHandle() : base(IntPtr.Zero, true)
155         {
156         }
157
158         public override bool IsInvalid => handle == IntPtr.Zero;
159
160         protected override bool ReleaseHandle()
161         {
162             var ret = MediaControllerClient.Destroy(handle);
163             if (ret != MediaControllerError.None)
164             {
165                 Tizen.Log.Debug(GetType().FullName, $"Failed to release native {GetType().Name}");
166                 return false;
167             }
168
169             return true;
170         }
171     }
172 }