Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir cihaz düşük güç durumuna geçtiğinde, çerçeve G/Ç işleme için kullanılan kesintilerin bağlantısını keser (veya etkin değil olarak raporlar). Windows 8.1 üzerinde çalışan KMDF 1.13 ve UMDF 2.0'dan başlayarak, WDF sürücüsü cihaz düşük güç durumuna geçtiğinde etkin kalan bir çerçeve kesme nesnesi oluşturabilir ve ardından cihazı uyandırmak ve D0 durumuna geri yüklemek için kullanılabilir.
Yonga (SoC) platformundaki bir Sistem için WDF sürücüsü geliştiriyorsanız, geleneksel uyandırma sinyal mekanizması sağlamayan bir cihazı uyandırmak için böyle bir kesinti kullanabilirsiniz. Bu işlevselliği kullanmak için cihazın ACPI aracılığıyla kullanıma sunulduğu şekilde uyandırma kesintileri için donanım desteğine sahip olması gerekir. Kesme sinyalini oluşturan sürücü, cihazın güç ilkesi sahibi olmalıdır.
Cihaz düşük güç durumuna geçtiğinde, yazılım çerçevesi uyandırma özellikli olarak tanımlanan bir kesme sinyalini kesmez. Cihaz kesintiye uğradığında, çerçeve IRQL = PASSIVE_LEVEL'de sürücünün EvtDeviceD0Entry ve EvtInterruptIsr geri çağırma yordamlarını çağırır.
Sürücünüz G/Ç işleme için zaten pasif düzeyde bir kesme nesnesi oluşturuyorsa, uyandırma işlevselliği için aynı kesme nesnesini paylaşmanızı öneririz. Bu senaryoda, sürücünün EvtInterruptIsr callback fonksiyonu, G/Ç ile ilgili kesmeler ve uyandırma işlemlerini şartlara bağlı olarak yönetmek üzere bir mantık uygular.
Ancak, sürücünüz cihazın IRQL'inde (DIRQL) işleme gerektiren bir kesme kullanıyorsa, uyandırma işlevselliği sağlamak için ek bir çerçeve kesme nesnesi oluşturmanızı öneririz.
KMDF veya UMDF sürücünüzde uyandırma özellikli bir kesme nesnesi oluşturmak için şu adımları izleyin:
WdfDeviceAssignS0IdleSettings'i çağırın; genellikle EvtDriverDeviceAdd'denIdleCaps parametresinde IdleCanWakeFromS0 değerini belirtin.
İsteğe bağlı olarak, Sistem Uyandırmayı Destekleme bölümünde açıklanan olay geri çağırma işlevlerini kaydetmek için WdfDeviceInitSetPowerPolicyEventCallbacks'i çağırın.
WDF_INTERRUPT_CONFIG bir yapı başlatmak için WDF_INTERRUPT_CONFIG_INIT'ı çağır. Pasif düzeyde çağrılmak üzere bir EvtInterruptIsr geri çağırma işlevi sağlayın. Yapılandırma yapısında PassiveHandling ve CanWakeDevice'iTRUE olarak ayarlayın. Ardından çerçeve kesme nesnesini oluşturmak için sürücünüzün EvtDevicePrepareHardware callback fonksiyonundan WdfInterruptCreate fonksiyonunu çağırın.
Cihazı sistemi düşük güç durumundan uyandırmak üzere yapılandırmak için WdfDeviceAssignSxWakeSettings'i çağırın.
WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS_INIT(&wakeSettings); wakeSettings.DxState = PowerDeviceD3; wakeSettings.UserControlOfWakeSettings = WakeDoNotAllowUserControl; wakeSettings.Enabled = WdfTrue; status = WdfDeviceAssignSxWakeSettings(Device, &wakeSettings); if (!NT_SUCCESS(status)) { Trace(TRACE_LEVEL_ERROR,"WdfDeviceAssignSxWakeSettings failed %x\n", status); return status; }Cihaz düşük güç durumuna geçtiğinde, alt yapı uyandırma özellikli kesme için EvtInterruptDisable'ı çağırmaz. Çerçeve, sürücü tarafından sağlandıysa EvtDeviceArmWakeFromS0 çağrısı yapar.
Cihaz uyandırma kesintisini işaret ettiğinde, framework sürücünün EvtDeviceD0Entry geri çağırma yordamını çağırır.
Sürücünün EvtDeviceD0Entry geri çağırması başarılı olursa, çerçeve sürücünün EvtInterruptIsr geri çağırmasını pasif düzeyde çağırır. Kesme işleyicisi dönmeden önce kesme denetleyicisindeki kesmeyi susturmalıdır. Sürücü EvtDeviceD0Entry'den bir hata kodu döndürürse, çerçeve kesmenin bağlantısını keser ve sürücü tarafından sağlandıysa sürücünün EvtInterruptDisable geri çağırmasını çağırır.
Çerçeve, sürücü herhangi bir uyandırma olayı sağladıysa, aşağıdaki geri çağırma rutinlerini çağırır:
Çerçeve, bir İşlev veya Filtre Sürücüsü içinPower-Up Dizisi'nde açıklandığı gibi normal güç açma geri çağırma dizisiyle devam eder.
Belirli bir kesmenin uyandırma özelliğine sahip olacak şekilde yapılandırılıp yapılandırılmadığını göstermek için !wdfkd.wdfinterrupt hata ayıklayıcısı uzantısını kullanabilirsiniz.
Uyandırma kesme işlevi USB seçmeli askıya alma ile birlikte kullanılamaz.