Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygensbdsp.h
Go to the documentation of this file.
00001 /* 00002 ReactOS Sound System 00003 Sound Blaster DSP support 00004 00005 Author: 00006 Andrew Greenwood (silverblade@reactos.org) 00007 00008 History: 00009 26 May 2008 - Created 00010 00011 Notes: 00012 Where timeouts are concerned, a value of 0 is interpreted as "forever". 00013 */ 00014 00015 #ifndef ROS_SOUND_SBDSP_H 00016 #define ROS_SOUND_SBDSP_H 00017 00018 /* 00019 Product versions 00020 DSP 1.0, 1.5, 2.0, 2.01 correspond with respective Sound Blaster versions. 00021 DSP 3.xx is Sound Blaster Pro 00022 DSP 4.xx is Sound Blaster 16 00023 */ 00024 00025 #define SOUND_BLASTER_1_0 L"Sound Blaster 1.0" 00026 #define SOUND_BLASTER_1_5 L"Sound Blaster 1.5" 00027 #define SOUND_BLASTER_2_0 L"Sound Blaster 2.0" 00028 #define SOUND_BLASTER_PRO L"Sound Blaster Pro" 00029 #define SOUND_BLASTER_16 L"Sound Blaster 16" 00030 00031 00032 /* 00033 Sound Blaster ports I/O 00034 */ 00035 #define READ_SB_FM1_STATUS(bp) READ_PORT_UCHAR((PUCHAR) bp) 00036 #define WRITE_SB_FM1_REGISTER(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp, x) 00037 #define WRITE_SB_FM1_DATA(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x01, x) 00038 00039 #define READ_SB_AFM_STATUS(bp) READ_PORT_UCHAR((PUCHAR) bp+0x02) 00040 #define WRITE_SB_AFM_REGISTER(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x02, x) 00041 #define WRITE_SB_AFM_DATA(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x03, x) 00042 00043 #define WRITE_SB_MIXER_REGISTER(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x04, x) 00044 #define READ_SB_MIXER_DATA(bp) READ_PORT_UCHAR((PUCHAR) bp+0x05) 00045 #define WRITE_SB_MIXER_DATA(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x05, x) 00046 00047 #define WRITE_SB_DSP_RESET(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x06, x) 00048 00049 #define READ_SB_FM2_STATUS(bp) READ_PORT_UCHAR((PUCHAR) bp+0x08) 00050 #define WRITE_SB_FM2_REGISTER(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x08, x) 00051 #define WRITE_SB_FM2_DATA(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x09, x) 00052 00053 #define READ_SB_DSP_DATA(bp) READ_PORT_UCHAR((PUCHAR) bp+0x0A) 00054 #define WRITE_SB_DSP_DATA(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x0C, x) 00055 #define WRITE_SB_DSP_COMMAND(bp, x) WRITE_PORT_UCHAR((PUCHAR) bp+0x0C, x) 00056 00057 /* Clear to send */ 00058 #define SB_DSP_CLEAR_TO_SEND(bp) \ 00059 ( ! (READ_PORT_UCHAR((PUCHAR) bp+0x0C) & 0x80 ) ) 00060 00061 /* Data available for reading */ 00062 #define SB_DSP_DATA_AVAILABLE(bp) \ 00063 ( READ_PORT_UCHAR((PUCHAR) bp+0x0E) & 0x80 ) 00064 00065 00066 #define SB_DSP_READY 0xAA 00067 00068 /* 00069 Sound Blaster DSP commands 00070 (partial list) 00071 */ 00072 #define SB_DSP_OUTPUT_RATE 0x41 00073 #define SB_DSP_INPUT_RATE 0x42 00074 #define SB_DSP_BLOCK_SIZE 0x48 00075 #define SB_DSP_SPEAKER_ON 0xD1 00076 #define SB_DSP_SPEAKER_OFF 0xD3 00077 #define SB_DSP_SPEAKER_STATUS 0xD8 00078 #define SB_DSP_VERSION 0xE1 00079 00080 /* 00081 Mixer lines (legacy) 00082 */ 00083 #define SB_MIX_VOC_LEVEL 0x04 00084 #define SB_MIX_LEGACY_MIC_LEVEL 0x0A 00085 #define SB_MIX_MASTER_LEVEL 0x22 00086 #define SB_MIX_FM_LEVEL 0x26 00087 #define SB_MIX_CD_LEVEL 0x28 00088 #define SB_MIX_LINE_LEVEL 0x2E 00089 00090 /* 00091 Mixer lines 00092 */ 00093 #define SB_MIX_RESET 0x00 00094 #define SB_MIX_MASTER_LEFT_LEVEL 0x30 00095 #define SB_MIX_MASTER_RIGHT_LEVEL 0x31 00096 #define SB_MIX_VOC_LEFT_LEVEL 0x32 00097 #define SB_MIX_VOC_RIGHT_LEVEL 0x33 00098 #define SB_MIX_MIDI_LEFT_LEVEL 0x34 00099 #define SB_MIX_MIDI_RIGHT_LEVEL 0x35 00100 #define SB_MIX_CD_LEFT_LEVEL 0x36 00101 #define SB_MIX_CD_RIGHT_LEVEL 0x37 00102 #define SB_MIX_LINE_LEFT_LEVEL 0x38 00103 #define SB_MIX_LINE_RIGHT_LEVEL 0x39 00104 #define SB_MIX_MIC_LEVEL 0x3A 00105 #define SB_MIX_PC_SPEAKER_LEVEL 0x3B 00106 #define SB_MIX_OUTPUT_SWITCHES 0x3C 00107 #define SB_MIX_INPUT_LEFT_SWITCHES 0x3D 00108 #define SB_MIX_INPUT_RIGHT_SWITCHES 0x3E 00109 #define SB_MIX_INPUT_LEFT_GAIN 0x3F 00110 #define SB_MIX_INPUT_RIGHT_GAIN 0x40 00111 #define SB_MIX_OUTPUT_LEFT_GAIN 0x41 00112 #define SB_MIX_OUTPUT_RIGHT_GAIN 0x42 00113 #define SB_MIX_AGC 0x43 00114 #define SB_MIX_TREBLE_LEFT_LEVEL 0x44 00115 #define SB_MIX_TREBLE_RIGHT_LEVEL 0x45 00116 #define SB_MIX_BASS_LEFT_LEVEL 0x46 00117 #define SB_MIX_BASS_RIGHT_LEVEL 0x47 00118 00119 /* 00120 Mixer switches 00121 (are these correct?) 00122 */ 00123 #define SB_MIX_MIDI_LEFT_SWITCH 0x01 00124 #define SB_MIX_MIDI_RIGHT_SWITCH 0x02 00125 #define SB_MIX_LINE_LEFT_SWITCH 0x04 00126 #define SB_MIX_LINE_RIGHT_SWITCH 0x08 00127 #define SB_MIX_CD_LEFT_SWITCH 0x10 00128 #define SB_MIX_CD_RIGHT_SWITCH 0x20 00129 #define SB_MIX_MIC_SWITCH 0x40 00130 00131 00132 /* 00133 Reset the Sound Blaster DSP. 00134 */ 00135 NTSTATUS 00136 SbDspReset( 00137 IN PUCHAR BasePort, 00138 IN ULONG Timeout); 00139 00140 /* 00141 Wait for the Sound Blaster DSP to be ready for data to be written to it. 00142 */ 00143 NTSTATUS 00144 SbDspWaitToWrite( 00145 IN PUCHAR BasePort, 00146 IN ULONG Timeout); 00147 00148 /* 00149 Wait for data to be ready for reading from the Sound Blaster DSP. 00150 */ 00151 NTSTATUS 00152 SbDspWaitToRead( 00153 IN PUCHAR BasePort, 00154 IN ULONG Timeout); 00155 00156 /* 00157 Wait for the Sound Blaster DSP to be ready for data to be written to it, 00158 then (providing it becomes ready within the timeout period), write the 00159 data to it. 00160 */ 00161 NTSTATUS 00162 SbDspWrite( 00163 IN PUCHAR BasePort, 00164 IN UCHAR DataByte, 00165 IN ULONG Timeout); 00166 00167 /* 00168 Wait for the Sound Blaster DSP to be ready for data to be read from it, 00169 then read the data from it into the pointer supplied as DataByte. If 00170 the timeout is exceeded, DataByte will not be modified. 00171 */ 00172 NTSTATUS 00173 SbDspRead( 00174 IN PUCHAR BasePort, 00175 OUT PUCHAR DataByte, 00176 IN ULONG Timeout); 00177 00178 /* 00179 This can only be called immediately after a reset has been issued. The 00180 major version and minor version are returned in MajorVersion and 00181 MinorVersion, respectively. 00182 00183 The timeout applies to each DSP read/write performed. Note that the 00184 data pointed to by MajorVersion may still fail if the retrieval of 00185 MinorVersion times out. 00186 */ 00187 NTSTATUS 00188 SbDspGetVersion( 00189 IN PUCHAR BasePort, 00190 OUT PUCHAR MajorVersion, 00191 OUT PUCHAR MinorVersion, 00192 IN ULONG Timeout); 00193 00194 /* 00195 Turn the speaker on. 00196 */ 00197 NTSTATUS 00198 SbDspEnableSpeaker( 00199 IN PUCHAR BasePort, 00200 IN ULONG Timeout); 00201 00202 /* 00203 Turn the speaker off. 00204 */ 00205 NTSTATUS 00206 SbDspDisableSpeaker( 00207 IN PUCHAR BasePort, 00208 IN ULONG Timeout); 00209 00210 /* 00211 Obtains the speaker status, storing the result in IsEnabled. This will be 00212 TRUE if the speaker is enabled, otherwise FALSE. 00213 */ 00214 NTSTATUS 00215 SbDspIsSpeakerEnabled( 00216 IN PUCHAR BasePort, 00217 OUT PBOOLEAN IsEnabled, 00218 IN ULONG Timeout); 00219 00220 /* 00221 Validate the input sample rate. The major and minor versions are required 00222 to determine the capabilities of the card. 00223 */ 00224 BOOLEAN 00225 SbDspIsValidInputRate( 00226 IN UCHAR MajorVersion, 00227 IN UCHAR MinorVersion, 00228 IN USHORT Rate, 00229 IN BOOLEAN Stereo); 00230 00231 /* 00232 Validate the output sample rate. The major and minor versions are required 00233 to determine the capabilities of the card. 00234 */ 00235 BOOLEAN 00236 SbDspIsValidOutputRate( 00237 IN UCHAR MajorVersion, 00238 IN UCHAR MinorVersion, 00239 IN USHORT Rate, 00240 IN BOOLEAN Stereo); 00241 00242 /* 00243 Set the output/playback rate 00244 * DSP 4.xx only 00245 */ 00246 NTSTATUS 00247 SbDsp4SetOutputRate( 00248 IN PUCHAR BasePort, 00249 IN USHORT Rate, 00250 IN ULONG Timeout); 00251 00252 /* 00253 Set the input/record rate 00254 * DSP 4.xx only 00255 */ 00256 NTSTATUS 00257 SbDsp4SetInputRate( 00258 IN PUCHAR BasePort, 00259 IN USHORT Rate, 00260 IN ULONG Timeout); 00261 00262 00263 /* 00264 Reset the mixer 00265 */ 00266 VOID 00267 SbMixerReset(IN PUCHAR BasePort); 00268 00269 /* 00270 Pack mixer level data 00271 */ 00272 NTSTATUS 00273 SbMixerPackLevelData( 00274 IN UCHAR Line, 00275 IN UCHAR Level, 00276 OUT PUCHAR PackedLevel); 00277 00278 /* 00279 Unpack mixer level data 00280 */ 00281 NTSTATUS 00282 SbMixerUnpackLevelData( 00283 IN UCHAR Line, 00284 IN UCHAR PackedLevel, 00285 OUT PUCHAR Level); 00286 00287 /* 00288 Set a mixer line level 00289 */ 00290 NTSTATUS 00291 SbMixerSetLevel( 00292 IN PUCHAR BasePort, 00293 IN UCHAR Line, 00294 IN UCHAR Level); 00295 00296 /* 00297 Get a mixer line level 00298 */ 00299 NTSTATUS 00300 SbMixerGetLevel( 00301 IN PUCHAR BasePort, 00302 IN UCHAR Line, 00303 OUT PUCHAR Level); 00304 00305 /* 00306 Enable automatic gain control 00307 */ 00308 VOID 00309 SbMixerEnableAGC(IN PUCHAR BasePort); 00310 00311 /* 00312 Disable automatic gain control 00313 */ 00314 VOID 00315 SbMixerDisableAGC(IN PUCHAR BasePort); 00316 00317 /* 00318 Retrieve the current state of the automatic gain control 00319 */ 00320 BOOLEAN 00321 SbMixerIsAGCEnabled(IN PUCHAR BasePort); 00322 00323 00324 #endif Generated on Sat May 26 2012 04:32:05 for ReactOS by
1.7.6.1
|