mirror of
https://github.com/reactos/reactos.git
synced 2025-08-07 05:52:57 +00:00
Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.
This commit is contained in:
parent
b94e2d8ca0
commit
c2c66aff7d
24198 changed files with 0 additions and 37285 deletions
17
sdk/lib/drivers/sound/soundblaster/CMakeLists.txt
Normal file
17
sdk/lib/drivers/sound/soundblaster/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
|||
|
||||
add_definitions(
|
||||
-D__NTDRIVER__
|
||||
-DKERNEL)
|
||||
|
||||
include_directories(BEFORE ${REACTOS_SOURCE_DIR}/sdk/include/reactos/libs/sound)
|
||||
|
||||
list(APPEND SOURCE
|
||||
dsp_io.c
|
||||
version.c
|
||||
speaker.c
|
||||
rate.c
|
||||
mixer.c)
|
||||
|
||||
add_library(soundblaster ${SOURCE})
|
||||
add_pch(soundblaster precomp.h)
|
||||
add_dependencies(soundblaster bugcodes xdk)
|
143
sdk/lib/drivers/sound/soundblaster/dsp_io.c
Normal file
143
sdk/lib/drivers/sound/soundblaster/dsp_io.c
Normal file
|
@ -0,0 +1,143 @@
|
|||
/*
|
||||
ReactOS Sound System
|
||||
Sound Blaster DSP support
|
||||
General I/O
|
||||
|
||||
Author:
|
||||
Andrew Greenwood (silverblade@reactos.org)
|
||||
|
||||
History:
|
||||
2 July 2008 - Created (split from sbdsp.c)
|
||||
|
||||
Notes:
|
||||
Functions documented in sbdsp.h
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
NTSTATUS
|
||||
SbDspReset(
|
||||
IN PUCHAR BasePort,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
ULONG Expiry;
|
||||
BOOLEAN DataAvailable = FALSE;
|
||||
|
||||
/* Should be called from DriverEntry with this IRQL */
|
||||
ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL);
|
||||
|
||||
WRITE_SB_DSP_RESET(BasePort, 0x01);
|
||||
SleepMs(50); /* Should be enough */
|
||||
WRITE_SB_DSP_RESET(BasePort, 0x00);
|
||||
|
||||
Expiry = QuerySystemTimeMs() + Timeout;
|
||||
|
||||
/* Wait for data to be available */
|
||||
while ( (QuerySystemTimeMs() < Expiry) || ( Timeout == 0) )
|
||||
{
|
||||
if ( SB_DSP_DATA_AVAILABLE(BasePort) )
|
||||
{
|
||||
DataAvailable = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! DataAvailable )
|
||||
{
|
||||
return STATUS_TIMEOUT;
|
||||
}
|
||||
|
||||
/* Data is available - wait for the "DSP ready" code */
|
||||
while ( (QuerySystemTimeMs() < Expiry) || ( Timeout == 0) )
|
||||
{
|
||||
if ( READ_SB_DSP_DATA(BasePort) == SB_DSP_READY )
|
||||
{
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return STATUS_TIMEOUT;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbDspWaitToWrite(
|
||||
IN PUCHAR BasePort,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
ULONG Expiry = QuerySystemTimeMs() + Timeout;
|
||||
|
||||
while ( (QuerySystemTimeMs() < Expiry) || (Timeout == 0) )
|
||||
{
|
||||
if ( SB_DSP_CLEAR_TO_SEND(BasePort) )
|
||||
{
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return STATUS_TIMEOUT;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbDspWaitToRead(
|
||||
IN PUCHAR BasePort,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
ULONG Expiry = QuerySystemTimeMs() + Timeout;
|
||||
|
||||
while ( (QuerySystemTimeMs() < Expiry) || (Timeout == 0) )
|
||||
{
|
||||
if ( SB_DSP_DATA_AVAILABLE(BasePort) )
|
||||
{
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
return STATUS_TIMEOUT;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbDspWrite(
|
||||
IN PUCHAR BasePort,
|
||||
IN UCHAR DataByte,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
Status = SbDspWaitToWrite(BasePort, Timeout);
|
||||
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
DbgPrint("SBDSP - Writing %02x\n", DataByte);
|
||||
WRITE_SB_DSP_DATA(BasePort, DataByte);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbDspRead(
|
||||
IN PUCHAR BasePort,
|
||||
OUT PUCHAR DataByte,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
if ( ! DataByte )
|
||||
{
|
||||
return STATUS_INVALID_PARAMETER_2;
|
||||
}
|
||||
|
||||
Status = SbDspWaitToRead(BasePort, Timeout);
|
||||
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
{
|
||||
return Status;
|
||||
}
|
||||
|
||||
*DataByte = READ_SB_DSP_DATA(BasePort);
|
||||
DbgPrint("SBDSP - Read %02x\n", *DataByte);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
243
sdk/lib/drivers/sound/soundblaster/mixer.c
Normal file
243
sdk/lib/drivers/sound/soundblaster/mixer.c
Normal file
|
@ -0,0 +1,243 @@
|
|||
/*
|
||||
ReactOS Sound System
|
||||
Sound Blaster DSP support
|
||||
Mixer routines
|
||||
|
||||
Author:
|
||||
Andrew Greenwood (silverblade@reactos.org)
|
||||
|
||||
History:
|
||||
2 July 2008 - Created
|
||||
|
||||
Notes:
|
||||
Functions documented in sbdsp.h
|
||||
|
||||
Currently, input/output switches and PC speaker volume
|
||||
level are not supported.
|
||||
|
||||
The I/O switches are used for muting/unmuting mic, etc.
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
VOID
|
||||
SbMixerReset(IN PUCHAR BasePort)
|
||||
{
|
||||
WRITE_SB_MIXER_REGISTER(BasePort, SB_MIX_RESET);
|
||||
/* Are we meant to send anything else? */
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbMixerPackLevelData(
|
||||
IN UCHAR Line,
|
||||
IN UCHAR Level,
|
||||
OUT PUCHAR PackedLevel)
|
||||
{
|
||||
if ( ! PackedLevel )
|
||||
return STATUS_INVALID_PARAMETER_3;
|
||||
|
||||
switch ( Line )
|
||||
{
|
||||
case SB_MIX_MASTER_LEFT_LEVEL :
|
||||
case SB_MIX_MASTER_RIGHT_LEVEL :
|
||||
case SB_MIX_VOC_LEFT_LEVEL :
|
||||
case SB_MIX_VOC_RIGHT_LEVEL :
|
||||
case SB_MIX_MIDI_LEFT_LEVEL :
|
||||
case SB_MIX_MIDI_RIGHT_LEVEL :
|
||||
case SB_MIX_CD_LEFT_LEVEL :
|
||||
case SB_MIX_CD_RIGHT_LEVEL :
|
||||
case SB_MIX_LINE_LEFT_LEVEL :
|
||||
case SB_MIX_LINE_RIGHT_LEVEL :
|
||||
case SB_MIX_MIC_LEVEL :
|
||||
case SB_MIX_LEGACY_MIC_LEVEL : /* is this correct? */
|
||||
{
|
||||
if ( Level >= 0x20 )
|
||||
return STATUS_INVALID_PARAMETER_2;
|
||||
|
||||
*PackedLevel = Level << 3;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
case SB_MIX_INPUT_LEFT_GAIN :
|
||||
case SB_MIX_INPUT_RIGHT_GAIN :
|
||||
case SB_MIX_OUTPUT_LEFT_GAIN :
|
||||
case SB_MIX_OUTPUT_RIGHT_GAIN :
|
||||
{
|
||||
if ( Level >= 0x04 )
|
||||
return STATUS_INVALID_PARAMETER_2;
|
||||
|
||||
*PackedLevel = Level << 6;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
case SB_MIX_VOC_LEVEL : /* legacy */
|
||||
case SB_MIX_MASTER_LEVEL :
|
||||
case SB_MIX_FM_LEVEL :
|
||||
case SB_MIX_CD_LEVEL :
|
||||
case SB_MIX_LINE_LEVEL :
|
||||
case SB_MIX_TREBLE_LEFT_LEVEL : /* bass/treble */
|
||||
case SB_MIX_TREBLE_RIGHT_LEVEL :
|
||||
case SB_MIX_BASS_LEFT_LEVEL :
|
||||
case SB_MIX_BASS_RIGHT_LEVEL :
|
||||
{
|
||||
if ( Level >= 0x10 )
|
||||
return STATUS_INVALID_PARAMETER_2;
|
||||
|
||||
*PackedLevel = Level << 4;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
default :
|
||||
return STATUS_INVALID_PARAMETER_1;
|
||||
};
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbMixerUnpackLevelData(
|
||||
IN UCHAR Line,
|
||||
IN UCHAR PackedLevel,
|
||||
OUT PUCHAR Level)
|
||||
{
|
||||
if ( ! Level )
|
||||
return STATUS_INVALID_PARAMETER_3;
|
||||
|
||||
switch ( Line )
|
||||
{
|
||||
case SB_MIX_MASTER_LEFT_LEVEL :
|
||||
case SB_MIX_MASTER_RIGHT_LEVEL :
|
||||
case SB_MIX_VOC_LEFT_LEVEL :
|
||||
case SB_MIX_VOC_RIGHT_LEVEL :
|
||||
case SB_MIX_MIDI_LEFT_LEVEL :
|
||||
case SB_MIX_MIDI_RIGHT_LEVEL :
|
||||
case SB_MIX_CD_LEFT_LEVEL :
|
||||
case SB_MIX_CD_RIGHT_LEVEL :
|
||||
case SB_MIX_LINE_LEFT_LEVEL :
|
||||
case SB_MIX_LINE_RIGHT_LEVEL :
|
||||
case SB_MIX_MIC_LEVEL :
|
||||
{
|
||||
*Level = PackedLevel >> 3;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
case SB_MIX_INPUT_LEFT_GAIN :
|
||||
case SB_MIX_INPUT_RIGHT_GAIN :
|
||||
case SB_MIX_OUTPUT_LEFT_GAIN :
|
||||
case SB_MIX_OUTPUT_RIGHT_GAIN :
|
||||
{
|
||||
*Level = PackedLevel >> 6;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
case SB_MIX_VOC_LEVEL : /* legacy */
|
||||
case SB_MIX_MASTER_LEVEL :
|
||||
case SB_MIX_FM_LEVEL :
|
||||
case SB_MIX_CD_LEVEL :
|
||||
case SB_MIX_LINE_LEVEL :
|
||||
case SB_MIX_TREBLE_LEFT_LEVEL : /* bass/treble */
|
||||
case SB_MIX_TREBLE_RIGHT_LEVEL :
|
||||
case SB_MIX_BASS_LEFT_LEVEL :
|
||||
case SB_MIX_BASS_RIGHT_LEVEL :
|
||||
{
|
||||
*Level = PackedLevel >> 4;
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
default :
|
||||
return STATUS_INVALID_PARAMETER_1;
|
||||
};
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbMixerSetLevel(
|
||||
IN PUCHAR BasePort,
|
||||
IN UCHAR Line,
|
||||
IN UCHAR Level)
|
||||
{
|
||||
UCHAR PackedLevel = 0;
|
||||
NTSTATUS Status;
|
||||
|
||||
Status = SbMixerPackLevelData(Line, Level, &PackedLevel);
|
||||
|
||||
switch ( Status )
|
||||
{
|
||||
case STATUS_SUCCESS :
|
||||
break;
|
||||
|
||||
case STATUS_INVALID_PARAMETER_1 :
|
||||
return STATUS_INVALID_PARAMETER_2;
|
||||
|
||||
case STATUS_INVALID_PARAMETER_2 :
|
||||
return STATUS_INVALID_PARAMETER_3;
|
||||
|
||||
default :
|
||||
return Status;
|
||||
};
|
||||
|
||||
DbgPrint("SbMixerSetLevel: Line 0x%x, raw level 0x%x, packed 0x%x\n", Line, Level, PackedLevel);
|
||||
|
||||
WRITE_SB_MIXER_REGISTER(BasePort, Line);
|
||||
WRITE_SB_MIXER_DATA(BasePort, PackedLevel);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbMixerGetLevel(
|
||||
IN PUCHAR BasePort,
|
||||
IN UCHAR Line,
|
||||
OUT PUCHAR Level)
|
||||
{
|
||||
UCHAR PackedLevel = 0;
|
||||
NTSTATUS Status;
|
||||
|
||||
if ( ! Level )
|
||||
return STATUS_INVALID_PARAMETER_3;
|
||||
|
||||
WRITE_SB_MIXER_REGISTER(BasePort, Line);
|
||||
PackedLevel = READ_SB_MIXER_DATA(BasePort);
|
||||
|
||||
Status = SbMixerUnpackLevelData(Line, PackedLevel, Level);
|
||||
|
||||
switch ( Status )
|
||||
{
|
||||
case STATUS_SUCCESS :
|
||||
break;
|
||||
|
||||
case STATUS_INVALID_PARAMETER_1 :
|
||||
return STATUS_INVALID_PARAMETER_2;
|
||||
|
||||
case STATUS_INVALID_PARAMETER_2 :
|
||||
return STATUS_INVALID_PARAMETER_3;
|
||||
|
||||
default :
|
||||
return Status;
|
||||
};
|
||||
|
||||
DbgPrint("SbMixerGetLevel: Line 0x%x, raw level 0x%x, packed 0x%x\n", Line, Level, PackedLevel);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
VOID
|
||||
SbMixerEnableAGC(IN PUCHAR BasePort)
|
||||
{
|
||||
/* Untested... */
|
||||
WRITE_SB_MIXER_REGISTER(BasePort, SB_MIX_AGC);
|
||||
WRITE_SB_MIXER_DATA(BasePort, 1);
|
||||
}
|
||||
|
||||
VOID
|
||||
SbMixerDisableAGC(IN PUCHAR BasePort)
|
||||
{
|
||||
/* Untested... */
|
||||
WRITE_SB_MIXER_REGISTER(BasePort, SB_MIX_AGC);
|
||||
WRITE_SB_MIXER_DATA(BasePort, 0);
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
SbMixerIsAGCEnabled(IN PUCHAR BasePort)
|
||||
{
|
||||
/* Untested... */
|
||||
WRITE_SB_MIXER_REGISTER(BasePort, SB_MIX_AGC);
|
||||
return (READ_SB_MIXER_DATA(BasePort) != 0);
|
||||
}
|
3
sdk/lib/drivers/sound/soundblaster/precomp.h
Normal file
3
sdk/lib/drivers/sound/soundblaster/precomp.h
Normal file
|
@ -0,0 +1,3 @@
|
|||
#include <wdm.h>
|
||||
#include <time.h>
|
||||
#include <sbdsp.h>
|
151
sdk/lib/drivers/sound/soundblaster/rate.c
Normal file
151
sdk/lib/drivers/sound/soundblaster/rate.c
Normal file
|
@ -0,0 +1,151 @@
|
|||
/*
|
||||
ReactOS Sound System
|
||||
Sound Blaster DSP support
|
||||
Sample rate routines
|
||||
|
||||
Author:
|
||||
Andrew Greenwood (silverblade@reactos.org)
|
||||
|
||||
History:
|
||||
2 July 2008 - Created (split from sbdsp.c)
|
||||
|
||||
Notes:
|
||||
Functions documented in sbdsp.h
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
BOOLEAN
|
||||
SbDspIsValidInputRate(
|
||||
IN UCHAR MajorVersion,
|
||||
IN UCHAR MinorVersion,
|
||||
IN USHORT Rate,
|
||||
IN BOOLEAN Stereo)
|
||||
{
|
||||
if ( MajorVersion == 1 )
|
||||
{
|
||||
if ( Stereo )
|
||||
return FALSE;
|
||||
|
||||
return ( ( Rate >= 4000 ) && ( Rate <= 13000 ) );
|
||||
}
|
||||
else if ( MajorVersion == 2 )
|
||||
{
|
||||
if ( Stereo )
|
||||
return FALSE;
|
||||
|
||||
if ( MinorVersion == 0 )
|
||||
return ( ( Rate >= 4000 ) && ( Rate <= 15000 ) );
|
||||
else
|
||||
return ( ( Rate >= 4000 ) && ( Rate <= 44100 ) );
|
||||
}
|
||||
else if ( MajorVersion == 3 )
|
||||
{
|
||||
if ( Stereo )
|
||||
return FALSE;
|
||||
|
||||
return ( ( Rate >= 4000 ) && ( Rate <= 13000 ) );
|
||||
}
|
||||
else /* 4.00 and above */
|
||||
{
|
||||
return ( ( Rate >= 5000 ) && ( Rate <= 44100 ) );
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
SbDspIsValidOutputRate(
|
||||
IN UCHAR MajorVersion,
|
||||
IN UCHAR MinorVersion,
|
||||
IN USHORT Rate,
|
||||
IN BOOLEAN Stereo)
|
||||
{
|
||||
if ( MajorVersion == 1 )
|
||||
{
|
||||
if ( Stereo )
|
||||
return FALSE;
|
||||
|
||||
return ( ( Rate >= 4000 ) && ( Rate <= 23000 ) );
|
||||
}
|
||||
else if ( MajorVersion == 2 )
|
||||
{
|
||||
if ( Stereo )
|
||||
return FALSE;
|
||||
|
||||
if ( MinorVersion == 0 )
|
||||
return ( ( Rate >= 4000 ) && ( Rate <= 23000 ) );
|
||||
else
|
||||
return ( ( Rate >= 4000 ) && ( Rate <= 44100 ) );
|
||||
}
|
||||
else if ( MajorVersion == 3 )
|
||||
{
|
||||
if ( ! Stereo )
|
||||
return ( ( Rate >= 4000 ) && ( Rate <= 44100 ) );
|
||||
else
|
||||
return ( ( Rate >= 11025 ) && ( Rate <= 22050 ) );
|
||||
}
|
||||
else /* 4.00 and above */
|
||||
{
|
||||
return ( ( Rate >= 5000 ) && ( Rate <= 44100 ) );
|
||||
}
|
||||
}
|
||||
|
||||
/* Internal routine - call only after submitting one of the rate commands */
|
||||
NTSTATUS
|
||||
SbDsp4WriteRate(
|
||||
IN PUCHAR BasePort,
|
||||
IN USHORT Rate,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
/* NOTE - No check for validity of rate! */
|
||||
|
||||
/* Write high byte */
|
||||
Status = SbDspWrite(BasePort, (Rate & 0xff00) >> 8, Timeout);
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
return Status;
|
||||
|
||||
/* Write low byte */
|
||||
Status = SbDspWrite(BasePort, Rate & 0xff, Timeout);
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
return Status;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbDsp4SetOutputRate(
|
||||
IN PUCHAR BasePort,
|
||||
IN USHORT Rate,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
/* NOTE - No check for validity of rate! */
|
||||
|
||||
/* Prepare to write the output rate */
|
||||
Status = SbDspWrite(BasePort, SB_DSP_OUTPUT_RATE, (Rate & 0xff00) >> 8);
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
return Status;
|
||||
|
||||
return SbDsp4WriteRate(BasePort, Rate, Timeout);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbDsp4SetInputRate(
|
||||
IN PUCHAR BasePort,
|
||||
IN USHORT Rate,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
/* NOTE - No check for validity of rate! */
|
||||
|
||||
/* Prepare to write the input rate */
|
||||
Status = SbDspWrite(BasePort, SB_DSP_OUTPUT_RATE, (Rate & 0xff00) >> 8);
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
return Status;
|
||||
|
||||
return SbDsp4WriteRate(BasePort, Rate, Timeout);
|
||||
}
|
||||
|
63
sdk/lib/drivers/sound/soundblaster/speaker.c
Normal file
63
sdk/lib/drivers/sound/soundblaster/speaker.c
Normal file
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
ReactOS Sound System
|
||||
Sound Blaster DSP support
|
||||
Speaker commands
|
||||
|
||||
Author:
|
||||
Andrew Greenwood (silverblade@reactos.org)
|
||||
|
||||
History:
|
||||
2 July 2008 - Created (split from sbdsp.c)
|
||||
|
||||
Notes:
|
||||
Functions documented in sbdsp.h
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
NTSTATUS
|
||||
SbDspEnableSpeaker(
|
||||
IN PUCHAR BasePort,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
return SbDspWrite(BasePort, SB_DSP_SPEAKER_ON, Timeout);
|
||||
}
|
||||
|
||||
NTSTATUS
|
||||
SbDspDisableSpeaker(
|
||||
IN PUCHAR BasePort,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
return SbDspWrite(BasePort, SB_DSP_SPEAKER_OFF, Timeout);
|
||||
}
|
||||
|
||||
/*
|
||||
VirtualBox doesn't seem to support this.
|
||||
*/
|
||||
NTSTATUS
|
||||
SbDspIsSpeakerEnabled(
|
||||
IN PUCHAR BasePort,
|
||||
OUT PBOOLEAN IsEnabled,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
UCHAR SpeakerStatus = 0;
|
||||
|
||||
if ( ! IsEnabled )
|
||||
return STATUS_INVALID_PARAMETER_2;
|
||||
|
||||
/* Request the speaker status */
|
||||
Status = SbDspWrite(BasePort, SB_DSP_SPEAKER_STATUS, Timeout);
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
return Status;
|
||||
|
||||
/* Obtain the status */
|
||||
Status = SbDspRead(BasePort, &SpeakerStatus, Timeout);
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
return Status;
|
||||
|
||||
DbgPrint("SBDSP - SpeakerStatus is %02x\n", SpeakerStatus);
|
||||
*IsEnabled = (SpeakerStatus == 0xFF);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
47
sdk/lib/drivers/sound/soundblaster/version.c
Normal file
47
sdk/lib/drivers/sound/soundblaster/version.c
Normal file
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
ReactOS Sound System
|
||||
Sound Blaster DSP support
|
||||
Version routine
|
||||
|
||||
Author:
|
||||
Andrew Greenwood (silverblade@reactos.org)
|
||||
|
||||
History:
|
||||
2 July 2008 - Created (split from sbdsp.c)
|
||||
|
||||
Notes:
|
||||
Functions documented in sbdsp.h
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
NTSTATUS
|
||||
SbDspGetVersion(
|
||||
IN PUCHAR BasePort,
|
||||
OUT PUCHAR MajorVersion,
|
||||
OUT PUCHAR MinorVersion,
|
||||
IN ULONG Timeout)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
|
||||
/* Make sure our parameters are sane */
|
||||
if ( ! MajorVersion )
|
||||
return STATUS_INVALID_PARAMETER_2;
|
||||
|
||||
if ( ! MinorVersion )
|
||||
return STATUS_INVALID_PARAMETER_3;
|
||||
|
||||
/* Send version request */
|
||||
Status = SbDspWrite(BasePort, SB_DSP_VERSION, Timeout);
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
return Status;
|
||||
|
||||
/* Get the major version */
|
||||
Status = SbDspRead(BasePort, MajorVersion, Timeout);
|
||||
if ( Status != STATUS_SUCCESS )
|
||||
return FALSE;
|
||||
|
||||
/* Get the minor version */
|
||||
Status = SbDspRead(BasePort, MinorVersion, Timeout);
|
||||
return Status;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue