Changeset 486


Ignore:
Timestamp:
May 23, 2010, 10:28:06 PM (15 years ago)
Author:
David Azarewicz
Message:

add ability to set volume on headphone, code cleanup

Location:
OCO/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • OCO/trunk/drv16/audiohw.cpp

    r473 r486  
    135135   },
    136136   {  //
    137       AUDIOHW_INVALID_DEVICE,
     137      AUDIOHW_WAVE_CAPTURE, /* DAZ */
    138138      0,
    139139      DATATYPE_ADPCM_AVC,
  • OCO/trunk/drv16/ioctl.cpp

    r483 r486  
    687687extern "C" void StrategyIoctl(PREQPACKET prp, USHORT LDev)
    688688{
    689     if (prp->s.ioctl.bCategory == DAUDIO_IOCTL_CAT)
    690     {
    691         IoctlDirectAudio(prp);
    692         return;
    693     }
    694 
    695689#ifdef DEBUG
    696690    dprintf(("StrategyIoctl:cat:0x%x, code:0x%x cd %d gd %d", prp->s.ioctl.bCategory, prp->s.ioctl.bCode, current_device, LDev));
    697691#endif
    698     if (prp->s.ioctl.bCategory == 0x90)
    699     {
     692        switch (prp->s.ioctl.bCategory) {
     693        case DAUDIO_IOCTL_CAT: /* 0x91 */
     694        IoctlDirectAudio(prp);
     695        break;
     696
     697        case MIXER_IOCTL_CAT: /* 0x90 */
    700698        IoctlMixer(prp, LDev);
    701         return;
    702     }
    703     if (prp->s.ioctl.bCategory != AUDIO_IOCTL_CAT)
    704     {
    705         prp->usStatus |= RPERR | RPBADCMD;
    706         return;
    707     }
    708 
    709     switch (prp->s.ioctl.bCode)
    710     {
    711            case AUDIO_INIT:
    712                 IoctlAudioInit(prp, LDev);
    713                 break;
    714            case AUDIO_CONTROL:
    715                 IoctlAudioControl(prp);
    716                 break;
    717            case AUDIO_CAPABILITY:
    718                 IoctlAudioCapability(prp, LDev);
    719                 break;
    720            default:
    721                 prp->usStatus |= RPERR | RPBADCMD;
    722                break;
    723     }
     699        break;
     700
     701        case AUDIO_IOCTL_CAT: /* 0x80 */
     702                switch (prp->s.ioctl.bCode) {
     703                case AUDIO_INIT: /* 0x40 */
     704                        IoctlAudioInit(prp, LDev);
     705                        break;
     706                case AUDIO_CONTROL: /* 0x42 */
     707                        IoctlAudioControl(prp);
     708                        break;
     709                case AUDIO_CAPABILITY: /* 0x48 */
     710                        IoctlAudioCapability(prp, LDev);
     711                        break;
     712                default:
     713                        prp->usStatus |= RPERR | RPBADCMD;
     714                        break;
     715                }
     716                break;
     717
     718        default:
     719                prp->usStatus |= RPERR | RPBADCMD;
     720                break;
     721        }
    724722
    725723#ifdef DEBUG
    726 //    dprintf(("StrategyIoctl:ret:0x%x", (USHORT)prp->usStatus));
     724        dprintf(("StrategyIoctl:ret:0x%x", (USHORT)prp->usStatus));
    727725#endif
    728     return;
     726        return;
    729727}
     728
  • OCO/trunk/drv16/mixer.cpp

    r483 r486  
    5050static int IOCTL90ToALSAControl[IOCTL90_MAX_CONTROLS][3] = {
    5151// IOCTL90 id       ALSA id,                 ALSA id 2,              fIsProperty
    52 /* MONOIN        */ OSS32_MIX_VOLUME_SPEAKER,  -1,                     FALSE,
    53 /* PHONESET      */ OSS32_MIX_VOLUME_PHONE,  -1,                     FALSE,
    54 /* MICSET        */ OSS32_MIX_VOLUME_MIC,    -1,                     FALSE,
    55 /* LINESET       */ OSS32_MIX_VOLUME_LINEIN, -1,                     FALSE,
    56 /* CDSET         */ OSS32_MIX_VOLUME_CD,     -1,                     FALSE,
    57 /* VIDEOSET      */ OSS32_MIX_VOLUME_VIDEO,  -1,                     FALSE,
    58 /* AUXSET        */ OSS32_MIX_VOLUME_AUX,    -1,                     FALSE,
    59 /* none          */ -1,                      -1,                     FALSE,
    60 /* none          */ -1,                      -1,                     FALSE,
    61 /* none          */ -1,                      -1,                     FALSE,
    62 /* none          */ -1,                      -1,                     FALSE,
    63 /* BASSTREBLESET */ OSS32_MIX_LEVEL_BASS,    OSS32_MIX_LEVEL_TREBLE, TRUE,
    64 /* THREEDSET     */ -1,                      -1,                     FALSE,
    65 /* STREAMVOLSET  */ OSS32_MIX_VOLUME_PCM,    -1,                     FALSE,
    66 /* RECORDSRCSET  */ OSS32_MIX_INPUTSRC,      -1,                     TRUE,
    67 /* RECORDGAINSET */ OSS32_MIX_VOLUME_CAPTURE,-1,                     FALSE,
     52/* MONOIN        */ OSS32_MIX_VOLUME_SPEAKER,   -1,                     FALSE,
     53/* PHONESET      */ OSS32_MIX_VOLUME_PHONE,     -1,                     FALSE,
     54/* MICSET        */ OSS32_MIX_VOLUME_MIC,       -1,                     FALSE,
     55/* LINESET       */ OSS32_MIX_VOLUME_LINEIN,    -1,                     FALSE,
     56/* CDSET         */ OSS32_MIX_VOLUME_CD,        -1,                     FALSE,
     57/* VIDEOSET      */ OSS32_MIX_VOLUME_VIDEO,     -1,                     FALSE,
     58/* AUXSET        */ OSS32_MIX_VOLUME_AUX,       -1,                     FALSE,
     59/* HEADPHONESET  */ OSS32_MIX_VOLUME_HEADPHONE, -1,                     FALSE,
     60/* none          */ -1,                         -1,                     FALSE,
     61/* none          */ -1,                         -1,                     FALSE,
     62/* none          */ -1,                         -1,                     FALSE,
     63/* BASSTREBLESET */ OSS32_MIX_LEVEL_BASS,    OSS32_MIX_LEVEL_TREBLE,    TRUE,
     64/* THREEDSET     */ -1,                         -1,                     FALSE,
     65/* STREAMVOLSET  */ OSS32_MIX_VOLUME_PCM,       -1,                     FALSE,
     66/* RECORDSRCSET  */ OSS32_MIX_INPUTSRC,         -1,                     TRUE,
     67/* RECORDGAINSET */ OSS32_MIX_VOLUME_CAPTURE,   -1,                     FALSE,
    6868};
    6969
     
    8181/* OSS32_MIX_VOLUME_SPEAKER       */   MONOINSET & 0xF,
    8282/* OSS32_MIX_VOLUME_PHONE         */   PHONESET & 0xF,
    83 /* OSS32_MIX_VOLUME_HEADPHONE     */   -1,
     83/* OSS32_MIX_VOLUME_HEADPHONE     */   HEADPHONESET & 0xF,
    8484/* OSS32_MIX_VOLUME_AUX           */   AUXSET & 0xF,
    8585/* OSS32_MIX_VOLUME_CAPTURE       */   RECORDGAINSET & 0xF,
     
    313313BOOL DBGCALLCONV MixerSetWaveVolume(OSSSTREAMID mixerStreamId, OSSSTREAMID StreamId, ULONG Volume, int fFlags)
    314314{
     315    dprintf(("MixerSetWaveVolume Vol=%lx", Volume));
    315316    if(!fSetWaveVolume || OSS16_WaveSetVolume(StreamId, Volume) != OSSERR_SUCCESS) {
    316317        fSetWaveVolume = FALSE;
     
    327328    BOOL fInputGainHack = FALSE;
    328329
     330    dprintf(("MixerSetVolume Ctl=%lx Vol=%lx", ulControl, ulVolume));
    329331    if(!(fFlags & MIXFLAG_FORCE_UPDATE) && fRecGainIOCTL90 && ulControl == OSS32_MIX_VOLUME_CAPTURE)
    330332        return TRUE;    //locked
     
    649651    }
    650652    if(mixcaps.fuCtrlCaps & OSS32_MIX_FLAG(OSS32_MIX_VOLUME_MIDI)) {
     653                dprintf(("MixerInit: MIX_VOLUME_MIDI not processed"));
    651654    }
    652655    if(mixcaps.fuCtrlCaps & OSS32_MIX_FLAG(OSS32_MIX_VOLUME_LINEIN)) {
     
    717720    }
    718721    if(mixcaps.fuCtrlCaps & OSS32_MIX_FLAG(OSS32_MIX_VOLUME_HEADPHONE)) {
     722        ALSAIOCTLMap[HEADPHONESET]     = 1;
     723        ALSAIOCTLMap[HEADPHONEQUERY]   = 1;
     724
     725        //Set HEADPHONE
     726        rp.s.ioctl.bCode  = HEADPHONESET;
     727        rp.s.ioctl.pvData = (void FAR *)&mixinfo;
     728        mixinfo.Mute    = 0;
     729        mixinfo.VolumeR = mixinfo.VolumeL = 80;
     730        IoctlMixer(&rp, LDev);
     731//              dprintf(("MixerInit: MIX_VOLUME_HEADPHONE not processed"));
    719732    }
    720733    if(mixcaps.fuCtrlCaps & OSS32_MIX_FLAG(OSS32_MIX_VOLUME_AUX)) {
  • OCO/trunk/drv16/mixer.h

    r33 r486  
    11#ifndef __MIXER_H__
    22#define __MIXER_H__
     3
     4#define MIXER_IOCTL_CAT   0x90
    35
    46#define MIXFLAG_FORCE_UPDATE    1
  • OCO/trunk/drv16/wavestrm.cpp

    r483 r486  
    209209    ULONG ulBuffLeft;
    210210        ULONG ulBytesWritten;
    211         ULONG ulStartPos;
     211//DAZ   ULONG ulStartPos;
    212212
    213213    /* make sure we have a buffer to copy from */
     
    230230    }
    231231
     232/* DAZ */
     233#if 0
    232234    // get the starting position. Call WaveGetHwPtr. if we get a bad rc then we bail out.
    233235    if(pahw->GetHwPtr(StreamId, &_configinfo, &ulStartPos) == FALSE)
     
    237239        return (ULONG)-1;
    238240    }
     241#endif
    239242
    240243    // get the buffer pointer and amount of data remaining
  • OCO/trunk/include/ioctl90.h

    r33 r486  
    88//
    99// Crystal Semiconductor defined category 0x90 OS/2 mixer IOCTLS.
    10 // 
     10//
    1111// STATUS: (Drivers known to implement this API)
    1212//    Crystal Semiconductor ISA Mode 3 driver version 2.08.
     
    1515//-----------------------------------------------------------------------------
    1616//
    17 // This header file contains application usable defines for calls to 
     17// This header file contains application usable defines for calls to
    1818// Crystal Semiconductor device driver to manage hardware mixer.
    1919// It is primarily used to adjust the listening level of
    2020// mixer inputs (CD-ROM, Aux, Line, Phone...).  The API also allows
    21 // adjustment to the record gain as an override to MMPM/2 stream 
     21// adjustment to the record gain as an override to MMPM/2 stream
    2222// specific API.
    2323//
     
    5858// 4E - RecordSrcSet     6E - RecordSrcQuery
    5959// 4F - RecordGainSet    6F - RecordGainQuery
    60 // 80 - ApiLevelQuery   
     60// 80 - ApiLevelQuery
    6161// 81 - GetApiMap
    6262// 82 - CallbackReg
    6363//
    64 // Application passes a structure (ioctl data buffer) 
     64// Application passes a structure (ioctl data buffer)
    6565// which contains:
    6666// ULONG Mute;     // UnMute==0, Mute==1
     
    6868// ULONG ulVolR;   // Right volume in percent 0..100
    6969//
    70 // With the exception of the record gain APIs, these APIs effect 
     70// With the exception of the record gain APIs, these APIs effect
    7171// what you hear (output bus connections).
    7272//
     
    9393//    ULONG ulActionTaken   = 0;
    9494//    HFILE hPdd            = NULL;
    95 // 
     95//
    9696//    OpenFlags = OPEN_ACTION_OPEN_IF_EXISTS;   // Do not create file
    97 // 
     97//
    9898//    OpenMode  = OPEN_ACCESS_READWRITE +       // Read/Write file
    9999//                OPEN_SHARE_DENYNONE +         // Non-exclusive access
    100100//                OPEN_FLAGS_FAIL_ON_ERROR;     // No system popups on errors
    101 // 
     101//
    102102//    ulRC = DosOpen (ddName,          // in
    103103//                    &hPdd,           //    out (handle)
     
    108108//                    OpenMode,        // in
    109109//                    NULL);           // in
    110 // 
     110//
    111111//    printf ("DosOpen RC = %x\n", ulRC);
    112 // 
     112//
    113113//    if (ulRC != 0)
    114114//       hPdd = NULL;
    115 // 
     115//
    116116//    return (hPdd);
    117117// }
     
    121121//    ULONG     ulRC;
    122122//    ULONG     ulSizeOfStruct =  = sizeof (MixStruct);
    123 // 
    124 //    ulRC = DosDevIOCtl 
     123//
     124//    ulRC = DosDevIOCtl
    125125//       (hPdd,               // Device Handle
    126126//        0x90,               // Category (user defined >= 0x80)
     
    132132//        ulSizeOfStruct,     // in      Maximum size of command data
    133133//        &ulSizeOfStruct);   // in out  Size of command data
    134 // 
     134//
    135135//    printf ("DosDevIOCtl ulRC = %d\n", ulRC);
    136 // 
     136//
    137137//    return (ulRC);
    138138// }
     
    150150
    151151// This prototype is used in the device driver only (common header)
    152 //USHORT ioctlmixMain (USHORT Function, 
     152//USHORT ioctlmixMain (USHORT Function,
    153153//                     USHORT SysFileNum,
    154 //                     ULONG  ulpvData, 
     154//                     ULONG  ulpvData,
    155155//                     USHORT usDLength);
    156156
     
    184184#define VIDEOSET        0x45
    185185#define AUXSET          0x46
     186#define HEADPHONESET    0x47
    186187#define BASSTREBLESET   0x4B
    187188#define THREEDSET       0x4C
     
    197198#define VIDEOQUERY      0x65
    198199#define AUXQUERY        0x66
     200#define HEADPHONEQUERY  0x67
    199201#define BASSTREBLEQUERY 0x6B
    200202#define THREEDQUERY     0x6C
     
    213215// This allows override of settings from MMPM/2 applications.
    214216
    215 #define I90SRC_BASE     0x00000010      // 0..F are reserved (MMPM/2 space)       
     217#define I90SRC_BASE     0x00000010      // 0..F are reserved (MMPM/2 space)
    216218#define I90SRC_MIC      0x00000010
    217219#define I90SRC_CD       0x00000020
     
    224226
    225227
    226 // In first release, the APILEVELQUERY function returns a ULONG, 0x01. 
     228// In first release, the APILEVELQUERY function returns a ULONG, 0x01.
    227229// As significant changes are made to the ioctlmix API, the return value
    228230// of this function will be incremented.
    229231
    230232// GETAPIMAP
    231 // To help an application know what APIs are supported by this device driver, 
     233// To help an application know what APIs are supported by this device driver,
    232234// return an array of booleans (BYTES).  TRUE => Supported.
    233 // The array must be declared as 256 bytes.  This is larger than necessary as 
     235// The array must be declared as 256 bytes.  This is larger than necessary as
    234236// the first 64 entries, range 0x00..0x39, are guaranteed to be zero.
    235237// The extra bytes allows the array to be indexed using the IOCTL function
    236238// defines in this file.
    237239//
    238 // Notice that a FALSE value in an array position (for example "video set") 
     240// Notice that a FALSE value in an array position (for example "video set")
    239241// can be used to inform the mixer application that this device driver does
    240242// not support a "video" connection to the audio device.
  • OCO/trunk/install/control.scr

    r483 r486  
    2525ssgroup=0
    2626ssname="mmbase"
    27 ssversion="1.9.1-SVNr483"
     27ssversion="1.9.1-SVNr486"
    2828sstermdll="ITERM.DLL"
    2929sstermdllentry="ITermEntry"
     
    4343ssgroup=17
    4444ssname="OS/2 Universal Audio: Wave"
    45 ssversion="1.9.1-SVNr483"
     45ssversion="1.9.1-SVNr486"
    4646sssize=680
    4747ssdll="genin.dll"
  • OCO/trunk/uniaud.inc

    r483 r486  
    1313# ex RC3  GA  FIXPACK2 beta_47
    1414# Comment out to avoid a fixpack line in bldlevel
    15 FIXPACK = SVNr483
     15FIXPACK = SVNr486
    1616
    1717# ALSA BUILD VERSION
Note: See TracChangeset for help on using the changeset viewer.