]> git.sesse.net Git - vlc/commitdiff
Non-working general declarations for disc probing (Refs:#565)
authorClément Stenac <zorglub@videolan.org>
Tue, 20 Jun 2006 20:54:16 +0000 (20:54 +0000)
committerClément Stenac <zorglub@videolan.org>
Tue, 20 Jun 2006 20:54:16 +0000 (20:54 +0000)
include/vlc_devices.h [new file with mode: 0644]
modules/misc/probe/hal.c [new file with mode: 0644]

diff --git a/include/vlc_devices.h b/include/vlc_devices.h
new file mode 100644 (file)
index 0000000..78b6c7a
--- /dev/null
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ * vlc_devices.h : Devices handling
+ *****************************************************************************
+ * Copyright (C) 1999-2006 the VideoLAN team
+ * $Id: vlc_input.h 15915 2006-06-15 21:22:35Z zorglub $
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * 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.
+ *
+ * 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; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef _VLC_DEVICES_H
+#define _VLC_DEVICES_H 1
+
+enum
+{
+    DEVICE_CAN_DVD,
+    DEVICE_CAN_CD,
+};
+
+enum
+{
+    MEDIA_TYPE_CDDA,
+    MEDIA_TYPE_VCD,
+    MEDIA_TYPE_DVD,
+};
+
+struct device_t
+{
+    int             i_capabilities;
+    int             i_media_type;
+    char *psz_uri;
+    char *psz_media_name;
+};
+
+static inline void device_GetDVD()
+{}
diff --git a/modules/misc/probe/hal.c b/modules/misc/probe/hal.c
new file mode 100644 (file)
index 0000000..fbccca5
--- /dev/null
@@ -0,0 +1,196 @@
+/*****************************************************************************
+ * hal.c :  HAL probing module
+ *****************************************************************************
+ * Copyright (C) 2004 the VideoLAN team
+ * $Id$
+ *
+ * Authors: Clément Stenac <zorglub@videolan.org>
+ *
+ * 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.
+ *
+ * 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; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#include <vlc/vlc.h>
+#include <vlc_devices.h>
+
+#include <hal/libhal.h>
+
+/*****************************************************************************
+ * Local prototypes
+ *****************************************************************************/
+struct intf_sys_t
+{
+    LibHalContext *p_ctx;
+    int            i_devices;
+    device_t     **pp_devices;
+};
+
+static int  Open ( vlc_object_t * );
+static void Close( vlc_object_t * );
+
+static void Update ( intf_thread_t *p_intf );
+
+/*****************************************************************************
+ * Module descriptor
+ *****************************************************************************/
+vlc_module_begin();
+    set_description( _("HAL devices detection") );
+    set_capability( "devices probe", 0 );
+    set_callbacks( Open, Close );
+vlc_module_end();
+
+
+/*****************************************************************************
+ * Open: initialize and create stuff
+ *****************************************************************************/
+static int Open( vlc_object_t *p_this )
+{
+    intf_thread_t *p_intf = (intf_thread_t *)p_this;
+    vlc_value_t         val;
+    DBusError           dbus_error;
+    DBusConnection      *p_connection;
+
+    p_intf->p_sys = (intf_sys_t*)malloc( sizeof( intf_sys_t ) );
+    p_intf->p_sys->i_drives = 0;
+
+    p_intf->pf_run = Run;
+
+    dbus_error_init( &dbus_error );
+
+    p_intf->p_sys->p_ctx = libhal_ctx_new();
+    if( !p_intf->p_sys->p_ctx )
+    {
+        msg_Err( p_intf, "unable to create HAL context") ;
+        free( p_intf->p_sys );
+        return VLC_EGENERIC;
+    }
+    p_connection = dbus_bus_get( DBUS_BUS_SYSTEM, &dbus_error );
+    if( dbus_error_is_set( &dbus_error ) )
+    {
+        msg_Err( p_intf, "unable to connect to DBUS: %s", dbus_error.message );
+        dbus_error_free( &dbus_error );
+        free( p_intf->p_sys );
+        return VLC_EGENERIC;
+    }
+    libhal_ctx_set_dbus_connection( p_intf->p_sys->p_ctx, p_connection );
+    if( !libhal_ctx_init( p_intf->p_sys->p_ctx, &dbus_error ) )
+    {
+        msg_Err( p_intf, "hal not available : %s", dbus_error.message );
+        dbus_error_free( &dbus_error );
+        free( p_sys );
+        return VLC_EGENERIC;
+    }
+    return VLC_SUCCESS;
+}
+
+/*****************************************************************************
+ * Close:
+ *****************************************************************************/
+static void Close( vlc_object_t *p_this )
+{
+    intf_thread_t *p_intf = (intf_thread_t *) p_this;
+    intf_sys_t *p_sys = p_intf->p_sys;
+    free( p_sys );
+}
+
+static int GetAllDevices( intf_thread_t *p_intf, device_t ***ppp_devices )
+{
+    /* Todo : fill the dst array */
+    return p_intf->p_sys->i_devices;
+}
+
+static void Update( intf_thread_t * p_intf )
+{
+    intf_sys_t *p_sys = p_intf->p_sys;
+    int i, i_devices, j;
+    char **devices;
+    vlc_bool_t b_exists;
+
+    for ( j = 0 ; j < p_sys->i_devices; j++ )
+        p_dev->b_seen = VLC_FALSE;
+
+    if( ( devices = libhal_get_all_devices( p_sys->p_ctx, &i_devices, NULL ) ) )
+    {
+        device_t *p_device;
+        for( i = 0; i < i_devices; i++ )
+        {
+            b_exists = VLC_FALSE;
+            p_dev = ParseDevice( p_sd, devices[ i ] );
+
+            for ( j = 0 ; j < p_sys->i_devices; j++ )
+            {
+                if( !strcmp( p_sys->pp_devices[j]->psz_uri,
+                             p_dev->psz_uri ) )
+                {
+                    b_exists = VLC_TRUE;
+                    p_dev->b_seen = VLC_TRUE;
+                    break;
+                }
+                if( !b_exists )
+                    AddDevice( p_intf, p_dev );
+            }
+        }
+    }
+    /// \todo Remove unseen devices
+}
+
+
+static void AddDevice( intf_thread_t * p_intf, device_t *p_dev )
+{
+    INSERT_ELEM( p_intf->p_sys->pp_devices,
+                 p_intf->p_sys->i_devices,
+                 p_intf->p_sys->i_devices,
+                 p_dev );
+    /// \todo : emit variable
+}
+
+
+
+
+static device_t * ParseDevice( intf_thread_t *p_intf,  char *psz_device )
+{
+    char *psz_disc_type;
+    intf_sys_t *p_sys = p_intf->p_sys;
+    /* FIXME: The following code provides media detection, not device */
+ /*
+    if( libhal_device_property_exists( p_sys->p_ctx, psz_device,
+                                       "volume.disc.type", NULL ) )
+    {
+        psz_disc_type = libhal_device_get_property_string( p_sys->p_ctx,
+                                                        psz_device,
+                                                        "volume.disc.type",
+                                                        NULL );
+        if( !strcmp( psz_disc_type, "dvd_rom" ) )
+        {
+            /// \todo This is a DVD
+            //psz_name = libhal_device_get_property_string( p_sd->p_sys->p_ctx,
+            ///                          psz_device, "volume.label", NULL );
+            // psz_blockdevice = libhal_device_get_property_string( p_sd->p_sys->p_ctx,
+            //                            psz_device, "block.device", NULL );
+            //    libhal_free_string( psz_device );
+}
+        }
+        else if( !strcmp( psz_disc_type, "cd_rom" ) )
+        {
+            if( libhal_device_get_property_bool( p_sys->p_ctx, psz_device,
+                                         "volume.disc.has_audio" , NULL ) )
+            {
+                /// \todo This is a CDDA
+            }
+        }
+        libhal_free_string( psz_disc_type );
+    }
+    */
+    return NULL;
+}