1 /*
2     ReactOS Sound System
3     Sound Blaster DSP support
4     Speaker commands
5 
6     Author:
7         Andrew Greenwood (silverblade@reactos.org)
8 
9     History:
10         2 July 2008 - Created (split from sbdsp.c)
11 
12     Notes:
13         Functions documented in sbdsp.h
14 */
15 
16 #include "precomp.h"
17 
18 NTSTATUS
SbDspEnableSpeaker(IN PUCHAR BasePort,IN ULONG Timeout)19 SbDspEnableSpeaker(
20     IN  PUCHAR BasePort,
21     IN  ULONG Timeout)
22 {
23     return SbDspWrite(BasePort, SB_DSP_SPEAKER_ON, Timeout);
24 }
25 
26 NTSTATUS
SbDspDisableSpeaker(IN PUCHAR BasePort,IN ULONG Timeout)27 SbDspDisableSpeaker(
28     IN  PUCHAR BasePort,
29     IN  ULONG Timeout)
30 {
31     return SbDspWrite(BasePort, SB_DSP_SPEAKER_OFF, Timeout);
32 }
33 
34 /*
35     VirtualBox doesn't seem to support this.
36 */
37 NTSTATUS
SbDspIsSpeakerEnabled(IN PUCHAR BasePort,OUT PBOOLEAN IsEnabled,IN ULONG Timeout)38 SbDspIsSpeakerEnabled(
39     IN  PUCHAR BasePort,
40     OUT PBOOLEAN IsEnabled,
41     IN  ULONG Timeout)
42 {
43     NTSTATUS Status;
44     UCHAR SpeakerStatus = 0;
45 
46     if ( ! IsEnabled )
47         return STATUS_INVALID_PARAMETER_2;
48 
49     /* Request the speaker status */
50     Status = SbDspWrite(BasePort, SB_DSP_SPEAKER_STATUS, Timeout);
51     if ( Status != STATUS_SUCCESS )
52         return Status;
53 
54     /* Obtain the status */
55     Status = SbDspRead(BasePort, &SpeakerStatus, Timeout);
56     if ( Status != STATUS_SUCCESS )
57         return Status;
58 
59     DbgPrint("SBDSP - SpeakerStatus is %02x\n", SpeakerStatus);
60     *IsEnabled = (SpeakerStatus == 0xFF);
61 
62     return STATUS_SUCCESS;
63 }
64