| 1 | /***********************START OF SPECIFICATIONS ****************
|
|---|
| 2 |
|
|---|
| 3 | *
|
|---|
| 4 | * SOURCE FILE NAME: VSDMAP.C
|
|---|
| 5 | *
|
|---|
| 6 | * DESCRIPTIVE NAME: Ring 3 Amp/Mixer AUDIO Interface Driver
|
|---|
| 7 | *
|
|---|
| 8 | * COPYRIGHT: IBM Confidential
|
|---|
| 9 | * Copyright (c) IBM Corporation 1991
|
|---|
| 10 | * All Rights Reserved
|
|---|
| 11 | *
|
|---|
| 12 | * STATUS: OS/2 Release 2.0
|
|---|
| 13 | *
|
|---|
| 14 | * FUNCTION: This file contains a mapping from the old VSD layer to the
|
|---|
| 15 | * new VSD layer. It will be called by older MCDs. We maintain
|
|---|
| 16 | * this for compatibility purposes.
|
|---|
| 17 | *
|
|---|
| 18 | * NOTES:
|
|---|
| 19 | *
|
|---|
| 20 | * DATE DEVELOPER CHANGE DESCRIPTION
|
|---|
| 21 | * 07/28/93 Linden deCarmo File created
|
|---|
| 22 | *
|
|---|
| 23 | ************************** END OF SPECIFICATIONS **************************/
|
|---|
| 24 |
|
|---|
| 25 | #define INCL_NOPMAPI
|
|---|
| 26 | #define INCL_DOS
|
|---|
| 27 | #define INCL_ERRORS
|
|---|
| 28 | #define INCL_RESOURCES
|
|---|
| 29 | #define INCL_AUDIO_VSD
|
|---|
| 30 |
|
|---|
| 31 |
|
|---|
| 32 |
|
|---|
| 33 | #include <os2.h>
|
|---|
| 34 | #include <os2me.h>
|
|---|
| 35 | #include <mcd.h>
|
|---|
| 36 | #include <audio.h>
|
|---|
| 37 | #include <stdio.h>
|
|---|
| 38 | #include <stdlib.h>
|
|---|
| 39 | #include <string.h>
|
|---|
| 40 | #include <hhpheap.h>
|
|---|
| 41 |
|
|---|
| 42 | #include <vsdcmds.h>
|
|---|
| 43 | #include <vsdaud.h>
|
|---|
| 44 |
|
|---|
| 45 |
|
|---|
| 46 |
|
|---|
| 47 | /************************ START OF SPECIFICATIONS **************************
|
|---|
| 48 | *
|
|---|
| 49 | * SUBROUTINE NAME: AUDIOIFIDriverEntry
|
|---|
| 50 | *
|
|---|
| 51 | * FUNCTION: Ring 3 entry point for AUDIOIF calls from Amp/Mixer
|
|---|
| 52 | *
|
|---|
| 53 | * INPUT: sMessage - request id
|
|---|
| 54 | * lParam1 - function specific value
|
|---|
| 55 | * lParam2 - function specific value
|
|---|
| 56 | * lParam3 - identifies caller (1 = Amp/Mixer, 0 = Audio MCI)
|
|---|
| 57 | *
|
|---|
| 58 | * OUTPUT: returns VSDERR_SUCCESS if successful, otherwise it returns an
|
|---|
| 59 | * MCI error code.
|
|---|
| 60 |
|
|---|
| 61 | *
|
|---|
| 62 | * OS/2 CALLS: None
|
|---|
| 63 | *
|
|---|
| 64 | * C CALLS: None
|
|---|
| 65 | *
|
|---|
| 66 | * Notes: This entry only maps known callers (i.e. MIDIMCD, Audio MCD etc.)
|
|---|
| 67 | * interfaces. If anyone calls another unsupported interface, they
|
|---|
| 68 | * are in deep trouble.
|
|---|
| 69 | *
|
|---|
| 70 | *************************** END OF SPECIFICATIONS *************************/
|
|---|
| 71 |
|
|---|
| 72 | ULONG APIENTRY AUDIOIFDriverEntry(PMCI_AMP_INSTANCE pInstance,
|
|---|
| 73 | ULONG sMessage,
|
|---|
| 74 | ULONG lParam1,
|
|---|
| 75 | ULONG lParam2,
|
|---|
| 76 | ULONG lParam3)
|
|---|
| 77 |
|
|---|
| 78 | {
|
|---|
| 79 | LONG lError = VSDERR_SUCCESS;
|
|---|
| 80 |
|
|---|
| 81 | if ( sMessage == MCI_SET )
|
|---|
| 82 | {
|
|---|
| 83 | lError = WaveMap( pInstance, lParam1, lParam2 );
|
|---|
| 84 | }
|
|---|
| 85 |
|
|---|
| 86 | // switch(sMessage)
|
|---|
| 87 | // {
|
|---|
| 88 | // /*---------------------------------------------------------*
|
|---|
| 89 | // * STATUS message received
|
|---|
| 90 | // *---------------------------------------------------------*/
|
|---|
| 91 | //
|
|---|
| 92 | //// case MCI_STATUS:
|
|---|
| 93 | //// lError = StatusMap(pInstance, lParam2, lParam3);
|
|---|
| 94 | ////
|
|---|
| 95 | //// break;
|
|---|
| 96 | // /*---------------------------------------------------------*
|
|---|
| 97 | // * SET message received
|
|---|
| 98 | // *---------------------------------------------------------*/
|
|---|
| 99 | //
|
|---|
| 100 | // case MCI_SET:
|
|---|
| 101 | // /*-------------------------------------------------*
|
|---|
| 102 | // * Map request to manipulate audio data types
|
|---|
| 103 | // *-------------------------------------------------*/
|
|---|
| 104 | //
|
|---|
| 105 | // lError = WaveMap( pInstance,
|
|---|
| 106 | // lParam1,
|
|---|
| 107 | // lParam2 );
|
|---|
| 108 | // break;
|
|---|
| 109 | // /*---------------------------------------------------------*
|
|---|
| 110 | // * GETDEVCAPS message received
|
|---|
| 111 | // *---------------------------------------------------------*/
|
|---|
| 112 | //
|
|---|
| 113 | //// case MCI_GETDEVCAPS:
|
|---|
| 114 | //// lError = CapsMap( pInstance,
|
|---|
| 115 | //// lParam1,
|
|---|
| 116 | //// (ULONG *) lParam2,
|
|---|
| 117 | //// lParam3 );
|
|---|
| 118 | //
|
|---|
| 119 | // break;
|
|---|
| 120 | // /*---------------------------------------------------------*
|
|---|
| 121 | // * MCI_SEQ_STATUS_TEMPO message received
|
|---|
| 122 | // *---------------------------------------------------------*/
|
|---|
| 123 | //
|
|---|
| 124 | //// case MCI_SEQ_STATUS_TEMPO:
|
|---|
| 125 | //// lError = VSDERR_UNSUPPORTED_FUNCTION;
|
|---|
| 126 | ////
|
|---|
| 127 | //// break;
|
|---|
| 128 | //
|
|---|
| 129 | // }
|
|---|
| 130 |
|
|---|
| 131 | return(lError);
|
|---|
| 132 | }
|
|---|
| 133 |
|
|---|
| 134 |
|
|---|
| 135 |
|
|---|
| 136 |
|
|---|
| 137 | /************************ START OF SPECIFICATIONS **************************
|
|---|
| 138 | *
|
|---|
| 139 | * SUBROUTINE NAME: Wave_Driver
|
|---|
| 140 | *
|
|---|
| 141 | * FUNCTION: Sets waveform attributes (Sample rate, bits per sample, etc)
|
|---|
| 142 | *
|
|---|
| 143 | * INPUT: pInstance - pointer to Amp Instance structure
|
|---|
| 144 | * lParam1 - pointer to MCI_WAVE_SET_PARMS structure
|
|---|
| 145 | *
|
|---|
| 146 | * OUTPUT: returns VSDERR_SUCCESS if successful, otherwise it returns an
|
|---|
| 147 | * MCI error code.
|
|---|
| 148 | *
|
|---|
| 149 | * OS/2 CALLS: DosDevIOCtl(), DosOpen(), DosClose(), DosQueryFileInfo()
|
|---|
| 150 | * DosAllocSharedMem(), DosFreeMem()
|
|---|
| 151 | *
|
|---|
| 152 | * C CALLS: None.
|
|---|
| 153 | *
|
|---|
| 154 | *
|
|---|
| 155 | *************************** END OF SPECIFICATIONS *************************/
|
|---|
| 156 |
|
|---|
| 157 | LONG WaveMap( PMCI_AMP_INSTANCE pInstance,
|
|---|
| 158 | ULONG lParam1,
|
|---|
| 159 | ULONG lParam2)
|
|---|
| 160 |
|
|---|
| 161 | {
|
|---|
| 162 | LONG lError = VSDERR_SUCCESS;
|
|---|
| 163 |
|
|---|
| 164 | // ULONG ulResourceDecrease;
|
|---|
| 165 | // ULONG ulResourceChange = FALSE;
|
|---|
| 166 | // ULONG ulOldResources = pInstance->ulResourcesUsed;
|
|---|
| 167 | // ULONG ulOldClass = pInstance->ulClass;
|
|---|
| 168 | // ULONG ulMatch;
|
|---|
| 169 |
|
|---|
| 170 |
|
|---|
| 171 | // MCI_AMP_INSTANCE TempAmp;
|
|---|
| 172 |
|
|---|
| 173 | // MCIDRV_CHANGERESOURCE_PARMS mciChangeResource;
|
|---|
| 174 |
|
|---|
| 175 | LPMCI_WAVE_SET_PARMS prWaveSet;
|
|---|
| 176 |
|
|---|
| 177 | VSD_AUDIODATATYPE_PARMS AudioDatatype;
|
|---|
| 178 |
|
|---|
| 179 |
|
|---|
| 180 | prWaveSet = (LPMCI_WAVE_SET_PARMS) lParam2;
|
|---|
| 181 |
|
|---|
| 182 |
|
|---|
| 183 | AudioDatatype.ulDataType = prWaveSet->wFormatTag;
|
|---|
| 184 | AudioDatatype.ulBitsPerSample = prWaveSet->wBitsPerSample;
|
|---|
| 185 | AudioDatatype.ulSamplingRate = prWaveSet->nSamplesPerSec;
|
|---|
| 186 | AudioDatatype.ulChannels = prWaveSet->nChannels;
|
|---|
| 187 | AudioDatatype.ulFlags = lParam1;
|
|---|
| 188 |
|
|---|
| 189 | lError = VSDSetCommand( pInstance, VSD_SETDATATYPE, &AudioDatatype );
|
|---|
| 190 |
|
|---|
| 191 | pInstance->sBestFitMode = DATATYPE_WAVEFORM;
|
|---|
| 192 | pInstance->ulBestFitBPS = AudioDatatype.ulBitsPerSample;
|
|---|
| 193 | pInstance->ulBestFitChan = AudioDatatype.ulChannels;
|
|---|
| 194 | pInstance->ulBestFitRate = AudioDatatype.ulSamplingRate;
|
|---|
| 195 |
|
|---|
| 196 |
|
|---|
| 197 | return(lError);
|
|---|
| 198 |
|
|---|
| 199 | } /* VSDWave */
|
|---|
| 200 |
|
|---|
| 201 |
|
|---|
| 202 |
|
|---|
| 203 |
|
|---|
| 204 | ///************************ START OF SPECIFICATIONS **************************
|
|---|
| 205 | //*
|
|---|
| 206 | //* SUBROUTINE NAME: Status_Driver()
|
|---|
| 207 | //*
|
|---|
| 208 | //* FUNCTION: Sends audio status IOCTL request to PDD
|
|---|
| 209 | //*
|
|---|
| 210 | //* INPUT: pInstance - pointer to AMP/Mixer instance structure
|
|---|
| 211 | //* lParam1 - flag indicating what info to return
|
|---|
| 212 | //* lParam2 - pointer to MCI_STATUS_PARMS structure
|
|---|
| 213 | //* lParam3 - indicates who made the request (0 - Audio MCD, 1 = AMP)
|
|---|
| 214 | //*
|
|---|
| 215 | //* OUTPUT: returns VSDERR_SUCCESS if successful, otherwise it returns an
|
|---|
| 216 | //* MCI error code.
|
|---|
| 217 | //*
|
|---|
| 218 | //* OS/2 CALLS: DosDevIOCtl()
|
|---|
| 219 | //*
|
|---|
| 220 | //* C CALLS: None
|
|---|
| 221 | //*
|
|---|
| 222 | //* INTERNAL CALLS: MCI_Error()
|
|---|
| 223 | //*
|
|---|
| 224 | //*************************** END OF SPECIFICATIONS *************************/
|
|---|
| 225 | //
|
|---|
| 226 | //LONG StatusMap( PMCI_AMP_INSTANCE pInstance,
|
|---|
| 227 | // ULONG lParam2,
|
|---|
| 228 | // ULONG lParam3)
|
|---|
| 229 | //{
|
|---|
| 230 | //
|
|---|
| 231 | // LONG lError = VSDERR_SUCCESS;
|
|---|
| 232 | // LPMCI_STATUS_PARMS prStatusParms;
|
|---|
| 233 | //
|
|---|
| 234 | //
|
|---|
| 235 | // prStatusParms = (LPMCI_STATUS_PARMS) lParam2;
|
|---|
| 236 | //
|
|---|
| 237 | // /*-----------------------------------------------------------------*
|
|---|
| 238 | // * Transfer requested status info to Status Parms structure
|
|---|
| 239 | // *-----------------------------------------------------------------*/
|
|---|
| 240 | //
|
|---|
| 241 | // switch(prStatusParms->dwItem)
|
|---|
| 242 | // {
|
|---|
| 243 | //
|
|---|
| 244 | // case MCI_STATUS_READY:
|
|---|
| 245 | // if ( pInstance->ulActive )
|
|---|
| 246 | // {
|
|---|
| 247 | // prStatusParms->dwReturn = MCI_TRUE;
|
|---|
| 248 | // }
|
|---|
| 249 | // else
|
|---|
| 250 | // {
|
|---|
| 251 | // prStatusParms->dwReturn = MCI_FALSE;
|
|---|
| 252 | // }
|
|---|
| 253 | // lError = MAKEULONG(lError, MCI_TRUE_FALSE_RETURN);
|
|---|
| 254 | // break;
|
|---|
| 255 | // case MCI_STATUS_CURRENT_TRACK:
|
|---|
| 256 | // // return some bogus number to remain compatible
|
|---|
| 257 | // // with the redmondians
|
|---|
| 258 | // prStatusParms->dwReturn = 1;
|
|---|
| 259 | // lError = MAKEULONG(lError, MCI_INTEGER_RETURNED);
|
|---|
| 260 | // break;
|
|---|
| 261 | //
|
|---|
| 262 | // default:
|
|---|
| 263 | // lError = VSDERR_INVALID_ITEM_FLAG;
|
|---|
| 264 | // prStatusParms->dwReturn = 0L;
|
|---|
| 265 | // lError = MAKEULONG(lError, MCI_INTEGER_RETURNED);
|
|---|
| 266 | // break;
|
|---|
| 267 | // }
|
|---|
| 268 | //
|
|---|
| 269 | //
|
|---|
| 270 | // return(lError);
|
|---|
| 271 | //
|
|---|
| 272 | ///* StatusMap */
|
|---|
| 273 |
|
|---|
| 274 | // removed because all MCI drivers were updated.
|
|---|
| 275 |
|
|---|
| 276 | /************************ START OF SPECIFICATIONS **************************
|
|---|
| 277 | *
|
|---|
| 278 | * SUBROUTINE NAME: DevCaps_Driver
|
|---|
| 279 | *
|
|---|
| 280 | * FUNCTION: Returns device capabilities
|
|---|
| 281 | *
|
|---|
| 282 | * INPUT: lParam1 - type of capability
|
|---|
| 283 | * lParam2 - pointer to LONG variable to receive capability
|
|---|
| 284 | *
|
|---|
| 285 | * OUTPUT: returns VSDERR_SUCCESS if successful, otherwise it returns an
|
|---|
| 286 | * MCI error code.
|
|---|
| 287 | *
|
|---|
| 288 | * OS/2 CALLS: None.
|
|---|
| 289 | *
|
|---|
| 290 | * C CALLS: None.
|
|---|
| 291 | *
|
|---|
| 292 | * INTERNAL CALLS: None.
|
|---|
| 293 | *
|
|---|
| 294 | *************************** END OF SPECIFICATIONS *************************/
|
|---|
| 295 |
|
|---|
| 296 | //LONG CapsMap( PMCI_AMP_INSTANCE pInstance,
|
|---|
| 297 | // ULONG lParam1,
|
|---|
| 298 | // ULONG *lParam2,
|
|---|
| 299 | // ULONG ulCaller )
|
|---|
| 300 | //{
|
|---|
| 301 | // LONG lError = VSDERR_SUCCESS;
|
|---|
| 302 | // MCI_AMP_INSTANCE TempAmp;
|
|---|
| 303 | // ULONG ulrc;
|
|---|
| 304 | // PMCI_WAVE_GETDEVCAPS_PARMS pAudioCaps;
|
|---|
| 305 | //
|
|---|
| 306 | //
|
|---|
| 307 | //
|
|---|
| 308 | //
|
|---|
| 309 | // if ( lParam1 == MCI_GETDEVCAPS_CAN_RECORD )
|
|---|
| 310 | // {
|
|---|
| 311 | // *lParam2 = pInstance->ulCanRecord;
|
|---|
| 312 | // ulrc = VSDERR_SUCCESS;
|
|---|
| 313 | // }
|
|---|
| 314 | // else if (lParam1 == MCI_GETDEVCAPS_WAVE_FORMAT )
|
|---|
| 315 | // {
|
|---|
| 316 | // pAudioCaps = ( PMCI_WAVE_GETDEVCAPS_PARMS ) *lParam2;
|
|---|
| 317 | //
|
|---|
| 318 | // memmove ( &TempAmp, pInstance, sizeof( MCI_AMP_INSTANCE ) );
|
|---|
| 319 | //
|
|---|
| 320 | // TempAmp.lSRate = ( LONG ) pAudioCaps->ulSamplesPerSec;
|
|---|
| 321 | // TempAmp.sMode = ( SHORT ) pAudioCaps->ulFormatTag;
|
|---|
| 322 | // TempAmp.lBitsPerSRate = ( LONG ) pAudioCaps->ulBitsPerSample;
|
|---|
| 323 | // TempAmp.sChannels = ( LONG ) pAudioCaps->ulChannels;
|
|---|
| 324 | //
|
|---|
| 325 | // if ( pAudioCaps->ulFormatMode == MCI_PLAY )
|
|---|
| 326 | // TempAmp.ulOperation = OPERATION_PLAY;
|
|---|
| 327 | // else
|
|---|
| 328 | // TempAmp.ulOperation = OPERATION_RECORD;
|
|---|
| 329 | //
|
|---|
| 330 | // /*-----------------------------------------------------------------*
|
|---|
| 331 | // * Return the resource class and number of resource units for the
|
|---|
| 332 | // * mode that the caller has specified.
|
|---|
| 333 | // *-----------------------------------------------------------------*/
|
|---|
| 334 | //
|
|---|
| 335 | // ulrc = GetClassInformation( &TempAmp );
|
|---|
| 336 | //
|
|---|
| 337 | // pAudioCaps->ulReturn = !ulrc;
|
|---|
| 338 | //
|
|---|
| 339 | //
|
|---|
| 340 | // } /* wave format request */
|
|---|
| 341 | //
|
|---|
| 342 | // return ( MAKEULONG(ulrc, MCI_TRUE_FALSE_RETURN) );
|
|---|
| 343 | //
|
|---|
| 344 | //} /* DevCapsMap */
|
|---|