2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 using System.Runtime.InteropServices;
19 using Tizen.Applications;
20 using Tizen.Multimedia.Remoting;
22 internal static partial class Interop
24 internal static partial class MediaControllerClient
26 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
27 internal delegate void ServerUpdatedCallback(string serverName, MediaControllerNativeServerState serverState,
30 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
31 internal delegate void PlaybackUpdatedCallback(string serverName, IntPtr playback, IntPtr userData);
33 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
34 internal delegate void ShuffleModeUpdatedCallback(string serverName, MediaControllerNativeShuffleMode shuffleMode,
37 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
38 internal delegate void RepeatModeUpdatedCallback(string serverName, MediaControllerNativeRepeatMode repeatMode, IntPtr userData);
40 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
41 internal delegate bool ActivatedServerCallback(string serverName, IntPtr userData);
43 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
44 internal delegate void CommandCompletedCallback(string serverName, string requestId, MediaControllerError result,
45 IntPtr bundleHandle, IntPtr userData);
48 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_create")]
49 internal static extern MediaControllerError Create(out MediaControllerClientHandle handle);
51 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy")]
52 internal static extern MediaControllerError Destroy(IntPtr handle);
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));
58 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_server_updated_cb")]
59 internal static extern MediaControllerError UnsetServerUpdatedCb(MediaControllerClientHandle handle);
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));
65 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_playback_updated_cb")]
66 internal static extern MediaControllerError UnsetPlaybackUpdatedCb(MediaControllerClientHandle handle);
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));
72 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_shuffle_mode_updated_cb")]
73 internal static extern MediaControllerError UnsetShuffleModeUpdatedCb(MediaControllerClientHandle handle);
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));
79 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_repeat_mode_updated_cb")]
80 internal static extern MediaControllerError UnsetRepeatModeUpdatedCb(MediaControllerClientHandle handle);
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));
86 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_unset_cmd_reply_received_cb")]
87 internal static extern MediaControllerError UnsetCommandCompletedCb(MediaControllerClientHandle handle);
89 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_state")]
90 internal static extern MediaControllerError GetPlaybackState(IntPtr playback, out MediaControllerNativePlaybackState state);
92 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_get_playback_position")]
93 internal static extern MediaControllerError GetPlaybackPosition(IntPtr playback, out ulong position);
95 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_destroy_playback")]
96 internal static extern MediaControllerError DestroyPlayback(IntPtr playback);
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);
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);
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);
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);
114 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_send_playback_state_command")]
115 internal static extern MediaControllerError SendPlaybackStateCommand(MediaControllerClientHandle handle,
116 string serverName, MediaControllerNativePlaybackAction command);
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);
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);
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);
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);
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);
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);
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);
147 [DllImport(Libraries.MediaController, EntryPoint = "mc_client_foreach_server")]
148 internal static extern MediaControllerError ForeachActivatedServer(MediaControllerClientHandle handle,
149 ActivatedServerCallback callback, IntPtr userData);
152 internal class MediaControllerClientHandle : SafeHandle
154 protected MediaControllerClientHandle() : base(IntPtr.Zero, true)
158 public override bool IsInvalid => handle == IntPtr.Zero;
160 protected override bool ReleaseHandle()
162 var ret = MediaControllerClient.Destroy(handle);
163 if (ret != MediaControllerError.None)
165 Tizen.Log.Debug(GetType().FullName, $"Failed to release native {GetType().Name}");