ReactOS  0.4.14-dev-1112-g2b067d6
rate.c
Go to the documentation of this file.
1 /*
2  ReactOS Sound System
3  Sound Blaster DSP support
4  Sample rate routines
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 BOOLEAN
22  IN USHORT Rate,
23  IN BOOLEAN Stereo)
24 {
25  if ( MajorVersion == 1 )
26  {
27  if ( Stereo )
28  return FALSE;
29 
30  return ( ( Rate >= 4000 ) && ( Rate <= 13000 ) );
31  }
32  else if ( MajorVersion == 2 )
33  {
34  if ( Stereo )
35  return FALSE;
36 
37  if ( MinorVersion == 0 )
38  return ( ( Rate >= 4000 ) && ( Rate <= 15000 ) );
39  else
40  return ( ( Rate >= 4000 ) && ( Rate <= 44100 ) );
41  }
42  else if ( MajorVersion == 3 )
43  {
44  if ( Stereo )
45  return FALSE;
46 
47  return ( ( Rate >= 4000 ) && ( Rate <= 13000 ) );
48  }
49  else /* 4.00 and above */
50  {
51  return ( ( Rate >= 5000 ) && ( Rate <= 44100 ) );
52  }
53 }
54 
55 BOOLEAN
59  IN USHORT Rate,
60  IN BOOLEAN Stereo)
61 {
62  if ( MajorVersion == 1 )
63  {
64  if ( Stereo )
65  return FALSE;
66 
67  return ( ( Rate >= 4000 ) && ( Rate <= 23000 ) );
68  }
69  else if ( MajorVersion == 2 )
70  {
71  if ( Stereo )
72  return FALSE;
73 
74  if ( MinorVersion == 0 )
75  return ( ( Rate >= 4000 ) && ( Rate <= 23000 ) );
76  else
77  return ( ( Rate >= 4000 ) && ( Rate <= 44100 ) );
78  }
79  else if ( MajorVersion == 3 )
80  {
81  if ( ! Stereo )
82  return ( ( Rate >= 4000 ) && ( Rate <= 44100 ) );
83  else
84  return ( ( Rate >= 11025 ) && ( Rate <= 22050 ) );
85  }
86  else /* 4.00 and above */
87  {
88  return ( ( Rate >= 5000 ) && ( Rate <= 44100 ) );
89  }
90 }
91 
92 /* Internal routine - call only after submitting one of the rate commands */
95  IN PUCHAR BasePort,
96  IN USHORT Rate,
98 {
100 
101  /* NOTE - No check for validity of rate! */
102 
103  /* Write high byte */
104  Status = SbDspWrite(BasePort, (Rate & 0xff00) >> 8, Timeout);
105  if ( Status != STATUS_SUCCESS )
106  return Status;
107 
108  /* Write low byte */
109  Status = SbDspWrite(BasePort, Rate & 0xff, Timeout);
110  if ( Status != STATUS_SUCCESS )
111  return Status;
112 
113  return Status;
114 }
115 
116 NTSTATUS
118  IN PUCHAR BasePort,
119  IN USHORT Rate,
120  IN ULONG Timeout)
121 {
123 
124  /* NOTE - No check for validity of rate! */
125 
126  /* Prepare to write the output rate */
127  Status = SbDspWrite(BasePort, SB_DSP_OUTPUT_RATE, (Rate & 0xff00) >> 8);
128  if ( Status != STATUS_SUCCESS )
129  return Status;
130 
131  return SbDsp4WriteRate(BasePort, Rate, Timeout);
132 }
133 
134 NTSTATUS
136  IN PUCHAR BasePort,
137  IN USHORT Rate,
138  IN ULONG Timeout)
139 {
141 
142  /* NOTE - No check for validity of rate! */
143 
144  /* Prepare to write the input rate */
145  Status = SbDspWrite(BasePort, SB_DSP_OUTPUT_RATE, (Rate & 0xff00) >> 8);
146  if ( Status != STATUS_SUCCESS )
147  return Status;
148 
149  return SbDsp4WriteRate(BasePort, Rate, Timeout);
150 }
151 
#define IN
Definition: typedefs.h:39
NTSTATUS SbDsp4WriteRate(IN PUCHAR BasePort, IN USHORT Rate, IN ULONG Timeout)
Definition: rate.c:94
NTSTATUS SbDspWrite(IN PUCHAR BasePort, IN UCHAR DataByte, IN ULONG Timeout)
Definition: dsp_io.c:99
ULONG MinorVersion
Definition: ros_glue.cpp:5
ULONG MajorVersion
Definition: ros_glue.cpp:4
BOOLEAN SbDspIsValidOutputRate(IN UCHAR MajorVersion, IN UCHAR MinorVersion, IN USHORT Rate, IN BOOLEAN Stereo)
Definition: rate.c:56
unsigned char * PUCHAR
Definition: retypes.h:3
LONG NTSTATUS
Definition: precomp.h:26
unsigned char BOOLEAN
BOOLEAN SbDspIsValidInputRate(IN UCHAR MajorVersion, IN UCHAR MinorVersion, IN USHORT Rate, IN BOOLEAN Stereo)
Definition: rate.c:19
NTSTATUS SbDsp4SetInputRate(IN PUCHAR BasePort, IN USHORT Rate, IN ULONG Timeout)
Definition: rate.c:135
unsigned char UCHAR
Definition: xmlstorage.h:181
NTSTATUS SbDsp4SetOutputRate(IN PUCHAR BasePort, IN USHORT Rate, IN ULONG Timeout)
Definition: rate.c:117
#define SB_DSP_OUTPUT_RATE
Definition: sbdsp.h:72
Status
Definition: gdiplustypes.h:24
static ULONG Timeout
Definition: ping.c:61
unsigned short USHORT
Definition: pedump.c:61
unsigned int ULONG
Definition: retypes.h:1
return STATUS_SUCCESS
Definition: btrfs.c:2938