/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * Module: rbutil * File: autodetection.h * * Copyright (C) 2008 Dominik Wenger * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/ #ifndef AUTODETECTION_H_INCLUDED #define AUTODETECTION_H_INCLUDED /************************************** * General code for USB Device detection ***************************************/ #include "rbutil.h" #define TOMANYDEVICES 2 #define NODEVICE 1 struct UsbDeviceInfo { int device_index; wxString path; int status; }; UsbDeviceInfo detectDevicesViaPatchers(); /******************************** * Windows code for USB Device detection and information **************************************/ #if defined( __WXMSW__ ) #include // For DeviceChange. #include // For DeviceIOCtl. // IOCTL control code #define IOCTL_STORAGE_QUERY_PROPERTY CTL_CODE(IOCTL_STORAGE_BASE, 0x0500, METHOD_BUFFERED, FILE_ANY_ACCESS) //// The following structures all can find at MSDN. // enumeration type specifies the various types of storage buses typedef enum _STORAGE_BUS_TYPE { BusTypeUnknown = 0x00, BusTypeScsi, BusTypeAtapi, BusTypeAta, BusType1394, BusTypeSsa, BusTypeFibre, BusTypeUsb, BusTypeRAID, BusTypeMaxReserved = 0x7F } STORAGE_BUS_TYPE, *PSTORAGE_BUS_TYPE; // retrieve the storage device descriptor data for a device. typedef struct _STORAGE_DEVICE_DESCRIPTOR { ULONG Version; ULONG Size; UCHAR DeviceType; UCHAR DeviceTypeModifier; BOOLEAN RemovableMedia; BOOLEAN CommandQueueing; ULONG VendorIdOffset; ULONG ProductIdOffset; ULONG ProductRevisionOffset; ULONG SerialNumberOffset; STORAGE_BUS_TYPE BusType; ULONG RawPropertiesLength; UCHAR RawDeviceProperties[1]; } STORAGE_DEVICE_DESCRIPTOR, *PSTORAGE_DEVICE_DESCRIPTOR; // retrieve the properties of a storage device or adapter. typedef enum _STORAGE_QUERY_TYPE { PropertyStandardQuery = 0, PropertyExistsQuery, PropertyMaskQuery, PropertyQueryMaxDefined } STORAGE_QUERY_TYPE, *PSTORAGE_QUERY_TYPE; // retrieve the properties of a storage device or adapter. typedef enum _STORAGE_PROPERTY_ID { StorageDeviceProperty = 0, StorageAdapterProperty, StorageDeviceIdProperty } STORAGE_PROPERTY_ID, *PSTORAGE_PROPERTY_ID; // retrieve the properties of a storage device or adapter. typedef struct _STORAGE_PROPERTY_QUERY { STORAGE_PROPERTY_ID PropertyId; STORAGE_QUERY_TYPE QueryType; UCHAR AdditionalParameters[1]; } STORAGE_PROPERTY_QUERY, *PSTORAGE_PROPERTY_QUERY; wxString guess_mount_point(); BOOL GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc); char chFirstDriveFromMask (ULONG unitmask); #endif /*__WXMSW__ */ /************************************************************************+ *Linux code for autodetection **************************************************************************/ #if !(defined( __WXMSW__ ) || defined( __DARWIN__)) wxString resolve_mount_point( const wxString device ); #endif /* Linux Code */ #endif