android螢幕下電控制

2021-10-21 06:20:19 字數 2149 閱讀 9354

很久之前android剛興起時候從事battery ,charge驅動順帶著把pms差不多也看了一遍,最開始看的很多不理解。後來在各家公司經歷不同的角色,對pms這塊了解越來越多,也越來越深。特別是前前面搞fingerprint快速亮屏時,修改指紋服務以為pms邏輯控制,以達到更快的亮屏速。進一步加深了對pms的理解,目前的我正從事高通平台lcd驅動開發工作,由於遇到乙個lcd下電時序的問題,與su***ceflinger和pms再次打交道,這裡就記錄下個人對pms如何對lcd進行正電控制的,這裡大體可以分四層

1.framework層邏輯控制,最終呼叫native方法與su***ceflinger進行通訊

2.jni獲取su***ceflinger服務與su***ceflinger進行通訊,而su***ceflinger又通過hwc與hardware層的compose服務進行通訊

3.composer服務層通過節點訪問驅動,寫入blank,unblank命令

4.驅動層lcd收到上下電命令,進行背光ic,偏壓ic,mipi(hs,lp),lcd的上下電的時序控制

由於驅動各家實現方案都不太一樣,差異比較大。這裡只對前三層進行簡單的分析。

上圖就是大體的邏輯呼叫控制,當我們按下power鍵進行休眠時就會呼叫gotosleep函式。而updatepowerstatelocked是實現屏上下電控制的核心函式,這個函式很多地方呼叫。gotosleep只是其中乙個,畢竟休眠是最常見的操作

具體的流程及函式實現這裡就不具體說了,可以自行對照**來看。需要特別注意的是setscreenstate這個介面呼叫

這個函式不是直接呼叫requestdisplaystate進行下步操作,而是設定當前螢幕狀態以及更新lock,通過notifyall告訴當前阻塞的執行緒繼續執行

這裡比較複雜,其它的都還好。

這個jni呼叫比較簡單,核心就是binder呼叫.servicemanager獲取su***ceflinger服務,獲取例項物件

3.su***ceflinger及hwc以及composer

這層比較複雜,涉及的知道點有su***ceflinger,hwc(hwc1,hwc2), hardware層的服務程序composer,大體順序如下:

su***ceflinger  - 〉 hwc - 〉 composer

特別說明的這裡的原始碼是以hwc2以及高通平台的composer來研究的

hardware層的**路徑如上,這份**比較老了是android8.0的,基於高通sdm框架的。現在高通顯示框架基本是drm了對應的composer可能變化很大,這塊**沒有就不知道細節如何了

此層的框圖如下:

這裡就不具體對照原始碼來講解了,有興趣可以自行對照框圖去看原始碼,這裡需要特別指出的是:hal層在這裡也就sdm最終是通過驅動提供的節點來與lcd進行通訊的,關鍵**如下:

一般情況下,都只有一塊屏。操作的是fb0節點。如果有幾塊屏,那麼對應的就要其它fb節點了。對於fb0來說這種方式很容易理解,高通最新顯示框架drm,就沒有fb0了對於理解和使用都會有一定的麻煩。

就到這裡了,以上是個人理解如有錯誤歡迎討論

Android 控制fastboot模式下功能

涉及 如下 bootable bootloader lk makefile 這裡編譯條件使得user版本下 fastboot 很多功能失效 ifeq target build variant user cflags ddisable fastboot cmds 1endif 這裡即是巨集使用的地方,...

android螢幕適配

1 配置android應用程式適配在不同的手機上,需要在androidmanifest.xml檔案的manifest標籤中新增子元素 1 2 3 4 5 6 7 8 9 10 manifestxmlns android supports screens android smallscreens tr...

Android螢幕適配

在sdk中的幫助文件中。develpe training best practices supporting multiple screens 這裡有多屏適配的介紹。現做簡單記錄。screen size small 至少 426dp x 320dp normal 至少 470dp x 320dp l...