windows-nt/Source/XPSP1/NT/multimedia/media/mcicda/cdio.h
2020-09-26 16:20:57 +08:00

152 lines
4.2 KiB
C

/*******************************Module*Header*********************************\
* Module Name: cdio.h
*
* Media Control Architecture Redbook CD Audio Driver
*
* Created:
* Author:
*
* History:
*
* Internal data structures
*
* Copyright (c) 1990-1997 Microsoft Corporation
*
\****************************************************************************/
#include <devioctl.h>
#include <ntddcdrm.h>
//
// define types
//
typedef redbook MSF; // minutes, seconds, frames.
#define ANSI_NAME_SIZE 32 // device name size
#define IS_DATA_TRACK 0x04 // Flag for track control byte - defines type of
// track = bit = 0 => audio, bit = 1 => data
//
// Private structures
//
typedef struct _TRACK_INFO {
UCHAR TrackNumber; // Track number read from TOC
MSF msfStart; // Track start MSF from TOC
UCHAR Ctrl; // Track control byte (defined by SCSI2)
} TRACK_INFO, *LPTRACK_INFO;
//
// Information about a single device and any disk in it
//
typedef struct _CD_INFO {
HANDLE DeviceCritSec; // The device critical section
TCHAR cDrive; // The device disc letter
HANDLE hDevice; // Handle to an open device
int NumberOfUsers; // Support multiple opens
BOOL bTOCValid; // TOC info is valid
UCHAR FirstTrack;
UCHAR LastTrack;
MSF msfEnd; // Address of the end of the disk
MSF leadout; // Address of the real of the disk
UCHAR fPrevStatus; // fixes Audio Status bug !
MSF fPrevSeekTime; // Store away previous seek time
UCHAR VolChannels[4]; // Store away volume channels
TRACK_INFO Track[MAXIMUM_NUMBER_TRACKS];
} CDINFO, *LPCDINFO;
typedef LPCDINFO HCD; // handle to a CD device driver
// (in cdio.c)
//
// Global data
//
int NumDrives; // The number of drives
CDINFO CdInfo[MCIRBOOK_MAX_DRIVES]; // Data on each drive
//
// Device functions
//
int CdGetNumDrives(void);
BOOL CdOpen(int Drive);
BOOL CdClose(HCD hCD);
BOOL CdReload(LPCDINFO lpInfo);
BOOL CdReady(HCD hCD);
BOOL CdPlay(HCD hCD, MSF msfStart, MSF msfEnd);
BOOL CdSeek(HCD hCD, MSF msf, BOOL fForceAudio);
MSF CdTrackStart(HCD hCD, UCHAR Track);
MSF CdTrackLength(HCD hCD, UCHAR Track);
int CdTrackType(HCD hCD, UCHAR Track);
BOOL CdPosition(HCD hCD, MSF *tracktime, MSF *disktime);
MSF CdDiskEnd(HCD hCD);
MSF CdDiskLength(HCD hCD);
DWORD CdStatus(HCD hCD);
BOOL CdEject(HCD hCD);
BOOL CdPause(HCD hCD);
BOOL CdResume(HCD hCD);
BOOL CdStop(HCD hCD);
BOOL CdSetVolumeAll(HCD hCD, UCHAR Volume);
BOOL CdSetVolume(HCD hCD, int Channel, UCHAR Volume);
BOOL CdCloseTray(HCD hCD);
int CdNumTracks(HCD hCD);
BOOL CdTrayClosed(HCD hCD);
DWORD CdDiskID(HCD hCD);
BOOL CdDiskUPC(HCD hCD, LPTSTR upc);
BOOL CdGetDrive(LPCTSTR lpstrDeviceName, DID * pdid);
BOOL CdStatusTrackPos(HCD hCD, DWORD * pStatus,
MSF * pTrackTime, MSF * pDiscTime);
void
EnterCrit(
HANDLE hMutex
);
void
LeaveCrit(
HANDLE hMutex
);
/***************************************************************************
DEBUGGING SUPPORT
***************************************************************************/
#if DBG
#define STATICFN
#define STATICDT
extern void mcicdaDbgOut(LPSTR lpszFormat, ...);
extern void mcicdaSetDebugLevel(int level);
int DebugLevel;
#define dprintf( _x_ ) mcicdaDbgOut _x_
#define dprintf1( _x_ ) if (DebugLevel >= 1) mcicdaDbgOut _x_
#define dprintf2( _x_ ) if (DebugLevel >= 2) mcicdaDbgOut _x_
#define dprintf3( _x_ ) if (DebugLevel >= 3) mcicdaDbgOut _x_
#define dprintf4( _x_ ) if (DebugLevel >= 4) mcicdaDbgOut _x_
#else
#define STATICFN
#define STATICDT static
#define dprintf(x)
#define dprintf1(x)
#define dprintf2(x)
#define dprintf3(x)
#define dprintf4(x)
#endif