143 lines
3.7 KiB
C
143 lines
3.7 KiB
C
|
/***************************************************************************
|
||
|
* __________ __ ___.
|
||
|
* 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 <dbt.h> // For DeviceChange.
|
||
|
#include <winioctl.h> // 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
|