|
|
1.1 root 1: /*
2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /* IOCDAudioNub.h created by rick on Mon 22-Mar-1999
23: *
24: * This class is the protocol for CD Audio control functionality, independent of
25: * the physical connection protocol (e.g. SCSI, ATA, USB).
26: *
27: * Any methods that deal with audio play mode and/or volume are here. By having
28: * clients call through this nub, we can implement a local communication with
29: * the audio subsystem as well as the CD device.
30: *
31: * A subclass implements relay methods that translate our requests into
32: * calls to a protocol- and device-specific provider.
33: */
34:
35: #ifndef _IOCDAUDIONUB_H
36: #define _IOCDAUDIONUB_H
37:
38: #include <IOKit/IOService.h>
39: #include <IOKit/storage/IOCDTypes.h>
40:
41: class IOCDDrive;
42:
43: class IOCDAudioNub : public IOService {
44:
45: OSDeclareDefaultStructors(IOCDAudioNub)
46:
47: protected:
48:
49: virtual IOReturn newUserClient( task_t owningTask,
50: void * security_id,
51: UInt32 type,
52: IOUserClient ** handler );
53:
54: public:
55:
56: /* Overrides from IOService: */
57:
58: virtual bool attach(IOService *provider);
59:
60: /* end of IOService overrides */
61:
62: /* Position the head at the specified address and begin audio playback. */
63:
64: virtual IOReturn audioPlay(positioningType addressType,cdAddress address,audioPlayMode mode);
65:
66: /* Pause or release the drive. */
67:
68: virtual IOReturn audioPause(bool pause);
69:
70: /* Perform a fast-forward (reverse) operation starting at the specified address. */
71:
72: virtual IOReturn audioScan(positioningType addressType,cdAddress address,
73: bool reverse);
74:
75: /* Get the current audio play status and the Q-subcode for the current track. */
76:
77: virtual IOReturn getAudioStatus(struct audioStatus *status);
78:
79: /* Position the head at the specified address and optionally begin audio play. */
80:
81: virtual IOReturn audioTrackSearch(positioningType addressType,cdAddress address,
82: bool startPlay,audioPlayMode mode);
83:
84: /* Read audio data only.
85: * Equivalent to MacOS ReadAudio type 0.
86: */
87:
88: virtual IOReturn readAudioData(positioningType addressType,cdAddress address,
89: UInt8 blockCount,UInt8 *buffer);
90:
91: /* Read audio subcodes (P-W) only.
92: * Equivalent to MacOS ReadAudio type 3.
93: */
94:
95: virtual IOReturn readAudioSubcodes(positioningType addressType,cdAddress address,
96: UInt8 blockCount,UInt8 *buffer);
97:
98: /* Read audio data with Q-subcode.
99: * Equivalent to MacOS ReadAudio type 1.
100: */
101:
102: virtual IOReturn readAudioWithQSubcode(positioningType addressType,cdAddress address,
103: UInt8 blockCount,UInt8 *buffer);
104:
105: /* Read audio data with all subcodes (P-W).
106: * Equivalent to MacOS ReadAudio type 2.
107: */
108:
109: virtual IOReturn readAudioWithAllSubcodes(positioningType addressType,cdAddress address,
110: UInt8 blockCount,UInt8 *buffer);
111:
112: /* Read the raw Table of Contents.
113: * Equivalent to MacOS ReadToc type 4.
114: */
115:
116: virtual IOReturn readEntireTOC(struct macEntireToc *buffer);
117:
118: /* Read the header information for the specified logical block. */
119:
120: virtual IOReturn readHeader(UInt32 blockAddress,struct headerInfo *buffer);
121:
122: /* Read the International Standard Recording Code (ISRC) for a track. THe
123: * "found" boolean is set true if an ISRC was found, meaning the returned
124: * bytes are valid.
125: */
126:
127: virtual IOReturn readISRC(UInt32 track,UInt8 *buffer,bool *found);
128:
129: /* Read the mm:ss:ff address of the lead-out for the last session.
130: * Equivalent to MacOS ReadToc type 2.
131: */
132:
133: virtual IOReturn readLeadOutAddress(cdAddress *buffer);
134:
135: /* Read the Media Catalog Number (MCN). The "found" boolean is set true
136: * if an MCN was found, meaning the returned bytes are valid.
137: */
138:
139: virtual IOReturn readMCN(UInt8 *buffer,bool *found);
140:
141: /* Read all Q-subcode entries in the lead-in areas (including TOC info),
142: * starting from the specified session. We stop at the last session or the
143: * buffer limit, whichever occurs fist.
144: * Equivalent to MacOS ReadToc type 6.
145: */
146:
147: virtual IOReturn readQSubcodes(struct qSubcodeTocInfo *buffer,UInt32 bufSize);
148:
149: /* Read session information: number of sessions & location of last session.
150: * Equivalent to MacOS ReadToc type 5.
151: */
152:
153: virtual IOReturn readSessionInfo(struct sessionInfo *info);
154:
155: /* Read the subcode buffer from the drive while it's playing audio. If purge
156: * is true, we instruct the drive to purge the buffer first.
157: * Equivalent to MacOS ReadAllSubcodes.
158: */
159:
160: virtual IOReturn readSubcodeBuffer(UInt8 *buffer,bool purge,UInt32 entryCount);
161:
162: /* Read the Q subcode information for the current track being accessed or played. */
163:
164: virtual IOReturn readTheQSubcode(struct qSubcode *buffer);
165:
166: /* Read the track type and address, starting at the specified track. We
167: * stop at the last track or the buffer limit, whichever occurs first.
168: * Equivalent to MacOS ReadToc type 3.
169: */
170:
171: virtual IOReturn readTrackInfo(UInt32 startingTrack,
172: struct trackTypeInfo *buf,UInt32 bufSize);
173:
174: /* Read the track numbers of the first and last tracks.
175: * Equivalent to MacOS ReadToc type 1.
176: */
177:
178: virtual IOReturn readTrackLimits(UInt32 *first,UInt32 *last);
179:
180: /* Set the audio-play stop address. An address of blockAddress==zero will cause
181: * any current audio play operation to be immediately stopped. The address can
182: * also be set via an audioPlay operation that specifies a stop address.
183: */
184:
185: virtual IOReturn setAudioStopAddress(positioningType addressType,cdAddress address);
186:
187: /* Get the current volume settings. */
188:
189: virtual IOReturn readAudioVolume(UInt8 *leftVolume,UInt8 *rightVolume);
190:
191: /* Set the audio play volume for the drive's audio channels. */
192:
193: virtual IOReturn setVolume(UInt8 leftVolume,UInt8 rightVolume);
194:
195: protected:
196:
197: IOCDDrive * _provider;
198: };
199: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.