summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Platinum/Source/Apps/MicroMediaController/PltMicroMediaController.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Platinum/Source/Apps/MicroMediaController/PltMicroMediaController.h')
-rw-r--r--lib/libUPnP/Platinum/Source/Apps/MicroMediaController/PltMicroMediaController.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/lib/libUPnP/Platinum/Source/Apps/MicroMediaController/PltMicroMediaController.h b/lib/libUPnP/Platinum/Source/Apps/MicroMediaController/PltMicroMediaController.h
new file mode 100644
index 0000000..c5b17bf
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Apps/MicroMediaController/PltMicroMediaController.h
@@ -0,0 +1,176 @@
+/*****************************************************************
+|
+| Platinum - Micro Media Controller
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+| licensing@plutinosoft.com
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+
+#ifndef _MICRO_MEDIA_CONTROLLER_H_
+#define _MICRO_MEDIA_CONTROLLER_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "Platinum.h"
+#include "PltMediaServer.h"
+#include "PltSyncMediaBrowser.h"
+#include "PltMediaController.h"
+#include "Neptune.h"
+
+/*----------------------------------------------------------------------
+| definitions
++---------------------------------------------------------------------*/
+typedef NPT_Map<NPT_String, NPT_String> PLT_StringMap;
+typedef NPT_Lock<PLT_StringMap> PLT_LockStringMap;
+typedef NPT_Map<NPT_String, NPT_String>::Entry PLT_StringMapEntry;
+
+/*----------------------------------------------------------------------
+| PLT_MediaItemIDFinder
++---------------------------------------------------------------------*/
+class PLT_MediaItemIDFinder
+{
+public:
+ // methods
+ PLT_MediaItemIDFinder(const char* object_id) : m_ObjectID(object_id) {}
+
+ bool operator()(const PLT_MediaObject* const & item) const {
+ return item->m_ObjectID.Compare(m_ObjectID, true) ? false : true;
+ }
+
+private:
+ // members
+ NPT_String m_ObjectID;
+};
+
+/*----------------------------------------------------------------------
+| PLT_MicroMediaController
++---------------------------------------------------------------------*/
+class PLT_MicroMediaController : public PLT_SyncMediaBrowser,
+ public PLT_MediaController,
+ public PLT_MediaControllerDelegate
+{
+public:
+ PLT_MicroMediaController(PLT_CtrlPointReference& ctrlPoint);
+ virtual ~PLT_MicroMediaController();
+
+ void ProcessCommandLoop();
+
+ // PLT_MediaBrowserDelegate methods
+ bool OnMSAdded(PLT_DeviceDataReference& device);
+
+ // PLT_MediaControllerDelegate methods
+ bool OnMRAdded(PLT_DeviceDataReference& device);
+ void OnMRRemoved(PLT_DeviceDataReference& device);
+ void OnMRStateVariablesChanged(PLT_Service* /* service */,
+ NPT_List<PLT_StateVariable*>* /* vars */);
+
+ // PLT_HttpClientTask method
+ NPT_Result ProcessResponse(NPT_Result res,
+ const NPT_HttpRequest& request,
+ const NPT_HttpRequestContext& context,
+ NPT_HttpResponse* response);
+
+private:
+ const char* ChooseIDFromTable(PLT_StringMap& table);
+ void PopDirectoryStackToRoot(void);
+ NPT_Result DoBrowse(const char* object_id = NULL, bool metdata = false);
+
+ void GetCurMediaServer(PLT_DeviceDataReference& server);
+ void GetCurMediaRenderer(PLT_DeviceDataReference& renderer);
+
+ PLT_DeviceDataReference ChooseDevice(const NPT_Lock<PLT_DeviceMap>& deviceList);
+
+ // Command Handlers
+ void HandleCmd_scan(const char* ip);
+ void HandleCmd_getms();
+ void HandleCmd_setms();
+ void HandleCmd_ls();
+ void HandleCmd_info();
+ void HandleCmd_cd(const char* command);
+ void HandleCmd_cdup();
+ void HandleCmd_pwd();
+ void HandleCmd_help();
+ void HandleCmd_getmr();
+ void HandleCmd_setmr();
+ void HandleCmd_download();
+ void HandleCmd_open();
+ void HandleCmd_play();
+ void HandleCmd_seek(const char* command);
+ void HandleCmd_stop();
+ void HandleCmd_mute();
+ void HandleCmd_unmute();
+
+private:
+ /* Tables of known devices on the network. These are updated via the
+ * OnMSAddedRemoved and OnMRAddedRemoved callbacks. Note that you should first lock
+ * before accessing them using the NPT_Map::Lock function.
+ */
+ NPT_Lock<PLT_DeviceMap> m_MediaServers;
+ NPT_Lock<PLT_DeviceMap> m_MediaRenderers;
+
+ /* Currently selected media server as well as
+ * a lock. If you ever want to hold both the m_CurMediaRendererLock lock and the
+ * m_CurMediaServerLock lock, make sure you grab the server lock first.
+ */
+ PLT_DeviceDataReference m_CurMediaServer;
+ NPT_Mutex m_CurMediaServerLock;
+
+ /* Currently selected media renderer as well as
+ * a lock. If you ever want to hold both the m_CurMediaRendererLock lock and the
+ * m_CurMediaServerLock lock, make sure you grab the server lock first.
+ */
+ PLT_DeviceDataReference m_CurMediaRenderer;
+ NPT_Mutex m_CurMediaRendererLock;
+
+ /* Most recent results from a browse request. The results come back in a
+ * callback instead of being returned to the calling function, so this
+ * variable is necessary in order to give the results back to the calling
+ * function.
+ */
+ PLT_MediaObjectListReference m_MostRecentBrowseResults;
+
+ /* When browsing through the tree on a media server, this is the stack
+ * symbolizing the current position in the tree. The contents of the
+ * stack are the object ID's of the nodes. Note that the object id: "0" should
+ * always be at the bottom of the stack.
+ */
+ NPT_Stack<NPT_String> m_CurBrowseDirectoryStack;
+
+ /* Semaphore on which to block when waiting for a response from over
+ * the network
+ */
+ NPT_SharedVariable m_CallbackResponseSemaphore;
+
+ /* Task Manager managing download tasks */
+ PLT_TaskManager m_DownloadTaskManager;
+};
+
+#endif /* _MICRO_MEDIA_CONTROLLER_H_ */
+