討論區快速選單
知識庫快速選單
政府補助!學嵌入式+物聯網 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
進行SelectiveSuspend的問題
更改我的閱讀文章字型大小
作者 : penny015(penny)
[ 貼文 13 | 人氣 3002 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/10/15 下午 12:22:54
我目前在xp sp2遇到了SelectiveSuspend的問題,當一開始發給底層STATUS_PANDING之後,電源管理員就沒有理我了。所以我的callback function就不會被執行到,那我的device就不會進入SelectiveSuspend。但是我在同機型的nb os是vista就沒有這個問題了。請問當我一直沒有收到電源管理員通知時我該怎麼做勒???

    nextStack = IoGetNextIrpStackLocation( irp );
    ASSERT( nextStack != NULL );
    nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
    nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION;
    nextStack->Parameters.DeviceIoControl.Type3InputBuffer = Idle;
    nextStack->Parameters.DeviceIoControl.InputBufferLength = sizeof( struct _USB_IDLE_CALLBACK_INFO );
    IoSetCompletionRoutine( irp, (PIO_COMPLETION_ROUTINE) NotifyIdleCompletion, pDC, TRUE, TRUE, TRUE );

    pDC->SuspendIrp = irp;
    pDC->SuspendIrpCancelled = 0;

    KeReleaseSpinLock(&pDC->m_IdleReqStateLock, oldIrql);

    ntStatus = IoCallDriver( pDC->StackDeviceObject, irp );

    return ntStatus;
作者 : penny015(penny)
[ 貼文 13 | 人氣 3002 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/10/20 上午 11:20:31
GOOGLE一下發現,原來很多人也有這種問題。主要都是因為下面這行造成的
nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION;

而這是XP的BUG在VISTA已經修正這個問題,目前在XP下的解法......有公司自己重寫STREAM.SYS或是就不執行SelectiveSuspend
了......至於還有沒有別的解法,還在研究中....
作者 : bluestar(藍星) 人氣指數超過10000點
[ 貼文 135 | 人氣 25970 | 評價 0 | 評價/貼文 0 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/11/8 下午 10:26:01
我用Wdf sample code來測試自己的device,會出現

S1:Bios電源管理堶情A設置為S1,開啟USB設備喚醒。移動USB滑鼠或鍵盤後,電腦喚醒,一切正常。
     而我的device也可以正常喚醒。

S3:Bios設置為S3後,同樣開啟USB喚醒,使用滑鼠可以正常喚醒系統。
     而我的device卻無法喚醒。

請問你會遇到相同的問題嗎?
作者 : hst326(duck)
[ 貼文 44 | 人氣 1 | 評價 30 | 評價/貼文 0.68 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/5/15 下午 06:52:32
Penny 你好,

我也跟你遇到相同的問題,就是 idle irp callback routine 未被呼叫,
想請教一下你解決這個問題了嗎 ?
可分享一下解法嗎 ?
謝謝 !
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2013/3/15 下午 02:27:18

雖然不知道有沒有幫助,因為我沒有寫過wdf,但是很久以前有寫過Remote wake up
這個功能應該是remote wake up而不是selective suspend...

kernel driver 是在收到S1...Sn powerstate時,傳送WAIT_WAKE IRP通知host有remote wake up的可能
等到mouse或你的裝置打上wake up訊息時,這個WAIT_WAKE IRP就會被Complete,然後進行其它的
電源動作

比方說S1, S2 要送WAIT_WAKE, 但S3不送。那你的裝置就叫不醒系統

所以 ,你的wdf driver如果能夠的話,一定要有一個地方可以讓kernel driver 改變特定的電源狀態對WAIT_WAKE的支援
這樣的話才有機會ㄛ

>Penny 你好,
>
>我也跟你遇到相同的問題,就是 idle irp callback routine 未被呼叫,
>想請教一下你解決這個問題了嗎 ?
>可分享一下解法嗎 ?
>謝謝 !
 板主 : 徵求中
 > 驅動程式 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 驅動程式 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
驅動程式
1 新兵衛 1240 
2 eBoy 980 
3 牧童哥 780 
4 北極熊 580 
5 天行者 580 
6 燒酒仙 440 
7 weber 380 
8 KEN 350 
9 jonay 180 
10 掌握文武半邊天 180 
驅動程式
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625