WinCE的電池驅動實現

2021-05-23 15:56:58 字數 1729 閱讀 9653

wince電池驅動的實現

wince6的public目錄下,已經建立了電池驅動的架構,分為mdd層與pdd層,mdd層我們基本不用改動,我們需要修改的部分是pdd層,加入與自己系統硬體相關的部分就可以

為了不發動public下的**,我們需要將pdd層的相關**複製到自己的bsp目錄下:如/platform/***x/src/drivers。(登錄檔檔案與def檔案也要拷過去),所以,我們只有乙個c檔案battif.c,需要增加的內容如下:

1、bool winapi   batterypddinitialize(lpctstr pszregistrycontext)

adc轉換介面初始化

if(g_padcreg_bat == null)   

因為觸控螢幕也有可能用到這個adc介面,所以需要建立乙個互斥體。

if(ghbatttouchmutex==null)  

如果出現異常返回 ,需要釋放該adc介面:

exitfun:

if(fok == false)

}return fok; 

2、void winapi    batterypdddeinitialize(void)

需要增加adc介面的釋放與互斥體的釋放

void winapi   

batterypdddeinitialize(void)  

3、 最重要的是查詢狀態函式,完成三個功能

bool winapi  

batterypddgetstatus(  

psystem_power_status_ex2 pstatus,  

pbool pfbatterieschangedsincelastcall  

)  3.1 io口,檢測使用電池還是使用交流電

ac_line_online    ac_line_offline

3.2 讀adc的電壓值

iadlevel = readadc(0);

最最近的10次檢測結果的平均值作為電量值

if(ucindex==0xff)  

(gpstatus->sps).batterylifepercent=batterylifepercent;  

ucindex = 0;  

}  

else  

uctemp[ ucindex++ ]=batterylifepercent;  

for(i=0,iadlevel=0;i<10;i++)  

iadlevel/=10;  

(gpstatus->sps).batterylifepercent=iadlevel;  

}3.3 電池狀態標誌

如   (status->sps).batteryflag = battery_flag_low;

3.4 將結果放入 psystem_power_status_ex2 引數返回

因為用到了adc暫存器,記得要在source檔案裡加入驅動庫

$(_targetplatroot)/lib/$(_cpuindpath)/driverlib.lib

這樣,電池驅動就完成了

4、查詢電量

在應用程式中,可用getsystempowerstatu***2(&sps, sizeof(sps), true);函式查詢電量,而且返回的是一整個結構體,使用非常方便。

wince電池驅動的實現

wince6的public目錄下,已經建立了電池驅動的架構,分為mdd層與pdd層,mdd層我們基本不用改動,我們需要修改的部分是pdd層,加入與自己系統硬體相關的部分就可以 為了不發動public下的 我們需要將pdd層的相關 複製到自己的bsp目錄下 如 platform x src drive...

Wince 電池警告的bug

因近期定製wince shell 頻繁,已經是乙個星期連續發現2個ms的bug了。位置是在 wince500 public shell oak hpc explorer taskbar taskbar.cpp的 lresult callback ctaskbar taskbarwndproc hwn...

wince 驅動的理解

wince 驅動的理解 1.wince 分層驅動 分為 mdd層 pdd層 mdd層為應用提供介面 ddi pdd為mdd提供介面 ddsi pdd 層驅動為 mdd 層驅動隱藏了具體的硬體實現 2.wince 單片驅動 單片驅動不僅直接為系統提供介面,也直接操作硬體。相比分層驅動它可以提更高的效率...