Check for OSS driver presence and return error accordingly.
This commit is contained in:
parent
322f45cfca
commit
c1e3bbff51
|
@ -328,9 +328,20 @@ static DWORD MIX_GetLineInfo(WORD wDevID, LPMIXERLINEA lpMl, DWORD fdwInfo)
|
||||||
*/
|
*/
|
||||||
static DWORD MIX_Open(WORD wDevID, LPMIXEROPENDESC lpMod, DWORD flags)
|
static DWORD MIX_Open(WORD wDevID, LPMIXEROPENDESC lpMod, DWORD flags)
|
||||||
{
|
{
|
||||||
|
int mixer;
|
||||||
|
|
||||||
TRACE("(%04X, %p, %lu);\n", wDevID, lpMod, flags);
|
TRACE("(%04X, %p, %lu);\n", wDevID, lpMod, flags);
|
||||||
if (lpMod == NULL) return MMSYSERR_INVALPARAM;
|
if (lpMod == NULL) return MMSYSERR_INVALPARAM;
|
||||||
/* hmm. We don't keep the mixer device open. So just pretend it works */
|
/* hmm. We don't keep the mixer device open. only check if it's present */
|
||||||
|
if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
|
||||||
|
if (errno == ENODEV || errno == ENXIO) {
|
||||||
|
/* no driver present */
|
||||||
|
return MMSYSERR_NODRIVER;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
close(mixer);
|
||||||
|
}
|
||||||
|
|
||||||
return MMSYSERR_NOERROR;
|
return MMSYSERR_NOERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -502,6 +513,22 @@ static DWORD MIX_SetControlDetails(WORD wDevID, LPMIXERCONTROLDETAILS lpmcd, DWO
|
||||||
return MMSYSERR_NOTSUPPORTED;
|
return MMSYSERR_NOTSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static DWORD MIX_GetNumDevs(UINT wDevID)
|
||||||
|
{
|
||||||
|
int mixer;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
|
||||||
|
/* FIXME: ENXIO => no mixer installed */
|
||||||
|
WARN("mixer device not available !\n");
|
||||||
|
ret = 0;
|
||||||
|
} else {
|
||||||
|
close(mixer);
|
||||||
|
ret = 1;
|
||||||
|
}
|
||||||
|
TRACE("return %d;\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
#endif /* HAVE_OSS */
|
#endif /* HAVE_OSS */
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -526,8 +553,7 @@ DWORD WINAPI OSS_mixMessage(UINT wDevID, UINT wMsg, DWORD dwUser,
|
||||||
case MXDM_GETLINEINFO:
|
case MXDM_GETLINEINFO:
|
||||||
return MIX_GetLineInfo(wDevID, (LPMIXERLINEA)dwParam1, dwParam2);
|
return MIX_GetLineInfo(wDevID, (LPMIXERLINEA)dwParam1, dwParam2);
|
||||||
case MXDM_GETNUMDEVS:
|
case MXDM_GETNUMDEVS:
|
||||||
TRACE("return 1;\n");
|
return MIX_GetNumDevs(wDevID);
|
||||||
return 1;
|
|
||||||
case MXDM_OPEN:
|
case MXDM_OPEN:
|
||||||
return MIX_Open(wDevID, (LPMIXEROPENDESC)dwParam1, dwParam2);
|
return MIX_Open(wDevID, (LPMIXEROPENDESC)dwParam1, dwParam2);
|
||||||
case MXDM_CLOSE:
|
case MXDM_CLOSE:
|
||||||
|
|
|
@ -20,19 +20,33 @@
|
||||||
|
|
||||||
DEFAULT_DEBUG_CHANNEL(mmaux)
|
DEFAULT_DEBUG_CHANNEL(mmaux)
|
||||||
|
|
||||||
|
#ifdef HAVE_OSS
|
||||||
|
|
||||||
#define MIXER_DEV "/dev/mixer"
|
#define MIXER_DEV "/dev/mixer"
|
||||||
|
|
||||||
static int NumDev = 6;
|
static int NumDev = 6;
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
static int AUXDRV_Init(void)
|
||||||
|
{
|
||||||
|
int mixer;
|
||||||
|
|
||||||
|
if ((mixer = open(MIXER_DEV, O_RDWR)) < 0) {
|
||||||
|
WARN("mixer device not available !\n");
|
||||||
|
NumDev = 0;
|
||||||
|
} else {
|
||||||
|
close(mixer);
|
||||||
|
NumDev = 6;
|
||||||
|
}
|
||||||
|
return NumDev;
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* AUX_GetDevCaps [internal]
|
* AUX_GetDevCaps [internal]
|
||||||
*/
|
*/
|
||||||
static DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPSA lpCaps, DWORD dwSize)
|
static DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPSA lpCaps, DWORD dwSize)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_OSS
|
|
||||||
int mixer,volume;
|
int mixer,volume;
|
||||||
|
|
||||||
TRACE("(%04X, %p, %lu);\n", wDevID, lpCaps, dwSize);
|
TRACE("(%04X, %p, %lu);\n", wDevID, lpCaps, dwSize);
|
||||||
|
@ -43,7 +57,7 @@ static DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPSA lpCaps, DWORD dwSize)
|
||||||
}
|
}
|
||||||
if (ioctl(mixer, SOUND_MIXER_READ_LINE, &volume) == -1) {
|
if (ioctl(mixer, SOUND_MIXER_READ_LINE, &volume) == -1) {
|
||||||
close(mixer);
|
close(mixer);
|
||||||
WARN("unable read mixer !\n");
|
WARN("unable to read mixer !\n");
|
||||||
return MMSYSERR_NOTENABLED;
|
return MMSYSERR_NOTENABLED;
|
||||||
}
|
}
|
||||||
close(mixer);
|
close(mixer);
|
||||||
|
@ -92,9 +106,6 @@ static DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPSA lpCaps, DWORD dwSize)
|
||||||
lpCaps->dwSupport = AUXCAPS_VOLUME | AUXCAPS_LRVOLUME;
|
lpCaps->dwSupport = AUXCAPS_VOLUME | AUXCAPS_LRVOLUME;
|
||||||
#endif
|
#endif
|
||||||
return MMSYSERR_NOERROR;
|
return MMSYSERR_NOERROR;
|
||||||
#else
|
|
||||||
return MMSYSERR_NOTENABLED;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,7 +114,6 @@ static DWORD AUX_GetDevCaps(WORD wDevID, LPAUXCAPSA lpCaps, DWORD dwSize)
|
||||||
*/
|
*/
|
||||||
static DWORD AUX_GetVolume(WORD wDevID, LPDWORD lpdwVol)
|
static DWORD AUX_GetVolume(WORD wDevID, LPDWORD lpdwVol)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_OSS
|
|
||||||
int mixer, volume, left, right, cmd;
|
int mixer, volume, left, right, cmd;
|
||||||
|
|
||||||
TRACE("(%04X, %p);\n", wDevID, lpdwVol);
|
TRACE("(%04X, %p);\n", wDevID, lpdwVol);
|
||||||
|
@ -142,7 +152,7 @@ static DWORD AUX_GetVolume(WORD wDevID, LPDWORD lpdwVol)
|
||||||
return MMSYSERR_NOTENABLED;
|
return MMSYSERR_NOTENABLED;
|
||||||
}
|
}
|
||||||
if (ioctl(mixer, cmd, &volume) == -1) {
|
if (ioctl(mixer, cmd, &volume) == -1) {
|
||||||
WARN("unable read mixer !\n");
|
WARN("unable to read mixer !\n");
|
||||||
return MMSYSERR_NOTENABLED;
|
return MMSYSERR_NOTENABLED;
|
||||||
}
|
}
|
||||||
close(mixer);
|
close(mixer);
|
||||||
|
@ -151,9 +161,6 @@ static DWORD AUX_GetVolume(WORD wDevID, LPDWORD lpdwVol)
|
||||||
TRACE("left=%d right=%d !\n", left, right);
|
TRACE("left=%d right=%d !\n", left, right);
|
||||||
*lpdwVol = MAKELONG((left * 0xFFFFL) / 100, (right * 0xFFFFL) / 100);
|
*lpdwVol = MAKELONG((left * 0xFFFFL) / 100, (right * 0xFFFFL) / 100);
|
||||||
return MMSYSERR_NOERROR;
|
return MMSYSERR_NOERROR;
|
||||||
#else
|
|
||||||
return MMSYSERR_NOTENABLED;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -161,8 +168,7 @@ static DWORD AUX_GetVolume(WORD wDevID, LPDWORD lpdwVol)
|
||||||
*/
|
*/
|
||||||
static DWORD AUX_SetVolume(WORD wDevID, DWORD dwParam)
|
static DWORD AUX_SetVolume(WORD wDevID, DWORD dwParam)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_OSS
|
int mixer;
|
||||||
int mixer;
|
|
||||||
int volume, left, right;
|
int volume, left, right;
|
||||||
int cmd;
|
int cmd;
|
||||||
|
|
||||||
|
@ -207,16 +213,14 @@ static DWORD AUX_SetVolume(WORD wDevID, DWORD dwParam)
|
||||||
return MMSYSERR_NOTENABLED;
|
return MMSYSERR_NOTENABLED;
|
||||||
}
|
}
|
||||||
if (ioctl(mixer, cmd, &volume) == -1) {
|
if (ioctl(mixer, cmd, &volume) == -1) {
|
||||||
WARN("unable set mixer !\n");
|
WARN("unable to set mixer !\n");
|
||||||
return MMSYSERR_NOTENABLED;
|
return MMSYSERR_NOTENABLED;
|
||||||
}
|
}
|
||||||
close(mixer);
|
close(mixer);
|
||||||
return MMSYSERR_NOERROR;
|
return MMSYSERR_NOERROR;
|
||||||
#else
|
|
||||||
return MMSYSERR_NOTENABLED;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* OSS_auxMessage [sample driver]
|
* OSS_auxMessage [sample driver]
|
||||||
|
@ -226,8 +230,12 @@ DWORD WINAPI OSS_auxMessage(UINT wDevID, UINT wMsg, DWORD dwUser,
|
||||||
{
|
{
|
||||||
TRACE("(%04X, %04X, %08lX, %08lX, %08lX);\n",
|
TRACE("(%04X, %04X, %08lX, %08lX, %08lX);\n",
|
||||||
wDevID, wMsg, dwUser, dwParam1, dwParam2);
|
wDevID, wMsg, dwUser, dwParam1, dwParam2);
|
||||||
switch(wMsg) {
|
|
||||||
|
#ifdef HAVE_OSS
|
||||||
|
switch (wMsg) {
|
||||||
case DRVM_INIT:
|
case DRVM_INIT:
|
||||||
|
AUXDRV_Init();
|
||||||
|
/* fall thru */
|
||||||
case DRVM_EXIT:
|
case DRVM_EXIT:
|
||||||
case DRVM_ENABLE:
|
case DRVM_ENABLE:
|
||||||
case DRVM_DISABLE:
|
case DRVM_DISABLE:
|
||||||
|
@ -246,4 +254,7 @@ DWORD WINAPI OSS_auxMessage(UINT wDevID, UINT wMsg, DWORD dwUser,
|
||||||
WARN("unknown message !\n");
|
WARN("unknown message !\n");
|
||||||
}
|
}
|
||||||
return MMSYSERR_NOTSUPPORTED;
|
return MMSYSERR_NOTSUPPORTED;
|
||||||
|
#else
|
||||||
|
return MMSYSERR_NOTENABLED;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue