久久久久久久麻豆,中日韩av在线,麻豆av在线免费,中文字幕二区三区,欧美日韩视频一区二区,亚洲欧美日韩在线一区,国产无毒不卡

WINCE的電源管理


windows ce是典型的使用電池供電的系統(tǒng)。這使得正確操作系統(tǒng)十分關(guān)鍵,應(yīng)用程序大多數(shù)時間都不需要關(guān)注windows ce 設(shè)備的電源損耗,但是在某些時候,你可能要注意這些損耗。

    當(dāng)用戶關(guān)閉了一個使用電池的windows ce 設(shè)備,電源系統(tǒng)不會關(guān)閉pc電源,事實上,只是系統(tǒng)被掛起(譯者注:這里就像有些pocketpc把關(guān)閉電源放在拔sim卡的位置,拔出sim卡才真正關(guān)閉電源。但是,目前包括smartphone在內(nèi),因為硬件設(shè)備,比如cpu無法進(jìn)入低功耗,所以為了省電,需要做到關(guān)閉應(yīng)用處理器及大部分設(shè)備供電,然后需要喚醒時,再通過定時器或無線模塊喚醒。所以不關(guān)閉電源的情況不是絕對的。)當(dāng)用戶打開設(shè)備電源,設(shè)備不會像pc一樣重新啟動,而是被喚醒,返回到與系統(tǒng)掛起前一樣的狀態(tài)。這樣導(dǎo)致一個應(yīng)用程序在喚醒后會像掛起前一樣運行。事實上,應(yīng)用程序根本不知道它被掛起,除非它明確地請求當(dāng)系統(tǒng)掛起時通知它。從應(yīng)用程序的角度看,電源管理有三種方式,查詢電源狀態(tài),改變電源狀態(tài),和防止電源狀態(tài)改變。

查詢電源狀態(tài)

    要查詢系統(tǒng)當(dāng)前的電源狀態(tài),你必須調(diào)用

 
 
 

dword getsystempowerstatusex2 (psystem_power_status_ex2 psystempowerstatusex2, dword dwlen, bool fup-date);

 
 
 

函數(shù)帶了三個參數(shù):一個指向system_power_ status_ex2結(jié)構(gòu)的指針,結(jié)構(gòu)的長度,和一個布爾值,表示告訴操作系統(tǒng)是否應(yīng)該查詢電池驅(qū)動來得到最后的信息或者直接返回電池緩存中的信息。系統(tǒng)大約每5秒查詢一次電池狀態(tài),因此,如果第三個差數(shù)是false,得到的數(shù)據(jù)不會太舊。結(jié)構(gòu)system_power_status_ex2被定義為

typedef struct _system_power_status_ex2 {

    byte aclinestatus;

    byte batteryflag;

    byte batterylifepercent;

    byte reserved1;

    dword batterylifetime;

    dword batteryfulllifetime;

    byte reserved2;

    byte backupbatteryflag;

    byte backupbatterylifepercent;

    byte reserved3;

    dword backupbatterylifetime;

    dword backupbatteryfulllifetime;

    word batteryvoltage;     

    dword batterycurrent;

    dword batteryaveragecurrent;

    dword batteryaverageinterval;

    dword batterymahourconsumed;

    dword batterytemperature;

    dword backupbatteryvoltage;

    byte  batterychemistry;

} system_power_status_ex2;

    在我描述的這個巨大的結(jié)構(gòu)之前,我必須告誡你,這個結(jié)構(gòu)返回的數(shù)據(jù)精確程度和電池驅(qū)動一樣。同樣的結(jié)構(gòu)被傳給電池驅(qū)動來查詢它的狀態(tài)。windows ce不驗證電池驅(qū)動返回的數(shù)據(jù)。這個函數(shù)返回來的數(shù)據(jù)依賴于電池驅(qū)動,因此不同的系統(tǒng)有不同的變化。舉個例子,許多系統(tǒng)在使用ac電源時不報告精確的電源級數(shù);另一些系統(tǒng)則相反。應(yīng)用程序使用getsystempowerstatusex2來自動預(yù)防和檢測系統(tǒng)是否可能運行應(yīng)用程序。

    第一個區(qū)域,aclinestatus,包含一個標(biāo)志,表示系統(tǒng)是否連接到ac 電源。如果值是ac_line_offline,表示系統(tǒng)沒有使用ac 電源;ac_line_online,表示系統(tǒng)使用了ac 電源;ac_line_backup_power和ac_line_unknown,表示備用電源和未知電源。batteryflag區(qū)域,提供了一個總的標(biāo)識,表示當(dāng)前系統(tǒng)的電池狀態(tài),可以有以下值:

battery_flag_high

電池被充滿或接近充滿。

battery_flag_low

電池還有一點剩余。

battery_flag_critical

電池電量處在一個臨界狀態(tài)。

battery_flag_charging

電池當(dāng)前正在充電。

battery_flag_no_battery

系統(tǒng)無電池

battery_flag_unknown

電池狀態(tài)未知

batterylifepercent區(qū)域包含估計的電池電量能夠維持的百分比。數(shù)值可能是0到100之間的一個,或用255表示百分比未知。batterylifetime區(qū)域表示電池耗盡之前可以維持的秒數(shù)。如果該值不能估計,區(qū)域填入battery_life_unknown。batteryfulllifetime區(qū)域包含完全充滿電池需要的時間。如果該值不能估計,填入battery_life_unknown。注意,在許多系統(tǒng)中,這些值可能難以測量。大多數(shù)oem 廠商簡單地在每個區(qū)域內(nèi)填入battery_life_unknown。

接下來的第四個區(qū)域(不計算保留區(qū)域)重復(fù)了前面的表述,只不過是對系統(tǒng)備份電池來說。因為這些值大多數(shù)難以測量,許多系統(tǒng)簡單地返回“unknown”給這些區(qū)域。

剩下的區(qū)域描述了電池和備用電池的電力狀態(tài),因為許多系統(tǒng)缺少測量這些值的能力,這些區(qū)域也被簡單地默認(rèn)為“unknown”。最后一個區(qū)域,batterychemistry,包含一個標(biāo)志,表示系統(tǒng)中電池的類型。當(dāng)前已定義的值包括

·         battery_chemistry_alkaline

·         battery_chemistry_nicd

·         battery_chemistry_nimh

·         battery_chemistry_lion

·         battery_chemistry_lipoly

·         battery_chemistry_unknown

改變電源狀態(tài)

應(yīng)用程序能通過一系列的方式改變系統(tǒng)的電源狀態(tài)。在基于windows ce.net系統(tǒng)的較新系統(tǒng)中,******的方式是使用電源管理程序,在之后的章節(jié)將會討論??墒菬o論如何,還有大量的基于早期windows ce版本的系統(tǒng)以及windows ce.net不包含電源管理程序版本。對這些系統(tǒng)來說,下面的技術(shù)會很方便。

關(guān)閉電源

    應(yīng)用程序可以通過調(diào)用一個少有資料的gwespoweroffsystem函數(shù)掛起系統(tǒng)。這個函數(shù)可以在大多數(shù)版本windows ce中使用,但是最近才被公開。事實上,大多數(shù)sdk沒有包含這個函數(shù)的原型,你可能要提供原型。這個函數(shù)定義為

 
 
 

void gwespoweroffsystem(void);

 
 
 

    gwespoweroffsystem的使用很簡單:簡單調(diào)用,系統(tǒng)就會掛起。

    如果你想避免使用很少資料的函數(shù),你可以通過簡單地模擬用戶按關(guān)閉按鈕來關(guān)閉系統(tǒng)。你可以通過使用keybd_event函數(shù)很容易地允許你的應(yīng)用程序掛起系統(tǒng),如下:

keybd_event (vk_off, 0, keyeventf_silent, 0);    

keybd_event (vk_off, 0, keyeventf_silent │ keyeventf_keyup, 0);

這兩個keybd_event調(diào)用模擬了按和釋放電源按鈕,電源按鈕的虛擬鍵值是vk_off。執(zhí)行前面的兩行代碼將掛起系統(tǒng)。因為虛擬鍵代碼在執(zhí)行時會由gwes表現(xiàn),兩個函數(shù)可能在系統(tǒng)掛起前有一些狀態(tài)的表現(xiàn)(譯者注:屏幕上會有關(guān)閉對話框之類的圖像,和真實按下按鈕的畫面一樣)。如果你的程序無法在keybd_event函數(shù)之前停止工作,添加一個sleep調(diào)用來使應(yīng)用程序暫停一些毫秒來讓gwes真實地掛起系統(tǒng)。

關(guān)閉屏幕

    如果系統(tǒng)有有色背光顯示,主要的電源消耗不是cpu而是背光。在一些環(huán)境下,一個應(yīng)用程序需要運行卻不需要顯示在屏幕上。一個例子是音樂播放器應(yīng)用程序,當(dāng)用戶聽音樂的時候,不關(guān)注屏幕。在這些情形下,有能力關(guān)閉背光將意味著提高電池壽命。

    當(dāng)然,當(dāng)用戶想看屏幕時,任何關(guān)閉背光應(yīng)用程序的需要一個簡單的用戶友好的方式來重新打開屏幕。同樣,記得用戶典型的想法是屏幕變黑時會認(rèn)為被關(guān)閉了,因此要考慮這點。舉個例子,一個用戶可能在系統(tǒng)已經(jīng)運行時試圖打開系統(tǒng)電源,并且這樣做了,卻很意外地發(fā)現(xiàn),設(shè)備電源被關(guān)閉了。同樣,當(dāng)系統(tǒng)在這種情況下關(guān)閉顯示,它同時也關(guān)閉了觸摸屏。這意味著你不能告訴用戶敲擊屏幕來打開。而是,你需要使用一些其他的事件,比如設(shè)置時間,任務(wù)完成,或用戶按了一個按鈕。最后,這里討論的方式對大多數(shù)基于windows ce 3.0或更新的版本比較有用,并且被windows ce .net 4.0中的電源管理程序所替代。對于較新的系統(tǒng),先看看是否電源管理程序可用,然后通過它來控制屏幕。如果失敗了,extescape方式也許能行。

 &

COPYRIGHT(C) 2011 廈門永宏亞得機(jī)電科技有限公司版權(quán)所有(閩ICP備05025945號) ALL RIGHTS RESERVED?

電話: 0592-5190891 傳真: 0592-5190720 E-Mail: E-mail:yade8895@163.com
地址: 廈門市海滄區(qū)興港六里17號2607室 郵編:361009 聯(lián)系人:翟先生