void Drive::update(Joystick &controller) { if (getHardwareType() == kController) { switch (getControlType()) { case kArcade: m_robotDrive->ArcadeDrive(controller, 2, controller, 4, true); break; case kTank: m_robotDrive->TankDrive(controller, 2, controller, 5, true); } } else { switch (getControlType()) { case kArcade: m_robotDrive->ArcadeDrive(leftJoystick, true); break; case kTank: m_robotDrive->TankDrive(leftJoystick, rightJoystick, true); } } }
/************************************************************************** * MIX_SetControlDetails [internal] */ static DWORD MIX_SetControlDetails(WORD wDevID, LPMIXERCONTROLDETAILS lpmcd, DWORD_PTR fdwDetails) { DWORD ret = MMSYSERR_NOTSUPPORTED; DWORD dwControlType; TRACE("%04X, %p, %08lx\n", wDevID, lpmcd, fdwDetails); if (lpmcd == NULL) { TRACE("invalid parameter: lpmcd == NULL\n"); return MMSYSERR_INVALPARAM; } if (wDevID >= numMixers) { WARN("bad device ID: %04X\n", wDevID); return MMSYSERR_BADDEVICEID; } if ( (fdwDetails & MIXER_SETCONTROLDETAILSF_QUERYMASK) != MIXER_GETCONTROLDETAILSF_VALUE ) { WARN("Unknown SetControlDetails flag (%08lx)\n", fdwDetails & MIXER_SETCONTROLDETAILSF_QUERYMASK); return MMSYSERR_NOTSUPPORTED; } TRACE("MIXER_SETCONTROLDETAILSF_VALUE dwControlID=%d\n", lpmcd->dwControlID); dwControlType = mixer.mixerCtrls[lpmcd->dwControlID].ctrl.dwControlType; switch (dwControlType) { case MIXERCONTROL_CONTROLTYPE_VOLUME: FIXME("controlType : %s\n", getControlType(dwControlType)); { LPMIXERCONTROLDETAILS_UNSIGNED mcdu; Float32 left, right = 0; if (lpmcd->cbDetails != sizeof(MIXERCONTROLDETAILS_UNSIGNED)) { WARN("invalid parameter: lpmcd->cbDetails == %d\n", lpmcd->cbDetails); return MMSYSERR_INVALPARAM; } mcdu = (LPMIXERCONTROLDETAILS_UNSIGNED)lpmcd->paDetails; switch (lpmcd->cChannels) { case 1: /* mono... so R = L */ TRACE("Setting RL to %d\n", mcdu->dwValue); left = (Float32) mcdu->dwValue / 65535.0; break; case 2: /* stereo, left is paDetails[0] */ TRACE("Setting L to %d\n", mcdu->dwValue); left = (Float32) mcdu->dwValue / 65535.0; mcdu++; TRACE("Setting R to %d\n", mcdu->dwValue); right = (Float32) mcdu->dwValue / 65535.0; break; default: WARN("Unsupported cChannels (%d)\n", lpmcd->cChannels); return MMSYSERR_INVALPARAM; } if ( MIX_LineSetVolume(mixer.mixerCtrls[lpmcd->dwControlID].dwLineID, lpmcd->cChannels, left, right) ) ret = MMSYSERR_NOERROR; } break; case MIXERCONTROL_CONTROLTYPE_MUTE: case MIXERCONTROL_CONTROLTYPE_ONOFF: TRACE("%s MIXERCONTROLDETAILS_BOOLEAN[%u]\n", getControlType(dwControlType), lpmcd->cChannels); { LPMIXERCONTROLDETAILS_BOOLEAN mcdb; if (lpmcd->cbDetails != sizeof(MIXERCONTROLDETAILS_BOOLEAN)) { WARN("invalid parameter: cbDetails\n"); return MMSYSERR_INVALPARAM; } mcdb = (LPMIXERCONTROLDETAILS_BOOLEAN)lpmcd->paDetails; if ( MIX_LineSetMute(mixer.mixerCtrls[lpmcd->dwControlID].dwLineID, mcdb->fValue) ) ret = MMSYSERR_NOERROR; } break; case MIXERCONTROL_CONTROLTYPE_MIXER: case MIXERCONTROL_CONTROLTYPE_MUX: default: FIXME("controlType : %s\n", getControlType(dwControlType)); ret = MMSYSERR_NOTSUPPORTED; break; } return ret; }
/************************************************************************** * MIX_GetLineControls [internal] */ static DWORD MIX_GetLineControls(WORD wDevID, LPMIXERLINECONTROLSW lpMlc, DWORD_PTR flags) { DWORD ret = MMSYSERR_NOTENABLED; int ctrl = 0; TRACE("%04X, %p, %08lX\n", wDevID, lpMlc, flags); if (lpMlc == NULL) { WARN("invalid parameter: lpMlc == NULL\n"); return MMSYSERR_INVALPARAM; } if (lpMlc->cbStruct < sizeof(*lpMlc)) { WARN("invalid parameter: lpMlc->cbStruct = %d\n", lpMlc->cbStruct); return MMSYSERR_INVALPARAM; } if (lpMlc->cbmxctrl < sizeof(MIXERCONTROLW)) { WARN("invalid parameter: lpMlc->cbmxctrl = %d\n", lpMlc->cbmxctrl); return MMSYSERR_INVALPARAM; } if (wDevID >= numMixers) { WARN("bad device ID: %04X\n", wDevID); return MMSYSERR_BADDEVICEID; } switch (flags & MIXER_GETLINECONTROLSF_QUERYMASK) { case MIXER_GETLINECONTROLSF_ALL: FIXME("dwLineID=%d MIXER_GETLINECONTROLSF_ALL (%d)\n", lpMlc->dwLineID, lpMlc->cControls); if (lpMlc->cControls != ControlsPerLine) { WARN("invalid parameter lpMlc->cControls %d\n", lpMlc->cControls); ret = MMSYSERR_INVALPARAM; } else { if ( (lpMlc->dwLineID >= 0) && (lpMlc->dwLineID < mixer.caps.cDestinations) ) { int i; for (i = 0; i < lpMlc->cControls; i++) { lpMlc->pamxctrl[i] = mixer.mixerCtrls[lpMlc->dwLineID * i].ctrl; } ret = MMSYSERR_NOERROR; } else ret = MIXERR_INVALLINE; } break; case MIXER_GETLINECONTROLSF_ONEBYID: TRACE("dwLineID=%d MIXER_GETLINECONTROLSF_ONEBYID (%d)\n", lpMlc->dwLineID, lpMlc->u.dwControlID); if ( lpMlc->u.dwControlID >= 0 && lpMlc->u.dwControlID < mixer.numCtrl ) { lpMlc->pamxctrl[0] = mixer.mixerCtrls[lpMlc->u.dwControlID].ctrl; ret = MMSYSERR_NOERROR; } else ret = MIXERR_INVALVALUE; break; case MIXER_GETLINECONTROLSF_ONEBYTYPE: TRACE("dwLineID=%d MIXER_GETLINECONTROLSF_ONEBYTYPE (%s)\n", lpMlc->dwLineID, getControlType(lpMlc->u.dwControlType)); if ( (lpMlc->dwLineID < 0) || (lpMlc->dwLineID >= mixer.caps.cDestinations) ) { ret = MIXERR_INVALLINE; break; } if (lpMlc->u.dwControlType == MIXERCONTROL_CONTROLTYPE_VOLUME) { ctrl = (lpMlc->dwLineID * ControlsPerLine) + IDControlVolume; lpMlc->pamxctrl[0] = mixer.mixerCtrls[ctrl].ctrl; ret = MMSYSERR_NOERROR; } else if (lpMlc->u.dwControlType == MIXERCONTROL_CONTROLTYPE_MUTE) { ctrl = (lpMlc->dwLineID * ControlsPerLine) + IDControlMute; lpMlc->pamxctrl[0] = mixer.mixerCtrls[ctrl].ctrl; ret = MMSYSERR_NOERROR; } break; default: ERR("Unknown flag %08lx\n", flags & MIXER_GETLINECONTROLSF_QUERYMASK); ret = MMSYSERR_INVALPARAM; } return ret; }
/************************************************************************** * MIX_GetControlDetails [internal] */ static DWORD MIX_GetControlDetails(WORD wDevID, LPMIXERCONTROLDETAILS lpmcd, DWORD_PTR fdwDetails) { DWORD ret = MMSYSERR_NOTSUPPORTED; DWORD dwControlType; TRACE("%04X, %p, %08lx\n", wDevID, lpmcd, fdwDetails); if (lpmcd == NULL) { TRACE("invalid parameter: lpmcd == NULL\n"); return MMSYSERR_INVALPARAM; } if (wDevID >= numMixers) { WARN("bad device ID: %04X\n", wDevID); return MMSYSERR_BADDEVICEID; } if ( (fdwDetails & MIXER_GETCONTROLDETAILSF_QUERYMASK) != MIXER_GETCONTROLDETAILSF_VALUE ) { WARN("Unknown/unimplement GetControlDetails flag (%08lx)\n", fdwDetails & MIXER_GETCONTROLDETAILSF_QUERYMASK); return MMSYSERR_NOTSUPPORTED; } if ( lpmcd->dwControlID < 0 || lpmcd->dwControlID >= mixer.numCtrl ) { WARN("bad control ID: %d\n", lpmcd->dwControlID); return MIXERR_INVALVALUE; } TRACE("MIXER_GETCONTROLDETAILSF_VALUE %d\n", lpmcd->dwControlID); dwControlType = mixer.mixerCtrls[lpmcd->dwControlID].ctrl.dwControlType; switch (dwControlType) { case MIXERCONTROL_CONTROLTYPE_VOLUME: FIXME("controlType : %s channels %d\n", getControlType(dwControlType), lpmcd->cChannels); { LPMIXERCONTROLDETAILS_UNSIGNED mcdu; Float32 left, right; if (lpmcd->cbDetails != sizeof(MIXERCONTROLDETAILS_UNSIGNED)) { WARN("invalid parameter: lpmcd->cbDetails == %d\n", lpmcd->cbDetails); return MMSYSERR_INVALPARAM; } if ( MIX_LineGetVolume(mixer.mixerCtrls[lpmcd->dwControlID].dwLineID, lpmcd->cChannels, &left, &right) ) { mcdu = (LPMIXERCONTROLDETAILS_UNSIGNED)lpmcd->paDetails; switch (lpmcd->cChannels) { case 1: /* mono... so R = L */ mcdu->dwValue = left * 65535; TRACE("Reading RL = %d\n", mcdu->dwValue); break; case 2: /* stereo, left is paDetails[0] */ mcdu->dwValue = left * 65535; TRACE("Reading L = %d\n", mcdu->dwValue); mcdu++; mcdu->dwValue = right * 65535; TRACE("Reading R = %d\n", mcdu->dwValue); break; default: WARN("Unsupported cChannels (%d)\n", lpmcd->cChannels); return MMSYSERR_INVALPARAM; } TRACE("=> %08x\n", mcdu->dwValue); ret = MMSYSERR_NOERROR; } } break; case MIXERCONTROL_CONTROLTYPE_MUTE: case MIXERCONTROL_CONTROLTYPE_ONOFF: FIXME("%s MIXERCONTROLDETAILS_BOOLEAN[%u]\n", getControlType(dwControlType), lpmcd->cChannels); { LPMIXERCONTROLDETAILS_BOOLEAN mcdb; BOOL muted; if (lpmcd->cbDetails != sizeof(MIXERCONTROLDETAILS_BOOLEAN)) { WARN("invalid parameter: lpmcd->cbDetails = %d\n", lpmcd->cbDetails); return MMSYSERR_INVALPARAM; } mcdb = (LPMIXERCONTROLDETAILS_BOOLEAN)lpmcd->paDetails; if ( MIX_LineGetMute(mixer.mixerCtrls[lpmcd->dwControlID].dwLineID, &muted) ) { mcdb->fValue = muted; TRACE("=> %s\n", mcdb->fValue ? "on" : "off"); ret = MMSYSERR_NOERROR; } } break; case MIXERCONTROL_CONTROLTYPE_MIXER: case MIXERCONTROL_CONTROLTYPE_MUX: default: FIXME("controlType : %s\n", getControlType(dwControlType)); break; } return ret; }
void printControl(MIXERCONTROL* control) { TRACE3(" %s: dwControlType=%s/%s, ", control->szName, getControlClass(control->dwControlType), getControlType(control->dwControlType)); TRACE3("multpleItems=%d, state=%d, %s\n", control->cMultipleItems, control->fdwControl, getControlState(control->fdwControl)); }