91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android怎么實現電池管理系統

發布時間:2021-04-17 10:16:01 來源:億速云 閱讀:256 作者:小新 欄目:移動開發

這篇文章給大家分享的是有關Android怎么實現電池管理系統的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

一、Android 電池服務

Android電池服務,用來監聽內核上報的電池事件,并將最新的電池數據上報給系統,系統收到新數據后會去更新電池顯示狀態、剩余電量等信息。如果收到過溫報警和低電報警,系統會自動觸發關機流程,保護電池和機器不受到危害。

Android電池服務的啟動和運行流程:

Android怎么實現電池管理系統Android

電池服務的源碼結構

 Framework\base\services\java\com\android\server
        ├── SystemServer.java
                 創建BatteryServices、PowerManagerService、ActivityManagerService
        ├── BatterySevices.java
                 監聽底層上報的battery事件,廣播電池發生改變的消息
         Framework\base\services\java\com\android\server\am
        ├── ActivityManagerService.java
                 創建BatteryStatsService
        ├── BatteryStatsService.java
                 統計和記錄電池參數的信息
         Framework\base\services\java\com\android\server\power
        ├── PowerManagerService.java
                 監聽電池發生變化的廣播消息,并調節系統的電源狀態,例如亮屏
         Framework\base\core\java\com\internal\os\
        ├── BatteryStatsImpl.java
                 統計和記錄電池參數的信息,并通知其他模塊
         System\core\healthd
        ├── healthd.cpp
                 創建uevent socket,監聽內核上報的內核事件
        ├── BatteryMonitor.cpp
                 初始化本地電池數據結構,將power_supply路徑下屬性節點路徑填充進去,
        ├── BatteryMonitor.h
        ├── BatteryPropertiesRegistrar.cpp
                 創建電池屬性監聽器,并將其注冊到Android的系統服務中
        ├── BatteryPropertiesRegistrar.h

二、Healthd

該模型向下監聽來自底層的電池事件,向上傳遞電池數據信息給Framework層的BatteryService用來計算電池電量相關信息,
BatteryService通過傳遞來的數據來計算電池電量等信息,因此healthd在電池管理系統中起著承上啟下的作用。

Android怎么實現電池管理系統

healthd的具體調用流程深入分析android5.1 healthd這篇文章講得很清楚。

三、驅動

Android電源管理底層用的是Linux
 power_supply框架,內核提供給電池驅動的接口是結構體power_supply結構體。

struct power_supply { 
 const char *name; 
 enum power_supply_type type; 
 enum power_supply_property *properties; 
 size_t num_properties; 
 
 char **supplied_to; 
 size_t num_supplicants; 
 
 int (*get_property)(struct power_supply *psy, 
  enum power_supply_property psp, 
  union power_supply_propval *val); 
 int (*set_property)(struct power_supply *psy, 
  enum power_supply_property psp, 
  const union power_supply_propval *val); 
 int (*property_is_writeable)(struct power_supply *psy, 
   enum power_supply_property psp); 
 void (*external_power_changed)(struct power_supply *psy); 
 void (*set_charged)(struct power_supply *psy); 
 
 /* For APM emulation, think legacy userspace. */ 
 int use_for_apm; 
 
 /* Driver private data */ 
 void *drv_data;//add by bhj 
 
 /* private */ 
 struct device *dev; 
 struct work_struct changed_work; 
 spinlock_t changed_lock; 
 bool changed; 
 struct wake_lock work_wake_lock; 
 struct delayed_work deferred_register_work; 
 
#ifdef CONFIG_LEDS_TRIGGERS 
 struct led_trigger *charging_full_trig; 
 char *charging_full_trig_name; 
 struct led_trigger *charging_trig; 
 char *charging_trig_name; 
 struct led_trigger *full_trig; 
 char *full_trig_name; 
 struct led_trigger *online_trig; 
 char *online_trig_name; 
 struct led_trigger *charging_blink_full_solid_trig; 
 char *charging_blink_full_solid_trig_name; 
#endif 
};

內核主要通過get_property這個函數指針來獲得驅動中的有關電池的信息,而這個函數在內核中只給出了聲明,我們在寫驅動的時候要自己實現這個函數,即將自己寫的函數賦值給這個函數指針,當內核需要驅動中電源信息的時候就回調這個get_property函數。另外,我們寫驅動程序的時候又要給用戶提供接口,內核中提供給用戶的接口就是sysfs,通過讀取sysfs文件系統中文件內容,就可以得到電源的信息。內核主要通過兩個文件power_supply_class.c和power_supply_core.c,我們調用其中的函數就可以把電源(電池,USB或AC)的信息展現給用戶,有關電源的屬性寫在/sys/class/powersupply文件夾下(此文件夾為程序運行后所生成的)。

電池系統從底層向Framework層上報數據的流程:

Android怎么實現電池管理系統

感謝各位的閱讀!關于“Android怎么實現電池管理系統”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

内江市| 克什克腾旗| 肥西县| 繁峙县| 武陟县| 石棉县| 小金县| 虎林市| 双鸭山市| 鄂伦春自治旗| 宝兴县| 巩义市| 龙井市| 太仓市| 砚山县| 大田县| 唐海县| 荔浦县| 达孜县| 黔东| 鸡东县| 博兴县| 勐海县| 阿拉善盟| 新密市| 永春县| 正蓝旗| 苏尼特左旗| 梁山县| 灌南县| 抚松县| 澎湖县| 鸡泽县| 宜州市| 大邑县| 兴山县| 滨州市| 河北省| 丁青县| 襄汾县| 民权县|