nkeynes@1097: /** nkeynes@1097: * $Id$ nkeynes@1097: * nkeynes@1097: * Host CD/DVD drive support. nkeynes@1097: * nkeynes@1097: * This module supplies functions to enumerate the physical drives in the nkeynes@1097: * host system, and open them as a cdrom disc. nkeynes@1097: * nkeynes@1097: * Note that cdrom_disc_t objects bound to a physical drive may update their nkeynes@1097: * TOC at any time, including setting disc_type to CDROM_DISC_NONE (to indicate nkeynes@1097: * no media present). nkeynes@1097: * nkeynes@1097: * Copyright (c) 2009 Nathan Keynes. nkeynes@1097: * nkeynes@1097: * This program is free software; you can redistribute it and/or modify nkeynes@1097: * it under the terms of the GNU General Public License as published by nkeynes@1097: * the Free Software Foundation; either version 2 of the License, or nkeynes@1097: * (at your option) any later version. nkeynes@1097: * nkeynes@1097: * This program is distributed in the hope that it will be useful, nkeynes@1097: * but WITHOUT ANY WARRANTY; without even the implied warranty of nkeynes@1097: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nkeynes@1097: * GNU General Public License for more details. nkeynes@1097: */ nkeynes@1097: nkeynes@1097: #ifndef cdrom_drive_H nkeynes@1097: #define cdrom_drive_H 1 nkeynes@1097: nkeynes@1097: #include nkeynes@1097: #include "hook.h" nkeynes@1097: #include "drivers/cdrom/defs.h" nkeynes@1097: nkeynes@1097: #ifdef __cplusplus nkeynes@1097: extern "C" { nkeynes@1097: #endif nkeynes@1097: nkeynes@1097: nkeynes@1097: typedef struct cdrom_drive *cdrom_drive_t; nkeynes@1097: nkeynes@1097: typedef cdrom_disc_t (*cdrom_drive_open_fn_t)(cdrom_drive_t, ERROR *); nkeynes@1097: nkeynes@1097: /** nkeynes@1097: * A cdrom_device is a placeholder for a physical CD/DVD drive in the host nkeynes@1097: * system. nkeynes@1097: */ nkeynes@1097: struct cdrom_drive { nkeynes@1097: /** nkeynes@1097: * System name for the device nkeynes@1097: */ nkeynes@1097: const char *name; nkeynes@1097: /** nkeynes@1097: * Human-readable name of the device - normally the device's vendor nkeynes@1097: * and product name as returned by an Inquiry request. nkeynes@1097: */ nkeynes@1097: const char *display_name; nkeynes@1097: nkeynes@1097: /** nkeynes@1097: * Implementation specific function to open the drive, returning a new nkeynes@1097: * cdrom_disc_t. nkeynes@1097: */ nkeynes@1097: cdrom_drive_open_fn_t open; nkeynes@1097: }; nkeynes@1097: nkeynes@1097: typedef gboolean (*cdrom_drive_list_change_hook_t)( GList *drive_list, void *user_data ); nkeynes@1097: DECLARE_HOOK(cdrom_drive_list_change_hook, cdrom_drive_list_change_hook_t); nkeynes@1097: nkeynes@1097: nkeynes@1097: /** nkeynes@1097: * Native CD-ROM API - provided by drivers/cd_*.c nkeynes@1097: * nkeynes@1097: * A device name is either a system special file (most unixes) or a url of the nkeynes@1097: * form dvd:// or cd://, where is a system nkeynes@1097: * defined string that uniquely identifies a particular device. nkeynes@1097: */ nkeynes@1097: nkeynes@1097: /** nkeynes@1097: * Return a list of cdrom_drive_t defining all CD/DVD drives in the host system. nkeynes@1097: */ nkeynes@1097: GList *cdrom_drive_get_list(); nkeynes@1097: nkeynes@1097: /** nkeynes@1097: * nkeynes@1097: */ nkeynes@1097: cdrom_drive_t cdrom_drive_find( const char *name ); nkeynes@1097: nkeynes@1097: /** nkeynes@1097: * Open a cdrom_drive_t previously obtained from the system. nkeynes@1097: * nkeynes@1097: * @return NULL on failure, otherwise a valid cdrom_disc_t that can be mounted. nkeynes@1097: */ nkeynes@1097: cdrom_disc_t cdrom_drive_open( cdrom_drive_t drive, ERROR *err ); nkeynes@1097: nkeynes@1097: #ifdef __cplusplus nkeynes@1097: } nkeynes@1097: #endif nkeynes@1097: nkeynes@1097: #endif /* !cdrom_drive_H */