Jump to content

MMPM/2 Device Driver Reference:Vendor-Specific Driver Commands: Difference between revisions

From EDM2
Created page with "=== Vendor-Specific Driver Commands === The vendor-specific driver (VSD) commands enable communication between vendor-specific drivers (VSDs) and an application such as the u..."
 
Ak120 (talk | contribs)
mNo edit summary
 
(30 intermediate revisions by 2 users not shown)
Line 1: Line 1:
=== Vendor-Specific Driver Commands ===
{{MMPM2DDRef}}
{{IBM-Reprint}}


The vendor-specific driver (VSD) commands enable communication between vendor-specific drivers (VSDs) and an application such as the user-level audio stream handler or amplifier mixer MCI driver. The interface to the VSD is DLL-based. First, a DosLoadModule function is issued for the VSD's DLL. The DosLoadModule function returns a handle for the VSD. Next, using the VSD handle, DosQueryProcAddr is issued to receive the VSD entry point address. This must be done prior to issuing any VSD commands. Once the entry point address is received, calls to the VSD are made to [[00235.htm|VSDEntry]]entry point.
The vendor-specific driver (VSD) commands enable communication between vendor-specific drivers (VSDs) and an application such as the user-level audio stream handler or amplifier mixer MCI driver. The interface to the VSD is DLL-based. First, a DosLoadModule function is issued for the VSD's DLL. The DosLoadModule function returns a handle for the VSD. Next, using the VSD handle, DosQueryProcAddr is issued to receive the VSD entry point address. This must be done prior to issuing any VSD commands. Once the entry point address is received, calls to the VSD are made to ''VSDEntry'' entry point.


 
==VSDEntry==
 
This entry point enables communication between vendor-specific drivers (VSDs) and an application such as the user-level audio stream handler or amplifier mixer. For audio VSDs, be sure to define INCL_AUDIO_VSD before including the VSDCMDS.H header file.
 
<pre>
 
#define INCL_AUDIO_VSD
=== VSDEntry ===
#include <vsdcmds.h>
 
#include <os2mixer.h>
 
-----
 
Select an item:
 
<pre class="western">Syntax
Parameters
Returns
Remarks
Glossary </pre>
 
-----
 
This entry point enables communication between vendor-specific drivers ( VSDs) and an application such as the user-level audio stream handler or amplifier mixer. For audio VSDs, be sure to define INCL_AUDIO_VSD before including the VSDCMDS.H header file.
 
<pre class="western">#define INCL_AUDIO_VSD
#include &lt;vsdcmds.h&gt;
#include &lt;os2mixer.h&gt;
 
HVSD    hvsd;      /*  Handle to VSD instance. */
ULONG    ulFunc;    /*  Function code. */
ULONG    ulFlags;  /*  Flags for driver. */
PVOID    pRequest;  /*  Request parameter block value. */
ULONG    rc;        /*  Return codes. */
 
rc = VSDEntry(hvsd, ulFunc, ulFlags, pRequest);</pre>
 
 
 
 
=== VSDEntry - Syntax ===
 
This entry point enables communication between vendor-specific drivers ( VSDs) and an application such as the user-level audio stream handler or amplifier mixer. For audio VSDs, be sure to define INCL_AUDIO_VSD before including the VSDCMDS.H header file.
 
<pre class="western">#define INCL_AUDIO_VSD
#include &lt;vsdcmds.h&gt;
#include &lt;os2mixer.h&gt;


HVSD    hvsd;      /*  Handle to VSD instance. */
HVSD    hvsd;      /*  Handle to VSD instance. */
Line 53: Line 17:
ULONG    rc;        /*  Return codes. */
ULONG    rc;        /*  Return codes. */


rc = VSDEntry(hvsd, ulFunc, ulFlags, pRequest);</pre>
rc = VSDEntry(hvsd, ulFunc, ulFlags, pRequest);
 
</pre>
 
===Parameters===
 
;hvsd ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) - input:This parameter is the handle to the VSD instance.
 
;ulFunc ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) - input:The VSD command to be issued. The following commands are supported for audio VSDs.
=== VSDEntry Parameter - hvsd ===
{|class="wikitable"
!Command||Description
|-
|VSD_CLOSE||Closes the device. (Required)
|-
|VSD_DDCMD||Allows communication between stream handlers and their attached devices. (Required)
|-
|VSD_ESCAPE||Sends a buffer to the device. (Optional)
|-
|VSD_GETDEVCAPS||Retrieves the device capabilities. (Required)
|-
|VSD_OPEN||Opens an instance of the device. (Required)
|-
|VSD_QUERY||Queries the status of the device. (Required)
|-
|VSD_RESOURCE||Manages resources. (Required)
|-
|VSD_RESTORE||Restores device to a saved state. (Required)
|-
|VSD_SAVE||Saves the current state of the device instance. (Required)
|-
|VSD_SET||Modifies settings of the device. (Required)
|-
|VSD_USER||Allows user-defined commands to be passed into the VSD. (Optional)
|}
;ulFlags (ULONG) - input:The ''ulFlags'' parameter is used to further qualify the command specified in ''ulFunc''. In many cases it is used as a subcommand. For more information on ''ulFlags'', see the specific ''ulFunc'' parameter.
;pRequest ([[MMPM/2 Device Driver Reference:Data Types#VOID|PVOID]]) - input:Specifies the pointer to the request packet. The caller of the VSD supplies all request buffers. See individual commands for more detailed information.


'''hvsd'''([[00810.htm|HVSD]]) - input This parameter is the handle to the VSD instance.
===Return Value===
 
;rc ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) - returns:The return codes are listed for each command and will vary based on the command sent.
 
 
 
 
=== VSDEntry Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) - input The VSD command to be issued. The following commands are supported for audio VSDs.
 
<pre class="western">/-------------------------------------------------------------\
|Command                      |Description                  |
|------------------------------+------------------------------|
|VSD_CLOSE                    |Closes the device. (Required) |
|------------------------------+------------------------------|
|VSD_DDCMD                    |Allows communication between  |
|                              |stream handlers and their    |
|                              |attached devices. (Required)  |
|------------------------------+------------------------------|
|VSD_ESCAPE                    |Sends a buffer to the device. |
|                              |(Optional)                    |
|------------------------------+------------------------------|
|VSD_GETDEVCAPS                |Retrieves the device          |
|                              |capabilities. (Required)      |
|------------------------------+------------------------------|
|VSD_OPEN                      |Opens an instance of the      |
|                              |device. (Required)            |
|------------------------------+------------------------------|
|VSD_QUERY                    |Queries the status of the    |
|                              |device. (Required)            |
|------------------------------+------------------------------|
|VSD_RESOURCE                  |Manages resources. (Required) |
|------------------------------+------------------------------|
|VSD_RESTORE                  |Restores device to a saved    |
|                              |state. (Required)            |
|------------------------------+------------------------------|
|VSD_SAVE                      |Saves the current state of the|
|                              |device instance. (Required)  |
|------------------------------+------------------------------|
|VSD_SET                      |Modifies settings of the      |
|                              |device. (Required)            |
|------------------------------+------------------------------|
|VSD_USER                      |Allows user-defined commands  |
|                              |to be passed into the VSD.    |
|                              |(Optional)                    |
\-------------------------------------------------------------/</pre>
 
 
 
 
 
 
=== VSDEntry Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) - input The ''ulFlags''parameter is used to further qualify the command specified in ''ulFunc''. In many cases it is used as a subcommand. For more information on ''ulFlags'', see the specific ''ulFunc''parameter.
 
 
 
 
 
=== VSDEntry Parameter - pRequest ===
 
'''pRequest'''([[01203.htm|PVOID]]) - input Specifies the pointer to the request packet. The caller of the VSD supplies all request buffers. See individual commands for more detailed information.
 
 
 
 
 
=== VSDEntry Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) - returns The return codes are listed for each command and will vary based on the command sent.


If a VSD requires unique return codes for certain conditions, it can use return codes starting at VSDERR_BASE.
If a VSD requires unique return codes for certain conditions, it can use return codes starting at VSDERR_BASE.


 
===Remarks===
 
 
 
=== VSDEntry - Parameters ===
 
'''hvsd'''([[00810.htm|HVSD]]) - input This parameter is the handle to the VSD instance.
 
'''ulFunc'''([[00998.htm|ULONG]]) - input The VSD command to be issued. The following commands are supported for audio VSDs.
 
<pre class="western">/-------------------------------------------------------------\
|Command                      |Description                  |
|------------------------------+------------------------------|
|VSD_CLOSE                    |Closes the device. (Required) |
|------------------------------+------------------------------|
|VSD_DDCMD                    |Allows communication between  |
|                              |stream handlers and their    |
|                              |attached devices. (Required)  |
|------------------------------+------------------------------|
|VSD_ESCAPE                    |Sends a buffer to the device. |
|                              |(Optional)                    |
|------------------------------+------------------------------|
|VSD_GETDEVCAPS                |Retrieves the device          |
|                              |capabilities. (Required)      |
|------------------------------+------------------------------|
|VSD_OPEN                      |Opens an instance of the      |
|                              |device. (Required)            |
|------------------------------+------------------------------|
|VSD_QUERY                    |Queries the status of the    |
|                              |device. (Required)            |
|------------------------------+------------------------------|
|VSD_RESOURCE                  |Manages resources. (Required) |
|------------------------------+------------------------------|
|VSD_RESTORE                  |Restores device to a saved    |
|                              |state. (Required)            |
|------------------------------+------------------------------|
|VSD_SAVE                      |Saves the current state of the|
|                              |device instance. (Required)  |
|------------------------------+------------------------------|
|VSD_SET                      |Modifies settings of the      |
|                              |device. (Required)            |
|------------------------------+------------------------------|
|VSD_USER                      |Allows user-defined commands  |
|                              |to be passed into the VSD.    |
|                              |(Optional)                    |
\-------------------------------------------------------------/</pre>
 
 
'''ulFlags'''([[00998.htm|ULONG]]) - input The ''ulFlags''parameter is used to further qualify the command specified in ''ulFunc''. In many cases it is used as a subcommand. For more information on ''ulFlags'', see the specific ''ulFunc''parameter.
 
'''pRequest'''([[01203.htm|PVOID]]) - input Specifies the pointer to the request packet. The caller of the VSD supplies all request buffers. See individual commands for more detailed information.
 
'''rc'''([[00998.htm|ULONG]]) - returns The return codes are listed for each command and will vary based on the command sent.
 
If a VSD requires unique return codes for certain conditions, it can use return codes starting at VSDERR_BASE.
If a VSD requires unique return codes for certain conditions, it can use return codes starting at VSDERR_BASE.


 
==VSD_CLOSE==
 
 
 
=== VSDEntry - Remarks ===
 
If a VSD requires unique return codes for certain conditions, it can use return codes starting at VSDERR_BASE.
 
 
 
 
 
=== VSDEntry - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Parameters
Returns
Remarks
Glossary </pre>
 
 
 
 
=== VSD_CLOSE ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----
 
This command closes the device. VSD_CLOSE is a required command and must be implemented by all VSD writers.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to the VSD to be closed.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_CLOSE.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01203.htm|PVOID]]) Not used for this command.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_CANNOT_CLOSE VSD is unable to close the device.
 
VSDERR_HARDWARE A hardware error occurred.
 
 
 
 
 
=== VSD_CLOSE Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to the VSD to be closed.
 
 
 
 
 
=== VSD_CLOSE Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_CLOSE.
 
 
 
 
 
=== VSD_CLOSE Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
 
 
 
 
=== VSD_CLOSE Parameter - pRequest ===
 
'''pRequest'''([[01203.htm|PVOID]]) Not used for this command.
 
 
 
 
 
=== VSD_CLOSE Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_CANNOT_CLOSE VSD is unable to close the device.
 
VSDERR_HARDWARE A hardware error occurred.
 
 
 
 
 
=== VSD_CLOSE - Syntax ===
 
This command closes the device. VSD_CLOSE is a required command and must be implemented by all VSD writers.
This command closes the device. VSD_CLOSE is a required command and must be implemented by all VSD writers.


This command is sent using [[00235.htm|VSDEntry]]as follows:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
 
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to the VSD to be closed.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_CLOSE.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01203.htm|PVOID]]) Not used for this command.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_CANNOT_CLOSE VSD is unable to close the device.
 
VSDERR_HARDWARE A hardware error occurred.
 


===Parameters===
;hvsd ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]):Handle to the VSD to be closed.
;ulFunc ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]):Set to VSD_CLOSE.
;ulFlags (ULONG):No flags used for this command.
;pRequest ([[MMPM/2 Device Driver Reference:Data Types#VOID|PVOID]]):Not used for this command.


===Return Value===
;rc (ULONG):Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command was successful.
*VSDERR_CANNOT_CLOSE
:VSD is unable to close the device.
*VSDERR_HARDWARE
:A hardware error occurred.


===Remarks===
The ''hvsd'' handle is no longer valid after this command is issued.


=== VSD_CLOSE - Remarks ===
=== Example Code ===
 
The ''hvsd''handle is no longer valid after this command is issued.
 
 
 
 
 
=== VSD_CLOSE - Example Code ===
 
The following code illustrates how to close a VSD.
The following code illustrates how to close a VSD.
<code>
HVSD    hvsd;
ULONG    rc;
rc = pInstance ->pfnAUDIOIF( hvsd,
                              VSD_CLOSE,
                              0,
                              0 );
return (rc);
</code>


<pre class="western">HVSD    hvsd;
==VSD_DDCMD==
    ULONG    rc;
Stream handlers can communicate to their attached devices using the VSD_ DDCMD call. The DDCMD interface is the primary method of moving data to and from devices in OS/2 multimedia. See the ''[[OS/2 Multimedia Programming Reference]]'' for more detailed information on stream handler command (SHC) messages.
 
    rc = pInstance -&gt;pfnAUDIOIF(  hvsd,
                                  VSD_CLOSE,
                                  0,
                                  0 );
    return (rc);</pre>
 
 
 
 
=== VSD_CLOSE - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
 
 
 
=== VSD_DDCMD ===


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


-----
===Parameters===
;hvsd ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]):Handle to a VSD.
;ulFunc ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]):Set to VSD_DDCMD.
;ulFlags ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]):The following flags (subcommands) are defined for this command:
:;DDCMD_CONTROL :This subcommand of VSD_DDCMD performs a device-specific command. ''pRequest'' is a pointer to the [[MMPM/2 Device Driver Reference:Data Types#DDCMDCONTROL|DDCMDCONTROL]] structure.
:;DDCMD_DEREG_STREAM :This subcommand of VSD_DDCMD deregisters a stream instance with the device driver. ''pRequest'' is a pointer to [[MMPM/2 Device Driver Reference:Data Types#DDCMDDEREGISTER|DDCMDDEREGISTER]] structure.
:;DDCMD_READ :This subcommand of VSD_DDCMD is used by a stream handler to give an ''empty'' buffer to the VSD (for example, during a record operation). When the buffer has been filled, the VSD is responsible for communicating to the caller that the buffer has been filled. The VSD should pass a [[MMPM/2 Device Driver Reference:Data Types#MSG_REPORTINT|MSG_REPORTINT]] structure to the ''pSHDEntryPoint'' in [[MMPM/2 Device Driver Reference:Data Types#DDCMDREGISTER|DDCMDREGISTER]] to inform the caller.
::''pRequest'' is a pointer to [[MMPM/2 Device Driver Reference:Data Types#DDCMDREADWRITE|DDCMDREADWRITE]] structure.


Select an item:
:;DDCMD_REG_STREAM :This subcommand of VSD_DDCMD registers a stream instance with the device driver. ''pRequest'' is a pointer to [[MMPM/2 Device Driver Reference:Data Types#DDCMDREGISTER|DDCMDREGISTER]] structure.


<pre class="western">Syntax
:;DDCMD_SETUP :This subcommand of VSD_DDCMD performs device-specific stream instance setup. ''pRequest'' is a pointer to [[MMPM/2 Device Driver Reference:Data Types#DDCMDSETUP|DDCMDSETUP]] structure.
Returns
Remarks
Glossary </pre>


-----
:;DDCMD_STATUS :This VSD subcommand requests streaming status from a device. Typically, it is called to request the current stream time. ''pRequest'' is a pointer to [[MMPM/2 Device Driver Reference:Data Types#DDCMDSTATUS|DDCMDSTATUS]] structure.


Stream handlers can communicate to their attached devices using the VSD_ DDCMD call. The DDCMD interface is the primary method of moving data to and from devices in OS/2 multimedia. See the ''OS/2 Multimedia Programming Reference''for more detailed information on stream handler command (SHC) messages.
:;DDCMD_WRITE :This VSD subcommand is used by a stream handler to give a ''full'' buffer to the VSD (for example, during a playback operation). When the buffer has been consumed, the VSD is responsible for communicating to the caller that the buffer has been used. The VSD should pass a [[MMPM/2 Device Driver Reference:Data Types#MSG_REPORTINT|MSG_REPORTINT]] structure to the ''pSHDEntryPoint'' in [[MMPM/2 Device Driver Reference:Data Types#DDCMDREGISTER|DDCMDREGISTER]] to inform the caller.


This command is sent using [[00235.htm|VSDEntry]]as follows:
::''pRequest'' is a pointer to [[MMPM/2 Device Driver Reference:Data Types#DDCMDREADWRITE|DDCMDREADWRITE]] structure.


<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
;pRequest ([[MMPM/2 Device Driver Reference:Data Types#VOID|PVOID]]):The value of ''pRequest'' varies according to the ''ulFlags'' value. See each particular ''ulFlags'' value for the definition of ''pRequest''.


=== Return Value ===
;rc ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]):Possible error codes vary according to the value of ''ulFlags''.


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
===Remarks===
 
A user-level 32-bit buffer pointer is available in the ''pProcessLin'' field of the [[MMPM/2 Device Driver Reference:Data Types#DDCMDREADWRITE|DDCMDREADWRITE]]. VSDs should use this pointer if they want to operate on the data while they are not in protect mode. The ''pBuffer'' field of the [[MMPM/2 Device Driver Reference:Data Types#DDCMDREADWRITE|DDCMDREADWRITE]] contains a pointer whose address type was specified by the VSD on DDCMD_REG_STREAM. When the application returns a buffer, it must return the buffer specified by ''pBuffer'' and '''not''' by ''pProcessLin''.
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_DDCMD.
 
'''ulFlags'''([[00998.htm|ULONG]]) The following flags (subcommands) are defined for this command:
 
DDCMD_CONTROL This subcommand of VSD_DDCMD performs a device-specific command. ''pRequest''is a pointer to the [[00759.htm|DDCMDCONTROL]]structure.
 
DDCMD_DEREG_STREAM This subcommand of VSD_DDCMD deregisters a stream instance with the device driver. ''pRequest''is a pointer to [[00766.htm|DDCMDDEREGISTER]]structure.
 
DDCMD_READ This subcommand of VSD_DDCMD is used by a stream handler to give an ''empty''buffer to the VSD (for example, during a record operation). When the buffer has been filled, the VSD is responsible for communicating to the caller that the buffer has been filled. The VSD should pass a [[00946.htm|MSG_ REPORTINT]]structure to the ''pSHDEntryPoint''in [[00779.htm|DDCMDREGISTER]]to inform the caller.
 
''pRequest''is a pointer to [[00769.htm|DDCMDREADWRITE]]structure.
 
DDCMD_REG_STREAM This subcommand of VSD_DDCMD registers a stream instance with the device driver. ''pRequest''is a pointer to [[00779.htm|DDCMDREGISTER]]structure.
 
DDCMD_SETUP This subcommand of VSD_DDCMD performs device-specific stream instance setup. ''pRequest''is a pointer to [[00793.htm|DDCMDSETUP]]structure.
 
DDCMD_STATUS This VSD subcommand requests streaming status from a device. Typically, it is called to request the current stream time. ''pRequest''is a pointer to [[00798.htm|DDCMDSTATUS]]structure.
 
DDCMD_WRITE This VSD subcommand is used by a stream handler to give a ''full''buffer to the VSD (for example, during a playback operation). When the buffer has been consumed, the VSD is responsible for communicating to the caller that the buffer has been used. The VSD should pass a [[00946.htm|MSG_REPORTINT]]structure to the ''pSHDEntryPoint''in [[00779.htm|DDCMDREGISTER]]to inform the caller.
 
''pRequest''is a pointer to [[00769.htm|DDCMDREADWRITE]]structure.
 
'''pRequest'''([[01203.htm|PVOID]]) The value of ''pRequest''varies according to the ''ulFlags''value. See each particular ''ulFlags''value for the definition of ''pRequest''.
 
'''rc'''([[00998.htm|ULONG]]) Possible error codes vary according to the value of ''ulFlags''.
 
 
 
 
 
=== VSD_DDCMD Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_DDCMD Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_DDCMD.
 
 
 
 
 
=== VSD_DDCMD Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) The following flags (subcommands) are defined for this command:
 
DDCMD_CONTROL This subcommand of VSD_DDCMD performs a device-specific command. ''pRequest''is a pointer to the [[00759.htm|DDCMDCONTROL]]structure.
 
DDCMD_DEREG_STREAM This subcommand of VSD_DDCMD deregisters a stream instance with the device driver. ''pRequest''is a pointer to [[00766.htm|DDCMDDEREGISTER]]structure.
 
DDCMD_READ This subcommand of VSD_DDCMD is used by a stream handler to give an ''empty''buffer to the VSD (for example, during a record operation). When the buffer has been filled, the VSD is responsible for communicating to the caller that the buffer has been filled. The VSD should pass a [[00946.htm|MSG_ REPORTINT]]structure to the ''pSHDEntryPoint''in [[00779.htm|DDCMDREGISTER]]to inform the caller.
 
''pRequest''is a pointer to [[00769.htm|DDCMDREADWRITE]]structure.
 
DDCMD_REG_STREAM This subcommand of VSD_DDCMD registers a stream instance with the device driver. ''pRequest''is a pointer to [[00779.htm|DDCMDREGISTER]]structure.
 
DDCMD_SETUP This subcommand of VSD_DDCMD performs device-specific stream instance setup. ''pRequest''is a pointer to [[00793.htm|DDCMDSETUP]]structure.
 
DDCMD_STATUS This VSD subcommand requests streaming status from a device. Typically, it is called to request the current stream time. ''pRequest''is a pointer to [[00798.htm|DDCMDSTATUS]]structure.
 
DDCMD_WRITE This VSD subcommand is used by a stream handler to give a ''full''buffer to the VSD (for example, during a playback operation). When the buffer has been consumed, the VSD is responsible for communicating to the caller that the buffer has been used. The VSD should pass a [[00946.htm|MSG_REPORTINT]]structure to the ''pSHDEntryPoint''in [[00779.htm|DDCMDREGISTER]]to inform the caller.
 
''pRequest''is a pointer to [[00769.htm|DDCMDREADWRITE]]structure.
 
 
 
 
 
=== VSD_DDCMD Parameter - pRequest ===
 
'''pRequest'''([[01203.htm|PVOID]]) The value of ''pRequest''varies according to the ''ulFlags''value. See each particular ''ulFlags''value for the definition of ''pRequest''.
 
 
 
 
 
=== VSD_DDCMD Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Possible error codes vary according to the value of ''ulFlags''.
 
 
 
 
 
=== VSD_DDCMD - Syntax ===
 
Stream handlers can communicate to their attached devices using the VSD_ DDCMD call. The DDCMD interface is the primary method of moving data to and from devices in OS/2 multimedia. See the ''OS/2 Multimedia Programming Reference''for more detailed information on stream handler command (SHC) messages.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_DDCMD.
 
'''ulFlags'''([[00998.htm|ULONG]]) The following flags (subcommands) are defined for this command:
 
DDCMD_CONTROL This subcommand of VSD_DDCMD performs a device-specific command. ''pRequest''is a pointer to the [[00759.htm|DDCMDCONTROL]]structure.
 
DDCMD_DEREG_STREAM This subcommand of VSD_DDCMD deregisters a stream instance with the device driver. ''pRequest''is a pointer to [[00766.htm|DDCMDDEREGISTER]]structure.
 
DDCMD_READ This subcommand of VSD_DDCMD is used by a stream handler to give an ''empty''buffer to the VSD (for example, during a record operation). When the buffer has been filled, the VSD is responsible for communicating to the caller that the buffer has been filled. The VSD should pass a [[00946.htm|MSG_ REPORTINT]]structure to the ''pSHDEntryPoint''in [[00779.htm|DDCMDREGISTER]]to inform the caller.
 
''pRequest''is a pointer to [[00769.htm|DDCMDREADWRITE]]structure.
 
DDCMD_REG_STREAM This subcommand of VSD_DDCMD registers a stream instance with the device driver. ''pRequest''is a pointer to [[00779.htm|DDCMDREGISTER]]structure.
 
DDCMD_SETUP This subcommand of VSD_DDCMD performs device-specific stream instance setup. ''pRequest''is a pointer to [[00793.htm|DDCMDSETUP]]structure.
 
DDCMD_STATUS This VSD subcommand requests streaming status from a device. Typically, it is called to request the current stream time. ''pRequest''is a pointer to [[00798.htm|DDCMDSTATUS]]structure.
 
DDCMD_WRITE This VSD subcommand is used by a stream handler to give a ''full''buffer to the VSD (for example, during a playback operation). When the buffer has been consumed, the VSD is responsible for communicating to the caller that the buffer has been used. The VSD should pass a [[00946.htm|MSG_REPORTINT]]structure to the ''pSHDEntryPoint''in [[00779.htm|DDCMDREGISTER]]to inform the caller.
 
''pRequest''is a pointer to [[00769.htm|DDCMDREADWRITE]]structure.
 
'''pRequest'''([[01203.htm|PVOID]]) The value of ''pRequest''varies according to the ''ulFlags''value. See each particular ''ulFlags''value for the definition of ''pRequest''.
 
'''rc'''([[00998.htm|ULONG]]) Possible error codes vary according to the value of ''ulFlags''.
 
 
 
 
 
=== VSD_DDCMD - Remarks ===
 
A user-level 32-bit buffer pointer is available in the ''pProcessLin''field of the [[00769.htm|DDCMDREADWRITE]]. VSDs should use this pointer if they want to operate on the data while they are not in protect mode. The ''pBuffer''field of the [[00769.htm|DDCMDREADWRITE]]contains a pointer whose address type was specified by the VSD on DDCMD_REG_STREAM. When the application returns a buffer, it must return the buffer specified by ''pBuffer''and '''not'''by ''pProcessLin''
 
 
 
 
 
=== VSD_DDCMD - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Glossary </pre>
 
 
 
 
=== VSD_GETDEVCAPS ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----


==VSD_GETDEVCAPS==
This command queries the device capabilities. These values should be constants that describe the device and driver characteristics. In general, the flags indicate what set of commands are supported. VSD_GETDEVCAPS is a required command and must be implemented by all VSD writers.
This command queries the device capabilities. These values should be constants that describe the device and driver characteristics. In general, the flags indicate what set of commands are supported. VSD_GETDEVCAPS is a required command and must be implemented by all VSD writers.


This command is sent using [[00235.htm|VSDEntry]]as follows:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
===Parameters===
;hvsd ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]):Handle to a VSD.
;ulFunc ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]):Set to VSD_GETDEVCAPS.
;ulFlags (ULONG):No flags used for this command.
;pRequest ([[MMPM/2 Device Driver Reference:Data Types#VSD_GETDEVCAPS_PARMS|PVSD_GETDEVCAPS_PARMS]]):Pointer to the VSD_GETDEVCAPS_PARMS data structure.


===Return Value ===
;rc ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]):Error code indicating success or the type of failure:
*VSDERR_REQUEST_BUF_TOO_SMALL
: The ''ulLength'' in the request packet is too small.
*VSDERR_MISSING_PARAMETER
:One or more parameters are missing.
*VSDERR_HARDWARE
:A hardware error occurred.


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
===Remarks===
This command requires the device to be opened. A device might have several types of device units, so this command must know which instance is involved. Once the device is opened, the device capabilities should be constant.


'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_GETDEVCAPS.
Each element in the ''bSupports[DC_MAX_DEVCAP]'' array of the [[MMPM/2 Device Driver Reference:Data Types#VSD_GETDEVCAPS_PARMS|VSD_GETDEVCAPS_ PARMS]] structure is a boolean value that indicates if the capability is supported. TRUE indicates that it is supported. FALSE indicates that it is not supported.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01169.htm|PVSD_GETDEVCAPS_PARMS]]) Pointer to the [[01169.htm|VSD_GETDEVCAPS_PARMS]]data structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_REQUEST_BUF_TOO_SMALL The ''ulLength''in the request packet is too small.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_HARDWARE A hardware error occurred.
 
 
 
 
 
=== VSD_GETDEVCAPS Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_GETDEVCAPS Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_GETDEVCAPS.
 
 
 
 
 
=== VSD_GETDEVCAPS Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
 
 
 
 
=== VSD_GETDEVCAPS Parameter - pRequest ===
 
'''pRequest'''([[01169.htm|PVSD_GETDEVCAPS_PARMS]]) Pointer to the [[01169.htm|VSD_GETDEVCAPS_PARMS]]data structure.
 
 
 
 
 
=== VSD_GETDEVCAPS Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_REQUEST_BUF_TOO_SMALL The ''ulLength''in the request packet is too small.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_HARDWARE A hardware error occurred.
 
 
 
 
 
=== VSD_GETDEVCAPS - Syntax ===
 
This command queries the device capabilities. These values should be constants that describe the device and driver characteristics. In general, the flags indicate what set of commands are supported. VSD_GETDEVCAPS is a required command and must be implemented by all VSD writers.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_GETDEVCAPS.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01169.htm|PVSD_GETDEVCAPS_PARMS]]) Pointer to the [[01169.htm|VSD_GETDEVCAPS_PARMS]]data structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_REQUEST_BUF_TOO_SMALL The ''ulLength''in the request packet is too small.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_HARDWARE A hardware error occurred.
 
 
 
 
 
=== VSD_GETDEVCAPS - Remarks ===
 
This command requires the device to be opened. A device might have several types of device units, so this command must know which instance is involved . Once the device is opened, the device capabilities should be constant.
 
Each element in the ''bSupports[DC_MAX_DEVCAP]''array of the [[01169.htm|VSD_GETDEVCAPS_ PARMS]]structure is a boolean value that indicates if the capability is supported. TRUE indicates that it is supported. FALSE indicates that it is not supported.
 
 
 
 
 
=== VSD_GETDEVCAPS - Example Code ===


=== Example Code ===
The following code illustrates how to determine device capabilities for a VSD.
The following code illustrates how to determine device capabilities for a VSD.
 
<pre>
<pre class="western"> HVSD                  hvsd;
  HVSD                  hvsd;
   VSD_GETDEVCAPS_PARMS  vsdDevCaps;
   VSD_GETDEVCAPS_PARMS  vsdDevCaps;


   rc = pInstance-&gt;pfnAUDIOIF( hvsd,
   rc = pInstance->pfnAUDIOIF( hvsd,
                              VSD_GETDEVCAPS
                              VSD_GETDEVCAPS
                              0,
                              0,
                              (PVOID) &amp;vsdDevCaps );
                              (PVOID) &vsdDevCaps );


   if (!rc)
   if (!rc)
Line 687: Line 172:
       {
       {
       return ( rc );
       return ( rc );
       }</pre>
       }
 
</pre>
 
 
 
=== VSD_GETDEVCAPS - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
 
 
 
=== VSD_ESCAPE ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Glossary </pre>
 
-----


==VSD_ESCAPE==
This optional command sends a buffer to the driver.
This optional command sends a buffer to the driver.


This command is sent using [[00235.htm|VSDEntry]]as follows:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
 
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>


===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_ESCAPE.


'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_ESCAPE.
'''ulFlags''' (ULONG) No flags used for this command.


'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_ESCAPE_PARMS|PVSD_ESCAPE_PARMS]]) A pointer to the VSD_ESCAPE_PARMS structure.


'''pRequest'''([[01165.htm|PVSD_ESCAPE_PARMS]]) A pointer to the [[01165.htm|VSD_ESCAPE_PARMS]]structure.
===Return Value ===
 
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
 
:The command was successful.
VSDERR_SUCCESS The command was successful.
*VSDERR_MISSING_PARAMETER
 
:One or more parameters are missing.
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_ESCAPE Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_ESCAPE Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_ESCAPE.
 
 
 
 
 
=== VSD_ESCAPE Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
 
 
 
 
=== VSD_ESCAPE Parameter - pRequest ===
 
'''pRequest'''([[01165.htm|PVSD_ESCAPE_PARMS]]) A pointer to the [[01165.htm|VSD_ESCAPE_PARMS]]structure.
 
 
 
 
 
=== VSD_ESCAPE Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_ESCAPE - Syntax ===
 
This optional command sends a buffer to the driver.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_ESCAPE.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01165.htm|PVSD_ESCAPE_PARMS]]) A pointer to the [[01165.htm|VSD_ESCAPE_PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_ESCAPE - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Glossary </pre>
 
 
 
 
=== VSD_INSERTSETTINGSPAGE ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Glossary </pre>
 
-----


==VSD_INSERTSETTINGSPAGE==
This command enables a VSD to insert device-specific settings pages into the system configuration application.
This command enables a VSD to insert device-specific settings pages into the system configuration application.


=== Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD instance.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_INSERTSETTINGSPAGE.


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD instance.
'''ulFlags''' (ULONG) No flags used for this command.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_INSERTSETTINGSPAGE.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.


'''pRequest'''([[00915.htm|PMCI_DEVICESETTINGS_PARMS]]) Pointer to the [[00915.htm|MCI_DEVICESETTINGS_ PARMS]]data structure.
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#MCI_DEVICESETTINGS_PARMS|PMCI_DEVICESETTINGS_PARMS]]) Pointer to the MCI_DEVICESETTINGS_PARMS data structure.


'''hwndRC'''([[00811.htm|HWND]]) The return code contains the handle to a settings page or zero if no page is inserted.
===Return Value===
'''hwndRC''' ([[MMPM/2 Device Driver Reference:Data Types#HWND|HWND]]) The return code contains the handle to a settings page or zero if no page is inserted.


 
==VSD_OPEN==
 
This command opens the device driver and returns a VSD handle or ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]). It should not allocate resources on the device (resource usage should be performed on the VSD restore).
 
 
=== VSD_INSERTSETTINGSPAGE Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD instance.
 
 
 
 
 
=== VSD_INSERTSETTINGSPAGE Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_INSERTSETTINGSPAGE.
 
 
 
 
 
=== VSD_INSERTSETTINGSPAGE Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
 
 
 
 
=== VSD_INSERTSETTINGSPAGE Parameter - pRequest ===
 
'''pRequest'''([[00915.htm|PMCI_DEVICESETTINGS_PARMS]]) Pointer to the [[00915.htm|MCI_DEVICESETTINGS_ PARMS]]data structure.
 
 
 
 
 
=== VSD_INSERTSETTINGSPAGE Return Value - hwndRC ===
 
'''hwndRC'''([[00811.htm|HWND]]) The return code contains the handle to a settings page or zero if no page is inserted.
 
 
 
 
 
=== VSD_INSERTSETTINGSPAGE - Syntax ===
 
This command enables a VSD to insert device-specific settings pages into the system configuration application.
 
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD instance.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_INSERTSETTINGSPAGE.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[00915.htm|PMCI_DEVICESETTINGS_PARMS]]) Pointer to the [[00915.htm|MCI_DEVICESETTINGS_ PARMS]]data structure.
 
'''hwndRC'''([[00811.htm|HWND]]) The return code contains the handle to a settings page or zero if no page is inserted.
 
 
 
 
 
=== VSD_INSERTSETTINGSPAGE - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Glossary </pre>
 
 
 
 
=== VSD_OPEN ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----
 
This command opens the device driver and returns a VSD handle or ([[00810.htm|HVSD]]). It should not allocate resources on the device (resource usage should be performed on the VSD restore).
 
VSD_OPEN is a required command and must be implemented by all VSD writers.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Not used.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_OPEN.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01178.htm|PVSD_OPEN_PARMS]]) Pointer to the [[01178.htm|VSD_OPEN_PARMS]]data structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS Command completed successfully.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_NO_DEVICE_DRIVER VSD is not connected to a device driver.
 
VSDERR_DEVICE_REJECTED Device driver rejected the request.
 
VSDERR_HARDWARE A hardware error occurred.
 
VSDERR_INVALID_BUFF ''pRequest''is not valid.
 
 
 
 
 
=== VSD_OPEN Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Not used.
 
 
 
 
 
=== VSD_OPEN Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_OPEN.
 
 
 
 
 
=== VSD_OPEN Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
 
 
 
 
=== VSD_OPEN Parameter - pRequest ===
 
'''pRequest'''([[01178.htm|PVSD_OPEN_PARMS]]) Pointer to the [[01178.htm|VSD_OPEN_PARMS]]data structure.
 
 
 
 
 
=== VSD_OPEN Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS Command completed successfully.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_NO_DEVICE_DRIVER VSD is not connected to a device driver.
 
VSDERR_DEVICE_REJECTED Device driver rejected the request.
 
VSDERR_HARDWARE A hardware error occurred.
 
VSDERR_INVALID_BUFF ''pRequest''is not valid.
 
 
 
 
 
=== VSD_OPEN - Syntax ===
 
This command opens the device driver and returns a VSD handle or ([[00810.htm|HVSD]]). It should not allocate resources on the device (resource usage should be performed on the VSD restore).


VSD_OPEN is a required command and must be implemented by all VSD writers.
VSD_OPEN is a required command and must be implemented by all VSD writers.


This command is sent using [[00235.htm|VSDEntry]]as follows:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Not used.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_OPEN.


'''hvsd'''([[00810.htm|HVSD]]) Not used.
'''ulFlags''' (ULONG) No flags used for this command.


'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_OPEN.
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_OPEN_PARMS|PVSD_OPEN_PARMS]]) Pointer to the [[MMPM/2 Device Driver Reference:Data Types#VSD_OPEN_PARMS|VSD_OPEN_PARMS]] data structure.


'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
=== Return Value ===
 
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
'''pRequest'''([[01178.htm|PVSD_OPEN_PARMS]]) Pointer to the [[01178.htm|VSD_OPEN_PARMS]]data structure.
*VSDERR_SUCCESS
 
:Command completed successfully.
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_MISSING_PARAMETER
 
:One or more parameters are missing.
VSDERR_SUCCESS Command completed successfully.
*VSDERR_NO_DEVICE_DRIVER
 
:VSD is not connected to a device driver.
VSDERR_MISSING_PARAMETER One or more parameters are missing.
*VSDERR_DEVICE_REJECTED
 
:Device driver rejected the request.
VSDERR_NO_DEVICE_DRIVER VSD is not connected to a device driver.
*VSDERR_HARDWARE
 
:A hardware error occurred.
VSDERR_DEVICE_REJECTED Device driver rejected the request.
*VSDERR_INVALID_BUFF
 
:''pRequest'' is not valid.
VSDERR_HARDWARE A hardware error occurred.
 
VSDERR_INVALID_BUFF ''pRequest''is not valid.
 
 
 
 
 
=== VSD_OPEN - Remarks ===


=== Remarks ===
The installation name of the media control driver (MCD) is passed in so that the VSD can query device-specific parameters from the INI file.
The installation name of the media control driver (MCD) is passed in so that the VSD can query device-specific parameters from the INI file.


For an audio VSD, the ''pDevInfo''pointer points to a [[01138.htm|VSD_AUDIOOPEN_PARMS]]structure. This structure contains enough information to initialize the audio device. The VSD is responsible for filling in the ''ulDataSubType''field of the [[01138.htm|VSD_AUDIOOPEN_PARMS]]structure with a valid data subtype.
For an audio VSD, the ''pDevInfo'' pointer points to a [[MMPM/2 Device Driver Reference:Data Types#VSD_AUDIOOPEN_PARMS|VSD_AUDIOOPEN_PARMS]] structure. This structure contains enough information to initialize the audio device. The VSD is responsible for filling in the ''ulDataSubType'' field of the VSD_AUDIOOPEN_PARMS structure with a valid data subtype.
 
 
 
 
 
=== VSD_OPEN - Example Code ===


=== Example Code ===
The following code illustrates how to open an audio VSD.
The following code illustrates how to open an audio VSD.
 
<pre>
<pre class="western"> VSD_OPEN_PARMS        vsdOpenParms;
VSD_OPEN_PARMS        vsdOpenParms;
  VSD_AUDIOOPEN_PARMS  vsdData;
  VSD_AUDIOOPEN_PARMS  vsdData;


  vsdData.ulLength = sizeof(VSD_AUDIOOPEN_PARMS);
  vsdData.ulLength = sizeof(VSD_AUDIOOPEN_PARMS);
  vsdData.ulFlags = 0;
  vsdData.ulFlags = 0;
  vsdData.ulSamplingRate      = pInstance-&gt;lSRate;
  vsdData.ulSamplingRate      = pInstance->lSRate;
  vsdData.ulBitsPerSample      = pInstance-&gt;lBitsPerSRate;
  vsdData.ulBitsPerSample      = pInstance->lBitsPerSRate;
  vsdData.ulChannels          = pInstance-&gt;sChannels;
  vsdData.ulChannels          = pInstance->sChannels;
  vsdData.ulDataType          = pInstance-&gt;sMode;
  vsdData.ulDataType          = pInstance->sMode;
  vsdData.ulDeviceID          = pInstance-&gt;ulDeviceID;
  vsdData.ulDeviceID          = pInstance->ulDeviceID;
  vsdData.ulOperation          = pInstance-&gt;ulOperation;
  vsdData.ulOperation          = pInstance->ulOperation;
  vsdOpenParms.pDevInfo = (PVOID)&amp;vsdData;
  vsdOpenParms.pDevInfo = (PVOID)&vsdData;




     vsdOpenParms.ulLength = sizeof(VSD_OPEN_PARMS);
     vsdOpenParms.ulLength = sizeof(VSD_OPEN_PARMS);
     memmove(&amp;vsdOpenParms.szPDDName,
     memmove(&vsdOpenParms.szPDDName,
             pInstance-&gt;szDeviceName,
             pInstance->szDeviceName,
             strlen(pInstance-&gt;szDeviceName));
             strlen(pInstance->szDeviceName));
       /* Open the audio VSD */
       /* Open the audio VSD */
     rc = pInstance-&gt;pfnAUDIOIF(0,
     rc = pInstance->pfnAUDIOIF(0,
                                 VSD_OPEN,
                                 VSD_OPEN,
                                 0L
                                 0L
                                 (PVOID)&amp;vsdOpenParms);
                                 (PVOID)&vsdOpenParms);
     if (!rc)
     if (!rc)
         }
         }
         pInstance-&gt;hvsd = vsdOpenParms.hvsd;
         pInstance->hvsd = vsdOpenParms.hvsd;
         {</pre>
         {
 
</pre>
 
 
 
=== VSD_OPEN - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
 
 
 
=== VSD_QUERY ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Glossary </pre>
 
-----


==VSD_QUERY==
This command allows an application to query the status of the VSD.
This command allows an application to query the status of the VSD.


This command is sent using [[00235.htm|VSDEntry]]as follows:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
 
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_QUERY.
 
'''ulFlags'''([[00998.htm|ULONG]]) The following flags can be used with VSD_QUERY:
 
VSD_QUERYAUDIOATTRIBUTES See [[00309.htm|VSD_QUERYAUDIOATTRIBUTES]].
 
VSD_QUERYCONNECTOR See [[00319.htm|VSD_QUERYCONNECTOR]].
 
VSD_QUERYDATATYPE See [[00328.htm|VSD_QUERYDATATYPE]].
 
VSD_QUERYMONITOR See [[00367.htm|VSD_QUERYMONITOR]].
 
VSD_QUERYVOLUME See [[00384.htm|VSD_QUERYVOLUME]].
 
VSD_QUERYMIXCONNECTIONS See [[00338.htm|VSD_QUERYMIXCONNECTIONS]].
 
VSD_QUERYMIXCONTROL See [[00348.htm|VSD_QUERYMIXCONTROL]].
 
VSD_QUERYMIXLINE See [[00358.htm|VSD_QUERYMIXLINE]].
 
'''pRequest'''([[01203.htm|PVOID]]) Pointer varies according to ''ulFlags''.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS Command completed successfully.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.


=== Parameters ===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_QUERY.


'''ulFlags''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) The following flags can be used with VSD_QUERY:
*VSD_QUERYAUDIOATTRIBUTES See [[#VSD_QUERYAUDIOATTRIBUTES|VSD_QUERYAUDIOATTRIBUTES]].
*VSD_QUERYCONNECTOR See [[#VSD_QUERYCONNECTOR|VSD_QUERYCONNECTOR]].
*VSD_QUERYDATATYPE See [[#VSD_QUERYDATATYPE|VSD_QUERYDATATYPE]].
*VSD_QUERYMONITOR See [[#VSD_QUERYMONITOR|VSD_QUERYMONITOR]].
*VSD_QUERYVOLUME See [[#VSD_QUERYVOLUME|VSD_QUERYVOLUME]].
*VSD_QUERYMIXCONNECTIONS See [[#VSD_QUERYMIXCONNECTIONS|VSD_QUERYMIXCONNECTIONS]].
*VSD_QUERYMIXCONTROL See [[#VSD_QUERYMIXCONTROL|VSD_QUERYMIXCONTROL]].
*VSD_QUERYMIXLINE See [[#VSD_QUERYMIXLINE|VSD_QUERYMIXLINE]].


'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VOID|PVOID]]) Pointer varies according to ''ulFlags''.


=== VSD_QUERY Parameter - hvsd ===
=== Return Value ===
 
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
*VSDERR_SUCCESS
 
:Command completed successfully.
 
*VSDERR_MISSING_PARAMETER
 
:One or more parameters are missing.
 
 
=== VSD_QUERY Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_QUERY.
 
 
 
 
 
=== VSD_QUERY Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) The following flags can be used with VSD_QUERY:
 
VSD_QUERYAUDIOATTRIBUTES See [[00309.htm|VSD_QUERYAUDIOATTRIBUTES]].
 
VSD_QUERYCONNECTOR See [[00319.htm|VSD_QUERYCONNECTOR]].
 
VSD_QUERYDATATYPE See [[00328.htm|VSD_QUERYDATATYPE]].
 
VSD_QUERYMONITOR See [[00367.htm|VSD_QUERYMONITOR]].
 
VSD_QUERYVOLUME See [[00384.htm|VSD_QUERYVOLUME]].
 
VSD_QUERYMIXCONNECTIONS See [[00338.htm|VSD_QUERYMIXCONNECTIONS]].
 
VSD_QUERYMIXCONTROL See [[00348.htm|VSD_QUERYMIXCONTROL]].
 
VSD_QUERYMIXLINE See [[00358.htm|VSD_QUERYMIXLINE]].
 
 
 
 
 
=== VSD_QUERY Return Value - pRequest ===
 
'''pRequest'''([[01203.htm|PVOID]]) Pointer varies according to ''ulFlags''.
 
 
 
 
 
=== VSD_QUERY Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS Command completed successfully.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERY - Syntax ===
 
This command allows an application to query the status of the VSD.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_QUERY.
 
'''ulFlags'''([[00998.htm|ULONG]]) The following flags can be used with VSD_QUERY:
 
VSD_QUERYAUDIOATTRIBUTES See [[00309.htm|VSD_QUERYAUDIOATTRIBUTES]].
 
VSD_QUERYCONNECTOR See [[00319.htm|VSD_QUERYCONNECTOR]].
 
VSD_QUERYDATATYPE See [[00328.htm|VSD_QUERYDATATYPE]].
 
VSD_QUERYMONITOR See [[00367.htm|VSD_QUERYMONITOR]].
 
VSD_QUERYVOLUME See [[00384.htm|VSD_QUERYVOLUME]].
 
VSD_QUERYMIXCONNECTIONS See [[00338.htm|VSD_QUERYMIXCONNECTIONS]].
 
VSD_QUERYMIXCONTROL See [[00348.htm|VSD_QUERYMIXCONTROL]].
 
VSD_QUERYMIXLINE See [[00358.htm|VSD_QUERYMIXLINE]].
 
'''pRequest'''([[01203.htm|PVOID]]) Pointer varies according to ''ulFlags''.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS Command completed successfully.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERY - Remarks ===


=== Remarks ===
This command uses flags to indicate what information is queried.
This command uses flags to indicate what information is queried.


==VSD_QUERYAUDIOATTRIBUTES==
This subcommand of the [[#VSD_QUERY|VSD_QUERY]] command queries the current audio settings and capabilities. A valid length must be placed in the ''ulLength'' field of the [[MMPM/2 Device Driver Reference:Data Types#VSD_ AUDIOATTRIBUTES_PARMS|VSD_AUDIOATTRIBUTES_PARMS]] structure and the audio setting (such as treble, bass, and so on) must be placed in the ''ulFlags'' field of the [[MMPM/2 Device Driver Reference:Data Types#VSD_ AUDIOATTRIBUTES_PARMS|VSD_ AUDIOATTRIBUTES_PARMS]] structure.


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


=== Parameters ===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_QUERY|VSD_QUERY]].


=== VSD_QUERY - Topics ===
'''ulFlags''' (ULONG) Set to VSD_QUERYAUDIOATTRIBUTES.
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Glossary </pre>
 
 
 
 
=== VSD_QUERYAUDIOATTRIBUTES ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the current audio settings and capabilities. A valid length must be placed in the ''ulLength''field of the [[01119.htm|VSD_AUDIOATTRIBUTES_PARMS]]structure and the audio setting (such as treble, bass, and so on) must be placed in the ''ulFlags''field of the [[01119.htm|VSD_ AUDIOATTRIBUTES_PARMS]]structure.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYAUDIOATTRIBUTES.
 
'''pRequest'''([[01119.htm|PVSD_AUDIOATTRIBUTES_PARMS]]) Pointer to the [[01119.htm|VSD_AUDIOATTRIBUTES_ PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERYAUDIOATTRIBUTES Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_QUERYAUDIOATTRIBUTES Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
 
 
 
 
=== VSD_QUERYAUDIOATTRIBUTES Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYAUDIOATTRIBUTES.
 
 
 
 
 
=== VSD_QUERYAUDIOATTRIBUTES Parameter - pRequest ===
 
'''pRequest'''([[01119.htm|PVSD_AUDIOATTRIBUTES_PARMS]]) Pointer to the [[01119.htm|VSD_AUDIOATTRIBUTES_ PARMS]]structure.
 
 
 
 
 
=== VSD_QUERYAUDIOATTRIBUTES Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERYAUDIOATTRIBUTES - Syntax ===
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the current audio settings and capabilities. A valid length must be placed in the ''ulLength''field of the [[01119.htm|VSD_AUDIOATTRIBUTES_PARMS]]structure and the audio setting (such as treble, bass, and so on) must be placed in the ''ulFlags''field of the [[01119.htm|VSD_ AUDIOATTRIBUTES_PARMS]]structure.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYAUDIOATTRIBUTES.
 
'''pRequest'''([[01119.htm|PVSD_AUDIOATTRIBUTES_PARMS]]) Pointer to the [[01119.htm|VSD_AUDIOATTRIBUTES_ PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERYAUDIOATTRIBUTES - Remarks ===
 
All values are returned in the ''ulValue''field and can range from 0 - 100.


'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_AUDIOATTRIBUTES_PARMS|PVSD_AUDIOATTRIBUTES_PARMS]]) Pointer to the VSD_AUDIOATTRIBUTES_PARMS structure.


=== Return Value ===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command was successful.
*VSDERR_MISSING_PARAMETER
:One or more parameters are missing.


=== Remarks ===
All values are returned in the ''ulValue'' field and can range from 0 - 100.


 
=== Example Code ===
=== VSD_QUERYAUDIOATTRIBUTES - Example Code ===
 
The following code illustrates how to query audio attribute information from the VSD.
The following code illustrates how to query audio attribute information from the VSD.
 
<pre>
<pre class="western">HVSD                        hvsd;
HVSD                        hvsd;
VSD_AUDIOATTRIBUTES_PARMS  vsdAttr;
VSD_AUDIOATTRIBUTES_PARMS  vsdAttr;


Line 1,438: Line 355:
     *---------------------------------------------*/
     *---------------------------------------------*/


     rc = pInstance-&gt;pfnAUDIOIF(hvsd,
     rc = pInstance->pfnAUDIOIF(hvsd,
                                 VSD_QUERY,
                                 VSD_QUERY,
                                 VSD_QUERYAUDIOATTRIBUTES,
                                 VSD_QUERYAUDIOATTRIBUTES,
                                 (PVOID)&amp;vsdAttr);
                                 (PVOID)&vsdAttr);


     /* If Bass value is too high then...*/
     /* If Bass value is too high then...*/
     if (!rc)
     if (!rc)
       {
       {
       if (vsdAttr.ulValue &gt; 70)
       if (vsdAttr.ulValue > 70)
       {
       {
       }</pre>
       }
</pre>


==VSD_QUERYCONNECTOR==
This subcommand of the [[#VSD_QUERY|VSD_QUERY]] command queries the state of the connector. (A connector can be a hardware or software connection on the device the VSD is controlling.) If the connector is enabled, the ''fEnabled'' field of the [[MMPM/2 Device Driver Reference:Data Types#VSD_CONNECTOR_PARMS|VSD_CONNECTOR_PARMS]] structure will contain MCI_TRUE, otherwise it will contain MCI_FALSE. For further information regarding connectors, refer to the MCI connector command in the ''[[OS/2 Multimedia Programming Reference]]''. Valid connectors can be found in MCIOS2.H.


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>


=== Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


=== VSD_QUERYAUDIOATTRIBUTES - Topics ===
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_QUERY|VSD_QUERY]].


Select an item:
'''ulFlags''' (ULONG) Set to VSD_QUERYCONNECTOR.


<pre class="western">Syntax
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_CONNECTOR_PARMS|PVSD_CONNECTOR_PARMS]]) A pointer to the [[MMPM/2 Device Driver Reference:Data Types#VSD_CONNECTOR_PARMS|VSD_CONNECTOR_PARMS]] structure.
Returns
Remarks
Example Code
Glossary </pre>


=== Return Value ===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_UNSUPPORTED_CONN_TYPE
:Connector type not supported.
*VSDERR_INVALID_CONNECTOR_TYPE
:Invalid connector type.
*VSDERR_INVALID_CONNECTOR_INDEX
:Invalid connector index.
*VSDERR_CANNOT_MODIFY_CONNECTOR
:Cannot enable or disable this connector.
*VSDERR_INVALID_CONNECTOR
:Invalid connector.
*VSDERR_UNSUPPORTED_CONNECTOR
:Unsupported connector.
*VSDERR_MISSING_PARAMETER
:One or more parameters are missing.


 
=== Example Code ===
 
=== VSD_QUERYCONNECTOR ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the state of the connector . (A connector can be a hardware or software connection on the device the VSD is controlling.) If the connector is enabled, the ''fEnabled''field of the [[01159.htm|VSD_CONNECTOR_PARMS]]structure will contain MCI_TRUE, otherwise it will contain MCI_FALSE. For further information regarding connectors, refer to the MCI connector command in the ''OS/2 Multimedia Programming Reference''. Valid connectors can be found in MCIOS2.H.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYCONNECTOR.
 
'''pRequest'''([[01159.htm|PVSD_CONNECTOR_PARMS]]) A pointer to the [[01159.htm|VSD_CONNECTOR_PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_UNSUPPORTED_CONN_TYPE Connector type not supported.
 
VSDERR_INVALID_CONNECTOR_TYPE Invalid connector type.
 
VSDERR_INVALID_CONNECTOR_INDEX Invalid connector index.
 
VSDERR_CANNOT_MODIFY_CONNECTOR Cannot enable or disable this connector.
 
VSDERR_INVALID_CONNECTOR Invalid connector.
 
VSDERR_UNSUPPORTED_CONNECTOR Unsupported connector.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERYCONNECTOR Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_QUERYCONNECTOR Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
 
 
 
 
=== VSD_QUERYCONNECTOR Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYCONNECTOR.
 
 
 
 
 
=== VSD_QUERYCONNECTOR Parameter - pRequest ===
 
'''pRequest'''([[01159.htm|PVSD_CONNECTOR_PARMS]]) A pointer to the [[01159.htm|VSD_CONNECTOR_PARMS]]structure.
 
 
 
 
 
=== VSD_QUERYCONNECTOR Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_UNSUPPORTED_CONN_TYPE Connector type not supported.
 
VSDERR_INVALID_CONNECTOR_TYPE Invalid connector type.
 
VSDERR_INVALID_CONNECTOR_INDEX Invalid connector index.
 
VSDERR_CANNOT_MODIFY_CONNECTOR Cannot enable or disable this connector.
 
VSDERR_INVALID_CONNECTOR Invalid connector.
 
VSDERR_UNSUPPORTED_CONNECTOR Unsupported connector.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERYCONNECTOR - Syntax ===
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the state of the connector . (A connector can be a hardware or software connection on the device the VSD is controlling.) If the connector is enabled, the ''fEnabled''field of the [[01159.htm|VSD_CONNECTOR_PARMS]]structure will contain MCI_TRUE, otherwise it will contain MCI_FALSE. For further information regarding connectors, refer to the MCI connector command in the ''OS/2 Multimedia Programming Reference''. Valid connectors can be found in MCIOS2.H.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYCONNECTOR.
 
'''pRequest'''([[01159.htm|PVSD_CONNECTOR_PARMS]]) A pointer to the [[01159.htm|VSD_CONNECTOR_PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_UNSUPPORTED_CONN_TYPE Connector type not supported.
 
VSDERR_INVALID_CONNECTOR_TYPE Invalid connector type.
 
VSDERR_INVALID_CONNECTOR_INDEX Invalid connector index.
 
VSDERR_CANNOT_MODIFY_CONNECTOR Cannot enable or disable this connector.
 
VSDERR_INVALID_CONNECTOR Invalid connector.
 
VSDERR_UNSUPPORTED_CONNECTOR Unsupported connector.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERYCONNECTOR - Example Code ===
 
The following code illustrates how to query the state of the connector.
The following code illustrates how to query the state of the connector.
 
<pre>
<pre class="western">   HVSD                  hvsd;
    HVSD                  hvsd;
     VSD_CONNECTOR_PARMS    vsdConn;
     VSD_CONNECTOR_PARMS    vsdConn;


     vsdConn.ulConn_Type = pConnector-&gt;ulConnectorType;
     vsdConn.ulConn_Type = pConnector->ulConnectorType;
     vsdConn.ulIndex = pConnector-&gt;ulConnectorIndex;
     vsdConn.ulIndex = pConnector->ulConnectorIndex;


     lError = pInstance-&gt;pfnNewVSD(hvsd,
     lError = pInstance->pfnNewVSD(hvsd,
                                   VSD_QUERY,
                                   VSD_QUERY,
                                   VSD_QUERYCONNECTOR,
                                   VSD_QUERYCONNECTOR,
                                   (PVOID)&amp;vsdConn);
                                   (PVOID)&vsdConn);


     prConnector-&gt;ulReturn = vsdConn.fEnabled;</pre>
     prConnector->ulReturn = vsdConn.fEnabled;
</pre>


==VSD_QUERYDATATYPE==
This subcommand of the [[#VSD_QUERY|VSD_QUERY]] command queries if a particular set of data types are supported. The ''ulSamplingRate'', ''ulBitsPerSample'', ''ulChannels'', and ''ulDataType'' will be filled in on input. The ''ulDataSubType'' is filled in by the VSD on output. If the current mode is not supported, the VSD should fill in the ''ulSamplingRate'', ''ulBitsPerSample'', and ''ulChannels'' with the closest that it supports.


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


=== VSD_QUERYCONNECTOR - Topics ===
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_QUERY|VSD_QUERY]].


Select an item:
'''ulFlags''' (ULONG) Set to VSD_QUERYDATATYPE.


<pre class="western">Syntax
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_AUDIODATATYPE_PARMS|PVSD_AUDIODATATYPE_PARMS]]) Pointer to the VSD_AUDIODATATYPE_PARMS structure.
Returns
Example Code
Glossary </pre>


===Return Value===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command was successful.
*VSDERR_MISSING_PARAMETER
:One or more parameters are missing.


 
===Remarks ===
 
=== VSD_QUERYDATATYPE ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries if a particular set of data types are supported. The ''ulSamplingRate'', ''ulBitsPerSample'', ''ulChannels'', and ''ulDataType''will be filled in on input. The ''ulDataSubType''is filled in by the VSD on output. If the current mode is not supported, the VSD should fill in the ''ulSamplingRate'', ''ulBitsPerSample'', and ''ulChannels''with the closest that it supports.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYDATATYPE.
 
'''pRequest'''([[01124.htm|PVSD_AUDIODATATYPE_PARMS]]) Pointer to the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERYDATATYPE Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_QUERYDATATYPE Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
 
 
 
 
=== VSD_QUERYDATATYPE Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYDATATYPE.
 
 
 
 
 
=== VSD_QUERYDATATYPE Parameter - pRequest ===
 
'''pRequest'''([[01124.htm|PVSD_AUDIODATATYPE_PARMS]]) Pointer to the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure.
 
 
 
 
 
=== VSD_QUERYDATATYPE Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERYDATATYPE - Syntax ===
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries if a particular set of data types are supported. The ''ulSamplingRate'', ''ulBitsPerSample'', ''ulChannels'', and ''ulDataType''will be filled in on input. The ''ulDataSubType''is filled in by the VSD on output. If the current mode is not supported, the VSD should fill in the ''ulSamplingRate'', ''ulBitsPerSample'', and ''ulChannels''with the closest that it supports.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYDATATYPE.
 
'''pRequest'''([[01124.htm|PVSD_AUDIODATATYPE_PARMS]]) Pointer to the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_QUERYDATATYPE - Remarks ===
 
This command is typically sent by applications which need to determine if the VSD supports a particular datatype.
This command is typically sent by applications which need to determine if the VSD supports a particular datatype.


 
===Example Code ===
 
 
 
=== VSD_QUERYDATATYPE - Example Code ===
 
The following code illustrates the use of VSD_QUERYDATATYPE:
The following code illustrates the use of VSD_QUERYDATATYPE:
 
<pre>
<pre class="western"> HVSD                      hvsd;
HVSD                      hvsd;
  VSD_AUDIODATATYPE_PARMS    AudioCaps;
  VSD_AUDIODATATYPE_PARMS    AudioCaps;


Line 1,768: Line 452:
   * connector.
   * connector.
   *---------------------------------------*/
   *---------------------------------------*/
   rc =  pInstance-&gt;pfnNewVSD( hvsd ,
   rc =  pInstance->pfnNewVSD( hvsd,
                               VSD_QUERY,
                               VSD_QUERY,
                               VSD_QUERYDATATYPE,
                               VSD_QUERYDATATYPE,
                               (PVOID ) &amp;AudioCaps );
                               (PVOID ) &AudioCaps );


   if ( rc )
   if ( rc )
Line 1,785: Line 469:
   return ( rc );
   return ( rc );


       } /* TestConnection */</pre>
       } /* TestConnection */
</pre>


==VSD_QUERYMIXCONNECTIONS==
This subcommand of the [[#VSD_QUERY|VSD_QUERY]] command queries the output that a particular VSD line (or connector) is routed to. For further information about VSD mixer support and functions, see [[Audio Sample for Vendor-Specific Drivers]] and [[MMPM/2 Device Driver Reference:IOCtl Functions#Mixer IOCtl Functions Introduction|Mixer IOCtl Functions Introduction]]


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


=== Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


=== VSD_QUERYDATATYPE - Topics ===
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_QUERY|VSD_QUERY]].


Select an item:
'''ulFlags''' (ULONG) Set to VSD_QUERYMIXCONNECTIONS.


<pre class="western">Syntax
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#LINECONNECTIONS|PLINECONNECTIONS]]) A pointer to the LINECONNECTIONS structure.
Returns
Remarks
Example Code
Glossary </pre>


=== Return Value ===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_MISSING_PARAMETER
:One or more parameters are missing.
*VSDERR_INVALID_SOURCE
:Invalid source.
*VSDERR_INVALID_SINK
:Invalid sink.
*VSDERR_INVALID_CONNECTION
:Invalid connection.


=== Remarks ===
The ''ulConnections'' field of the [[MMPM/2 Device Driver Reference:Data Types#LINECONNECTIONS|LINECONNECTIONS]] structure returns the particular output that a line is routed to. The ''ulLine'' field of the LINECONNECTIONS structure must contain a valid line on input. For more information on the values for ''ulLine'' and ''ulConnections'', see the LINECONNECTIONS structure.


 
=== Example Code ===
=== VSD_QUERYMIXCONNECTIONS ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the output that a particular VSD line (or connector) is routed to. For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMIXCONNECTIONS.
 
'''pRequest'''([[00812.htm|PLINECONNECTIONS]]) A pointer to the [[00812.htm|LINECONNECTIONS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_QUERYMIXCONNECTIONS Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_QUERYMIXCONNECTIONS Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
 
 
 
 
=== VSD_QUERYMIXCONNECTIONS Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMIXCONNECTIONS.
 
 
 
 
 
=== VSD_QUERYMIXCONNECTIONS Parameter - pRequest ===
 
'''pRequest'''([[00812.htm|PLINECONNECTIONS]]) A pointer to the [[00812.htm|LINECONNECTIONS]]structure.
 
 
 
 
 
=== VSD_QUERYMIXCONNECTIONS Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_QUERYMIXCONNECTIONS - Syntax ===
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the output that a particular VSD line (or connector) is routed to. For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMIXCONNECTIONS.
 
'''pRequest'''([[00812.htm|PLINECONNECTIONS]]) A pointer to the [[00812.htm|LINECONNECTIONS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_QUERYMIXCONNECTIONS - Remarks ===
 
The ''ulConnections''field of the [[00812.htm|LINECONNECTIONS]]structure returns the particular output that a line is routed to. The ''ulLine''field of the [[00812.htm|LINECONNECTIONS]]structure must contain a valid line on input. For more information on the values for ''ulLine''and ''ulConnections'', see the [[00812.htm|LINECONNECTIONS]]structure.
 
 
 
 
 
=== VSD_QUERYMIXCONNECTIONS - Example Code ===
 
The following code illustrates how to query the output that a particular line is routed to.
The following code illustrates how to query the output that a particular line is routed to.
 
<pre>
<pre class="western"> HVSD              hvsd;
  HVSD              hvsd;
   LINECONNECTIONS  LineCon;
   LINECONNECTIONS  LineCon;


Line 1,948: Line 514:
  /* Ask VSD for the capabilities of this line. */
  /* Ask VSD for the capabilities of this line. */


   rc = pInstance-&gt;(hvsd,
   rc = pInstance->(hvsd,
                   VSD_QUERY,
                   VSD_QUERY,
                   VSD_QUERYMIXCONNECTIONS,
                   VSD_QUERYMIXCONNECTIONS,
                   (PVOID)&amp;LineCon);
                   (PVOID)&LineCon);


  /* Are we connected to the amp or record outputs... */
  /* Are we connected to the amp or record outputs... */


   if (LineCon.ulConnection &amp; (SINK_SPEAKERS))
   if (LineCon.ulConnection & (SINK_SPEAKERS))
     {
     {
     pMixParms-&gt;ulReturn = MCI_OUTPUT_AMP;
     pMixParms->ulReturn = MCI_OUTPUT_AMP;
     }
     }
   else
   else
     {
     {
     pMixParms-&gt;ulReturn = MCI_OUTPUT_DIGITALAUDIO;
     pMixParms->ulReturn = MCI_OUTPUT_DIGITALAUDIO;
     }</pre>
     }
</pre>


==VSD_QUERYMIXCONTROL==
This subcommand of the [[#VSD_QUERY|VSD_QUERY]] command queries the audio attributes for an audio VSD connector (for example, the treble setting on a microphone connector). For further information about VSD mixer support and functions, see [[Audio Sample for Vendor-Specific Drivers]] and [[MMPM/2 Device Driver Reference:IOCtl Functions#Mixer IOCtl Functions Introduction|Mixer IOCtl Functions Introduction]]


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


=== VSD_QUERYMIXCONNECTIONS - Topics ===
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_QUERY|VSD_QUERY]].


Select an item:
'''ulFlags''' (ULONG) Set to VSD_QUERYMIXCONTROL.


<pre class="western">Syntax
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#MIXERCONTROL|PMIXERCONTROL]]) A pointer to the [[MMPM/2 Device Driver Reference:Data Types#MIXERCONTROL|MIXERCONTROL]] structure.
Returns
Remarks
Example Code
Glossary </pre>


=== Return Value ===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_MISSING_PARAMETER
:One or more parameters are missing.
*VSDERR_INVALID_SOURCE
:Invalid source.
*VSDERR_INVALID_SINK
:Invalid sink.
*VSDERR_INVALID_CONNECTION
:Invalid connection.


===Remarks ===
The ''ulLine'' field of the [[MMPM/2 Device Driver Reference:Data Types#MIXERCONTROL|MIXERCONTROL]] structure must be filled in with one of the VSD sources/sinks in the low-order byte of the low word.


The ''ulControl'' field of the MIXERCONTROL structure must be filled in with the desired setting. For stereo controls, the high-order word of this field contains the left channel setting and the low-order word contains the right channel setting. A value of 0xFFFF represents full intensity and a value of 0x0000 is full cutout.


=== VSD_QUERYMIXCONTROL ===
===Example Code ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the audio attributes for an audio VSD connector (for example, the treble setting on a microphone connector). For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMIXCONTROL.
 
'''pRequest'''([[00930.htm|PMIXERCONTROL]]) A pointer to the [[00930.htm|MIXERCONTROL]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_QUERYMIXCONTROL Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_QUERYMIXCONTROL Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
 
 
 
 
=== VSD_QUERYMIXCONTROL Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMIXCONTROL.
 
 
 
 
 
=== VSD_QUERYMIXCONTROL Parameter - pRequest ===
 
'''pRequest'''([[00930.htm|PMIXERCONTROL]]) A pointer to the [[00930.htm|MIXERCONTROL]]structure.
 
 
 
 
 
=== VSD_QUERYMIXCONTROL Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_QUERYMIXCONTROL - Syntax ===
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the audio attributes for an audio VSD connector (for example, the treble setting on a microphone connector). For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMIXCONTROL.
 
'''pRequest'''([[00930.htm|PMIXERCONTROL]]) A pointer to the [[00930.htm|MIXERCONTROL]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_QUERYMIXCONTROL - Remarks ===
 
The ''ulLine''field of the [[00930.htm|MIXERCONTROL]]structure must be filled in with one of the VSD sources/sinks in the low-order byte of the low word.
 
The ''ulControl''field of the [[00930.htm|MIXERCONTROL]]structure must be filled in with the desired setting. For stereo controls, the high-order word of this field contains the left channel setting and the low-order word contains the right channel setting. A value of 0xFFFF represents full intensity and a value of 0x0000 is full cutout.
 
 
 
 
 
=== VSD_QUERYMIXCONTROL - Example Code ===
 
The following code illustrates how to query the settings of audio attributes for a particular connector.
The following code illustrates how to query the settings of audio attributes for a particular connector.
 
<pre>
<pre class="western"> HVSD          hvsd;
  HVSD          hvsd;
   MIXERCONTROL  MixerControl;
   MIXERCONTROL  MixerControl;
   USHORT        usBass;
   USHORT        usBass;
Line 2,128: Line 576:


   MixerControl.ulControl = MIX_BASS;
   MixerControl.ulControl = MIX_BASS;
   rc = pInstance-&gt;(hvsd,
   rc = pInstance->(hvsd,
                   VSD_QUERY,
                   VSD_QUERY,
                   VSD_QUERYMIXCONTROL,
                   VSD_QUERYMIXCONTROL,
                   (PVOID)&amp;MixerControl);
                   (PVOID)&MixerControl);


     usBass = (MixControl.ulSetting)
     usBass = (MixControl.ulSetting)


     }</pre>
     }
 
</pre>
 
 
 
=== VSD_QUERYMIXCONTROL - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
 
 
 
=== VSD_QUERYMIXLINE ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the audio attributes that are supported for the given VSD connector. For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_QUERY.
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMIXLINE.
 
'''pRequest'''([[00935.htm|PMIXERLINEINFO]]) A pointer to the [[00935.htm|MIXERLINEINFO]]structure. The ''ulSupport''field will be filled by the VSD with the supported setting or settings if the line supports multiple settings. The ''ulLine''field must be filled in by the caller.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_QUERYMIXLINE Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_QUERYMIXLINE Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_QUERY.
 
 
 
 
 
=== VSD_QUERYMIXLINE Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMIXLINE.
 
 
 
 
 
=== VSD_QUERYMIXLINE Parameter - pRequest ===
 
'''pRequest'''([[00935.htm|PMIXERLINEINFO]]) A pointer to the [[00935.htm|MIXERLINEINFO]]structure. The ''ulSupport''field will be filled by the VSD with the supported setting or settings if the line supports multiple settings. The ''ulLine''field must be filled in by the caller.
 
 
 
 
 
=== VSD_QUERYMIXLINE Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_QUERYMIXLINE - Syntax ===
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the audio attributes that are supported for the given VSD connector. For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_QUERY.
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMIXLINE.
 
'''pRequest'''([[00935.htm|PMIXERLINEINFO]]) A pointer to the [[00935.htm|MIXERLINEINFO]]structure. The ''ulSupport''field will be filled by the VSD with the supported setting or settings if the line supports multiple settings. The ''ulLine''field must be filled in by the caller.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:


VSDERR_INVALID_SOURCE Invalid source.
==VSD_QUERYMIXLINE==
This subcommand of the [[#VSD_QUERY|VSD_QUERY]] command queries the audio attributes that are supported for the given VSD connector. For further information about VSD mixer support and functions, see [[Audio Sample for Vendor-Specific Drivers]] and [[MMPM/2 Device Driver Reference:IOCtl Functions#Mixer IOCtl Functions Introduction|Mixer IOCtl Functions Introduction]]


VSDERR_INVALID_SINK Invalid sink.
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


VSDERR_INVALID_CONNECTION Invalid connection.
===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_QUERY.


'''ulFlags''' (ULONG) Set to VSD_QUERYMIXLINE.


'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#MIXERLINEINFO|PMIXERLINEINFO]]) A pointer to the MIXERLINEINFO structure. The ''ulSupport'' field will be filled by the VSD with the supported setting or settings if the line supports multiple settings. The ''ulLine'' field must be filled in by the caller.


===Return Value ===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_INVALID_SOURCE
:Invalid source.
*VSDERR_INVALID_SINK
:Invalid sink.
*VSDERR_INVALID_CONNECTION
:Invalid connection.


=== VSD_QUERYMIXLINE - Example Code ===
===Example Code ===
 
The following code illustrates how to query the supported audio attributes from a mixer connector.
The following code illustrates how to query the supported audio attributes from a mixer connector.
 
<pre>
<pre class="western">HVSD              hvsd;
HVSD              hvsd;
MIXERLINEINFO      mixerinfo;
MIXERLINEINFO      mixerinfo;
   mixerinfo.ulLine = SYNTHESIZER_INPUT;
   mixerinfo.ulLine = SYNTHESIZER_INPUT;
   mixerinfo.ulLength = sizeof(MIXERLINEINFO);
   mixerinfo.ulLength = sizeof(MIXERLINEINFO);
       rc = pInstance-&gt;pfnAUDIOIF( hsvd,
       rc = pInstance->pfnAUDIOIF( hsvd,
                                   VSD_QUERY,
                                   VSD_QUERY,
                                   VSD_QUERYMIXLINE,
                                   VSD_QUERYMIXLINE,
                                   (PVOID) &amp;mixerinfo);
                                   (PVOID) &mixerinfo);


   if(!rc)
   if(!rc)
       if(mixerinfo.ulSupport &amp; MIX_VOLUME)
       if(mixerinfo.ulSupport & MIX_VOLUME)
           {
           {
           /* process volume */
           /* process volume */
           }
           }


         }  /* If no errors */</pre>
         }  /* If no errors */
 
</pre>
 
 
 
=== VSD_QUERYMIXLINE - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 


==VSD_QUERYMONITOR==
This subcommand of the [[#VSD_QUERY|VSD_QUERY]] command queries the device to determine if audio monitoring is enabled. The VSD returns TRUE if the monitor is enabled and FALSE if it is disabled.


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


=== VSD_QUERYMONITOR ===
===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD instance.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_QUERY|VSD_QUERY]].


-----
'''ulFlags''' (ULONG) Set to VSD_QUERYMONITOR.


Select an item:
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|PULONG]]) Output.


<pre class="western">Syntax
===Return Value===
Returns
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) VSD returns TRUE if the monitor is enabled and FALSE if it is disabled.
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the device to determine if audio monitoring is enabled. The VSD returns TRUE if the monitor is enabled and FALSE if it is disabled.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD instance.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMONITOR.
 
'''pRequest'''([[00998.htm|PULONG]]) Output.
 
'''rc'''([[00998.htm|ULONG]]) VSD returns TRUE if the monitor is enabled and FALSE if it is disabled.
 
 
 
 
 
=== VSD_QUERYMONITOR Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD instance.
 
 
 
 
 
=== VSD_QUERYMONITOR Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
 
 
 
 
=== VSD_QUERYMONITOR Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMONITOR.
 
 
 
 
 
=== VSD_QUERYMONITOR Parameter - pRequest ===
 
'''pRequest'''([[00998.htm|PULONG]]) Output.
 
 
 
 
 
=== VSD_QUERYMONITOR Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) VSD returns TRUE if the monitor is enabled and FALSE if it is disabled.
 
 
 
 
 
=== VSD_QUERYMONITOR - Syntax ===
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the device to determine if audio monitoring is enabled. The VSD returns TRUE if the monitor is enabled and FALSE if it is disabled.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD instance.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYMONITOR.
 
'''pRequest'''([[00998.htm|PULONG]]) Output.
 
'''rc'''([[00998.htm|ULONG]]) VSD returns TRUE if the monitor is enabled and FALSE if it is disabled.
 
 
 
 
 
=== VSD_QUERYMONITOR - Example Code ===


===Example Code ===
The following code illustrates how to query the state of monitoring.
The following code illustrates how to query the state of monitoring.
 
<pre>
<pre class="western">rc = pInstance-&gt;pfnAUDIOIF((HVSD)pInstance-&gt;hvsd,
rc = pInstance->pfnAUDIOIF((HVSD)pInstance->hvsd,
                           VSD_QUERY,
                           VSD_QUERY,
                           VSD_QUERYMONITOR,
                           VSD_QUERYMONITOR,
                           (PVOID)&amp;pStat-&gt;ulReturn);</pre>
                           (PVOID)&pStat->ulReturn);
 
</pre>
 
 
 
=== VSD_QUERYMONITOR - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
 
 
 
=== VSD_QUERYSTATUSLEVEL ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Glossary </pre>
 
-----
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the status of the audio input level (percentage). This command is optional.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYSTATUSLEVEL.
 
'''pRequest'''([[00998.htm|PULONG]]) Current level of device.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_QUERYSTATUSLEVEL Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_QUERYSTATUSLEVEL Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
 
 
 
 
=== VSD_QUERYSTATUSLEVEL Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYSTATUSLEVEL.
 
 
 
 
 
=== VSD_QUERYSTATUSLEVEL Parameter - pRequest ===
 
'''pRequest'''([[00998.htm|PULONG]]) Current level of device.
 
 
 
 
 
=== VSD_QUERYSTATUSLEVEL Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_QUERYSTATUSLEVEL - Syntax ===
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the status of the audio input level (percentage). This command is optional.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYSTATUSLEVEL.
 
'''pRequest'''([[00998.htm|PULONG]]) Current level of device.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_QUERYSTATUSLEVEL - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Glossary </pre>
 
 
 


=== VSD_QUERYVOLUME ===
==VSD_QUERYSTATUSLEVEL==
This subcommand of the [[#VSD_QUERY|VSD_QUERY]] command queries the status of the audio input level (percentage). This command is optional.


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


-----
===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


Select an item:
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_QUERY|VSD_QUERY]].


<pre class="western">Syntax
'''ulFlags''' (ULONG) Set to VSD_QUERYSTATUSLEVEL.
Returns
Remarks
Example Code
Glossary </pre>


-----
'''pRequest''' (PULONG) Current level of device.


This subcommand of the [[00300.htm|VSD_QUERY]]command queries the volume level. The volume is returned as a percentage between 0% and 100%
===Return Value===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command was successful.


This command is sent using [[00235.htm|VSDEntry]]as follows:
==VSD_QUERYVOLUME==
This subcommand of the [[#VSD_QUERY|VSD_QUERY]] command queries the volume level. The volume is returned as a percentage between 0% and 100%


<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_QUERY|VSD_QUERY]].


'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
'''ulFlags''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_QUERYVOLUME.


'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYVOLUME.
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_VOLUME_PARMS|PVSD_VOLUME_PARMS]]) Pointer to the VSD_VOLUME_PARMS structure.


'''pRequest'''([[01194.htm|PVSD_VOLUME_PARMS]]) Pointer to the [[01194.htm|VSD_VOLUME_PARMS]]structure.
=== Return Value===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command was successful. field.


'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
=== Remarks ===
 
On return, the VSD will fill in the ''ulVolume'' field of the [[MMPM/2 Device Driver Reference:Data Types#VSD_VOLUME_PARMS|VSD_VOLUME_PARMS]] structure.
VSDERR_SUCCESS The command was successful. field.
 
 
 
 
 
=== VSD_QUERYVOLUME Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_QUERYVOLUME Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
 
 
 
 
=== VSD_QUERYVOLUME Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYVOLUME.
 
 
 
 
 
=== VSD_QUERYVOLUME Parameter - pRequest ===
 
'''pRequest'''([[01194.htm|PVSD_VOLUME_PARMS]]) Pointer to the [[01194.htm|VSD_VOLUME_PARMS]]structure.
 
 
 
 
 
=== VSD_QUERYVOLUME Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful. field.
 
 
 
 
 
=== VSD_QUERYVOLUME - Syntax ===
 
This subcommand of the [[00300.htm|VSD_QUERY]]command queries the volume level. The volume is returned as a percentage between 0% and 100%
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00300.htm|VSD_QUERY]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_QUERYVOLUME.
 
'''pRequest'''([[01194.htm|PVSD_VOLUME_PARMS]]) Pointer to the [[01194.htm|VSD_VOLUME_PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful. field.
 
 
 
 
 
=== VSD_QUERYVOLUME - Remarks ===
 
On return, the VSD will fill in the ''ulVolume''field of the [[01194.htm|VSD_VOLUME_PARMS]]structure.
 
 
 
 
 
=== VSD_QUERYVOLUME - Example Code ===


=== Example Code ===
The following code illustrates how to query audio volume from the VSD.
The following code illustrates how to query audio volume from the VSD.
 
<pre>
<pre class="western">VSD_VOLUME_PARMS  vsdVol;
VSD_VOLUME_PARMS  vsdVol;
ULONG              ulVol;
ULONG              ulVol;
   vsdVol.ulLength = sizeof(VSD_VOLUME_PARMS);
   vsdVol.ulLength = sizeof(VSD_VOLUME_PARMS);
Line 2,667: Line 713:
   *------------------------------------------*/
   *------------------------------------------*/


rc = pInstance-&gt;pfnAUDIOIF((HVSD)pInstance-&gt;hvsd,
rc = pInstance->pfnAUDIOIF((HVSD)pInstance->hvsd,
                           VSD_QUERY,
                           VSD_QUERY,
                           VSD_QUERYVOLUME,
                           VSD_QUERYVOLUME,
                           (PVOID)&amp;vsdVol);
                           (PVOID)&vsdVol);
ulVol = vsdvol.ulVolume;</pre>
ulVol = vsdvol.ulVolume;
 
</pre>
 
 
 
=== VSD_QUERYVOLUME - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
 
 
 
=== VSD_RESOURCE ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----


==VSD_RESOURCE==
This command can be issued only when the device is opened and is used for resource management.
This command can be issued only when the device is opened and is used for resource management.


VSD_RESOURCE is a required command and must be implemented by all VSD writers.
VSD_RESOURCE is a required command and must be implemented by all VSD writers.


This command is sent using [[00235.htm|VSDEntry]]as follows:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
 
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_RESOURCE.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01187.htm|PVSD_RESOURCE_PARMS]]) Pointer to the [[01187.htm|VSD_RESOURCE_PARMS]]data structure.
 
The driver is responsible for filling in the ''ulResUnits''and ''ulClass''fields. The caller is responsible for filling in the ''ulDataType''field.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS Command completed successfully.
 
VSDERR_MISSING_PARAMETER One or more parameters is missing.
 
 
 
 


=== VSD_RESOURCE Parameter - hvsd ===
===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_RESOURCE.


'''ulFlags''' (ULONG) No flags used for this command.


'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_RESOURCE_PARMS|PVSD_RESOURCE_PARMS]]) Pointer to the VSD_RESOURCE_PARMS data structure.


The driver is responsible for filling in the ''ulResUnits'' and ''ulClass'' fields. The caller is responsible for filling in the ''ulDataType'' field.


===Return Value===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:Command completed successfully.
*VSDERR_MISSING_PARAMETER
:One or more parameters is missing.


=== VSD_RESOURCE Parameter - ulFunc ===
===Remarks ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_RESOURCE.
 
 
 
 
 
=== VSD_RESOURCE Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
 
 
 
 
=== VSD_RESOURCE Parameter - pRequest ===
 
'''pRequest'''([[01187.htm|PVSD_RESOURCE_PARMS]]) Pointer to the [[01187.htm|VSD_RESOURCE_PARMS]]data structure.
 
The driver is responsible for filling in the ''ulResUnits''and ''ulClass''fields. The caller is responsible for filling in the ''ulDataType''field.
 
 
 
 
 
=== VSD_RESOURCE Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS Command completed successfully.
 
VSDERR_MISSING_PARAMETER One or more parameters is missing.
 
 
 
 
 
=== VSD_RESOURCE - Syntax ===
 
This command can be issued only when the device is opened and is used for resource management.
 
VSD_RESOURCE is a required command and must be implemented by all VSD writers.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_RESOURCE.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01187.htm|PVSD_RESOURCE_PARMS]]) Pointer to the [[01187.htm|VSD_RESOURCE_PARMS]]data structure.
 
The driver is responsible for filling in the ''ulResUnits''and ''ulClass''fields. The caller is responsible for filling in the ''ulDataType''field.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS Command completed successfully.
 
VSDERR_MISSING_PARAMETER One or more parameters is missing.
 
 
 
 
 
=== VSD_RESOURCE - Remarks ===
 
When an audio device driver is installed in MMPM/2, the installation routines place the following three keywords in the MMPM2.INI file:
When an audio device driver is installed in MMPM/2, the installation routines place the following three keywords in the MMPM2.INI file:
 
*RESOURCEUNITS=
�RESOURCEUNITS=
*RESOURCECLASS=
 
*VALIDCOMBINATIONS=
�RESOURCECLASS=
 
�VALIDCOMBINATIONS=
 
Because MMPM/2 allows many applications to simultaneously open the audio card, it uses these keywords to determine which applications can simultaneously use the audio device. All of the numbers are arbitrary and are defined on a device-by-device basis. However, device driver writers should use the numbering scheme defined below:
Because MMPM/2 allows many applications to simultaneously open the audio card, it uses these keywords to determine which applications can simultaneously use the audio device. All of the numbers are arbitrary and are defined on a device-by-device basis. However, device driver writers should use the numbering scheme defined below:


The keyword '''RESOURCECLASSES'''indicates the different resource types available on the audio device. ''The first parameter is the number of classes and it is followed by a listing of classes. A vendor should provide a class for each data type that they support''. For instance, if the XYZ audio card can only play PCM files, it would only have one resource class - the PCM class. However, if the ABC audio card can play PCM, MIDI, and ADPCM, then it would have three classes. The VSD should fill in the ''ulClass''field with the class that is appropriate for this mode.
The keyword '''RESOURCECLASSES''' indicates the different resource types available on the audio device. ''The first parameter is the number of classes and it is followed by a listing of classes. A vendor should provide a class for each data type that they support''. For instance, if the XYZ audio card can only play PCM files, it would only have one resource class - the PCM class. However, if the ABC audio card can play PCM, MIDI, and ADPCM, then it would have three classes. The VSD should fill in the ''ulClass'' field with the class that is appropriate for this mode.
 
The keyword '''RESOURCEUNITS'''indicates the maximum number of instances that can be active on the card at any particular time. For example, if the XYZ card mentioned above had the ability to play three PCM files at the same time, the RESOURCEUNITS for this card would be three. In contrast, the ABC card can only play one PCM file and one MIDI file at any one time. Therefore, its resource units should be two. The VSD should fill in the ''ulResUnits''field with the correct number of resources for the current mode (typically, one).


The keyword '''RESOURCEUNITS''' indicates the maximum number of instances that can be active on the card at any particular time. For example, if the XYZ card mentioned above had the ability to play three PCM files at the same time, the RESOURCEUNITS for this card would be three. In contrast, the ABC card can only play one PCM file and one MIDI file at any one time. Therefore, its resource units should be two. The VSD should fill in the ''ulResUnits'' field with the correct number of resources for the current mode (typically, one).


 
=== Example Code ===
 
 
=== VSD_RESOURCE - Example Code ===
 
The following code illustrates how to determine the number of resources consumed for a particular mode on an audio VSD.
The following code illustrates how to determine the number of resources consumed for a particular mode on an audio VSD.
 
<pre>
<pre class="western"> HVSD  hvsd;
HVSD  hvsd;
   rc = pInstance-&gt;pfnAUDIOIF( hvsd,
   rc = pInstance->pfnAUDIOIF( hvsd,
                               VSD_RESOURCE,
                               VSD_RESOURCE,
                               0L,
                               0L,
                               (PVOID)&amp;vsdResourceParms );
                               (PVOID)&vsdResourceParms );
 
  pInstance-&gt;ulResourcesUsed = vsdResourceParms.ulResUnits;
  pInstance-&gt;ulClass = vsdResourceParms.ulClass;</pre>
 


  pInstance->ulResourcesUsed = vsdResourceParms.ulResUnits;
  pInstance->ulClass = vsdResourceParms.ulClass;
</pre>


 
==VSD_RESTORE==
=== VSD_RESOURCE - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
 
 
 
=== VSD_RESTORE ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----
 
This command restores the current state of the device. VSD_RESTORE is a required function and must be implemented by all VSD writers.
This command restores the current state of the device. VSD_RESTORE is a required function and must be implemented by all VSD writers.


This command is sent using [[00235.htm|VSDEntry]]as follows:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
=== Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_RESTORE.


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
'''ulFlags''' (ULONG) No flags used for this command.


'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_RESTORE.
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VOID|PVOID]]) Not used with this command.


'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
=== Return Value ===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command completed successfully.


'''pRequest'''([[01203.htm|PVOID]]) Not used with this command.
=== Remarks ===
MMPM/2 supports the concept of suspending and resuming the state of a device at any point in time. Unlike other environments, multiple applications can simultaneously have a device open and the Media Device Manager will cooperate with the VSD in order to manage the device. The VSD is responsible for saving and restoring the actual hardware device. For further information, see the ''[[OS/2 Multimedia Programming Reference]]'' (MCI_ RESTORE).


'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
=== Example Code ===
 
The following code illustrates how to activate an audio VSD using VSD_RESTORE.
VSDERR_SUCCESS The command completed successfully.
<pre>
 
  ULONG  rc;
 
 
 
 
=== VSD_RESTORE Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_RESTORE Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_RESTORE.
 
 
 
 
 
=== VSD_RESTORE Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
 
 
 
 
=== VSD_RESTORE Parameter - pRequest ===
 
'''pRequest'''([[01203.htm|PVOID]]) Not used with this command.
 
 
 
 
 
=== VSD_RESTORE Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command completed successfully.
 
 
 
 
 
=== VSD_RESTORE - Syntax ===
 
This command restores the current state of the device. VSD_RESTORE is a required function and must be implemented by all VSD writers.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_RESTORE.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01203.htm|PVOID]]) Not used with this command.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command completed successfully.
 
 
 
 
 
=== VSD_RESTORE - Remarks ===
 
MMPM/2 supports the concept of suspending and resuming the state of a device at any point in time. Unlike other environments, multiple applications can simultaneously have a device open and the Media Device Manager will cooperate with the VSD in order to manage the device. The VSD is responsible for saving and restoring the actual hardware device. For further information, see the ''OS/2 Multimedia Programming Reference''(MCI_ RESTORE).
 
 
 
 
 
=== VSD_RESTORE - Example Code ===
 
The following code illustrates how to activate an audio VSD using VSD_ RESTORE.
 
<pre class="western">   ULONG  rc;
   HVSD    hvsd;
   HVSD    hvsd;


       rc = pInstance-&gt;pfnAUDIOIF( hvsd,
       rc = pInstance->pfnAUDIOIF( hvsd,
                                   VSD_RESTORE,
                                   VSD_RESTORE,
                                   0L,
                                   0L,
                                   0 );
                                   0 );
       return(rc)</pre>
       return(rc)
 
</pre>
 
 
 
=== VSD_RESTORE - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
 
 
 
=== VSD_SAVE ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
-----


==VSD_SAVE==
This command saves the current state of the device. VSD_SAVE is a required function and must be implemented by all VSD writers.
This command saves the current state of the device. VSD_SAVE is a required function and must be implemented by all VSD writers.
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


This command is sent using [[00235.htm|VSDEntry]]as follows:
===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_SAVE.


'''ulFlags''' (ULONG) No flags used for this command.


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VOID|PVOID]]) Not used with this command.


'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_SAVE.
===Return Value===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command was successful.


'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
===Remarks===
MMPM/2 supports the concept of suspending and resuming the state of a device at any point in time. Unlike other environments, multiple applications can simultaneously have a device open and the Media Device Manager will cooperate with the VSD in order to manage the device. The VSD is responsible for saving and restoring the actual hardware device. For further information, see the ''[[OS/2 Multimedia Programming Reference]]'' (MCIDRV_ SAVE).


'''pRequest'''([[01203.htm|PVOID]]) Not used with this command.
===Example Code ===
 
The following code illustrates how to deactivate an audio VSD using VSD_SAVE.
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
<pre>
 
ULONG    rc;
VSDERR_SUCCESS The command was successful.
HVSD    hvsd;
 
 
rc = pInstance->pfnAUDIOIF( hvsd,
 
                            VSD_SAVE,
 
                            0L,
 
                            0 );
=== VSD_SAVE Parameter - hvsd ===
 
return(rc);
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
</pre>
 
 
 
 
 
=== VSD_SAVE Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_SAVE.
 
 
 
 
 
=== VSD_SAVE Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
 
 
 
 
=== VSD_SAVE Parameter - pRequest ===
 
'''pRequest'''([[01203.htm|PVOID]]) Not used with this command.
 
 
 
 
 
=== VSD_SAVE Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_SAVE - Syntax ===
 
This command saves the current state of the device. VSD_SAVE is a required function and must be implemented by all VSD writers.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_SAVE.
 
'''ulFlags'''([[00998.htm|ULONG]]) No flags used for this command.
 
'''pRequest'''([[01203.htm|PVOID]]) Not used with this command.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_SAVE - Remarks ===
 
MMPM/2 supports the concept of suspending and resuming the state of a device at any point in time. Unlike other environments, multiple applications can simultaneously have a device open and the Media Device Manager will cooperate with the VSD in order to manage the device. The VSD is responsible for saving and restoring the actual hardware device. For further information, see the ''OS/2 Multimedia Programming Reference''(MCIDRV_ SAVE).
 
 
 
 
 
=== VSD_SAVE - Example Code ===
 
The following code illustrates how to deactivate an audio VSD using VSD_ SAVE.
 
<pre class="western">   ULONG    rc;
  HVSD    hvsd;
 
    rc = pInstance-&gt;pfnAUDIOIF( hvsd,
                                VSD_SAVE,
                                0L,
                                0 );
 
    return(rc);</pre>
 
 
 
 
=== VSD_SAVE - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Example Code
Glossary </pre>
 
 
 
 
=== VSD_SET ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Glossary </pre>
 
-----
 
This command allows an application to modify the settings of the VSD.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_SET.
 
'''ulFlags'''([[00998.htm|ULONG]]) The following flags can be used with VSD_SET.
 
VSD_SETAUDIOATTRIBUTES See [[00433.htm|VSD_SETAUDIOATTRIBUTES]]
 
VSD_SETCONNECTOR See [[00442.htm|VSD_SETCONNECTOR]]
 
VSD_SETDATATYPE See [[00451.htm|VSD_SETDATATYPE]]
 
VSD_SETMIXCONNECTIONS See [[00460.htm|VSD_SETMIXCONNECTIONS]]
 
VSD_SETMIXCONTROL See [[00469.htm|VSD_SETMIXCONTROL]]
 
VSD_SETMONITOR See [[00478.htm|VSD_SETMONITOR]]
 
VSD_SETVOLUME See [[00487.htm|VSD_SETVOLUME]]
 
'''pRequest'''([[01203.htm|PVOID]]) Pointer value varies according to the value of ''ulFlags''.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_INVALID_HVSD The ''hvsd''(VSD handle) is not valid. Verify that the ''hvsd''matches the one provided on the [[00290.htm|VSD_OPEN]].
 
 
 
 
 
=== VSD_SET Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to VSD.
 
 
 
 
 
=== VSD_SET Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_SET.
 
 
 
 
 
=== VSD_SET Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) The following flags can be used with VSD_SET.
 
VSD_SETAUDIOATTRIBUTES See [[00433.htm|VSD_SETAUDIOATTRIBUTES]]
 
VSD_SETCONNECTOR See [[00442.htm|VSD_SETCONNECTOR]]
 
VSD_SETDATATYPE See [[00451.htm|VSD_SETDATATYPE]]
 
VSD_SETMIXCONNECTIONS See [[00460.htm|VSD_SETMIXCONNECTIONS]]
 
VSD_SETMIXCONTROL See [[00469.htm|VSD_SETMIXCONTROL]]
 
VSD_SETMONITOR See [[00478.htm|VSD_SETMONITOR]]
 
VSD_SETVOLUME See [[00487.htm|VSD_SETVOLUME]]
 
 
 
 
 
=== VSD_SET Parameter - pRequest ===
 
'''pRequest'''([[01203.htm|PVOID]]) Pointer value varies according to the value of ''ulFlags''.
 
 
 
 
 
=== VSD_SET Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_INVALID_HVSD The ''hvsd''(VSD handle) is not valid. Verify that the ''hvsd''matches the one provided on the [[00290.htm|VSD_OPEN]].
 
 
 
 
 
=== VSD_SET - Syntax ===


==VSD_SET==
This command allows an application to modify the settings of the VSD.
This command allows an application to modify the settings of the VSD.


This command is sent using [[00235.htm|VSDEntry]]as follows:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to VSD.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_SET.


'''hvsd'''([[00810.htm|HVSD]]) Handle to VSD.
'''ulFlags''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) The following flags can be used with VSD_SET.
*VSD_SETAUDIOATTRIBUTES
:See [[#VSD_SETAUDIOATTRIBUTES|VSD_SETAUDIOATTRIBUTES]]
*VSD_SETCONNECTOR
:See [[#VSD_SETCONNECTOR|VSD_SETCONNECTOR]]
*VSD_SETDATATYPE
:See [[#VSD_SETDATATYPE|VSD_SETDATATYPE]]
*VSD_SETMIXCONNECTIONS
:See [[#VSD_SETMIXCONNECTIONS|VSD_SETMIXCONNECTIONS]]
*VSD_SETMIXCONTROL
:See [[#VSD_SETMIXCONTROL|VSD_SETMIXCONTROL]]
*VSD_SETMONITOR
: See [[#VSD_SETMONITOR|VSD_SETMONITOR]]
*VSD_SETVOLUME
:See [[#VSD_SETVOLUME|VSD_SETVOLUME]]


'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_SET.
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VOID|PVOID]]) Pointer value varies according to the value of ''ulFlags''.


'''ulFlags'''([[00998.htm|ULONG]]) The following flags can be used with VSD_SET.
=== Return Value===
 
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
VSD_SETAUDIOATTRIBUTES See [[00433.htm|VSD_SETAUDIOATTRIBUTES]]
*VSDERR_INVALID_HVSD
 
:The ''hvsd''(VSD handle) is not valid. Verify that the ''hvsd''matches the one provided on the [[#VSD_OPEN|VSD_OPEN]].
VSD_SETCONNECTOR See [[00442.htm|VSD_SETCONNECTOR]]
 
VSD_SETDATATYPE See [[00451.htm|VSD_SETDATATYPE]]
 
VSD_SETMIXCONNECTIONS See [[00460.htm|VSD_SETMIXCONNECTIONS]]
 
VSD_SETMIXCONTROL See [[00469.htm|VSD_SETMIXCONTROL]]
 
VSD_SETMONITOR See [[00478.htm|VSD_SETMONITOR]]
 
VSD_SETVOLUME See [[00487.htm|VSD_SETVOLUME]]
 
'''pRequest'''([[01203.htm|PVOID]]) Pointer value varies according to the value of ''ulFlags''.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_INVALID_HVSD The ''hvsd''(VSD handle) is not valid. Verify that the ''hvsd''matches the one provided on the [[00290.htm|VSD_OPEN]].
 
 
 
 
 
=== VSD_SET - Remarks ===


=== Remarks ===
This messages uses flags to specify what to set on the adapter.
This messages uses flags to specify what to set on the adapter.


==VSD_SETAUDIOATTRIBUTES==
This subcommand of the [[#VSD_SET|VSD_SET]] command sets the audio attribute settings. A valid length must be placed in the ''ulLength'' field of the [[MMPM/2 Device Driver Reference:Data Types#VSD_ AUDIOATTRIBUTES_PARMS|VSD_ AUDIOATTRIBUTES_PARMS]] structure. The audio setting to modify (such as treble, bass, and so on) must be placed in the ''ulFlags'' field of the VSD_ AUDIOATTRIBUTES_PARMS structure with the actual corresponding setting in the ''ulValue'' field. The value should be between 0 and 100. The ''ulDelay'' indicates the length of time over which this effect should take place.


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_SET.


=== VSD_SET - Topics ===
'''ulFlags''' (ULONG) Set to VSD_SETAUDIOATTRIBUTES.
 
Select an item:
 
<pre class="western">Syntax
Returns
Remarks
Glossary </pre>
 
 
 
 
=== VSD_SETAUDIOATTRIBUTES ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00424.htm|VSD_SET]]command sets the audio attribute settings. A valid length must be placed in the ''ulLength''field of the [[01119.htm|VSD_ AUDIOATTRIBUTES_PARMS]]structure. The audio setting to modify (such as treble, bass, and so on) must be placed in the ''ulFlags''field of the [[01119.htm|VSD_ AUDIOATTRIBUTES_PARMS]]structure with the actual corresponding setting in the ''ulValue''field. The value should be between 0 and 100. The ''ulDelay''indicates the length of time over which this effect should take place.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_SET.
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETAUDIOATTRIBUTES.
 
'''pRequest'''([[01119.htm|PVSD_AUDIOATTRIBUTES_PARMS]]) Pointer to the [[01119.htm|VSD_AUDIOATTRIBUTES_ PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_SETAUDIOATTRIBUTES Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 


'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_ AUDIOATTRIBUTES_PARMS|PVSD_AUDIOATTRIBUTES_PARMS]]) Pointer to the VSD_AUDIOATTRIBUTES_PARMS structure.


===Return Value===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command was successful.
*VSDERR_MISSING_PARAMETER
:One or more parameters are missing.


 
=== Example Code ===
=== VSD_SETAUDIOATTRIBUTES Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_SET.
 
 
 
 
 
=== VSD_SETAUDIOATTRIBUTES Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETAUDIOATTRIBUTES.
 
 
 
 
 
=== VSD_SETAUDIOATTRIBUTES Parameter - pRequest ===
 
'''pRequest'''([[01119.htm|PVSD_AUDIOATTRIBUTES_PARMS]]) Pointer to the [[01119.htm|VSD_AUDIOATTRIBUTES_ PARMS]]structure.
 
 
 
 
 
=== VSD_SETAUDIOATTRIBUTES Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_SETAUDIOATTRIBUTES - Syntax ===
 
This subcommand of the [[00424.htm|VSD_SET]]command sets the audio attribute settings. A valid length must be placed in the ''ulLength''field of the [[01119.htm|VSD_ AUDIOATTRIBUTES_PARMS]]structure. The audio setting to modify (such as treble, bass, and so on) must be placed in the ''ulFlags''field of the [[01119.htm|VSD_ AUDIOATTRIBUTES_PARMS]]structure with the actual corresponding setting in the ''ulValue''field. The value should be between 0 and 100. The ''ulDelay''indicates the length of time over which this effect should take place.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to VSD_SET.
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETAUDIOATTRIBUTES.
 
'''pRequest'''([[01119.htm|PVSD_AUDIOATTRIBUTES_PARMS]]) Pointer to the [[01119.htm|VSD_AUDIOATTRIBUTES_ PARMS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
 
 
 
 
=== VSD_SETAUDIOATTRIBUTES - Example Code ===
 
The following code illustrates how to set audio attribute information.
The following code illustrates how to set audio attribute information.
 
<pre>
<pre class="western">VSD_AUDIOATTRIBUTES_PARMS  vsdAttr;
VSD_AUDIOATTRIBUTES_PARMS  vsdAttr;


     /* Prime the structure with necessary values */
     /* Prime the structure with necessary values */
Line 3,437: Line 917:
     *---------------------------------------------*/
     *---------------------------------------------*/


     rc = pInstance-&gt;pfnAUDIOIF((HVSD)pInstance-&gt;hvsd,
     rc = pInstance->pfnAUDIOIF((HVSD)pInstance->hvsd,
                                 VSD_SET,
                                 VSD_SET,
                                 VSD_SETAUDIOATTRIBUTES,
                                 VSD_SETAUDIOATTRIBUTES,
                                 (PVOID)&amp;vsdAttr);</pre>
                                 (PVOID)&vsdAttr);
 
</pre>
 
 
 
=== VSD_SETAUDIOATTRIBUTES - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
 
 
 
=== VSD_SETCONNECTOR ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00424.htm|VSD_SET]]command enables or disables a connector. (A connector can be a hardware or software connection on the device the VSD is controlling.) Note that enabling a connector can by default, disable another connector. For further information regarding connectors, refer to the MCI_CONNECTOR command in the ''OS/2 Multimedia Programming Reference''. Additional connectors can be found in MCIOS2.H.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETCONNECTOR.
 
'''pRequest'''([[01159.htm|PVSD_CONNECTOR_PARMS]]) A pointer to the [[01159.htm|VSD_CONNECTOR_PARMS]]structure.
 
The status of the connector, enable (VSD_ENABLE) or disable (VSD_DISABLE) must be indicated in the ''fEnabled''field. A valid connector must be placed in the ''ulConn_Type''field and a valid index in the ''ulIndex''field.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_UNSUPPORTED_CONNECTOR Connector setting is not supported.
 
VSDERR_INVALID_CONNECTOR Connector setting is invalid.
 
 
 
 
 
=== VSD_SETCONNECTOR Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_SETCONNECTOR Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
 
 
 
 
=== VSD_SETCONNECTOR Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETCONNECTOR.
 
 
 
 
 
=== VSD_SETCONNECTOR Parameter - pRequest ===
 
'''pRequest'''([[01159.htm|PVSD_CONNECTOR_PARMS]]) A pointer to the [[01159.htm|VSD_CONNECTOR_PARMS]]structure.
 
The status of the connector, enable (VSD_ENABLE) or disable (VSD_DISABLE) must be indicated in the ''fEnabled''field. A valid connector must be placed in the ''ulConn_Type''field and a valid index in the ''ulIndex''field.
 
 
 
 
 
=== VSD_SETCONNECTOR Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_UNSUPPORTED_CONNECTOR Connector setting is not supported.
 
VSDERR_INVALID_CONNECTOR Connector setting is invalid.
 
 
 
 
 
=== VSD_SETCONNECTOR - Syntax ===
 
This subcommand of the [[00424.htm|VSD_SET]]command enables or disables a connector. (A connector can be a hardware or software connection on the device the VSD is controlling.) Note that enabling a connector can by default, disable another connector. For further information regarding connectors, refer to the MCI_CONNECTOR command in the ''OS/2 Multimedia Programming Reference''. Additional connectors can be found in MCIOS2.H.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETCONNECTOR.
 
'''pRequest'''([[01159.htm|PVSD_CONNECTOR_PARMS]]) A pointer to the [[01159.htm|VSD_CONNECTOR_PARMS]]structure.
 
The status of the connector, enable (VSD_ENABLE) or disable (VSD_DISABLE) must be indicated in the ''fEnabled''field. A valid connector must be placed in the ''ulConn_Type''field and a valid index in the ''ulIndex''field.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:


VSDERR_SUCCESS The command was successful.
==VSD_SETCONNECTOR==
This subcommand of the [[#VSD_SET|VSD_SET]] command enables or disables a connector. (A connector can be a hardware or software connection on the device the VSD is controlling.) Note that enabling a connector can by default, disable another connector. For further information regarding connectors, refer to the MCI_CONNECTOR command in the ''[[OS/2 Multimedia Programming Reference]]''.  Additional connectors can be found in MCIOS2.H.


VSDERR_UNSUPPORTED_CONNECTOR Connector setting is not supported.
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


VSDERR_INVALID_CONNECTOR Connector setting is invalid.
===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_SET|VSD_SET]].


'''ulFlags''' (ULONG) Set to VSD_SETCONNECTOR.


'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_CONNECTOR_PARMS|PVSD_CONNECTOR_PARMS]]) A pointer to the VSD_CONNECTOR_PARMS structure.


The status of the connector, enable (VSD_ENABLE) or disable (VSD_DISABLE) must be indicated in the ''fEnabled'' field. A valid connector must be placed in the ''ulConn_Type'' field and a valid index in the ''ulIndex'' field.


=== VSD_SETCONNECTOR - Example Code ===
===Return Value===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command was successful.
*VSDERR_UNSUPPORTED_CONNECTOR
:Connector setting is not supported.
*VSDERR_INVALID_CONNECTOR
:Connector setting is invalid.


=== Example Code ===
The following code illustrates how to set the state of the connector.
The following code illustrates how to set the state of the connector.
<pre>
HVSD                  hvsd;
VSD_CONNECTOR_PARMS    vsdConn;


<pre class="western">   HVSD                  hvsd;
vsdConn.ulConn_Type = pConnector->ulConnectorType;
    VSD_CONNECTOR_PARMS    vsdConn;
vsdConn.ulIndex = pConnector->ulConnectorIndex;
vsdConn.fEnabled = VSD_DISABLE;


    vsdConn.ulConn_Type = pConnector-&gt;ulConnectorType;
/*--------------------------------------------------
    vsdConn.ulIndex = pConnector-&gt;ulConnectorIndex;
  * Tell the VSD that we want to disable a connector.
    vsdConn.fEnabled = VSD_DISABLE;
  *--------------------------------------------------*/
 
  lError = pInstance->pfnNewVSD(hvsd,
    /*--------------------------------------------------
                                VSD_SET,
    * Tell the VSD that we want to disable a connector.
                                VSD_SETCONNECTOR,
    *--------------------------------------------------*/
                                (PVOID)&vsdConn);
    lError = pInstance-&gt;pfnNewVSD(hvsd,
</pre>
                                  VSD_SET,
                                  VSD_SETCONNECTOR,
                                  (PVOID)&amp;vsdConn);</pre>
 
 
 
 
=== VSD_SETCONNECTOR - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
 
 
 
=== VSD_SETDATATYPE ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
-----


This subcommand of the [[00424.htm|VSD_SET]]command sets the current data type that the device is dealing with.
==VSD_SETDATATYPE==
This subcommand of the [[#VSD_SET|VSD_SET]] command sets the current data type that the device is dealing with.


This command is sent using [[00235.htm|VSDEntry]]as follows:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
=== Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_SET|VSD_SET]].


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
'''ulFlags''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to VSD_SETDATATYPE.


'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_AUDIODATATYPE_PARMS|PVSD_AUDIODATATYPE_PARMS]]) Input. Pointer to a VSD_AUDIODATATYPE_PARMS structure.


'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETDATATYPE.
;Note: Every field in the [[MMPM/2 Device Driver Reference:Data Types#VSD_AUDIODATATYPE_PARMS|VSD_AUDIODATATYPE_PARMS]] structure contains a numeric value except for ''ulOperation''. This field contains either VSD_ PRODUCE for recording or VSD_CONSUME for playback. The VSD is responsible for filling in the ''ulBlockAlignment'', ''ulDataSubType'', and ''ulAverageBytesPerSec'' fields in the VSD_AUDIODATATYPE_PARMS structure.


'''pRequest'''([[01124.htm|PVSD_AUDIODATATYPE_PARMS]]) Input. Pointer to a [[01124.htm|VSD_AUDIODATATYPE_ PARMS]]structure.
The ''ulFlags'' field of the VSD_AUDIODATATYPE_PARMS structure contains a flag for each field in the structure that can be set. Every field has a flag except for the ''ulOperation'' field. The ''ulOperation'' field is valid for every call.


'''Note:'''Every field in the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure contains a numeric value except for ''ulOperation''. This field contains either VSD_ PRODUCE for recording or VSD_CONSUME for playback. The VSD is responsible for filling in the ''ulBlockAlignment'', ''ulDataSubType'', and ''ulAverageBytesPerSec''fields in the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure.
The VSD_AUDIODATATYPE_PARMS structure must contain at least one of the following flags:
*VSD_MODE
*VSD_CHANNELS
*VSD_SAMPLESPERSEC
*VSD_OPERATION
*VSD_BITSPERSAMPLE


The ''ulFlags''field of the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure contains a flag for each field in the structure that can be set. Every field has a flag except for the ''ulOperation''field. The ''ulOperation''field is valid for every call.
=== Return Value ===
 
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
The [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure must contain at least one of the following flags:
*VSDERR_SUCCESS
 
:The command was successful.
�VSD_MODE
 
�VSD_CHANNELS
 
�VSD_SAMPLESPERSEC
 
�VSD_OPERATION
 
�VSD_BITSPERSAMPLE
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_SETDATATYPE Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_SETDATATYPE Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
 
 
 
 
=== VSD_SETDATATYPE Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETDATATYPE.
 
 
 
 
 
=== VSD_SETDATATYPE Parameter - pRequest ===
 
'''pRequest'''([[01124.htm|PVSD_AUDIODATATYPE_PARMS]]) Input. Pointer to a [[01124.htm|VSD_AUDIODATATYPE_ PARMS]]structure.
 
'''Note:'''Every field in the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure contains a numeric value except for ''ulOperation''. This field contains either VSD_ PRODUCE for recording or VSD_CONSUME for playback. The VSD is responsible for filling in the ''ulBlockAlignment'', ''ulDataSubType'', and ''ulAverageBytesPerSec''fields in the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure.
 
The ''ulFlags''field of the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure contains a flag for each field in the structure that can be set. Every field has a flag except for the ''ulOperation''field. The ''ulOperation''field is valid for every call.
 
The [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure must contain at least one of the following flags:
 
�VSD_MODE
 
�VSD_CHANNELS
 
�VSD_SAMPLESPERSEC
 
�VSD_OPERATION
 
�VSD_BITSPERSAMPLE
 
 
 
 
 
=== VSD_SETDATATYPE Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_SETDATATYPE - Syntax ===
 
This subcommand of the [[00424.htm|VSD_SET]]command sets the current data type that the device is dealing with.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETDATATYPE.
 
'''pRequest'''([[01124.htm|PVSD_AUDIODATATYPE_PARMS]]) Input. Pointer to a [[01124.htm|VSD_AUDIODATATYPE_ PARMS]]structure.
 
'''Note:'''Every field in the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure contains a numeric value except for ''ulOperation''. This field contains either VSD_ PRODUCE for recording or VSD_CONSUME for playback. The VSD is responsible for filling in the ''ulBlockAlignment'', ''ulDataSubType'', and ''ulAverageBytesPerSec''fields in the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure.
 
The ''ulFlags''field of the [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure contains a flag for each field in the structure that can be set. Every field has a flag except for the ''ulOperation''field. The ''ulOperation''field is valid for every call.
 
The [[01124.htm|VSD_AUDIODATATYPE_PARMS]]structure must contain at least one of the following flags:
 
�VSD_MODE
 
�VSD_CHANNELS
 
�VSD_SAMPLESPERSEC
 
�VSD_OPERATION
 
�VSD_BITSPERSAMPLE
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_SETDATATYPE - Example Code ===


=== Example Code ===
The following code illustrates how to set the data type, sampling rate, channels, and bits per sample for an audio VSD.
The following code illustrates how to set the data type, sampling rate, channels, and bits per sample for an audio VSD.
 
<pre>
<pre class="western">HVSD                    hvsd;
HVSD                    hvsd;
VSD_AUDIODATATYPE_PARMS  AudioDatatype;
VSD_AUDIODATATYPE_PARMS  AudioDatatype;
PMMAUDIOHEADER          pmmaudioheader;
PMMAUDIOHEADER          pmmaudioheader;
AudioDatatype.ulDataType = pmmaudioheader-&gt;mmXWAVHeader.WAVEHeader.usFormatTag;
AudioDatatype.ulDataType = pmmaudioheader->mmXWAVHeader.WAVEHeader.usFormatTag;
AudioDatatype.ulBitsPerSample = pmmaudioheader-&gt;mmXWAVHeader.WAVEHeader.usBitsPerSample;
AudioDatatype.ulBitsPerSample = pmmaudioheader->mmXWAVHeader.WAVEHeader.usBitsPerSample;
AudioDatatype.ulSamplingRate = pmmaudioheader-&gt;mmXWAVHeader.WAVEHeader.usSamplesPerSec;
AudioDatatype.ulSamplingRate = pmmaudioheader->mmXWAVHeader.WAVEHeader.usSamplesPerSec;
AudioDatatype.ulChannels = pmmaudioheader-&gt;mmXWAVHeader.WAVEHeader.usChannels;
AudioDatatype.ulChannels = pmmaudioheader->mmXWAVHeader.WAVEHeader.usChannels;
AudioDatatype.ulOperation = VSD_PLAY;
AudioDatatype.ulOperation = VSD_PLAY;
AudioDatatype.ulFlags = VSD_MODE|VSD_CHANNELS|VSD_SAMPLESPERSEC|
AudioDatatype.ulFlags = VSD_MODE|VSD_CHANNELS|VSD_SAMPLESPERSEC|
                         VSD_OPERATION|VSD_BITSPERSAMPLE;
                         VSD_OPERATION|VSD_BITSPERSAMPLE;


   rc = pInstance-&gt;pfnNewVSD(hvsd,
   rc = pInstance->pfnNewVSD(hvsd,
                             VSD_SET,
                             VSD_SET,
                             VSD_SETDATATYPE,
                             VSD_SETDATATYPE,
                     (PVOID)&amp;AudioDatatype);
                     (PVOID)&AudioDatatype);
   if(rc)
   if(rc)
     {
     {
     return(rc)
     return(rc)
     }</pre>
     }
 
</pre>
 
 
 
=== VSD_SETDATATYPE - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
 
 
 
=== VSD_SETMIXCONNECTIONS ===
 


-----
==VSD_SETMIXCONNECTIONS==
This subcommand of the [[#VSD_SET|VSD_SET]] command routes the audio output of a connector to a particular output circuitry (that is, pass thru, internal mixer circuitry, and so on). For further information about VSD mixer support and functions, see [[Audio Sample for Vendor-Specific Drivers]] and [[MMPM/2 Device Driver Reference:IOCtl Functions#Mixer IOCtl Functions Introduction|Mixer IOCtl Functions Introduction]]


Select an item:
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


<pre class="western">Syntax
=== Parameters ===
Returns
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.
Example Code
Glossary </pre>


-----
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_SET|VSD_SET]].


This subcommand of the [[00424.htm|VSD_SET]]command routes the audio output of a connector to a particular output circuitry (that is, pass thru, internal mixer circuitry, and so on). For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
'''ulFlags''' (ULONG) Set to VSD_SETMIXCONNECTIONS.


This command is sent using [[00235.htm|VSDEntry]]as follows:
'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#LINECONNECTIONS|PLINECONNECTIONS]]) A pointer to the [[MMPM/2 Device Driver Reference:Data Types#LINECONNECTIONS|LINECONNECTIONS]] structure.


<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
The caller must fill in the ''ulConnections'' and the ''ulLine'' fields of the [[MMPM/2 Device Driver Reference:Data Types#LINECONNECTIONS|LINECONNECTIONS]] structure.


=== Return Value ===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_SUCCESS
:The command was successful.
*VSDERR_INVALID_SOURCE
:Invalid source.
*VSDERR_INVALID_SINK
:Invalid sink.
*VSDERR_INVALID_CONNECTION
:Invalid connection.


'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
=== Example Code ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETMIXCONNECTIONS.
 
'''pRequest'''([[00812.htm|PLINECONNECTIONS]]) A pointer to the [[00812.htm|LINECONNECTIONS]]structure.
 
The caller must fill in the ''ulConnections''and the ''ulLine''fields of the [[00812.htm|LINECONNECTIONS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_SETMIXCONNECTIONS Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_SETMIXCONNECTIONS Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
 
 
 
 
=== VSD_SETMIXCONNECTIONS Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETMIXCONNECTIONS.
 
 
 
 
 
=== VSD_SETMIXCONNECTIONS Parameter - pRequest ===
 
'''pRequest'''([[00812.htm|PLINECONNECTIONS]]) A pointer to the [[00812.htm|LINECONNECTIONS]]structure.
 
The caller must fill in the ''ulConnections''and the ''ulLine''fields of the [[00812.htm|LINECONNECTIONS]]structure.
 
 
 
 
 
=== VSD_SETMIXCONNECTIONS Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_SETMIXCONNECTIONS - Syntax ===
 
This subcommand of the [[00424.htm|VSD_SET]]command routes the audio output of a connector to a particular output circuitry (that is, pass thru, internal mixer circuitry, and so on). For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETMIXCONNECTIONS.
 
'''pRequest'''([[00812.htm|PLINECONNECTIONS]]) A pointer to the [[00812.htm|LINECONNECTIONS]]structure.
 
The caller must fill in the ''ulConnections''and the ''ulLine''fields of the [[00812.htm|LINECONNECTIONS]]structure.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_SETMIXCONNECTIONS - Example Code ===
 
The following code illustrates how to route the output of a connector to the internal mixer circuitry.
The following code illustrates how to route the output of a connector to the internal mixer circuitry.
 
<pre>
<pre class="western"> LINECONNECTIONS  mixinfo;
  LINECONNECTIONS  mixinfo;


   mixinfo.ulLine = SOURCE_SYNTHESIZER;
   mixinfo.ulLine = SOURCE_SYNTHESIZER;
   mixinfo.ulConnection = SINK_SPEAKER;
   mixinfo.ulConnection = SINK_SPEAKER;
   rc = pInstance-&gt;((HVSD)pInstance-&gt;hvsd,
   rc = pInstance->((HVSD)pInstance->hvsd,
                   VSD_SET,
                   VSD_SET,
                   VSD_SETMIXCONNECTIONS,
                   VSD_SETMIXCONNECTIONS,
                   (PVOID)&amp;mixinfo);
                   (PVOID)&mixinfo);
 
  return(rc);</pre>


  return(rc);
</pre>


==VSD_SETMIXCONTROL==
This subcommand of the [[#VSD_SET|VSD_SET]] command enables an application to set the current state of a particular line. For further information about VSD mixer support and functions, see [[Audio Sample for Vendor-Specific Drivers]] and [[MMPM/2 Device Driver Reference:IOCtl Functions#Mixer IOCtl Functions Introduction|Mixer IOCtl Functions Introduction]]


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


=== VSD_SETMIXCONNECTIONS - Topics ===
=== Parameters ===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


Select an item:
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_SET|VSD_SET]].


<pre class="western">Syntax
'''ulFlags''' (ULONG) Set to VSD_SETMIXCONTROL.
Returns
Example Code
Glossary </pre>


'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#MIXERCONTROL|PMIXERCONTROL]]) A pointer to the MIXERCONTROL structure.


The ''ulControl'' field of the [[MMPM/2 Device Driver Reference:Data Types#MIXERCONTROL|MIXERCONTROL]] structure must be filled in with the desired setting. For stereo controls, the high-order word of this field contains the left channel setting and the low-order word contains the right channel setting. A value of 0xFFFF represents full intensity and a value of 0x0000 is full cutout. The ''ulLine'' field must also be filled in.


=== Return Value ===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success or the type of failure:
*VSDERR_MISSING_PARAMETER
:One or more parameters are missing.
*VSDERR_INVALID_SOURCE
:Invalid source.
*VSDERR_INVALID_SINK
:Invalid sink.
*VSDERR_INVALID_CONNECTION
:Invalid connection.


=== VSD_SETMIXCONTROL ===
=== Example Code ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00424.htm|VSD_SET]]command enables an application to set the current state of a particular line. For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETMIXCONTROL.
 
'''pRequest'''([[00930.htm|PMIXERCONTROL]]) A pointer to the [[00930.htm|MIXERCONTROL]]structure.
 
The ''ulControl''field of the [[00930.htm|MIXERCONTROL]]structure must be filled in with the desired setting. For stereo controls, the high-order word of this field contains the left channel setting and the low-order word contains the right channel setting. A value of 0xFFFF represents full intensity and a value of 0x0000 is full cutout. The ''ulLine''field must also be filled in.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_SETMIXCONTROL Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_SETMIXCONTROL Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
 
 
 
 
=== VSD_SETMIXCONTROL Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETMIXCONTROL.
 
 
 
 
 
=== VSD_SETMIXCONTROL Parameter - pRequest ===
 
'''pRequest'''([[00930.htm|PMIXERCONTROL]]) A pointer to the [[00930.htm|MIXERCONTROL]]structure.
 
The ''ulControl''field of the [[00930.htm|MIXERCONTROL]]structure must be filled in with the desired setting. For stereo controls, the high-order word of this field contains the left channel setting and the low-order word contains the right channel setting. A value of 0xFFFF represents full intensity and a value of 0x0000 is full cutout. The ''ulLine''field must also be filled in.
 
 
 
 
 
=== VSD_SETMIXCONTROL Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_SETMIXCONTROL - Syntax ===
 
This subcommand of the [[00424.htm|VSD_SET]]command enables an application to set the current state of a particular line. For further information about VSD mixer support and functions, see [[00069.htm|Audio Sample for Vendor-Specific Drivers]]and [[00567.htm|Mixer IOCtl Functions Introduction]]
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETMIXCONTROL.
 
'''pRequest'''([[00930.htm|PMIXERCONTROL]]) A pointer to the [[00930.htm|MIXERCONTROL]]structure.
 
The ''ulControl''field of the [[00930.htm|MIXERCONTROL]]structure must be filled in with the desired setting. For stereo controls, the high-order word of this field contains the left channel setting and the low-order word contains the right channel setting. A value of 0xFFFF represents full intensity and a value of 0x0000 is full cutout. The ''ulLine''field must also be filled in.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success or the type of failure:
 
VSDERR_MISSING_PARAMETER One or more parameters are missing.
 
VSDERR_INVALID_SOURCE Invalid source.
 
VSDERR_INVALID_SINK Invalid sink.
 
VSDERR_INVALID_CONNECTION Invalid connection.
 
 
 
 
 
=== VSD_SETMIXCONTROL - Example Code ===
 
The following code illustrates how to query the settings of an audio attributes for a particular connector.
The following code illustrates how to query the settings of an audio attributes for a particular connector.
 
<pre>
<pre class="western"> MIXERCONTROL  MixerControl;
  MIXERCONTROL  MixerControl;
   USHORT        usBass;
   USHORT        usBass;


   MixerControl.ulControl = MIX_SUPPORT_VOLUME;
   MixerControl.ulControl = MIX_SUPPORT_VOLUME;
Line 4,102: Line 1,104:
   MixerControl.ulSetting = 100;
   MixerControl.ulSetting = 100;


   lError = pInstance-&gt;((HVSD)pInstance-&gt;hvsd,
   lError = pInstance->((HVSD)pInstance->hvsd,
                       VSD_SET,
                       VSD_SET,
                       VSD_SETMIXCONTROL,
                       VSD_SETMIXCONTROL,
                       (PVOID)&amp;MixerControl);
                       (PVOID)&MixerControl);


   return(lError);</pre>
   return(lError);
</pre>


==VSD_SETMONITOR==
This subcommand of the [[#VSD_SET|VSD_SET]] command enables (MCI_TRUE) or disables (MCI_ FALSE) the audio monitor feature of the device.


This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


=== Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


=== VSD_SETMIXCONTROL - Topics ===
'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_SET|VSD_SET]].


Select an item:
'''ulFlags''' (ULONG) Set to VSD_SETMONITOR.


<pre class="western">Syntax
'''pRequest''' (PULONG) Input. Set to MCI_TRUE or MCI_FALSE.
Returns
Example Code
Glossary </pre>


=== Return Value ===
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error code indicating success.
*VSDERR_SUCCESS
:The command was successful.


 
=== Example Code ===
 
=== VSD_SETMONITOR ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00424.htm|VSD_SET]]command enables (MCI_TRUE) or disables (MCI_ FALSE) the audio monitor feature of the device.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETMONITOR.
 
'''pRequest'''([[00998.htm|PULONG]]) Input. Set to MCI_TRUE or MCI_FALSE.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success.
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_SETMONITOR Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_SETMONITOR Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
 
 
 
 
=== VSD_SETMONITOR Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETMONITOR.
 
 
 
 
 
=== VSD_SETMONITOR Parameter - pRequest ===
 
'''pRequest'''([[00998.htm|PULONG]]) Input. Set to MCI_TRUE or MCI_FALSE.
 
 
 
 
 
=== VSD_SETMONITOR Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success.
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_SETMONITOR - Syntax ===
 
This subcommand of the [[00424.htm|VSD_SET]]command enables (MCI_TRUE) or disables (MCI_ FALSE) the audio monitor feature of the device.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETMONITOR.
 
'''pRequest'''([[00998.htm|PULONG]]) Input. Set to MCI_TRUE or MCI_FALSE.
 
'''rc'''([[00998.htm|ULONG]]) Error code indicating success.
 
VSDERR_SUCCESS The command was successful.
 
 
 
 
 
=== VSD_SETMONITOR - Example Code ===
 
The following code illustrates how to set the state of the VSD monitor.
The following code illustrates how to set the state of the VSD monitor.
 
<pre>
<pre class="western">ULONG    ulSetOn;
ULONG    ulSetOn;


   ulSetOn = MCI_TRUE;
   ulSetOn = MCI_TRUE;
Line 4,238: Line 1,141:
   /* Tell the VSD to change monitor status */
   /* Tell the VSD to change monitor status */


   lError = prInstance-&gt;pfnAUDIOIF((HVSD)prInstance-&gt;pMix-&gt;hvsd
   lError = prInstance->pfnAUDIOIF((HVSD)prInstance->pMix->hvsd
                           VSD_SET,
                           VSD_SET,
                           VSD_SETMONITOR,
                           VSD_SETMONITOR,
                           (PVOID)lSetOn);</pre>
                           (PVOID)lSetOn);
 
</pre>
 
 
 
=== VSD_SETMONITOR - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
 
 
 
=== VSD_SETVOLUME ===
 
 
-----
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
-----
 
This subcommand of the [[00424.htm|VSD_SET]]command sets the volume level as a percentage (0 - 100). If the value is not one of the supported volume levels, it is rounded up to the nearest supported level. The ''ulFlags''field indicates which fields are to be used.
 
This command is sent using [[00235.htm|VSDEntry]]as follows:
 
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
 
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETVOLUME.
 
'''pRequest'''([[01194.htm|PVSD_VOLUME_PARMS]]) Pointer to the [[01194.htm|VSD_VOLUME_PARMS]]structure.
 
The caller must fill in the ''ulVolume''field if VSD_VOLUME is specified. The caller must fill in the ''ulMasterAudio''field if VSD_MASTERVOLUME is specified. The caller must fill in the ''fMute''field with a boolean if VSD_ MUTE is specified. TRUE mutes the device; FALSE unmutes the device.
 
'''rc'''([[00998.htm|ULONG]]) Error codes indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_VOL_OUT_OF_RANGE Invalid volume level.
 
 
 
 
 
=== VSD_SETVOLUME Parameter - hvsd ===
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
 
 
 
 
=== VSD_SETVOLUME Parameter - ulFunc ===
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
 
 
 
 
=== VSD_SETVOLUME Parameter - ulFlags ===
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETVOLUME.
 
 
 
 
 
=== VSD_SETVOLUME Parameter - pRequest ===
 
'''pRequest'''([[01194.htm|PVSD_VOLUME_PARMS]]) Pointer to the [[01194.htm|VSD_VOLUME_PARMS]]structure.
 
The caller must fill in the ''ulVolume''field if VSD_VOLUME is specified. The caller must fill in the ''ulMasterAudio''field if VSD_MASTERVOLUME is specified. The caller must fill in the ''fMute''field with a boolean if VSD_ MUTE is specified. TRUE mutes the device; FALSE unmutes the device.
 
 
 
 
 
=== VSD_SETVOLUME Return Value - rc ===
 
'''rc'''([[00998.htm|ULONG]]) Error codes indicating success or the type of failure:


VSDERR_SUCCESS The command was successful.
==VSD_SETVOLUME==
This subcommand of the [[#VSD_SET|VSD_SET]] command sets the volume level as a percentage (0 - 100). If the value is not one of the supported volume levels, it is rounded up to the nearest supported level. The ''ulFlags'' field indicates which fields are to be used.


VSDERR_VOL_OUT_OF_RANGE Invalid volume level.
This command is sent using [[#VSDEntry|VSDEntry]] as follows:
VSDEntry(hvsd, ulFunc, ulFlags, pRequest)


===Parameters===
'''hvsd''' ([[MMPM/2 Device Driver Reference:Data Types#HVSD|HVSD]]) Handle to a VSD.


'''ulFunc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Set to [[#VSD_SET|VSD_SET]].


'''ulFlags''' (ULONG) Set to VSD_SETVOLUME.


'''pRequest''' ([[MMPM/2 Device Driver Reference:Data Types#VSD_VOLUME_PARMS|PVSD_VOLUME_PARMS]]) Pointer to the VSD_VOLUME_PARMS structure.


=== VSD_SETVOLUME - Syntax ===
The caller must fill in the ''ulVolume'' field if VSD_VOLUME is specified. The caller must fill in the ''ulMasterAudio'' field if VSD_MASTERVOLUME is specified. The caller must fill in the ''fMute'' field with a boolean if VSD_ MUTE is specified. TRUE mutes the device; FALSE unmutes the device.


This subcommand of the [[00424.htm|VSD_SET]]command sets the volume level as a percentage (0 - 100). If the value is not one of the supported volume levels, it is rounded up to the nearest supported level. The ''ulFlags''field indicates which fields are to be used.
=== Return Value ===
 
'''rc''' ([[MMPM/2 Device Driver Reference:Data Types#ULONG|ULONG]]) Error codes indicating success or the type of failure:
This command is sent using [[00235.htm|VSDEntry]]as follows:
*VSDERR_SUCCESS
 
:The command was successful.
<pre class="western">    VSDEntry(hvsd, ulFunc, ulFlags, pRequest)</pre>
*VSDERR_VOL_OUT_OF_RANGE
 
:Invalid volume level.
 
'''hvsd'''([[00810.htm|HVSD]]) Handle to a VSD.
 
'''ulFunc'''([[00998.htm|ULONG]]) Set to [[00424.htm|VSD_SET]].
 
'''ulFlags'''([[00998.htm|ULONG]]) Set to VSD_SETVOLUME.
 
'''pRequest'''([[01194.htm|PVSD_VOLUME_PARMS]]) Pointer to the [[01194.htm|VSD_VOLUME_PARMS]]structure.
 
The caller must fill in the ''ulVolume''field if VSD_VOLUME is specified. The caller must fill in the ''ulMasterAudio''field if VSD_MASTERVOLUME is specified. The caller must fill in the ''fMute''field with a boolean if VSD_ MUTE is specified. TRUE mutes the device; FALSE unmutes the device.
 
'''rc'''([[00998.htm|ULONG]]) Error codes indicating success or the type of failure:
 
VSDERR_SUCCESS The command was successful.
 
VSDERR_VOL_OUT_OF_RANGE Invalid volume level.
 
 
 
 
 
=== VSD_SETVOLUME - Example Code ===


=== Example Code ===
The following code illustrates how to set the volume on an audio VSD.
The following code illustrates how to set the volume on an audio VSD.
 
<pre>
<pre class="western">VSD_VOLUME_PARMS  vsdVol;
VSD_VOLUME_PARMS  vsdVol;
   vsdVol.ulVolume = pInstance-&gt;ulVolume;
   vsdVol.ulVolume = pInstance->ulVolume;
   vsdVol.ulMasterAudio  = pInstance-&gt;ulMasterVolume;
   vsdVol.ulMasterAudio  = pInstance->ulMasterVolume;
   vsdVol.fMute = pInstance-&gt;fMute;
   vsdVol.fMute = pInstance->fMute;
   vsdVol.ulVectoredVolume  = pInstance-&gt;ulTime;
   vsdVol.ulVectoredVolume  = pInstance->ulTime;
   vsdVol.ulFlags  = VSD_VOLUME | VSD_MASTERVOLUME;
   vsdVol.ulFlags  = VSD_VOLUME | VSD_MASTERVOLUME;




   lError = prInstance-&gt;pfnAUDIOIF((HVSD)prInstance-&gt;pMix-&gt;hvsd
   lError = prInstance->pfnAUDIOIF((HVSD)prInstance->pMix->hvsd
                           VSD_SET,
                           VSD_SET,
                           VSD_SETVOLUME,
                           VSD_SETVOLUME,
                           (PVOID)&amp;vsdVol);</pre>
                           (PVOID)&vsdVol);
 
</pre>
 
 
 
=== VSD_SETVOLUME - Topics ===
 
Select an item:
 
<pre class="western">Syntax
Returns
Example Code
Glossary </pre>
 
 
'''Reprint Courtesy of International Business Machines Corporation, © International Business Machines Corporation'''


[[Category:Driver Articles]]
[[Category:MMPM/2 Device Driver Reference]]
[[Category:MMOS/2]]
[[Category:Multimedia]]
[[Category:MIDI]]

Latest revision as of 22:31, 19 February 2020

MMPM/2 Device Driver Reference
  1. Adding Support for Audio and Video Adapters
  2. Audio Physical Device Driver Template
  3. Audio Virtual Device Driver Template
  4. MAD16 PDD and VDD Sample Device Drivers
  5. PDD Sample for Video Capture Adapters
  6. PDD Sample for MPEG Video Playback Devices
  7. Audio Sample for Vendor-Specific Drivers
  8. Using the High-Resolution Timer
  9. Real-Time MIDI Subsystem
  10. Audio Device Driver Exerciser (PMADDE) Tool
  11. AP2/P2STRING Tool
  12. Ultimotion Data Stream Specification
  13. DDCMD Messages
  14. SHD Messages
  15. Vendor-Specific Driver Commands
  16. IOCtl Functions
  17. Data Types
  18. Types of MIDI Messages
  19. Notices
  20. Glossary

Reprint Courtesy of International Business Machines Corporation, © International Business Machines Corporation

The vendor-specific driver (VSD) commands enable communication between vendor-specific drivers (VSDs) and an application such as the user-level audio stream handler or amplifier mixer MCI driver. The interface to the VSD is DLL-based. First, a DosLoadModule function is issued for the VSD's DLL. The DosLoadModule function returns a handle for the VSD. Next, using the VSD handle, DosQueryProcAddr is issued to receive the VSD entry point address. This must be done prior to issuing any VSD commands. Once the entry point address is received, calls to the VSD are made to VSDEntry entry point.

VSDEntry

This entry point enables communication between vendor-specific drivers (VSDs) and an application such as the user-level audio stream handler or amplifier mixer. For audio VSDs, be sure to define INCL_AUDIO_VSD before including the VSDCMDS.H header file.

#define INCL_AUDIO_VSD
#include <vsdcmds.h>
#include <os2mixer.h>

HVSD     hvsd;      /*  Handle to VSD instance. */
ULONG    ulFunc;    /*  Function code. */
ULONG    ulFlags;   /*  Flags for driver. */
PVOID    pRequest;  /*  Request parameter block value. */
ULONG    rc;        /*  Return codes. */

rc = VSDEntry(hvsd, ulFunc, ulFlags, pRequest);

Parameters

hvsd (HVSD) - input
This parameter is the handle to the VSD instance.
ulFunc (ULONG) - input
The VSD command to be issued. The following commands are supported for audio VSDs.
Command Description
VSD_CLOSE Closes the device. (Required)
VSD_DDCMD Allows communication between stream handlers and their attached devices. (Required)
VSD_ESCAPE Sends a buffer to the device. (Optional)
VSD_GETDEVCAPS Retrieves the device capabilities. (Required)
VSD_OPEN Opens an instance of the device. (Required)
VSD_QUERY Queries the status of the device. (Required)
VSD_RESOURCE Manages resources. (Required)
VSD_RESTORE Restores device to a saved state. (Required)
VSD_SAVE Saves the current state of the device instance. (Required)
VSD_SET Modifies settings of the device. (Required)
VSD_USER Allows user-defined commands to be passed into the VSD. (Optional)
ulFlags (ULONG) - input
The ulFlags parameter is used to further qualify the command specified in ulFunc. In many cases it is used as a subcommand. For more information on ulFlags, see the specific ulFunc parameter.
pRequest (PVOID) - input
Specifies the pointer to the request packet. The caller of the VSD supplies all request buffers. See individual commands for more detailed information.

Return Value

rc (ULONG) - returns
The return codes are listed for each command and will vary based on the command sent.

If a VSD requires unique return codes for certain conditions, it can use return codes starting at VSDERR_BASE.

Remarks

If a VSD requires unique return codes for certain conditions, it can use return codes starting at VSDERR_BASE.

VSD_CLOSE

This command closes the device. VSD_CLOSE is a required command and must be implemented by all VSD writers.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD)
Handle to the VSD to be closed.
ulFunc (ULONG)
Set to VSD_CLOSE.
ulFlags (ULONG)
No flags used for this command.
pRequest (PVOID)
Not used for this command.

Return Value

rc (ULONG)
Error code indicating success or the type of failure:
  • VSDERR_SUCCESS
The command was successful.
  • VSDERR_CANNOT_CLOSE
VSD is unable to close the device.
  • VSDERR_HARDWARE
A hardware error occurred.

Remarks

The hvsd handle is no longer valid after this command is issued.

Example Code

The following code illustrates how to close a VSD.

HVSD     hvsd;
ULONG    rc;

rc = pInstance ->pfnAUDIOIF( hvsd,
                             VSD_CLOSE,
                             0,
                             0 );
return (rc);

VSD_DDCMD

Stream handlers can communicate to their attached devices using the VSD_ DDCMD call. The DDCMD interface is the primary method of moving data to and from devices in OS/2 multimedia. See the OS/2 Multimedia Programming Reference for more detailed information on stream handler command (SHC) messages.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD)
Handle to a VSD.
ulFunc (ULONG)
Set to VSD_DDCMD.
ulFlags (ULONG)
The following flags (subcommands) are defined for this command:
DDCMD_CONTROL
This subcommand of VSD_DDCMD performs a device-specific command. pRequest is a pointer to the DDCMDCONTROL structure.
DDCMD_DEREG_STREAM
This subcommand of VSD_DDCMD deregisters a stream instance with the device driver. pRequest is a pointer to DDCMDDEREGISTER structure.
DDCMD_READ
This subcommand of VSD_DDCMD is used by a stream handler to give an empty buffer to the VSD (for example, during a record operation). When the buffer has been filled, the VSD is responsible for communicating to the caller that the buffer has been filled. The VSD should pass a MSG_REPORTINT structure to the pSHDEntryPoint in DDCMDREGISTER to inform the caller.
pRequest is a pointer to DDCMDREADWRITE structure.
DDCMD_REG_STREAM
This subcommand of VSD_DDCMD registers a stream instance with the device driver. pRequest is a pointer to DDCMDREGISTER structure.
DDCMD_SETUP
This subcommand of VSD_DDCMD performs device-specific stream instance setup. pRequest is a pointer to DDCMDSETUP structure.
DDCMD_STATUS
This VSD subcommand requests streaming status from a device. Typically, it is called to request the current stream time. pRequest is a pointer to DDCMDSTATUS structure.
DDCMD_WRITE
This VSD subcommand is used by a stream handler to give a full buffer to the VSD (for example, during a playback operation). When the buffer has been consumed, the VSD is responsible for communicating to the caller that the buffer has been used. The VSD should pass a MSG_REPORTINT structure to the pSHDEntryPoint in DDCMDREGISTER to inform the caller.
pRequest is a pointer to DDCMDREADWRITE structure.
pRequest (PVOID)
The value of pRequest varies according to the ulFlags value. See each particular ulFlags value for the definition of pRequest.

Return Value

rc (ULONG)
Possible error codes vary according to the value of ulFlags.

Remarks

A user-level 32-bit buffer pointer is available in the pProcessLin field of the DDCMDREADWRITE. VSDs should use this pointer if they want to operate on the data while they are not in protect mode. The pBuffer field of the DDCMDREADWRITE contains a pointer whose address type was specified by the VSD on DDCMD_REG_STREAM. When the application returns a buffer, it must return the buffer specified by pBuffer and not by pProcessLin.

VSD_GETDEVCAPS

This command queries the device capabilities. These values should be constants that describe the device and driver characteristics. In general, the flags indicate what set of commands are supported. VSD_GETDEVCAPS is a required command and must be implemented by all VSD writers.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD)
Handle to a VSD.
ulFunc (ULONG)
Set to VSD_GETDEVCAPS.
ulFlags (ULONG)
No flags used for this command.
pRequest (PVSD_GETDEVCAPS_PARMS)
Pointer to the VSD_GETDEVCAPS_PARMS data structure.

Return Value

rc (ULONG)
Error code indicating success or the type of failure:
  • VSDERR_REQUEST_BUF_TOO_SMALL
The ulLength in the request packet is too small.
  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.
  • VSDERR_HARDWARE
A hardware error occurred.

Remarks

This command requires the device to be opened. A device might have several types of device units, so this command must know which instance is involved. Once the device is opened, the device capabilities should be constant.

Each element in the bSupports[DC_MAX_DEVCAP] array of the VSD_GETDEVCAPS_ PARMS structure is a boolean value that indicates if the capability is supported. TRUE indicates that it is supported. FALSE indicates that it is not supported.

Example Code

The following code illustrates how to determine device capabilities for a VSD.

  HVSD                   hvsd;
  VSD_GETDEVCAPS_PARMS   vsdDevCaps;

  rc = pInstance->pfnAUDIOIF( hvsd,
                              VSD_GETDEVCAPS
                              0,
                              (PVOID) &vsdDevCaps );

  if (!rc)
     {
    /* If the VSD doesn't support volume  */

    if( !vsdDevCaps.bSupports[ DC_HASVOLUME] )
       {
       return ( rc );
       }

VSD_ESCAPE

This optional command sends a buffer to the driver.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_ESCAPE.

ulFlags (ULONG) No flags used for this command.

pRequest (PVSD_ESCAPE_PARMS) A pointer to the VSD_ESCAPE_PARMS structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.
  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.

VSD_INSERTSETTINGSPAGE

This command enables a VSD to insert device-specific settings pages into the system configuration application.

Parameters

hvsd (HVSD) Handle to a VSD instance.

ulFunc (ULONG) Set to VSD_INSERTSETTINGSPAGE.

ulFlags (ULONG) No flags used for this command.

pRequest (PMCI_DEVICESETTINGS_PARMS) Pointer to the MCI_DEVICESETTINGS_PARMS data structure.

Return Value

hwndRC (HWND) The return code contains the handle to a settings page or zero if no page is inserted.

VSD_OPEN

This command opens the device driver and returns a VSD handle or (HVSD). It should not allocate resources on the device (resource usage should be performed on the VSD restore).

VSD_OPEN is a required command and must be implemented by all VSD writers.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Not used.

ulFunc (ULONG) Set to VSD_OPEN.

ulFlags (ULONG) No flags used for this command.

pRequest (PVSD_OPEN_PARMS) Pointer to the VSD_OPEN_PARMS data structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
Command completed successfully.
  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.
  • VSDERR_NO_DEVICE_DRIVER
VSD is not connected to a device driver.
  • VSDERR_DEVICE_REJECTED
Device driver rejected the request.
  • VSDERR_HARDWARE
A hardware error occurred.
  • VSDERR_INVALID_BUFF
pRequest is not valid.

Remarks

The installation name of the media control driver (MCD) is passed in so that the VSD can query device-specific parameters from the INI file.

For an audio VSD, the pDevInfo pointer points to a VSD_AUDIOOPEN_PARMS structure. This structure contains enough information to initialize the audio device. The VSD is responsible for filling in the ulDataSubType field of the VSD_AUDIOOPEN_PARMS structure with a valid data subtype.

Example Code

The following code illustrates how to open an audio VSD.

 VSD_OPEN_PARMS        vsdOpenParms;
 VSD_AUDIOOPEN_PARMS   vsdData;

 vsdData.ulLength = sizeof(VSD_AUDIOOPEN_PARMS);
 vsdData.ulFlags = 0;
 vsdData.ulSamplingRate       = pInstance->lSRate;
 vsdData.ulBitsPerSample      = pInstance->lBitsPerSRate;
 vsdData.ulChannels           = pInstance->sChannels;
 vsdData.ulDataType           = pInstance->sMode;
 vsdData.ulDeviceID           = pInstance->ulDeviceID;
 vsdData.ulOperation          = pInstance->ulOperation;
 vsdOpenParms.pDevInfo = (PVOID)&vsdData;


     vsdOpenParms.ulLength = sizeof(VSD_OPEN_PARMS);
     memmove(&vsdOpenParms.szPDDName,
             pInstance->szDeviceName,
             strlen(pInstance->szDeviceName));
       /* Open the audio VSD */
     rc = pInstance->pfnAUDIOIF(0,
                                VSD_OPEN,
                                0L
                                (PVOID)&vsdOpenParms);
     if (!rc)
        }
        pInstance->hvsd = vsdOpenParms.hvsd;
        {

VSD_QUERY

This command allows an application to query the status of the VSD.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) The following flags can be used with VSD_QUERY:

pRequest (PVOID) Pointer varies according to ulFlags.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
Command completed successfully.
  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.

Remarks

This command uses flags to indicate what information is queried.

VSD_QUERYAUDIOATTRIBUTES

This subcommand of the VSD_QUERY command queries the current audio settings and capabilities. A valid length must be placed in the ulLength field of the VSD_AUDIOATTRIBUTES_PARMS structure and the audio setting (such as treble, bass, and so on) must be placed in the ulFlags field of the VSD_ AUDIOATTRIBUTES_PARMS structure.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) Set to VSD_QUERYAUDIOATTRIBUTES.

pRequest (PVSD_AUDIOATTRIBUTES_PARMS) Pointer to the VSD_AUDIOATTRIBUTES_PARMS structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.
  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.

Remarks

All values are returned in the ulValue field and can range from 0 - 100.

Example Code

The following code illustrates how to query audio attribute information from the VSD.

HVSD                        hvsd;
VSD_AUDIOATTRIBUTES_PARMS   vsdAttr;

    /* Prime the structure with necessary values */
vsdAttr.ulLength = sizeof (VSD_AUDIOATTRIBUTES_PARMS);
vsdAttr.ulFlags = VSD_BASS;

    /*---------------------------------------------
     * Ask the VSD to either set or query an audio
     * attribute.  The caller determines whether
     * to set or query via the command variable.
     *---------------------------------------------*/

     rc = pInstance->pfnAUDIOIF(hvsd,
                                VSD_QUERY,
                                VSD_QUERYAUDIOATTRIBUTES,
                                (PVOID)&vsdAttr);

    /* If Bass value is too high then...*/
    if (!rc)
       {
       if (vsdAttr.ulValue > 70)
       {
       }

VSD_QUERYCONNECTOR

This subcommand of the VSD_QUERY command queries the state of the connector. (A connector can be a hardware or software connection on the device the VSD is controlling.) If the connector is enabled, the fEnabled field of the VSD_CONNECTOR_PARMS structure will contain MCI_TRUE, otherwise it will contain MCI_FALSE. For further information regarding connectors, refer to the MCI connector command in the OS/2 Multimedia Programming Reference. Valid connectors can be found in MCIOS2.H.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) Set to VSD_QUERYCONNECTOR.

pRequest (PVSD_CONNECTOR_PARMS) A pointer to the VSD_CONNECTOR_PARMS structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_UNSUPPORTED_CONN_TYPE
Connector type not supported.
  • VSDERR_INVALID_CONNECTOR_TYPE
Invalid connector type.
  • VSDERR_INVALID_CONNECTOR_INDEX
Invalid connector index.
  • VSDERR_CANNOT_MODIFY_CONNECTOR
Cannot enable or disable this connector.
  • VSDERR_INVALID_CONNECTOR
Invalid connector.
  • VSDERR_UNSUPPORTED_CONNECTOR
Unsupported connector.
  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.

Example Code

The following code illustrates how to query the state of the connector.

    HVSD                   hvsd;
    VSD_CONNECTOR_PARMS    vsdConn;

    vsdConn.ulConn_Type = pConnector->ulConnectorType;
    vsdConn.ulIndex = pConnector->ulConnectorIndex;

    lError = pInstance->pfnNewVSD(hvsd,
                                  VSD_QUERY,
                                  VSD_QUERYCONNECTOR,
                                  (PVOID)&vsdConn);

    prConnector->ulReturn = vsdConn.fEnabled;

VSD_QUERYDATATYPE

This subcommand of the VSD_QUERY command queries if a particular set of data types are supported. The ulSamplingRate, ulBitsPerSample, ulChannels, and ulDataType will be filled in on input. The ulDataSubType is filled in by the VSD on output. If the current mode is not supported, the VSD should fill in the ulSamplingRate, ulBitsPerSample, and ulChannels with the closest that it supports.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) Set to VSD_QUERYDATATYPE.

pRequest (PVSD_AUDIODATATYPE_PARMS) Pointer to the VSD_AUDIODATATYPE_PARMS structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.
  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.

Remarks

This command is typically sent by applications which need to determine if the VSD supports a particular datatype.

Example Code

The following code illustrates the use of VSD_QUERYDATATYPE:

 HVSD                       hvsd;
 VSD_AUDIODATATYPE_PARMS    AudioCaps;

   /*---------------------------------------
   * Tell the VSD that we want to enable a
   * connector.
   *---------------------------------------*/
   rc =  pInstance->pfnNewVSD( hvsd,
                               VSD_QUERY,
                               VSD_QUERYDATATYPE,
                               (PVOID ) &AudioCaps );

   if ( rc )
      {
        rc = MCIERR_INVALID_CONNECTION ;
      return (rc);
      }
   else
      {
      rc = MCIERR_SUCCESS;
      }

   return ( rc );

      } /* TestConnection */

VSD_QUERYMIXCONNECTIONS

This subcommand of the VSD_QUERY command queries the output that a particular VSD line (or connector) is routed to. For further information about VSD mixer support and functions, see Audio Sample for Vendor-Specific Drivers and Mixer IOCtl Functions Introduction

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) Set to VSD_QUERYMIXCONNECTIONS.

pRequest (PLINECONNECTIONS) A pointer to the LINECONNECTIONS structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.
  • VSDERR_INVALID_SOURCE
Invalid source.
  • VSDERR_INVALID_SINK
Invalid sink.
  • VSDERR_INVALID_CONNECTION
Invalid connection.

Remarks

The ulConnections field of the LINECONNECTIONS structure returns the particular output that a line is routed to. The ulLine field of the LINECONNECTIONS structure must contain a valid line on input. For more information on the values for ulLine and ulConnections, see the LINECONNECTIONS structure.

Example Code

The following code illustrates how to query the output that a particular line is routed to.

  HVSD              hvsd;
  LINECONNECTIONS   LineCon;

 /* Find out the setting for the synth. */

  LineCon.ulLine = SOURCE_SYNTHESIZER;

  LineCon.ulLength = sizeof(MIXERLINEINFO);
 /* Ask VSD for the capabilities of this line. */

  rc = pInstance->(hvsd,
                   VSD_QUERY,
                   VSD_QUERYMIXCONNECTIONS,
                   (PVOID)&LineCon);

 /* Are we connected to the amp or record outputs... */

  if (LineCon.ulConnection & (SINK_SPEAKERS))
     {
     pMixParms->ulReturn = MCI_OUTPUT_AMP;
     }
  else
     {
     pMixParms->ulReturn = MCI_OUTPUT_DIGITALAUDIO;
     }

VSD_QUERYMIXCONTROL

This subcommand of the VSD_QUERY command queries the audio attributes for an audio VSD connector (for example, the treble setting on a microphone connector). For further information about VSD mixer support and functions, see Audio Sample for Vendor-Specific Drivers and Mixer IOCtl Functions Introduction

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) Set to VSD_QUERYMIXCONTROL.

pRequest (PMIXERCONTROL) A pointer to the MIXERCONTROL structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.
  • VSDERR_INVALID_SOURCE
Invalid source.
  • VSDERR_INVALID_SINK
Invalid sink.
  • VSDERR_INVALID_CONNECTION
Invalid connection.

Remarks

The ulLine field of the MIXERCONTROL structure must be filled in with one of the VSD sources/sinks in the low-order byte of the low word.

The ulControl field of the MIXERCONTROL structure must be filled in with the desired setting. For stereo controls, the high-order word of this field contains the left channel setting and the low-order word contains the right channel setting. A value of 0xFFFF represents full intensity and a value of 0x0000 is full cutout.

Example Code

The following code illustrates how to query the settings of audio attributes for a particular connector.

  HVSD           hvsd;
  MIXERCONTROL   MixerControl;
  USHORT         usBass;

 /* Find out the setting for the synth. */

  MixerControl.ulLine = SOURCE_SYNTHESIZER;

 /* Ask VSD what is the current setting of the connector. */

  MixerControl.ulControl = MIX_BASS;
  rc = pInstance->(hvsd,
                   VSD_QUERY,
                   VSD_QUERYMIXCONTROL,
                   (PVOID)&MixerControl);

     usBass = (MixControl.ulSetting)

     }

VSD_QUERYMIXLINE

This subcommand of the VSD_QUERY command queries the audio attributes that are supported for the given VSD connector. For further information about VSD mixer support and functions, see Audio Sample for Vendor-Specific Drivers and Mixer IOCtl Functions Introduction

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) Set to VSD_QUERYMIXLINE.

pRequest (PMIXERLINEINFO) A pointer to the MIXERLINEINFO structure. The ulSupport field will be filled by the VSD with the supported setting or settings if the line supports multiple settings. The ulLine field must be filled in by the caller.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_INVALID_SOURCE
Invalid source.
  • VSDERR_INVALID_SINK
Invalid sink.
  • VSDERR_INVALID_CONNECTION
Invalid connection.

Example Code

The following code illustrates how to query the supported audio attributes from a mixer connector.

HVSD               hvsd;
MIXERLINEINFO      mixerinfo;
  mixerinfo.ulLine = SYNTHESIZER_INPUT;
  mixerinfo.ulLength = sizeof(MIXERLINEINFO);
      rc = pInstance->pfnAUDIOIF( hsvd,
                                  VSD_QUERY,
                                  VSD_QUERYMIXLINE,
                                  (PVOID) &mixerinfo);

   if(!rc)
      if(mixerinfo.ulSupport & MIX_VOLUME)
          {
          /* process volume */
          }

        }  /* If no errors */

VSD_QUERYMONITOR

This subcommand of the VSD_QUERY command queries the device to determine if audio monitoring is enabled. The VSD returns TRUE if the monitor is enabled and FALSE if it is disabled.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD instance.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) Set to VSD_QUERYMONITOR.

pRequest (PULONG) Output.

Return Value

rc (ULONG) VSD returns TRUE if the monitor is enabled and FALSE if it is disabled.

Example Code

The following code illustrates how to query the state of monitoring.

rc = pInstance->pfnAUDIOIF((HVSD)pInstance->hvsd,
                           VSD_QUERY,
                           VSD_QUERYMONITOR,
                           (PVOID)&pStat->ulReturn);

VSD_QUERYSTATUSLEVEL

This subcommand of the VSD_QUERY command queries the status of the audio input level (percentage). This command is optional.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) Set to VSD_QUERYSTATUSLEVEL.

pRequest (PULONG) Current level of device.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.

VSD_QUERYVOLUME

This subcommand of the VSD_QUERY command queries the volume level. The volume is returned as a percentage between 0% and 100%

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_QUERY.

ulFlags (ULONG) Set to VSD_QUERYVOLUME.

pRequest (PVSD_VOLUME_PARMS) Pointer to the VSD_VOLUME_PARMS structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful. field.

Remarks

On return, the VSD will fill in the ulVolume field of the VSD_VOLUME_PARMS structure.

Example Code

The following code illustrates how to query audio volume from the VSD.

VSD_VOLUME_PARMS   vsdVol;
ULONG              ulVol;
   vsdVol.ulLength = sizeof(VSD_VOLUME_PARMS);
   vsdVol.ulFlags  = ulFlags;

 /*------------------------------------------
  *  Ask the VSD to query audio volume.
  *------------------------------------------*/

rc = pInstance->pfnAUDIOIF((HVSD)pInstance->hvsd,
                           VSD_QUERY,
                           VSD_QUERYVOLUME,
                           (PVOID)&vsdVol);
ulVol = vsdvol.ulVolume;

VSD_RESOURCE

This command can be issued only when the device is opened and is used for resource management.

VSD_RESOURCE is a required command and must be implemented by all VSD writers.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_RESOURCE.

ulFlags (ULONG) No flags used for this command.

pRequest (PVSD_RESOURCE_PARMS) Pointer to the VSD_RESOURCE_PARMS data structure.

The driver is responsible for filling in the ulResUnits and ulClass fields. The caller is responsible for filling in the ulDataType field.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
Command completed successfully.
  • VSDERR_MISSING_PARAMETER
One or more parameters is missing.

Remarks

When an audio device driver is installed in MMPM/2, the installation routines place the following three keywords in the MMPM2.INI file:

  • RESOURCEUNITS=
  • RESOURCECLASS=
  • VALIDCOMBINATIONS=

Because MMPM/2 allows many applications to simultaneously open the audio card, it uses these keywords to determine which applications can simultaneously use the audio device. All of the numbers are arbitrary and are defined on a device-by-device basis. However, device driver writers should use the numbering scheme defined below:

The keyword RESOURCECLASSES indicates the different resource types available on the audio device. The first parameter is the number of classes and it is followed by a listing of classes. A vendor should provide a class for each data type that they support. For instance, if the XYZ audio card can only play PCM files, it would only have one resource class - the PCM class. However, if the ABC audio card can play PCM, MIDI, and ADPCM, then it would have three classes. The VSD should fill in the ulClass field with the class that is appropriate for this mode.

The keyword RESOURCEUNITS indicates the maximum number of instances that can be active on the card at any particular time. For example, if the XYZ card mentioned above had the ability to play three PCM files at the same time, the RESOURCEUNITS for this card would be three. In contrast, the ABC card can only play one PCM file and one MIDI file at any one time. Therefore, its resource units should be two. The VSD should fill in the ulResUnits field with the correct number of resources for the current mode (typically, one).

Example Code

The following code illustrates how to determine the number of resources consumed for a particular mode on an audio VSD.

 HVSD   hvsd;
  rc = pInstance->pfnAUDIOIF( hvsd,
                              VSD_RESOURCE,
                              0L,
                              (PVOID)&vsdResourceParms );

  pInstance->ulResourcesUsed = vsdResourceParms.ulResUnits;
  pInstance->ulClass = vsdResourceParms.ulClass;

VSD_RESTORE

This command restores the current state of the device. VSD_RESTORE is a required function and must be implemented by all VSD writers.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_RESTORE.

ulFlags (ULONG) No flags used for this command.

pRequest (PVOID) Not used with this command.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command completed successfully.

Remarks

MMPM/2 supports the concept of suspending and resuming the state of a device at any point in time. Unlike other environments, multiple applications can simultaneously have a device open and the Media Device Manager will cooperate with the VSD in order to manage the device. The VSD is responsible for saving and restoring the actual hardware device. For further information, see the OS/2 Multimedia Programming Reference (MCI_ RESTORE).

Example Code

The following code illustrates how to activate an audio VSD using VSD_RESTORE.

   ULONG   rc;
   HVSD    hvsd;

       rc = pInstance->pfnAUDIOIF( hvsd,
                                   VSD_RESTORE,
                                   0L,
                                   0 );
       return(rc)

VSD_SAVE

This command saves the current state of the device. VSD_SAVE is a required function and must be implemented by all VSD writers. This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_SAVE.

ulFlags (ULONG) No flags used for this command.

pRequest (PVOID) Not used with this command.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.

Remarks

MMPM/2 supports the concept of suspending and resuming the state of a device at any point in time. Unlike other environments, multiple applications can simultaneously have a device open and the Media Device Manager will cooperate with the VSD in order to manage the device. The VSD is responsible for saving and restoring the actual hardware device. For further information, see the OS/2 Multimedia Programming Reference (MCIDRV_ SAVE).

Example Code

The following code illustrates how to deactivate an audio VSD using VSD_SAVE.

 ULONG    rc;
 HVSD    hvsd;
 
 rc = pInstance->pfnAUDIOIF( hvsd,
                             VSD_SAVE,
                             0L,
                             0 );
 
 return(rc);

VSD_SET

This command allows an application to modify the settings of the VSD.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to VSD.

ulFunc (ULONG) Set to VSD_SET.

ulFlags (ULONG) The following flags can be used with VSD_SET.

  • VSD_SETAUDIOATTRIBUTES
See VSD_SETAUDIOATTRIBUTES
  • VSD_SETCONNECTOR
See VSD_SETCONNECTOR
  • VSD_SETDATATYPE
See VSD_SETDATATYPE
  • VSD_SETMIXCONNECTIONS
See VSD_SETMIXCONNECTIONS
  • VSD_SETMIXCONTROL
See VSD_SETMIXCONTROL
  • VSD_SETMONITOR
See VSD_SETMONITOR
  • VSD_SETVOLUME
See VSD_SETVOLUME

pRequest (PVOID) Pointer value varies according to the value of ulFlags.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_INVALID_HVSD
The hvsd(VSD handle) is not valid. Verify that the hvsdmatches the one provided on the VSD_OPEN.

Remarks

This messages uses flags to specify what to set on the adapter.

VSD_SETAUDIOATTRIBUTES

This subcommand of the VSD_SET command sets the audio attribute settings. A valid length must be placed in the ulLength field of the VSD_ AUDIOATTRIBUTES_PARMS structure. The audio setting to modify (such as treble, bass, and so on) must be placed in the ulFlags field of the VSD_ AUDIOATTRIBUTES_PARMS structure with the actual corresponding setting in the ulValue field. The value should be between 0 and 100. The ulDelay indicates the length of time over which this effect should take place.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_SET.

ulFlags (ULONG) Set to VSD_SETAUDIOATTRIBUTES.

pRequest (PVSD_AUDIOATTRIBUTES_PARMS) Pointer to the VSD_AUDIOATTRIBUTES_PARMS structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.
  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.

Example Code

The following code illustrates how to set audio attribute information.

VSD_AUDIOATTRIBUTES_PARMS   vsdAttr;

    /* Prime the structure with necessary values */
vsdAttr.ulLength = sizeof (VSD_AUDIOATTRIBUTES_PARMS);
vsdAttr.ulFlags = VSD_BASS;
vsdAttr.ulValue = 100;

    /*---------------------------------------------
     * Ask the VSD to either set or query an audio
     * attribute.  The caller determines whether
     * to set or query via the command variable.
     *---------------------------------------------*/

     rc = pInstance->pfnAUDIOIF((HVSD)pInstance->hvsd,
                                VSD_SET,
                                VSD_SETAUDIOATTRIBUTES,
                                (PVOID)&vsdAttr);

VSD_SETCONNECTOR

This subcommand of the VSD_SET command enables or disables a connector. (A connector can be a hardware or software connection on the device the VSD is controlling.) Note that enabling a connector can by default, disable another connector. For further information regarding connectors, refer to the MCI_CONNECTOR command in the OS/2 Multimedia Programming Reference. Additional connectors can be found in MCIOS2.H.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_SET.

ulFlags (ULONG) Set to VSD_SETCONNECTOR.

pRequest (PVSD_CONNECTOR_PARMS) A pointer to the VSD_CONNECTOR_PARMS structure.

The status of the connector, enable (VSD_ENABLE) or disable (VSD_DISABLE) must be indicated in the fEnabled field. A valid connector must be placed in the ulConn_Type field and a valid index in the ulIndex field.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.
  • VSDERR_UNSUPPORTED_CONNECTOR
Connector setting is not supported.
  • VSDERR_INVALID_CONNECTOR
Connector setting is invalid.

Example Code

The following code illustrates how to set the state of the connector.

 HVSD                   hvsd;
 VSD_CONNECTOR_PARMS    vsdConn;

 vsdConn.ulConn_Type = pConnector->ulConnectorType;
 vsdConn.ulIndex = pConnector->ulConnectorIndex;
 vsdConn.fEnabled = VSD_DISABLE;

 /*--------------------------------------------------
  * Tell the VSD that we want to disable a connector.
  *--------------------------------------------------*/
  lError = pInstance->pfnNewVSD(hvsd,
                                VSD_SET,
                                VSD_SETCONNECTOR,
                                (PVOID)&vsdConn);

VSD_SETDATATYPE

This subcommand of the VSD_SET command sets the current data type that the device is dealing with.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_SET.

ulFlags (ULONG) Set to VSD_SETDATATYPE.

pRequest (PVSD_AUDIODATATYPE_PARMS) Input. Pointer to a VSD_AUDIODATATYPE_PARMS structure.

Note
Every field in the VSD_AUDIODATATYPE_PARMS structure contains a numeric value except for ulOperation. This field contains either VSD_ PRODUCE for recording or VSD_CONSUME for playback. The VSD is responsible for filling in the ulBlockAlignment, ulDataSubType, and ulAverageBytesPerSec fields in the VSD_AUDIODATATYPE_PARMS structure.

The ulFlags field of the VSD_AUDIODATATYPE_PARMS structure contains a flag for each field in the structure that can be set. Every field has a flag except for the ulOperation field. The ulOperation field is valid for every call.

The VSD_AUDIODATATYPE_PARMS structure must contain at least one of the following flags:

  • VSD_MODE
  • VSD_CHANNELS
  • VSD_SAMPLESPERSEC
  • VSD_OPERATION
  • VSD_BITSPERSAMPLE

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.

Example Code

The following code illustrates how to set the data type, sampling rate, channels, and bits per sample for an audio VSD.

HVSD                     hvsd;
VSD_AUDIODATATYPE_PARMS  AudioDatatype;
PMMAUDIOHEADER           pmmaudioheader;
AudioDatatype.ulDataType = pmmaudioheader->mmXWAVHeader.WAVEHeader.usFormatTag;
AudioDatatype.ulBitsPerSample = pmmaudioheader->mmXWAVHeader.WAVEHeader.usBitsPerSample;
AudioDatatype.ulSamplingRate = pmmaudioheader->mmXWAVHeader.WAVEHeader.usSamplesPerSec;
AudioDatatype.ulChannels = pmmaudioheader->mmXWAVHeader.WAVEHeader.usChannels;
AudioDatatype.ulOperation = VSD_PLAY;
AudioDatatype.ulFlags = VSD_MODE|VSD_CHANNELS|VSD_SAMPLESPERSEC|
                        VSD_OPERATION|VSD_BITSPERSAMPLE;

   rc = pInstance->pfnNewVSD(hvsd,
                             VSD_SET,
                             VSD_SETDATATYPE,
                    (PVOID)&AudioDatatype);
   if(rc)
     {
     return(rc)
     }

VSD_SETMIXCONNECTIONS

This subcommand of the VSD_SET command routes the audio output of a connector to a particular output circuitry (that is, pass thru, internal mixer circuitry, and so on). For further information about VSD mixer support and functions, see Audio Sample for Vendor-Specific Drivers and Mixer IOCtl Functions Introduction

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_SET.

ulFlags (ULONG) Set to VSD_SETMIXCONNECTIONS.

pRequest (PLINECONNECTIONS) A pointer to the LINECONNECTIONS structure.

The caller must fill in the ulConnections and the ulLine fields of the LINECONNECTIONS structure.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.
  • VSDERR_INVALID_SOURCE
Invalid source.
  • VSDERR_INVALID_SINK
Invalid sink.
  • VSDERR_INVALID_CONNECTION
Invalid connection.

Example Code

The following code illustrates how to route the output of a connector to the internal mixer circuitry.

  LINECONNECTIONS   mixinfo;

  mixinfo.ulLine = SOURCE_SYNTHESIZER;
  mixinfo.ulConnection = SINK_SPEAKER;
  rc = pInstance->((HVSD)pInstance->hvsd,
                   VSD_SET,
                   VSD_SETMIXCONNECTIONS,
                   (PVOID)&mixinfo);

  return(rc);

VSD_SETMIXCONTROL

This subcommand of the VSD_SET command enables an application to set the current state of a particular line. For further information about VSD mixer support and functions, see Audio Sample for Vendor-Specific Drivers and Mixer IOCtl Functions Introduction

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_SET.

ulFlags (ULONG) Set to VSD_SETMIXCONTROL.

pRequest (PMIXERCONTROL) A pointer to the MIXERCONTROL structure.

The ulControl field of the MIXERCONTROL structure must be filled in with the desired setting. For stereo controls, the high-order word of this field contains the left channel setting and the low-order word contains the right channel setting. A value of 0xFFFF represents full intensity and a value of 0x0000 is full cutout. The ulLine field must also be filled in.

Return Value

rc (ULONG) Error code indicating success or the type of failure:

  • VSDERR_MISSING_PARAMETER
One or more parameters are missing.
  • VSDERR_INVALID_SOURCE
Invalid source.
  • VSDERR_INVALID_SINK
Invalid sink.
  • VSDERR_INVALID_CONNECTION
Invalid connection.

Example Code

The following code illustrates how to query the settings of an audio attributes for a particular connector.

  MIXERCONTROL   MixerControl;
  USHORT         usBass;

  MixerControl.ulControl = MIX_SUPPORT_VOLUME;
  MixerControl.ulLine = SINK_LINE_OUT;
  MixerControl.ulSetting = 100;

  lError = pInstance->((HVSD)pInstance->hvsd,
                      VSD_SET,
                      VSD_SETMIXCONTROL,
                      (PVOID)&MixerControl);

   return(lError);

VSD_SETMONITOR

This subcommand of the VSD_SET command enables (MCI_TRUE) or disables (MCI_ FALSE) the audio monitor feature of the device.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_SET.

ulFlags (ULONG) Set to VSD_SETMONITOR.

pRequest (PULONG) Input. Set to MCI_TRUE or MCI_FALSE.

Return Value

rc (ULONG) Error code indicating success.

  • VSDERR_SUCCESS
The command was successful.

Example Code

The following code illustrates how to set the state of the VSD monitor.

ULONG    ulSetOn;

   ulSetOn = MCI_TRUE;

   /* Tell the VSD to change monitor status */

   lError = prInstance->pfnAUDIOIF((HVSD)prInstance->pMix->hvsd
                           VSD_SET,
                           VSD_SETMONITOR,
                           (PVOID)lSetOn);

VSD_SETVOLUME

This subcommand of the VSD_SET command sets the volume level as a percentage (0 - 100). If the value is not one of the supported volume levels, it is rounded up to the nearest supported level. The ulFlags field indicates which fields are to be used.

This command is sent using VSDEntry as follows:

VSDEntry(hvsd, ulFunc, ulFlags, pRequest)

Parameters

hvsd (HVSD) Handle to a VSD.

ulFunc (ULONG) Set to VSD_SET.

ulFlags (ULONG) Set to VSD_SETVOLUME.

pRequest (PVSD_VOLUME_PARMS) Pointer to the VSD_VOLUME_PARMS structure.

The caller must fill in the ulVolume field if VSD_VOLUME is specified. The caller must fill in the ulMasterAudio field if VSD_MASTERVOLUME is specified. The caller must fill in the fMute field with a boolean if VSD_ MUTE is specified. TRUE mutes the device; FALSE unmutes the device.

Return Value

rc (ULONG) Error codes indicating success or the type of failure:

  • VSDERR_SUCCESS
The command was successful.
  • VSDERR_VOL_OUT_OF_RANGE
Invalid volume level.

Example Code

The following code illustrates how to set the volume on an audio VSD.

VSD_VOLUME_PARMS   vsdVol;
   vsdVol.ulVolume = pInstance->ulVolume;
   vsdVol.ulMasterAudio  = pInstance->ulMasterVolume;
   vsdVol.fMute = pInstance->fMute;
   vsdVol.ulVectoredVolume  = pInstance->ulTime;
   vsdVol.ulFlags  = VSD_VOLUME | VSD_MASTERVOLUME;


   lError = prInstance->pfnAUDIOIF((HVSD)prInstance->pMix->hvsd
                           VSD_SET,
                           VSD_SETVOLUME,
                           (PVOID)&vsdVol);