kGUIAudioManager::~kGUIAudioManager() { kGUIAudio *a; m_close=true; #if USETHREAD while(m_thread.GetActive()) kGUI::Sleep(1); #endif m_mutex.Lock(); while(m_numactive) { a=m_activelist.GetEntry(0); ReleaseAudio(a,false); } m_mutex.UnLock(); }
_Use_decl_annotations_ VOID OnIoDeviceControl( WDFQUEUE Queue, WDFREQUEST Request, size_t OutputBufferLength, size_t InputBufferLength, ULONG IoControlCode ) /*++ Routine Description: This event handled device control calls. Arguments: Queue - Handle of the queue object associated with the request Request - Handle of the request object OutputBufferLength - length of the request's output buffer InputBufferLength - length of the request's input buffer IoControlCode - the driver-defined or system-defined I/O control code Return Value: None --*/ { UNREFERENCED_PARAMETER(OutputBufferLength); UNREFERENCED_PARAMETER(InputBufferLength); WDFDEVICE device; PDEVICE_CONTEXT deviceContext; NTSTATUS status = STATUS_SUCCESS; device = WdfIoQueueGetDevice(Queue); deviceContext = GetContext(device); // // Validate the IO code and exexute on it. // switch (IoControlCode) { case IOCTL_BCM_PWM_SET_CLOCKCONFIG: status = ValidateAndSetClockConfig(device, Request); break; case IOCTL_BCM_PWM_GET_CLOCKCONFIG: status = GetClockConfig(device, Request); break; case IOCTL_BCM_PWM_SET_CHANNELCONFIG: status = ValidateAndSetChannelConfig(device, Request); break; case IOCTL_BCM_PWM_GET_CHANNELCONFIG: status = GetChannelConfig(device, Request); break; case IOCTL_BCM_PWM_SET_DUTY_REGISTER: status = ValidateAndSetDutyRegister(device, Request); break; case IOCTL_BCM_PWM_GET_DUTY_REGISTER: status = GetDutyRegister(device, Request); break; case IOCTL_BCM_PWM_START: status = ValidateAndStartChannel(device, Request); break; case IOCTL_BCM_PWM_STOP: status = ValidateAndStopChannel(device, Request); break; case IOCTL_BCM_PWM_AQUIRE_AUDIO: status = AquireAudio(device); break; case IOCTL_BCM_PWM_RELEASE_AUDIO: status = ReleaseAudio(device); break; case IOCTL_BCM_PWM_INITIALIZE_AUDIO: status = InitializeAudio(device, Request); break; case IOCTL_BCM_PWM_REGISTER_AUDIO_NOTIFICATION: status = RegisterAudioNotification(device, Request); break; case IOCTL_BCM_PWM_UNREGISTER_AUDIO_NOTIFICATION: status = UnregisterAudioNotification(device, Request); break; case IOCTL_BCM_PWM_START_AUDIO: status = StartAudio(device); break; case IOCTL_BCM_PWM_PAUSE_AUDIO: status = PauseAudio(device); break; case IOCTL_BCM_PWM_RESUME_AUDIO: status = ResumeAudio(device); break; case IOCTL_BCM_PWM_STOP_AUDIO: status = StopAudio(device); break; default: status = STATUS_INVALID_DEVICE_REQUEST; TraceEvents(TRACE_LEVEL_ERROR, TRACE_IOCTL, "Unexpected IO code in request. Request: 0x%08x, Code: 0x%08x", (ULONG)Request, IoControlCode); break; } WdfRequestComplete(Request, status); }