<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • Windows CE電源管理

     2012-11-12              

            對(duì)于手持式、便攜式等移動(dòng)設(shè)備來(lái)講,為了讓設(shè)備有更長(zhǎng)的待機(jī)和工作時(shí)間,系統(tǒng)必需具備完善的電源管理功能。英創(chuàng)公司針對(duì)手持式、電池供電設(shè)備應(yīng)用而推出的嵌入式核心主板EM9283,預(yù)裝了Windows CE6.0操作系統(tǒng),提供了完善的電源管理支持。在與EM9283配套的通用開(kāi)發(fā)評(píng)估底板上測(cè)得的EM9283在各個(gè)電源狀態(tài)下的功耗指標(biāo)為:

            ?  系統(tǒng)正常運(yùn)行:110mA

            ?  系統(tǒng)掛起:8mA。通過(guò)PSwitch鍵,可在1S內(nèi)恢復(fù)到正常運(yùn)行狀態(tài)

            ?  系統(tǒng)關(guān)機(jī):<15uA。系統(tǒng)僅維持實(shí)時(shí)時(shí)鐘的供電,系統(tǒng)重新啟動(dòng)時(shí)間小于10S

     

            本文將以EM9283為例,介紹用戶應(yīng)用程序如何實(shí)現(xiàn)電源管理,以減少整機(jī)功耗,延長(zhǎng)設(shè)備工作時(shí)間。在這之前,有必要先對(duì)Windows CE系統(tǒng)的電源管理功能做一個(gè)了解。所以我們將先介紹WinCE系統(tǒng)的電源狀態(tài),然后是設(shè)備的電源狀態(tài),接著才是應(yīng)用程序電源管理。文檔的最后是一個(gè)實(shí)際的電源管理例子:LCD背光的電源管理。

     

    1、系統(tǒng)電源狀態(tài)

     

            上面提到了EM9283的運(yùn)行,掛起和關(guān)機(jī)三種直觀電源狀態(tài)下的功耗指示,而至Windows CE.NET 4.2版本以后的系統(tǒng)具有的高級(jí)電源管理組件:WinCE電源管理器,為系統(tǒng)定義的電源狀態(tài)如表1:

     


    系統(tǒng)電源狀態(tài)

    簡(jiǎn)要描述

      On  用戶與系統(tǒng)交互的常規(guī)運(yùn)行狀態(tài)
      UserIdle  用戶與設(shè)備停止交互,但仍可能使用設(shè)備
      SystemIdle  經(jīng)過(guò)一段時(shí)間UserIdle后進(jìn)入此狀態(tài),但驅(qū)動(dòng)和系統(tǒng)仍然活動(dòng)
      SystemIdle  掛起狀態(tài),系統(tǒng)大部分外設(shè)關(guān)閉,僅RAM外于自刷新?tīng)顟B(tài)


     

            WinCE電源管理器維護(hù)了一個(gè)監(jiān)控用戶活動(dòng)的定時(shí)器,通過(guò)監(jiān)控這個(gè)定時(shí)器的超時(shí)來(lái)使系統(tǒng)進(jìn)入用戶空閑模式、系統(tǒng)空閑模式,最終掛起系統(tǒng)?;镜碾娫垂芾砉δ芩捎玫墓?jié)能方法是使系統(tǒng)適時(shí)的進(jìn)入掛起狀態(tài),此時(shí)系統(tǒng)RAM處于自刷新?tīng)顟B(tài),整機(jī)功耗降到了較
    低的水平,同時(shí)又能快速恢復(fù)到正常運(yùn)行狀態(tài)。下面的幾種方法都可以讓系統(tǒng)進(jìn)入Suspend狀態(tài):

     

            1、監(jiān)控的用戶活動(dòng)定時(shí)器超時(shí)。通過(guò)控制面板里的電源屬性項(xiàng)設(shè)置超時(shí)時(shí)間。如圖1

     

     

            圖1中設(shè)置的意圖是:在電池供電情況下,當(dāng)用戶停止操作1分鐘后,系統(tǒng)電源管理器將控制系統(tǒng)進(jìn)入用戶空閑模式,如果2分鐘后用戶仍然沒(méi)有操作,系統(tǒng)進(jìn)入系統(tǒng)空閑狀態(tài),系統(tǒng)空閑3分鐘后還是沒(méi)有用戶操作,系統(tǒng)掛起。

     

            在用戶的最終產(chǎn)品中,由于種種原因,可能不能通過(guò)控制面板來(lái)直接設(shè)置系統(tǒng)超時(shí),或者用戶希望自己設(shè)計(jì)設(shè)置系統(tǒng)超時(shí)的界面,此時(shí)用戶應(yīng)用程序可以通過(guò)修改系統(tǒng)注冊(cè)表來(lái)實(shí)現(xiàn)與通過(guò)控制面板設(shè)置一樣的功能。具體的做法是修改[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Power\Timeouts]下面的超時(shí)時(shí)間。通過(guò)控制面板設(shè)置后的注冊(cè)表如圖2所示。

     

     

            可以看到,在注冊(cè)中超時(shí)時(shí)間的單位是秒。應(yīng)用程序要利用系統(tǒng)的電源管理器,除了在控制面板中做了上述設(shè)置外,還需要在應(yīng)用程序啟動(dòng)時(shí)設(shè)置系統(tǒng)的'PowerManager/ReloadActivityTimeouts'自動(dòng)事件為有信號(hào)狀態(tài),電源管理器才會(huì)正常工作。當(dāng)在應(yīng)用程序中直接修改了對(duì)應(yīng)的Timeouts注冊(cè)表項(xiàng)后,也需要打開(kāi)(或創(chuàng)建)'PowerManager/ReloadActivityTimeouts'的自動(dòng)重置事件,并SetEvent置這個(gè)事件為有信號(hào)狀態(tài),這樣可以使電源管理器再次從注冊(cè)表中讀取狀態(tài)切換定時(shí)器的設(shè)置。

     

      HANDLE hReloadActivityTimeouts;
      hReloadActivityTimeouts = OpenEvent(EVENT_ALL_ACCESS, FALSE, _T('PowerManager/ReloadActivityTimeouts'));
      if(hReloadActivityTimeouts)
      {
        SetEvent(hReloadActivityTimeouts);
        CloseHandle(hReloadActivityTimeouts);
      }

     

            2、應(yīng)用程序調(diào)用API。除了通過(guò)超時(shí)讓系統(tǒng)自動(dòng)進(jìn)入掛起狀態(tài)外,應(yīng)用程序還可以調(diào)用API函數(shù)讓系統(tǒng)掛起:SetSystemPowerState(NULL,POWER_STATE_SUSPEND,0);

     

            3、EM9283提供了一鍵開(kāi)關(guān)機(jī)PSwitch鍵。所以最直接的方法是通過(guò)PSwitch按鍵讓系統(tǒng)在掛起狀態(tài)和運(yùn)行狀態(tài)之間切換。

     

            通過(guò)上面的三種方法讓可以讓系統(tǒng)掛起,而當(dāng)下面的一種事件發(fā)生時(shí),系統(tǒng)將退出掛起狀態(tài):

            1、用戶再次按下PSwitch鍵。

            2、發(fā)生某個(gè)警告事件,如時(shí)間定時(shí)器到時(shí)提醒。

            3、發(fā)生某個(gè)喚醒事件。

     

    2、設(shè)備電源狀態(tài)

     

            雖然通過(guò)用戶操作、應(yīng)用程序或者外設(shè)都可以使系統(tǒng)進(jìn)入或退出掛起狀態(tài),但基本的電源管理功能所能控制的粒度過(guò)大,整個(gè)系統(tǒng)只有三種狀態(tài),On,Idle和Suspend,對(duì)應(yīng)于所有外設(shè)只有On和Suspend兩種狀態(tài)。加入了電源管理組件的Windows CE具有高級(jí)的電源管理功能,它允許每個(gè)外設(shè)具有自己的電源狀態(tài)——設(shè)備電源狀態(tài)。應(yīng)用程序有能力單獨(dú)設(shè)置外設(shè)的電源狀態(tài),比如在保持串口通訊時(shí),關(guān)閉顯示和背光。Wince通常對(duì)設(shè)備電源狀態(tài)的描述如表2:

     


    設(shè)備電源狀態(tài)

    注冊(cè)表鍵值

    描述

    Full on

    D0

    此狀態(tài)表示設(shè)備已開(kāi)啟或正在運(yùn)行,設(shè)備將以系統(tǒng)允許的最在功耗及最高性能運(yùn)行
    Low on

    D1

    此狀態(tài)表示設(shè)備已開(kāi)啟或正在運(yùn)行,但以低于D0狀態(tài)的功耗及性能運(yùn)行。D1狀態(tài)適用于設(shè)備已經(jīng)被使用,但以較低的性能運(yùn)行即可
    Standby

    D2

    此狀態(tài)表示設(shè)備被部份供電
    Sleep

    D3

    睡眠狀態(tài)。保證喚醒的最小供電,在需要時(shí)能自動(dòng)喚醒并初始化
    off

    D4

    關(guān)閉狀態(tài),不供電


     

            物理設(shè)備并不需要支持上面所有的設(shè)備電源狀態(tài),但所有設(shè)備必需要支持D0電源狀態(tài),EM9283上的各種外設(shè),如背光、顯示等至少支持D0和D4兩種狀態(tài),也就是說(shuō)應(yīng)用程序在能力決定是否單獨(dú)給某個(gè)設(shè)備供電,以盡可能降低整機(jī)功耗。

     

    3、應(yīng)用程序電源管理

     

            上面所提的系統(tǒng)電源狀態(tài)和設(shè)備電源狀態(tài)都是系統(tǒng)或驅(qū)動(dòng)一級(jí)對(duì)電源管理的支持,對(duì)使用英創(chuàng)公司工控主板的用戶來(lái)講,這些功能都是由英創(chuàng)公司直接提供并維護(hù)的,用戶如果知道如何利用系統(tǒng)提供的這些功能,就能輕松實(shí)現(xiàn)適用于自己設(shè)備的電源管理策略。

     

            電源管理器提供了一組接口供應(yīng)用程序參與到電源管理的活動(dòng)中,應(yīng)用程序可以通過(guò)RequestPowerNotifications函數(shù)請(qǐng)求電源管理器向其發(fā)送電源相關(guān)的通知,也可以通過(guò)SetPowerRequirement通知電源管理器將設(shè)備設(shè)置在特殊的電源狀態(tài)下。這樣,指定設(shè)備的電源狀態(tài)就不會(huì)隨系統(tǒng)電源狀態(tài)的改變而改變。

     

            3.1  電源通知機(jī)制

            電源相關(guān)的通知通過(guò)消息隊(duì)列傳遞給應(yīng)用程序,通常應(yīng)用程序新建一個(gè)消息隊(duì)列,并通過(guò)RequestPowerNotifications將這個(gè)消息隊(duì)列的句柄傳遞給電源管理器,同時(shí)創(chuàng)建一個(gè)線程偵聽(tīng)來(lái)自這個(gè)隊(duì)列的消息。電源管理器定義了如下幾種通知:

            ?  PBT_RESUME:當(dāng)系統(tǒng)從休眠狀態(tài)被喚醒是產(chǎn)生;

            ?  PBT_POWERSTATUSCHANGE:當(dāng)系統(tǒng)接入或者斷開(kāi)外部電源時(shí)產(chǎn)生; 

            ?  PBT_TRANSITION:當(dāng)電源管理器執(zhí)行系統(tǒng)電源狀態(tài)轉(zhuǎn)換時(shí)發(fā)生; 

            ?  PBT_POWERINFOCHANGE:當(dāng)電池信息更新時(shí)發(fā)生。

     

            下面的代碼演示了應(yīng)用程序如何偵聽(tīng)電源管理器發(fā)出的通知。

     

            // 1.新建一個(gè)消息隊(duì)列
            ghPowerNotifications= CreateMsgQueue(NULL, &msgOptions);
            if (!ghPowerNotifications) { 
                    DWORD dwErr = GetLastError();
                    RETAILMSG(1, (TEXT('%s:CreateMessageQueue ERROR:%d\n'), pszFname, dwErr));
                    goto _Exit;
            }

     

            // 2.請(qǐng)求得到電源通知
            hNotifications = RequestPowerNotifications(ghPowerNotifications, POWER_NOTIFY_ALL);
            if (!hNotifications) {
                    DWORD dwErr = GetLastError();
                    RETAILMSG(TRUE, (TEXT('%s:RequestPowerNotifications ERROR:%d\n'), pszFname, dwErr));
                    goto _Exit;
            }

     

            // 3.創(chuàng)建偵聽(tīng)線程
            ht = CreateThread(NULL, 0, ProcessPowerNotification, NULL, 0, NULL);

     

            // 4.電源通知消息偵聽(tīng)線程
            void ProcessPowerNotification(HANDLE hMsgQ)
            {
                    ……
                    if (ReadMsgQueue(hMsgQ, buf, QUEUE_SIZE, (LPDWORD)&dwSize, 0, &dwStatus)) 
                    {……} // 5.電源通知消息處理

     

            3.2  電源請(qǐng)求機(jī)制

            電源請(qǐng)求機(jī)制為應(yīng)用程序提供了強(qiáng)大的能力控制電源管理器調(diào)整設(shè)備的電源等級(jí),與其他所有的電源設(shè)置相比,它具有很高的優(yōu)先級(jí)。舉例來(lái)說(shuō),假設(shè)有一個(gè)條形碼閱讀器連接在COM3端口,并且COM3只有在最高電源等級(jí)(D0)時(shí)才能驅(qū)動(dòng)這個(gè)條形碼閱讀器。為了使其正常工作,應(yīng)用程序?qū)⒄{(diào)用SetPowerRequirement把COM3指定為D0狀態(tài)。假設(shè)之后串口驅(qū)動(dòng)自身決定降低一個(gè)電源等級(jí),驅(qū)動(dòng)程序調(diào)用DevicePowerNotify通知電源管理器它期望的設(shè)備電源狀態(tài)D1,實(shí)際上驅(qū)動(dòng)程序的這個(gè)請(qǐng)求將不起作用,直到應(yīng)用程序調(diào)用ReleasePowerRequirement為止。繼續(xù)這個(gè)例子,假設(shè)這時(shí)的系統(tǒng)電源狀態(tài)轉(zhuǎn)換為低能耗等級(jí),雖然與系統(tǒng)電源狀態(tài)對(duì)應(yīng)的COM3電源等級(jí)為D2,由于應(yīng)用程序的電源請(qǐng)求,COM3仍將繼續(xù)維持在D0狀態(tài)。

     

            在調(diào)用SetPowerRequirement函數(shù)時(shí),指定POWER_FORCE標(biāo)志將強(qiáng)制設(shè)備不進(jìn)入休眠狀態(tài),即使這時(shí)系統(tǒng)已處于休眠狀態(tài)。

     

            3.3  設(shè)置電源狀態(tài)

            在某些應(yīng)用的場(chǎng)合下,應(yīng)用程序可能需要改變系統(tǒng)的電源狀態(tài)。 應(yīng)用程序可以通過(guò)GetSystemPowerState返回當(dāng)前系統(tǒng)電源狀態(tài)的名稱(chēng),也可以通過(guò)SetSystemPowerState改變系統(tǒng)的電源狀態(tài)。同樣的,如果應(yīng)用程序需要改變某個(gè)設(shè)備的電源狀態(tài),可以通過(guò)GetDevicePower返回設(shè)備當(dāng)前的電源狀態(tài),也可以通過(guò)SetDevicePower改變?cè)O(shè)備的電源狀態(tài)。

     

    4、電源管理實(shí)例——LCD背光控制

     

            上面依次描述了系統(tǒng)電源狀態(tài),設(shè)備電源狀態(tài)以及電源管理器的應(yīng)用程序接口,但對(duì)于沒(méi)有此類(lèi)經(jīng)驗(yàn)的用戶來(lái)講,可能仍不清楚如何在自己的設(shè)備中實(shí)現(xiàn)所謂的電源管理,本節(jié)將以控制LCD背光為例,介紹實(shí)現(xiàn)對(duì)背光進(jìn)行電源管理的方法。

     

            4.1  背光控制方法一

            對(duì)背光的電源控制有很多方法,設(shè)備電源狀態(tài)的定義是在驅(qū)動(dòng)程序中實(shí)現(xiàn)的,電源管理器通過(guò)DeviceIoCtrol與設(shè)備驅(qū)動(dòng)程序交互,實(shí)現(xiàn)對(duì)設(shè)備的電源管理,同樣,應(yīng)用程序也可以通過(guò)DeviceIoCtrol實(shí)現(xiàn)對(duì)設(shè)備電源直接的控制。

     

            // 1.打開(kāi)背光句柄
            HANDLE hBLK = CreateFile(L'BKL1:', // name of device
            GENERIC_READ|GENERIC_WRITE, // desired access
            FILE_SHARE_READ|FILE_SHARE_WRITE, // sharing mode
            NULL, // security attributes (ignored)
            OPEN_EXISTING, // creation disposition
            FILE_FLAG_RANDOM_ACCESS, // flags/attributes
            NULL);

     

            // 2.通過(guò)DeviceIoCtrol關(guān)閉LCD背光
            CEDEVICE_POWER_STATE stPower;
            stPower = D4;
            DWORD dwReturn;
            bResult = DeviceIoControl(hBLK,
            IOCTL_POWER_SET,
            NULL,
            0,
            & stPower,
            sizeof(CEDEVICE_POWER_STATE),
            &dwReturn,
            NULL);

     

            // 3.通過(guò)DeviceIoCtrol打開(kāi)LCD背光
            stPower = D0;
            bResult = DeviceIoControl(hBLK,
            IOCTL_POWER_SET,
            NULL,
            0,
            & stPower,
            sizeof(CEDEVICE_POWER_STATE),
            &dwReturn,
            NULL);

     

            4.2  背光控制方法二

            方法一僅適用于系統(tǒng)沒(méi)有電源管理器的情況下使用,如果使能了系統(tǒng)的電源管理功能,則應(yīng)禁止使用上面的方法來(lái)控制背光。用戶可以將第2節(jié)提到的設(shè)備電源狀態(tài)和第1節(jié)的系統(tǒng)電源狀態(tài)做一個(gè)映射,當(dāng)系統(tǒng)在不同的電源狀態(tài)間切換時(shí),設(shè)備電源狀態(tài)隨之改變。系統(tǒng)電源狀態(tài)與設(shè)備電源狀態(tài)的映射是通過(guò)系統(tǒng)注冊(cè)表來(lái)實(shí)現(xiàn)的。如用戶希望在系統(tǒng)On狀態(tài)時(shí),背光最亮,系統(tǒng)電源狀態(tài)切換到UserIdel時(shí),背光變暗一點(diǎn),系統(tǒng)處于SystemIdel和Suspend時(shí),背光滅,則注冊(cè)表配置如下:

     

            [HKEY_LOCAL_MACHINE\System\ CurrentControlSet \Power\State\On]
            “Default” =dword:0 ;D0 當(dāng)系統(tǒng)為On狀態(tài)時(shí),所有設(shè)備默認(rèn)在D0狀態(tài)

     

            [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Power\State\UserIdle]
            “Default” =dword:1 ;D1所有設(shè)備默認(rèn)在D1狀態(tài),包括LCD背光

     

            [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Power\State\SystemIdle]
            “Default” =dword:0 ;D2所有設(shè)備默認(rèn)在D2狀態(tài)
            “bkl1:”=dword:4 ;D4 背光處于D4關(guān)閉狀態(tài)

     

            [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Power\State\Suspend]
            “Default” =dword:3 ;D3所有設(shè)備默認(rèn)在D3狀態(tài),如果設(shè)備不支持D3,自動(dòng)進(jìn)入D4狀態(tài)

     

            上面的第1、2、4條注冊(cè)表使用的是系統(tǒng)默認(rèn)值,所以實(shí)際上只需要在SystemIdle狀態(tài)下增加一項(xiàng)就可以了,如圖3:

     

     

            這里必需使用小寫(xiě)字母的設(shè)備名稱(chēng),電源管理器才能識(shí)別。注冊(cè)表設(shè)置好后,用戶再通過(guò)控制面板\電源屬性設(shè)置好系統(tǒng)超時(shí),背光就能隨系統(tǒng)電源狀態(tài)的變化而自動(dòng)切換了。

     

            如果系統(tǒng)使能了電源管理器,而應(yīng)用程序又想直接修改背光的電源狀態(tài)應(yīng)該怎樣做呢?

     

            首先肯定不能使用DeviceIoCtrol的方法,也不推薦使用SetDevicePower函數(shù),而應(yīng)調(diào)用較為溫和的DevicePowerNotify。DevicePowerNotify會(huì)與系統(tǒng)電源管理器商量改變背光的電源狀態(tài),電源管理器最終決定并實(shí)施背光狀態(tài)的改變。

     

            4.3  背光控制方法三

            實(shí)際上,在手持設(shè)備或便攜式等移動(dòng)設(shè)備中,背光功耗在整個(gè)設(shè)備功耗中占很大一部份,對(duì)背光電源的靈活控制十分必要,EM9283的控制面板\顯示屬性中有專(zhuān)門(mén)對(duì)背光進(jìn)行管理的選項(xiàng),如圖4。

     

     

            背景光的高級(jí)選項(xiàng)可以分別設(shè)置EM9283在電池供電或適配器供電情況下LCD背光的亮度,如圖5。EM9283 LCD背光的亮度調(diào)節(jié)范圍是5%~100%。

     

     

            與通過(guò)控制面板設(shè)置系統(tǒng)超時(shí)一樣,如果應(yīng)用程序希望直接設(shè)置背光的點(diǎn)亮?xí)r間和背光亮度,可以通過(guò)修改注冊(cè)表來(lái)實(shí)現(xiàn)。與圖4,圖5對(duì)應(yīng)的注冊(cè)表設(shè)置如下:

     

            [HKEY_CURRENT_USER\ControlPanel\BackLight]
            “UserExt” =dword:1 ;允許在適配器供電情況下對(duì)背光進(jìn)行控制
            “UseBattery:”=dword:1 ;允許在電池供電情況下對(duì)背光進(jìn)行控制
            “ACTimeout”=dword:60 ;適配器供電情況下用戶停止操作60秒后關(guān)閉背光 
            “BatteryTimout”=dword:15 ;電池供電情況下用戶停止操作15秒后關(guān)閉背光

     

     

            如果應(yīng)用程序修改了背光亮度相關(guān)的注冊(cè)表項(xiàng),需要?jiǎng)?chuàng)建名為BackLightLevelChangeEvent的事件,并置為有信號(hào)狀態(tài),相應(yīng)的驅(qū)動(dòng)程序就會(huì)自動(dòng)更新剛剛的設(shè)置,使設(shè)置生效。

            Handel hBackLightLevelChange=
                    CreateEvent(NULL, FALSE, FALSE, L'BackLightLevelChangeEvent' );
                    SetEvent(hBackLightLevelChange);

     

            同樣,如果應(yīng)用程序修改了背光點(diǎn)亮?xí)r間,需要?jiǎng)?chuàng)建名為BackLightChangeEvent的事件,并置為有信號(hào)狀態(tài)使設(shè)置生效。
            Handel hBackLightChange=
                    CreateEvent(NULL, FALSE, FALSE, L'BackLightChangeEvent' ) ;
                    SetEvent(hBackLightChange);

     

            在控制面板系統(tǒng)電源屬性設(shè)置和背景光設(shè)置中,都講到當(dāng)用戶停止操作某某長(zhǎng)時(shí)間后,系統(tǒng)會(huì)怎樣怎樣。Windows CE和桌面Windows系統(tǒng)一樣,將沒(méi)有鼠標(biāo)和鍵盤(pán)輸入定義為用戶停止操作,但用戶停止操作并不意味著用戶已經(jīng)停止使用設(shè)備。比如用戶正打開(kāi)一個(gè)串口,查看串口收到的數(shù)據(jù),查看過(guò)程中用戶沒(méi)有使用鍵盤(pán),也沒(méi)有移動(dòng)鼠標(biāo),系統(tǒng)認(rèn)為用戶已經(jīng)停止操作設(shè)備,并在一段時(shí)間后關(guān)閉了LCD背光,顯示這不是用戶所希望的。在這種情況下,用戶只能周期性的移動(dòng)鼠標(biāo)或使用一下鍵盤(pán)來(lái)提醒設(shè)備,我還在使用你。

     

            如果應(yīng)用程序能夠確定當(dāng)自己被打開(kāi)時(shí),用戶需要屏幕和背光一直點(diǎn)亮(比如動(dòng)畫(huà)播放程序),那么應(yīng)用程序可以自己來(lái)提醒操作系統(tǒng)的電源管理:用戶還在使用設(shè)備,而不需要用戶去頻繁的移動(dòng)鼠標(biāo)。應(yīng)用程序可以創(chuàng)建或打開(kāi)名為PowerManager/ActivityTimer/UserActivity事件,并以合適的時(shí)間,周期性的置這個(gè)事件有信號(hào)來(lái)達(dá)到提供電源管理器的目的。
            Handle hUserActivity = OpenEvent( EVENT_ALL_ACCESS ,
                    FALSE,
                    L'PowerManager/ActivityTimer/UserActivity');
                    SetEvent( hUserActivity );

     

            背光控制的方法三,對(duì)用戶來(lái)講是獨(dú)立于電源管理器的,也就是說(shuō)無(wú)論用戶是否通過(guò)控制面板使能了系統(tǒng)電源超時(shí)切換功能,都可以通過(guò)此方法單獨(dú)控制系統(tǒng)背景光。

     

    5、電源管理實(shí)例——系統(tǒng)屏保

     

      上述三種方法能實(shí)現(xiàn)對(duì)系統(tǒng)背光的靈活控制,當(dāng)系統(tǒng)關(guān)閉背光時(shí),EM9283會(huì)將背光控制引腳LCD_BKLIGHT置低,控制外部電路關(guān)閉背光,但實(shí)際上這時(shí)候EM9283的顯示信號(hào)仍在輸出,如果EM9283外接的是VGA顯示或其它獨(dú)立背光的顯示設(shè)備,就會(huì)看到顯示界面,而我們所期望的是系統(tǒng)空閑一段時(shí)間后,LCD屏的背光和顯示都關(guān)閉,即通常說(shuō)的屏保。

     

      以VGA顯示器為例,當(dāng)沒(méi)有檢測(cè)到輸入信號(hào)時(shí),顯示器會(huì)自動(dòng)關(guān)閉背光并進(jìn)入低功耗模式,此時(shí)EM9283控制LCD_BKLIGHT是不行的,而需要將輸出的顯示信號(hào)關(guān)閉,我們同樣可以利用WinCE的電源管理器來(lái)實(shí)現(xiàn)屏保功能。比如讓系統(tǒng)空閑10分鐘后屏保的設(shè)置如下:

     

    設(shè)備系統(tǒng)10分鐘后關(guān)閉顯示器

     

      系統(tǒng)空閑10分鐘后會(huì)關(guān)閉背光和顯示輸出,控制原理已經(jīng)在第1節(jié)中進(jìn)行了描述,同時(shí)需要注意對(duì)系統(tǒng)事件'PowerManager/ReloadActivityTimeouts'進(jìn)行合適的設(shè)置,屏保功能才會(huì)正常啟用。

     

    6、結(jié)束語(yǔ)

     

            本文主要從應(yīng)用的角度出發(fā),結(jié)合英創(chuàng)工控主板EM9283,介紹了WinCE系統(tǒng)電源管理的實(shí)現(xiàn)過(guò)程。從背光的電源管理可以看到,有多種方法對(duì)系統(tǒng)設(shè)備的電源進(jìn)行控制管理,但應(yīng)該注意,盡量避免使用不同的方法同時(shí)管理一個(gè)設(shè)備的電源,以免造成用戶甚至應(yīng)用程序開(kāi)發(fā)者本身的混亂。

     

            本文中涉及到的API函數(shù)、事件、注冊(cè)表等,用戶可以參考微軟的MSDN,對(duì)Windows CE電源管理更全面、更權(quán)威的描述,也請(qǐng)參考MSDN。對(duì)于文中使用的程序片段,感興趣的用戶可以聯(lián)系英創(chuàng)索要完整的測(cè)試代碼。

    亚洲国产精品久久久久网站 | 香蕉在线精品视频在线观看6| 精品中文字幕久久久久久| 无码日韩精品一区二区免费| 99在线精品免费视频九九视| 日产精品久久久久久久性色| 午夜精品久久久久久久| 99精品国产在热久久婷婷| 久久精品国产精油按摩| 久久亚洲AV午夜福利精品一区| 久久久久无码国产精品一区| 日韩国产成人精品视频| ...91久久精品一区二区三区| 69国产成人精品视频软件| 亚洲日韩国产精品乱-久| 国产精品国产精品国产专区不卡| 久久久国产精品四虎| 国产精品久久新婚兰兰| 亚洲а∨精品天堂在线| 精品亚洲福利一区二区| 中文字幕久久精品无码| 自拍偷在线精品自拍偷无码专区 | 精品香蕉伊思人在线观看| 国产亚洲美女精品久久| 国产精品内射婷婷一级二| 久久国产精品偷99| 青青青国产依人精品视频| 日韩人妻无码精品久久免费一| 91精品国产免费入口| 国产精品专区第二| 岛国精品在线观看| 亚洲国产精品成人午夜在线观看| 精品一区二区三人妻视频 | 亚洲精品天堂成人片?V在线播放| 久久精品综合一区二区三区| 国产精品兄妹在线观看麻豆| 久久久久亚洲精品天堂| 99久久人妻无码精品系列| 国产精品资源在线| 亚洲人成国产精品无码| 国产精品国产三级国产av品爱网|